Subversion Repositories SmartDukaan

Rev

Rev 36741 | Rev 36787 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
25979 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
29266 manish 3
import com.google.gson.Gson;
31370 tejbeer 4
import com.mongodb.DBObject;
25988 tejbeer 5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
33843 ranu 6
import com.spice.profitmandi.common.model.*;
29426 manish 7
import com.spice.profitmandi.common.util.FileUtil;
34627 aman.kumar 8
import com.spice.profitmandi.common.util.FormattingUtils;
31370 tejbeer 9
import com.spice.profitmandi.common.web.util.ResponseSender;
25979 tejbeer 10
import com.spice.profitmandi.dao.entity.auth.AuthUser;
32464 tejbeer 11
import com.spice.profitmandi.dao.entity.catalog.BrandCatalog;
30416 tejbeer 12
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
33843 ranu 13
import com.spice.profitmandi.dao.entity.user.*;
30773 amit.gupta 14
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
31249 tejbeer 15
import com.spice.profitmandi.dao.enumuration.dtr.CommunicationType;
29598 tejbeer 16
import com.spice.profitmandi.dao.enumuration.dtr.LeadSource;
25979 tejbeer 17
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
33843 ranu 18
import com.spice.profitmandi.dao.model.*;
25979 tejbeer 19
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30185 tejbeer 20
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
30434 tejbeer 21
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
30416 tejbeer 22
import com.spice.profitmandi.dao.repository.cs.CsService;
29266 manish 23
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
33843 ranu 24
import com.spice.profitmandi.dao.repository.dtr.*;
30416 tejbeer 25
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
35223 ranu 26
import com.spice.profitmandi.dao.repository.fofo.RbmRatingRepository;
25979 tejbeer 27
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
30445 tejbeer 28
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
29266 manish 29
import com.spice.profitmandi.service.AuthService;
30416 tejbeer 30
import com.spice.profitmandi.service.PartnerCollectionService;
33917 ranu 31
import com.spice.profitmandi.service.RbmTargetService;
32464 tejbeer 32
import com.spice.profitmandi.service.catalog.BrandsService;
34650 aman.kumar 33
import com.spice.profitmandi.service.order.OrderService;
30416 tejbeer 34
import com.spice.profitmandi.service.user.RetailerService;
25979 tejbeer 35
import com.spice.profitmandi.web.model.LoginDetails;
36
import com.spice.profitmandi.web.util.CookiesProcessor;
37
import com.spice.profitmandi.web.util.MVCResponseSender;
35548 aman 38
import org.apache.commons.csv.CSVFormat;
39
import org.apache.commons.csv.CSVParser;
33843 ranu 40
import org.apache.commons.csv.CSVRecord;
34707 aman.kumar 41
import org.apache.commons.io.output.ByteArrayOutputStream;
33843 ranu 42
import org.apache.logging.log4j.LogManager;
43
import org.apache.logging.log4j.Logger;
44
import org.springframework.beans.factory.annotation.Autowired;
45
import org.springframework.core.io.InputStreamResource;
46
import org.springframework.http.HttpHeaders;
47
import org.springframework.http.HttpStatus;
48
import org.springframework.http.MediaType;
49
import org.springframework.http.ResponseEntity;
50
import org.springframework.stereotype.Controller;
35507 ranu 51
import org.springframework.transaction.annotation.Transactional;
33843 ranu 52
import org.springframework.ui.Model;
53
import org.springframework.util.StringUtils;
54
import org.springframework.web.bind.annotation.*;
55
import org.springframework.web.multipart.MultipartFile;
25979 tejbeer 56
 
33843 ranu 57
import javax.servlet.http.HttpServletRequest;
58
import javax.servlet.http.HttpServletResponse;
59
import java.io.ByteArrayInputStream;
60
import java.io.InputStream;
35548 aman 61
import java.io.InputStreamReader;
62
import java.io.Reader;
35223 ranu 63
import java.text.DecimalFormat;
36101 ranu 64
import java.time.DayOfWeek;
33843 ranu 65
import java.time.LocalDate;
66
import java.time.LocalDateTime;
36101 ranu 67
import java.time.LocalTime;
33843 ranu 68
import java.time.format.DateTimeFormatter;
36101 ranu 69
import java.time.temporal.TemporalAdjusters;
33843 ranu 70
import java.util.*;
71
import java.util.Map.Entry;
72
import java.util.stream.Collectors;
73
 
25979 tejbeer 74
@Controller
35458 amit 75
@Transactional(rollbackFor = Throwable.class)
25979 tejbeer 76
public class LeadController {
32464 tejbeer 77
    private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
25979 tejbeer 78
 
32464 tejbeer 79
    @Autowired
80
    private LeadRepository leadRepository;
25979 tejbeer 81
 
32464 tejbeer 82
    @Autowired
83
    private LeadActivityRepository leadActivityRepository;
25979 tejbeer 84
 
32464 tejbeer 85
    @Autowired
86
    private StateRepository stateRepository;
25979 tejbeer 87
 
32464 tejbeer 88
    @Autowired
89
    private AuthService authService;
29266 manish 90
 
32464 tejbeer 91
    @Autowired
92
    private AuthRepository authRepository;
25979 tejbeer 93
 
32464 tejbeer 94
    @Autowired
95
    private Gson gson;
29266 manish 96
 
32464 tejbeer 97
    @Autowired
98
    private CookiesProcessor cookiesProcessor;
29426 manish 99
 
32464 tejbeer 100
    @Autowired
101
    PositionRepository positionRepository;
25979 tejbeer 102
 
32464 tejbeer 103
    @Autowired
104
    private MVCResponseSender mvcResponseSender;
25979 tejbeer 105
 
32464 tejbeer 106
    @Autowired
107
    private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
30185 tejbeer 108
 
32464 tejbeer 109
    @Autowired
110
    private CsService csService;
30416 tejbeer 111
 
32464 tejbeer 112
    @Autowired
113
    private FofoStoreRepository fofoStoreRepository;
30416 tejbeer 114
 
32464 tejbeer 115
    @Autowired
116
    private PartnerCollectionService partnerCollectionService;
30416 tejbeer 117
 
32464 tejbeer 118
    @Autowired
119
    private RetailerService retailerService;
30416 tejbeer 120
 
32464 tejbeer 121
    @Autowired
122
    private PartnerCollectionRemarkRepository partnerCollectionRemarkRepository;
30434 tejbeer 123
 
32464 tejbeer 124
    @Autowired
125
    private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
30445 tejbeer 126
 
32464 tejbeer 127
    @Autowired
128
    private UserWalletRepository userWalletRepository;
30445 tejbeer 129
 
32464 tejbeer 130
    @Autowired
131
    private FranchiseeVisitRepository franchiseeVisitRepository;
30522 tejbeer 132
 
32464 tejbeer 133
    @Autowired
134
    private FranchiseeActivityRepository franchiseeActivityRepository;
30522 tejbeer 135
 
32464 tejbeer 136
    @Autowired
137
    private VisitRequestRepository visitRequestRepository;
31249 tejbeer 138
 
32464 tejbeer 139
    @Autowired
140
    private LeadBrandRepository leadBrandRepository;
31370 tejbeer 141
 
32464 tejbeer 142
    @Autowired
143
    private LeadDetailRepository leadDetailRepository;
31370 tejbeer 144
 
32464 tejbeer 145
    @Autowired
36642 ranu 146
    private LeadLiveLocationRepository leadLiveLocationRepository;
147
 
148
    @Autowired
36644 ranu 149
    private BeatRouteRepository beatRouteRepository;
36642 ranu 150
 
151
    @Autowired
36644 ranu 152
    private LeadRouteRepository leadRouteRepository;
153
 
154
    @Autowired
155
    private BeatRepository beatRepository;
156
 
157
    @Autowired
32464 tejbeer 158
    private Mongo mongoClient;
31370 tejbeer 159
 
32464 tejbeer 160
    @Autowired
161
    private ResponseSender<?> responseSender;
31370 tejbeer 162
 
32464 tejbeer 163
    @Autowired
164
    private BrandsService brandsService;
34650 aman.kumar 165
    @Autowired
166
    OrderService orderService;
25988 tejbeer 167
 
35223 ranu 168
 
169
    @Autowired
170
    private RbmRatingRepository rbmRatingRepository;
171
 
32464 tejbeer 172
    List<LeadStatus> status = Arrays.asList(LeadStatus.notInterested, LeadStatus.finalized);
27609 tejbeer 173
 
32464 tejbeer 174
    @RequestMapping(value = "/getOpenLead", method = RequestMethod.GET)
35769 amit 175
    public String getOpenLead(HttpServletRequest request, @RequestParam(name = "leadStatus", required = false, defaultValue = "All") List<LeadStatus> leadStatus, @RequestParam(name = "color", required = false, defaultValue = "All") List<String> color, @RequestParam(name = "startDate", required = false) LocalDate startDate, @RequestParam(name = "endDate", required = false) LocalDate endDate, Model model) throws Exception {
29445 manish 176
 
29426 manish 177
 
35769 amit 178
        LocalDateTime startDateTime = startDate != null ? startDate.atStartOfDay() : null;
179
        LocalDateTime endDateTime = endDate != null ? endDate.atTime(23, 59, 59) : null;
180
        LOGGER.info("startDateTime: " + startDateTime + ", endDateTime: " + endDateTime);
181
 
32464 tejbeer 182
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
183
        String emailId = loginDetails.getEmailId();
184
        AuthUser authUser = authRepository.selectByEmailOrMobile(emailId);
29426 manish 185
 
34890 aman 186
        boolean isPositionSales = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_SALES);
27610 tejbeer 187
 
32464 tejbeer 188
        if (leadStatus.contains(LeadStatus.All)) {
27615 tejbeer 189
 
32464 tejbeer 190
            leadStatus.add(LeadStatus.pending);
191
            leadStatus.add(LeadStatus.notInterested);
192
            leadStatus.add(LeadStatus.finalized);
193
        }
29744 tejbeer 194
 
32464 tejbeer 195
        if (color.contains("All")) {
196
            color.add("yellow");
197
            color.add("green");
198
        }
29445 manish 199
 
32464 tejbeer 200
        List<Lead> leads = new ArrayList<>();
29445 manish 201
 
32464 tejbeer 202
        model.addAttribute("colors", color);
29744 tejbeer 203
 
32464 tejbeer 204
        Map<Integer, List<LeadActivity>> leadActivityMap = new HashMap<>();
29445 manish 205
 
32464 tejbeer 206
        List<Integer> authUserIds = null;
29445 manish 207
 
32464 tejbeer 208
        LOGGER.info("color111" + color);
209
        List<Lead> leadFollowUp = new ArrayList<>();
34890 aman 210
        if (isPositionSales) {
32464 tejbeer 211
            authUserIds = authService.getAllReportees(authUser.getId());
212
            authUserIds.add(authUser.getId());
213
            LOGGER.info("authIds" + authUserIds);
29753 tejbeer 214
 
32464 tejbeer 215
            LOGGER.info("leadStatus" + leadStatus);
29445 manish 216
 
35769 amit 217
            if (startDateTime == null) {
29445 manish 218
 
32464 tejbeer 219
                if (!leadStatus.contains(LeadStatus.followUp)) {
29852 tejbeer 220
 
32464 tejbeer 221
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, LocalDateTime.now().minusMonths(1));
222
                }
29852 tejbeer 223
 
32464 tejbeer 224
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
225
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
226
                    leads.addAll(leadFollowUp);
227
                }
29445 manish 228
 
32464 tejbeer 229
            } else {
29852 tejbeer 230
 
32464 tejbeer 231
                if (!leadStatus.contains(LeadStatus.followUp)) {
35769 amit 232
                    leads = leadRepository.selectAllByColorStatusAndBetweenCreatedDateAndAuthIds(leadStatus, authUserIds, color, startDateTime, endDateTime);
32464 tejbeer 233
                }
29852 tejbeer 234
 
32464 tejbeer 235
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
30290 tejbeer 236
 
32464 tejbeer 237
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
29852 tejbeer 238
 
32464 tejbeer 239
                    leads.addAll(leadFollowUp);
29852 tejbeer 240
 
32464 tejbeer 241
                }
29445 manish 242
 
32464 tejbeer 243
            }
29445 manish 244
 
32464 tejbeer 245
        } else {
29445 manish 246
 
35769 amit 247
            if (startDateTime == null) {
32464 tejbeer 248
                if (!leadStatus.contains(LeadStatus.followUp)) {
29852 tejbeer 249
 
32464 tejbeer 250
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, LocalDateTime.now().minusMonths(1));
251
                }
252
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
30290 tejbeer 253
 
32464 tejbeer 254
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
29445 manish 255
 
32464 tejbeer 256
                    leads.addAll(leadFollowUp);
257
                }
258
                LOGGER.info("leadlocalDateTime1" + leads);
29445 manish 259
 
32464 tejbeer 260
            } else {
261
                if (!leadStatus.contains(LeadStatus.followUp)) {
35769 amit 262
                    leads = leadRepository.selectAllByColorStatusAndBetweenCreatedDate(leadStatus, color, startDateTime, endDateTime);
32464 tejbeer 263
                }
29852 tejbeer 264
 
34890 aman 265
                if (leadStatus.contains(LeadStatus.followUp)) {
30290 tejbeer 266
 
32464 tejbeer 267
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
29445 manish 268
 
32464 tejbeer 269
                    leads.addAll(leadFollowUp);
270
                }
271
                LOGGER.info("leadlocalDateTime2" + leads);
29426 manish 272
 
32464 tejbeer 273
            }
29445 manish 274
 
32464 tejbeer 275
        }
27642 tejbeer 276
 
34890 aman 277
        if (isPositionSales && authUserIds.size() > 0) {
32464 tejbeer 278
            List<String> leadCreators = new ArrayList<>();
279
            leadCreators.add("daily-sync");
34032 amit.gupta 280
            leadCreators.addAll(csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_SALES, Arrays.asList(EscalationType.L1, EscalationType.L2)).stream().map(x -> x.getFullName()).collect(Collectors.toList()));
281
            leadCreators.addAll(csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_BGC, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3)).stream().map(x -> x.getFullName()).collect(Collectors.toList()));
32464 tejbeer 282
            model.addAttribute("leadCreators", leadCreators);
283
        }
284
        List<Lead> weekLast = new ArrayList<>();
285
        List<Lead> weekThird = new ArrayList<>();
286
        List<Lead> weekSecond = new ArrayList<>();
287
        List<Lead> weekFirst = new ArrayList<>();
288
        LocalDateTime curDate = LocalDate.now().atStartOfDay();
289
        List<LeadWeakWiseModel> lwDays = new ArrayList<>();
29266 manish 290
 
32464 tejbeer 291
        for (int i = 7; i >= 1; i--) {
292
            LocalDateTime startOfDay = curDate.minusDays(i);
29266 manish 293
 
32464 tejbeer 294
            LeadWeakWiseModel lm = new LeadWeakWiseModel();
295
            lm.setMonth(startOfDay.toLocalDate());
296
            lwDays.add(lm);
297
        }
298
        if (!leads.isEmpty()) {
29266 manish 299
 
32464 tejbeer 300
            weekLast.addAll(
301
                    leads.stream().filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(28)) && x.getCreatedTimestamp().isBefore(curDate.minusDays(21))).collect(Collectors.toList()));
29266 manish 302
 
32464 tejbeer 303
            weekThird.addAll(leads.stream().filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(21)) && x.getCreatedTimestamp().isBefore(curDate.minusDays(14))).collect(Collectors.toList()));
29426 manish 304
 
32464 tejbeer 305
            weekSecond.addAll(leads.stream().filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(14)) && x.getCreatedTimestamp().isBefore(curDate.minusDays(7))).collect(Collectors.toList()));
29744 tejbeer 306
 
32464 tejbeer 307
            weekFirst.addAll(leads.stream().filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(7))).collect(Collectors.toList()));
29266 manish 308
 
32464 tejbeer 309
        }
310
        LOGGER.info("weekLast" + weekLast);
311
        LOGGER.info("weekThird" + weekThird);
312
        LOGGER.info("weekSecond" + weekSecond);
313
        Map<String, Long> leadLasts = weekLast.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.counting()));
314
        Map<String, Long> leadThirds = weekThird.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.counting()));
315
        Map<String, Long> leadSeconds = weekSecond.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.mapping(Lead::getCreatedBy, Collectors.counting())));
29266 manish 316
 
32464 tejbeer 317
        Map<String, Map<LocalDate, Long>> leadFirsts = weekFirst.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.groupingBy(x -> x.getCreatedTimestamp().toLocalDate(), Collectors.counting())));
29266 manish 318
 
32464 tejbeer 319
        LOGGER.info("leadFirsts" + leadFirsts);
25979 tejbeer 320
 
32464 tejbeer 321
        List<Integer> authIds = new ArrayList<>();
322
        if (!leads.isEmpty()) {
27610 tejbeer 323
 
32464 tejbeer 324
            authIds.addAll(leads.stream().map(x -> x.getAssignTo()).collect(Collectors.toList()));
29744 tejbeer 325
 
32464 tejbeer 326
            leadActivityMap = leadActivityRepository.selectAllByleadIds(leads.stream().map(x -> x.getId()).collect(Collectors.toList())).stream().collect(Collectors.groupingBy(LeadActivity::getLeadId, Collectors.toList()));
27723 tejbeer 327
 
35395 amit 328
            Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
32464 tejbeer 329
            model.addAttribute("leadActivityMap", leadActivityMap);
330
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
331
        }
29266 manish 332
 
32464 tejbeer 333
        ChartLeadModel cm = this.getLeadChart(leads);
334
        model.addAttribute("chartLead", gson.toJson(cm));
29266 manish 335
 
32464 tejbeer 336
        LOGGER.info("ChartLeadModel" + gson.toJson(cm));
337
        LOGGER.info("lwDays" + lwDays);
29426 manish 338
 
32464 tejbeer 339
        LOGGER.info("leads" + leads);
340
        List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList());
34127 tejus.loha 341
//        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
35098 ranu 342
        List<AuthUser> authUsers = new ArrayList<>();
343
        List<AuthUser> salesUsers = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_SALES, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3));
344
        List<AuthUser> abmUsers = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_ABM, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3));
35252 aman 345
        List<AuthUser> bgcUsers = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_BGC, Arrays.asList(EscalationType.L1, EscalationType.L2, EscalationType.L3));
35098 ranu 346
        authUsers.addAll(salesUsers);
347
        authUsers.addAll(abmUsers);
35252 aman 348
        authUsers.addAll(bgcUsers);
32464 tejbeer 349
        LocalDate lastDate = curDate.minusDays(1).toLocalDate();
29426 manish 350
 
32464 tejbeer 351
        List<LocalDate> weekDates = new ArrayList<>();
29426 manish 352
 
32464 tejbeer 353
        weekDates.add(curDate.minusDays(28).toLocalDate());
354
        weekDates.add(curDate.minusDays(22).toLocalDate());
355
        weekDates.add(curDate.minusDays(21).toLocalDate());
356
        weekDates.add(curDate.minusDays(15).toLocalDate());
357
        weekDates.add(curDate.minusDays(14).toLocalDate());
358
        weekDates.add(curDate.minusDays(8).toLocalDate());
359
        weekDates.add(curDate.minusDays(7).toLocalDate());
360
        LOGGER.info("lastDate" + lastDate);
29426 manish 361
 
32464 tejbeer 362
        model.addAttribute("weekDates", weekDates);
31249 tejbeer 363
 
35769 amit 364
        model.addAttribute("startDate", startDate);
365
        model.addAttribute("endDate", endDate);
32464 tejbeer 366
        model.addAttribute("lastDate", lastDate);
367
        model.addAttribute("stateNames", stateNames);
31249 tejbeer 368
 
32464 tejbeer 369
        model.addAttribute("communicationTypes", CommunicationType.values());
25979 tejbeer 370
 
32464 tejbeer 371
        model.addAttribute("authUsers", authUsers);
33223 amit.gupta 372
        model.addAttribute("leads", leads);
32464 tejbeer 373
        model.addAttribute("leadStatus", LeadStatus.values());
374
        model.addAttribute("leadLasts", leadLasts);
375
        model.addAttribute("leadThirds", leadThirds);
376
        model.addAttribute("leadSeconds", leadSeconds);
377
        model.addAttribute("leadFirsts", leadFirsts);
378
        model.addAttribute("lwDays", lwDays);
31370 tejbeer 379
 
32464 tejbeer 380
        model.addAttribute("selectedLeadStatus", leadStatus.get(0));
31370 tejbeer 381
 
35548 aman 382
        boolean showBulkUploader =
383
                "sm@smartdukaan.com".equalsIgnoreCase(emailId);
31370 tejbeer 384
 
35548 aman 385
        model.addAttribute("showBulkUploader", showBulkUploader);
386
 
32464 tejbeer 387
        List<BrandCatalog> brandsDisplays = brandsService.getBrandsToDisplay(3);
388
        brandsDisplays.addAll(brandsService.getBrandsToDisplay(6));
389
        model.addAttribute("brandsDisplays", brandsDisplays.stream().distinct().collect(Collectors.toList()));
31370 tejbeer 390
 
32464 tejbeer 391
        LOGGER.info("brandsDisplays" + brandsDisplays);
27642 tejbeer 392
 
36642 ranu 393
        // Geo location status map for all leads
394
        if (!leads.isEmpty()) {
395
            List<Integer> allLeadIds = leads.stream().map(Lead::getId).collect(Collectors.toList());
396
            Map<Integer, LeadLiveLocation> geoLocationMap = leadLiveLocationRepository.selectByLeadIds(allLeadIds).stream()
397
                    .collect(Collectors.toMap(LeadLiveLocation::getLeadId, x -> x, (a, b) -> a));
398
            model.addAttribute("geoLocationMap", geoLocationMap);
399
        } else {
400
            model.addAttribute("geoLocationMap", new HashMap<>());
401
        }
402
        model.addAttribute("salesUsers", salesUsers);
403
        model.addAttribute("bgcUsers", bgcUsers);
25979 tejbeer 404
 
32464 tejbeer 405
        return "lead";
29266 manish 406
 
32464 tejbeer 407
    }
29266 manish 408
 
32464 tejbeer 409
    public ChartLeadModel getLeadChart(List<Lead> leads) throws ProfitMandiBusinessException {
29426 manish 410
 
32464 tejbeer 411
        Map<LeadStatus, Long> leadStatusMap = leads.stream().collect(
412
                Collectors.groupingBy(x -> x.getStatus(), Collectors.mapping(Lead::getStatus, Collectors.counting())));
29266 manish 413
 
32464 tejbeer 414
        Map<String, Long> hotLeadsMap = leads.stream().collect(
415
                Collectors.groupingBy(x -> x.getColor(), Collectors.mapping(Lead::getColor, Collectors.counting())));
29445 manish 416
 
32464 tejbeer 417
        LOGGER.info("hotLeadsMap" + hotLeadsMap);
418
        ChartLeadModel cm = new ChartLeadModel();
29445 manish 419
 
32464 tejbeer 420
        HashSet<LeadStatus> labels = new HashSet<LeadStatus>();
421
        labels.addAll(leadStatusMap.keySet());
29445 manish 422
 
32464 tejbeer 423
        List<String> hotLeads = new ArrayList<>();
424
        hotLeads.addAll(leadStatusMap.keySet().stream().map(x -> x.toString()).collect(Collectors.toSet()));
425
        hotLeads.add("HotLead");
29598 tejbeer 426
 
32464 tejbeer 427
        List<String> hotLeadKeys = new ArrayList<>();
29445 manish 428
 
32464 tejbeer 429
        hotLeadKeys.add("HotLead");
430
        List<String> hotLeadGreen = new ArrayList<>(hotLeadKeys);
29266 manish 431
 
32464 tejbeer 432
        LOGGER.info("hotLeads" + hotLeads);
29266 manish 433
 
32464 tejbeer 434
        List<LeadStatus> labelList = new ArrayList<>(labels);
435
        List<String> backgroundColor = new ArrayList<>();
436
        LOGGER.info("hotLeadKeys" + hotLeadKeys);
437
        List<Long> values = new ArrayList<>();
29598 tejbeer 438
 
32464 tejbeer 439
        for (String hotLead : hotLeads) {
29445 manish 440
 
32464 tejbeer 441
            if (hotLead.equals("pending")) {
442
                backgroundColor.add("pink");
443
                values.add(leadStatusMap.get(LeadStatus.pending));
444
            }
445
            if (hotLead.equals("notInterested")) {
446
                backgroundColor.add("red");
447
                values.add(leadStatusMap.get(LeadStatus.notInterested));
448
            }
449
            if (hotLead.equals("followUp")) {
450
                backgroundColor.add("#9ACD32");
451
                values.add(leadStatusMap.get(LeadStatus.followUp));
452
            }
453
            if (hotLead.equals("finalized")) {
454
                backgroundColor.add("blue");
455
                values.add(leadStatusMap.get(LeadStatus.finalized));
456
            }
29445 manish 457
 
32464 tejbeer 458
            if (hotLead.equals("HotLead")) {
459
                backgroundColor.add("green");
460
                values.add(hotLeadsMap.get("Green"));
29266 manish 461
 
32464 tejbeer 462
            }
29266 manish 463
 
32464 tejbeer 464
        }
465
        LOGGER.info("labelList" + labelList);
29266 manish 466
 
32464 tejbeer 467
        LOGGER.info("backgroundColor" + backgroundColor);
468
        LOGGER.info("labelsChartLead" + labels);
469
        LeadStatusData data = new LeadStatusData();
470
        data.setData(values);
471
        data.setBackgroundColor(backgroundColor);
472
        data.setLabel("DataSet 1");
29266 manish 473
 
32464 tejbeer 474
        PieLables label = new PieLables();
475
        label.setFontColor("black");
476
        label.setFontSize(15);
29266 manish 477
 
32464 tejbeer 478
        Legend legend = new Legend();
479
        legend.setLabels(label);
480
        legend.setPosition("left");
29266 manish 481
 
32464 tejbeer 482
        List<LeadStatusData> dataList = new ArrayList<>();
483
        dataList.add(data);
29266 manish 484
 
32464 tejbeer 485
        DataLeadModel datasets = new DataLeadModel();
486
        datasets.setDatasets(dataList);
487
        datasets.setLabels(hotLeads);
29266 manish 488
 
32464 tejbeer 489
        OptionModel om = new OptionModel();
490
        om.setLegend(legend);
29266 manish 491
 
32464 tejbeer 492
        cm.setType("pie");
493
        cm.setData(datasets);
494
        cm.setOptions(om);
25988 tejbeer 495
 
32464 tejbeer 496
        return cm;
497
    }
25988 tejbeer 498
 
34650 aman.kumar 499
    @RequestMapping(value = "/downloadDateWiseLead", method = RequestMethod.GET)
34707 aman.kumar 500
    public ResponseEntity<?> getdownloadLeadDataByDate(HttpServletRequest request,
501
                                                       @RequestParam(name = "leadStatus", required = false, defaultValue = "All") List<LeadStatus> leadStatus,
502
                                                       @RequestParam(name = "color", required = false, defaultValue = "All") List<String> color,
35769 amit 503
                                                       @RequestParam(name = "startDate", required = false) LocalDate startDate,
504
                                                       @RequestParam(name = "endDate", required = false) LocalDate endDate) throws Exception {
25988 tejbeer 505
 
34650 aman.kumar 506
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
507
        String emailId = fofoDetails.getEmailId();
35769 amit 508
        LocalDateTime startDateTime = startDate != null ? startDate.atStartOfDay() : null;
509
        LocalDateTime endDateTime = endDate != null ? endDate.atTime(23, 59, 59) : null;
34650 aman.kumar 510
        List<Lead> leads = new ArrayList<>();
511
        AuthUser authUser = authRepository.selectByEmailOrMobile(emailId);
512
 
34707 aman.kumar 513
        if (leadStatus.contains(LeadStatus.All)) {
514
            leadStatus.add(LeadStatus.pending);
515
            leadStatus.add(LeadStatus.notInterested);
516
            leadStatus.add(LeadStatus.finalized);
34963 aman 517
            leadStatus.add(LeadStatus.followUp);
34707 aman.kumar 518
        }
519
        if (color.contains("All")) {
520
            color.add("yellow");
521
            color.add("green");
522
        }
34650 aman.kumar 523
 
524
        Map<Integer, List<LeadActivity>> leadActivityMap = new HashMap<>();
525
        boolean authPositon = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_SALES);
526
        List<Integer> authUserIds = null;
527
        List<Lead> leadFollowUp = new ArrayList<>();
528
 
529
        if (authPositon) {
530
            authUserIds = authService.getAllReportees(authUser.getId());
531
            authUserIds.add(authUser.getId());
35769 amit 532
            if (startDateTime == null) {
34650 aman.kumar 533
                if (!leadStatus.contains(LeadStatus.followUp)) {
534
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, LocalDateTime.now().minusMonths(1));
535
                }
536
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
537
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
538
                    leads.addAll(leadFollowUp);
539
                }
540
            } else {
541
                if (!leadStatus.contains(LeadStatus.followUp)) {
35769 amit 542
                    leads = leadRepository.selectAllByColorStatusAndBetweenCreatedDateAndAuthIds(leadStatus, authUserIds, color, startDateTime, endDateTime);
34650 aman.kumar 543
                }
544
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
545
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
546
                    leads.addAll(leadFollowUp);
547
                }
548
            }
549
        } else {
35769 amit 550
            if (startDateTime == null) {
34650 aman.kumar 551
                if (!leadStatus.contains(LeadStatus.followUp)) {
552
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, LocalDateTime.now().minusMonths(1));
553
                }
554
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
555
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
556
                    leads.addAll(leadFollowUp);
557
                }
558
            } else {
35769 amit 559
                if (!leadStatus.contains(LeadStatus.followUp)) {
560
                    leads = leadRepository.selectAllByColorStatusAndBetweenCreatedDate(leadStatus, color, startDateTime, endDateTime);
34650 aman.kumar 561
                }
34894 aman 562
                if (leadStatus.contains(LeadStatus.followUp)) {
34650 aman.kumar 563
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
564
                    leads.addAll(leadFollowUp);
35769 amit 565
                }
34650 aman.kumar 566
            }
34707 aman.kumar 567
        }
34650 aman.kumar 568
 
34707 aman.kumar 569
        // Build activity map and auth map (SAME AS VIEW ENDPOINT)
34650 aman.kumar 570
        if (!leads.isEmpty()) {
34707 aman.kumar 571
            List<Integer> leadIds = leads.stream().map(Lead::getId).collect(Collectors.toList());
572
            leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream()
573
                    .collect(Collectors.groupingBy(LeadActivity::getLeadId));
34650 aman.kumar 574
        }
34707 aman.kumar 575
        List<Integer> authIds = leads.stream().map(Lead::getAssignTo).collect(Collectors.toList());
35395 amit 576
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream()
34707 aman.kumar 577
                .collect(Collectors.toMap(AuthUser::getId, x -> x));
578
 
579
        // Build CSV rows (USE DIRECT LEAD PROPERTIES - NO ACTIVITY FALLBACK)
34650 aman.kumar 580
        List<List<?>> rows = new ArrayList<>();
581
        for (Lead lead : leads) {
582
            List<LeadActivity> activities = leadActivityMap.get(lead.getId());
34707 aman.kumar 583
 
584
            // Use FIRST activity's schedule timestamp if exists
34650 aman.kumar 585
            String scheduleTimestamp = (activities != null && !activities.isEmpty())
586
                    ? FormattingUtils.format(activities.get(0).getSchelduleTimestamp())
34707 aman.kumar 587
                    : "";
34650 aman.kumar 588
 
34707 aman.kumar 589
            // DIRECTLY use Lead properties (NO fallback to activity)
590
            Double potential = lead.getPotential();
591
            String outLetName = lead.getOutLetName() != null ? lead.getOutLetName() : "";
34650 aman.kumar 592
 
34707 aman.kumar 593
            // Assignee name (blank if missing)
594
            String assignTo = "";
595
            if (authIdAndAuthUserMap.containsKey(lead.getAssignTo())) {
596
                AuthUser user = authIdAndAuthUserMap.get(lead.getAssignTo());
597
                assignTo = (user.getFirstName() + " " + user.getLastName()).trim();
598
            }
34650 aman.kumar 599
 
34707 aman.kumar 600
            rows.add(Arrays.asList(
35579 aman 601
                    lead.getId(),
34707 aman.kumar 602
                    lead.getSource(),
603
                    lead.getFullName(),
604
                    outLetName,
605
                    potential,
606
                    lead.getLeadMobile(),
607
                    lead.getAddress() != null ? lead.getAddress() : "",
608
                    lead.getCity() != null ? lead.getCity() : "",
609
                    lead.getState() != null ? lead.getState() : "",
610
                    lead.getCreatedBy() != null ? lead.getCreatedBy() : "",
611
                    lead.getStatus().toString(),
612
                    FormattingUtils.format(lead.getCreatedTimestamp()),
613
                    FormattingUtils.format(lead.getUpdatedTimestamp()),
614
                    scheduleTimestamp,
615
                    lead.getClosureTimestamp() != null
616
                            ? FormattingUtils.format(lead.getClosureTimestamp())
617
                            : "",  // Handle null closure
618
                    assignTo,
619
                    lead.getColor() != null ? lead.getColor() : ""
620
            ));
621
        }
34650 aman.kumar 622
 
34707 aman.kumar 623
        // Generate CSV response
624
        ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
35579 aman 625
                Arrays.asList("Id", "Source", "Partner Name", "Outlet Name", "Potential", "Mobile", "Address", "City", "State",
34707 aman.kumar 626
                        "Created By", "Status", "Created On", "Updated On", "Scheduled Timestamp",
627
                        "Closure Timestamp", "Assign To", "Color"),
628
                rows
629
        );
630
        return orderService.downloadReportInCsv(baos, rows, "LeadDetails_");
34650 aman.kumar 631
    }
632
 
32464 tejbeer 633
    @RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
634
    public String getClosedLead(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, @RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model) throws Exception {
635
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
636
        List<Lead> leads = null;
637
        long size = 0;
638
        leads = leadRepository.selectAllByStatus(status, offset, limit);
639
        size = leadRepository.selectCountByStatus(status);
25988 tejbeer 640
 
32464 tejbeer 641
        if (!leads.isEmpty()) {
642
            List<Integer> authIds = new ArrayList<>();
643
            for (Lead lead : leads) {
644
                authIds.add(lead.getAssignTo());
645
            }
35395 amit 646
            Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
25988 tejbeer 647
 
32464 tejbeer 648
            model.addAttribute("leads", leads);
649
            model.addAttribute("start", offset + 1);
650
            model.addAttribute("size", size);
651
            model.addAttribute("searchTerm", searchTerm);
652
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
653
            model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 654
 
32464 tejbeer 655
            if (leads.size() < limit) {
656
                model.addAttribute("end", offset + leads.size());
657
            } else {
658
                model.addAttribute("end", offset + limit);
659
            }
25988 tejbeer 660
 
32464 tejbeer 661
        } else {
662
            model.addAttribute("lead", leads);
25988 tejbeer 663
 
32464 tejbeer 664
            model.addAttribute("size", size);
665
        }
25988 tejbeer 666
 
32464 tejbeer 667
        model.addAttribute("authUsers", authUsers);
668
        return "lead-close";
669
    }
25988 tejbeer 670
 
32464 tejbeer 671
    @RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
672
    public String getPaginatedClosedLeads(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException {
673
        List<Lead> leads = null;
674
        leads = leadRepository.selectAllByStatus(status, offset, limit);
25988 tejbeer 675
 
32464 tejbeer 676
        if (!leads.isEmpty()) {
677
            List<Integer> authIds = new ArrayList<>();
678
            for (Lead lead : leads) {
679
                authIds.add(lead.getAssignTo());
680
            }
35395 amit 681
            Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
32464 tejbeer 682
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
683
            model.addAttribute("leads", leads);
684
            model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 685
 
32464 tejbeer 686
        } else {
687
            model.addAttribute("leads", leads);
25988 tejbeer 688
 
32464 tejbeer 689
        }
690
        return "lead-close-paginated";
691
    }
25988 tejbeer 692
 
32464 tejbeer 693
    @RequestMapping(value = "/searchLeads")
694
    public String getClosedLeads(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, @RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model) throws ProfitMandiBusinessException {
695
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
696
        List<Lead> leads = null;
697
        long size = 0;
698
        if (!(searchTerm.equals(""))) {
699
            leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
34155 tejus.loha 700
            size = leadRepository.selectCountByStatus(status);
701
            Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
702
            List<Integer> authIds = new ArrayList<>();
32464 tejbeer 703
            if (!(leads.size() == 0)) {
704
                for (Lead lead : leads) {
705
                    authIds.add(lead.getAssignTo());
706
                }
35395 amit 707
                authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
32464 tejbeer 708
                if (leads.size() < limit) {
709
                    model.addAttribute("end", offset + leads.size());
710
                } else {
711
                    model.addAttribute("end", offset + limit);
712
                }
713
            } else {
34155 tejus.loha 714
                model.addAttribute("end", offset + limit);
32464 tejbeer 715
            }
34155 tejus.loha 716
            model.addAttribute("leads", leads);
717
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
718
            model.addAttribute("start", offset + 1);
719
            model.addAttribute("size", size);
720
            model.addAttribute("searchTerm", searchTerm);
32464 tejbeer 721
        } else {
722
            leads = leadRepository.selectAllByStatus(status, offset, limit);
723
            size = leadRepository.selectCountByStatus(status);
25988 tejbeer 724
 
32464 tejbeer 725
            if (!leads.isEmpty()) {
726
                List<Integer> authIds = new ArrayList<>();
727
                for (Lead lead : leads) {
728
                    authIds.add(lead.getAssignTo());
729
                }
35395 amit 730
                Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
25988 tejbeer 731
 
32464 tejbeer 732
                model.addAttribute("leads", leads);
733
                model.addAttribute("start", offset + 1);
734
                model.addAttribute("size", size);
735
                model.addAttribute("searchTerm", searchTerm);
736
                model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25988 tejbeer 737
 
32464 tejbeer 738
                if (leads.size() < limit) {
739
                    model.addAttribute("end", offset + leads.size());
740
                } else {
741
                    model.addAttribute("end", offset + limit);
742
                }
25988 tejbeer 743
 
32464 tejbeer 744
            }
745
        }
25988 tejbeer 746
 
32464 tejbeer 747
        model.addAttribute("authUsers", authUsers);
748
        return "lead-close";
749
    }
25988 tejbeer 750
 
32464 tejbeer 751
    @RequestMapping(value = "/searchLeadPaginated")
752
    public String searchLeadPaginated(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, @RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model) throws ProfitMandiBusinessException {
753
        LOGGER.info("In search Item....");
754
        List<Lead> leads = null;
755
        if (!searchTerm.equals("")) {
756
            leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
757
            if (!(leads.size() == 0)) {
25988 tejbeer 758
 
32464 tejbeer 759
                List<Integer> authIds = new ArrayList<>();
760
                for (Lead lead : leads) {
761
                    authIds.add(lead.getAssignTo());
762
                }
35395 amit 763
                Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
32464 tejbeer 764
                model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
765
                model.addAttribute("leads", leads);
766
            }
767
        }
31249 tejbeer 768
 
32464 tejbeer 769
        return "lead-close-paginated";
31249 tejbeer 770
 
32464 tejbeer 771
    }
31249 tejbeer 772
 
32464 tejbeer 773
    @RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
774
    public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
775
        List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
25979 tejbeer 776
 
32464 tejbeer 777
        LOGGER.info("leadActivity" + leadActivity);
31370 tejbeer 778
 
32464 tejbeer 779
        model.addAttribute("leadActivity", leadActivity);
780
        model.addAttribute("authUserMap", authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x)));
31370 tejbeer 781
 
32464 tejbeer 782
        return "lead_activity_modal";
783
    }
31370 tejbeer 784
 
32464 tejbeer 785
    @RequestMapping(value = "/getLead", method = RequestMethod.GET)
786
    public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam int leadId) throws Exception {
787
        Lead lead = leadRepository.selectById(leadId);
31370 tejbeer 788
 
32464 tejbeer 789
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(lead.getId());
790
        if (leadDetail != null) {
791
            lead.setOutLetName(leadDetail.getOutletName());
792
        }
31249 tejbeer 793
 
32464 tejbeer 794
        return responseSender.ok(lead);
25979 tejbeer 795
 
32464 tejbeer 796
    }
31249 tejbeer 797
 
32464 tejbeer 798
    @RequestMapping(value = "/createLead", method = RequestMethod.POST)
799
    public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest, Model model) throws Exception {
800
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
35083 vikas 801
        Lead leadDetails = leadRepository.selectByMobileNumber(createRefferalRequest.getMobile());
802
        LOGGER.info("Lead Details {}", leadDetails);
31249 tejbeer 803
 
35083 vikas 804
        if (leadDetails != null && leadDetails.getStatus() != LeadStatus.notInterested) {
805
            AuthUser authUser1 = authRepository.selectById(leadDetails.getAssignTo());
806
            model.addAttribute("response1", "Lead already exists, created by " + leadDetails.getCreatedBy() +
807
                    " on " + FormattingUtils.format(leadDetails.getCreatedTimestamp()) +
34671 aman.kumar 808
                    ", assigned to " + authUser1.getFullName());
809
            return "response";
34627 aman.kumar 810
 
34671 aman.kumar 811
 
34627 aman.kumar 812
        }
813
 
32464 tejbeer 814
        LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
815
        Lead lead = new Lead();
816
        lead.setFirstName(createRefferalRequest.getFirstName());
817
        lead.setLastName(createRefferalRequest.getLastName());
818
        lead.setLeadMobile(createRefferalRequest.getMobile());
819
        lead.setState(createRefferalRequest.getState());
820
        lead.setCity(createRefferalRequest.getCity());
821
        lead.setAddress(createRefferalRequest.getAddress());
822
        lead.setCreatedTimestamp(LocalDateTime.now());
823
        lead.setUpdatedTimestamp(LocalDateTime.now());
824
        lead.setStatus(createRefferalRequest.getStatus());
825
        lead.setAssignTo(createRefferalRequest.getAssignTo());
826
        lead.setSource(createRefferalRequest.getSource());
36741 ranu 827
        if (Boolean.TRUE.equals(createRefferalRequest.getColorCheck())) {
32471 tejbeer 828
            lead.setColor("Green");
829
        } else {
830
            lead.setColor("Yellow");
831
        }
32464 tejbeer 832
        // change
833
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
834
        String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
835
        lead.setCreatedBy(authUserName);
836
        lead.setAuthId(authUser.getId());
837
        LOGGER.info("lead --- {}", lead);
838
        leadRepository.persist(lead);
839
        LeadActivity leadActivity = new LeadActivity();
840
        leadActivity.setLeadId(lead.getId());
841
        leadActivity.setRemark(createRefferalRequest.getRemark());
842
        leadActivity.setAuthId(authUser.getId());
32471 tejbeer 843
 
32464 tejbeer 844
        LOGGER.info("createRefferalRequest" + createRefferalRequest.getCommunicationType());
25979 tejbeer 845
 
32464 tejbeer 846
        if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
847
            leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
848
            leadActivity.setCommunicationType(createRefferalRequest.getCommunicationType());
25979 tejbeer 849
 
32464 tejbeer 850
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
851
                visitRequestRepository.createVisitRequest(lead.getId(), "lead", lead.getAssignTo(), createRefferalRequest.getSchelduleTimestamp());
852
            }
853
        } else {
854
            leadActivity.setSchelduleTimestamp(null);
855
        }
856
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
857
        leadActivityRepository.persist(leadActivity);
34127 tejus.loha 858
        if (!lead.getStatus().equals(LeadStatus.notInterested)) {
859
            LeadDetailModel leadDetail = new LeadDetailModel();
860
            leadDetail.setLeadId(lead.getId());
861
            leadDetail.setOutletName(createRefferalRequest.getOutletName());
862
            leadDetail.setCounterSize(createRefferalRequest.getCounterSize());
25979 tejbeer 863
 
31249 tejbeer 864
 
34127 tejus.loha 865
            leadDetail.setFrontp(createRefferalRequest.getFrontp());
866
            leadDetail.setFrontWithMarket(createRefferalRequest.getFrontWithMarket());
31370 tejbeer 867
 
868
 
34127 tejus.loha 869
            leadDetail.setInternalLongShot(createRefferalRequest.getInternalLongShot());
31370 tejbeer 870
 
34127 tejus.loha 871
            leadDetail.setInternalLeftWall(createRefferalRequest.getInternalLeftWall());
29598 tejbeer 872
 
34127 tejus.loha 873
            leadDetail.setInternalRightWall(createRefferalRequest.getInternalRightWall());
874
            List<LeadBrandModel> brandModels = new ArrayList<LeadBrandModel>();
27605 tejbeer 875
 
34127 tejus.loha 876
            for (LeadBrandModel leadBrandModel : createRefferalRequest.getLeadBrands()) {
25979 tejbeer 877
 
34127 tejus.loha 878
                LeadBrandModel leadBrand = new LeadBrandModel();
879
                leadBrand.setBrand(leadBrandModel.getBrand());
880
                leadBrand.setValue(leadBrandModel.getValue());
29598 tejbeer 881
 
34127 tejus.loha 882
                brandModels.add(leadBrand);
25979 tejbeer 883
 
34127 tejus.loha 884
            }
29598 tejbeer 885
 
34127 tejus.loha 886
            leadDetail.setLeadBrands(brandModels);
29598 tejbeer 887
 
32471 tejbeer 888
            leadRepository.persistLeadDetail(leadDetail, authUser);
889
        }
32464 tejbeer 890
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
29598 tejbeer 891
 
32464 tejbeer 892
        return "response";
29598 tejbeer 893
 
32464 tejbeer 894
    }
29476 manish 895
 
29473 manish 896
 
32464 tejbeer 897
    @RequestMapping(value = "/editLead", method = RequestMethod.POST)
898
    public String EditLead(HttpServletRequest request, @RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
899
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
29426 manish 900
 
32464 tejbeer 901
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
29426 manish 902
 
34113 tejus.loha 903
        Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
904
        AuthUser leadAuthUser = authRepository.selectById(lead.getAuthId());
32464 tejbeer 905
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(createLeadActivityRequest.getId());
29426 manish 906
 
36761 ranu 907
        // Unconditional gate: a lead can only be edited once its live geo-location
908
        // is APPROVED. UI also pre-checks; this is the server-side safety net.
909
        LeadLiveLocation approvedGeo = leadLiveLocationRepository.selectApprovedByLeadId(createLeadActivityRequest.getId());
910
        if (approvedGeo == null) {
911
            throw new ProfitMandiBusinessException("Lead", "", "Live geo-location for this lead has not been approved yet. Please approve the geo-location before editing.");
912
        }
913
 
34113 tejus.loha 914
        if (leadDetail == null && !createLeadActivityRequest.getStatus().equals(LeadStatus.notInterested) && leadAuthUser.isActive()) {
29426 manish 915
 
32464 tejbeer 916
            throw new ProfitMandiBusinessException("LeadDetail", "", "Please fill lead detail");
917
        }
29445 manish 918
 
32464 tejbeer 919
        LeadActivity leadActivity = new LeadActivity();
920
        leadActivity.setLeadId(createLeadActivityRequest.getId());
921
        leadActivity.setRemark(createLeadActivityRequest.getRemark());
29598 tejbeer 922
 
32464 tejbeer 923
        LOGGER.info("createRefferalRequest" + createLeadActivityRequest);
29598 tejbeer 924
 
32464 tejbeer 925
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
926
            leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
927
            leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
36741 ranu 928
            // A beat-day pick wires the lead onto that beat's route regardless of
929
            // communication type (TELEPHONIC = call on that beat day).
930
            String beatSelection = createLeadActivityRequest.getBeatSelection();
931
            if (beatSelection != null && beatSelection.contains("|")) {
36644 ranu 932
                int beatId = 0;
933
                LocalDate beatDate = createLeadActivityRequest.getScheldule() != null
934
                        ? createLeadActivityRequest.getScheldule().toLocalDate() : LocalDate.now();
935
                String beatName = "Beat";
36642 ranu 936
 
36741 ranu 937
                String[] parts = beatSelection.split("\\|", 3);
938
                beatDate = LocalDate.parse(parts[0]);
939
                beatName = parts.length > 1 ? parts[1] : "Beat";
940
                if (parts.length > 2) {
941
                    try {
942
                        beatId = Integer.parseInt(parts[2]);
943
                    } catch (NumberFormatException ignored) {
36642 ranu 944
                    }
945
                }
946
 
36644 ranu 947
                // Find optimal insert position using lead geolocation
948
                int insertAt = 0;
949
                LeadLiveLocation leadGeo = leadLiveLocationRepository.selectApprovedByLeadId(createLeadActivityRequest.getId());
950
                List<BeatRoute> existingStops = beatId > 0
951
                        ? beatRouteRepository.selectByBeatId(beatId).stream()
952
                        .sorted(Comparator.comparingInt(BeatRoute::getSequenceOrder))
953
                        .collect(Collectors.toList())
954
                        : new ArrayList<>();
36642 ranu 955
 
36644 ranu 956
                insertAt = existingStops.size(); // default: append at end
957
 
958
                if (!existingStops.isEmpty() && leadGeo != null) {
959
                    // Use nearest neighbor to find optimal position
960
                    // (simplified — append at end for now, full geocoding done in LeadGeoLocationController)
961
                    insertAt = existingStops.size();
962
                }
963
 
964
                // Shift existing stops
965
                for (BeatRoute stop : existingStops) {
966
                    if (stop.getSequenceOrder() >= insertAt) {
967
                        stop.setSequenceOrder(stop.getSequenceOrder() + 1);
968
                    }
969
                }
970
 
971
                // Create lead_route entry (directly APPROVED)
972
                LeadRoute leadRoute = new LeadRoute();
973
                leadRoute.setBeatId(beatId);
974
                leadRoute.setLeadId(createLeadActivityRequest.getId());
975
                leadRoute.setScheduleDate(beatDate);
976
                leadRoute.setSequenceOrder(insertAt);
977
                leadRoute.setStatus("APPROVED");
978
                leadRoute.setRequestedBy(authUser.getId());
979
                leadRoute.setApprovedBy(authUser.getId());
980
                leadRoute.setApprovedTimestamp(LocalDateTime.now());
981
                leadRoute.setCreatedTimestamp(LocalDateTime.now());
982
                leadRoute.setUpdatedTimestamp(LocalDateTime.now());
983
 
984
                // Set nearest store
985
                if (!existingStops.isEmpty()) {
986
                    leadRoute.setNearestStoreId(existingStops.get(Math.min(insertAt, existingStops.size() - 1)).getFofoId());
987
                }
988
                leadRouteRepository.persist(leadRoute);
989
 
990
                // Create visit request
991
                visitRequestRepository.createVisitRequest(
992
                        createLeadActivityRequest.getId(), "lead",
993
                        createLeadActivityRequest.getAssignTo(),
994
                        beatDate.atTime(10, 0));
995
 
36642 ranu 996
                // Log activity
36644 ranu 997
                LeadActivity visitActivity = new LeadActivity();
998
                visitActivity.setLeadId(createLeadActivityRequest.getId());
999
                visitActivity.setRemark("Lead scheduled for visit on beat: " + beatName
1000
                        + " (" + beatDate + ") at stop #" + (insertAt + 1));
1001
                visitActivity.setAuthId(authUser.getId());
1002
                visitActivity.setCreatedTimestamp(LocalDateTime.now());
1003
                leadActivityRepository.persist(visitActivity);
32464 tejbeer 1004
            }
1005
        } else {
1006
            leadActivity.setSchelduleTimestamp(null);
1007
        }
1008
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
1009
        leadActivity.setAuthId(authUser.getId());
1010
        leadActivityRepository.persist(leadActivity);
1011
        lead.setAssignTo(createLeadActivityRequest.getAssignTo());
1012
        lead.setStatus(createLeadActivityRequest.getStatus());
35548 aman 1013
        lead.setState(createLeadActivityRequest.getState());
1014
        lead.setCity(createLeadActivityRequest.getCity());
35769 amit 1015
        if (createLeadActivityRequest.getSource() != null && !createLeadActivityRequest.getSource().isEmpty()) {
1016
            lead.setSource(createLeadActivityRequest.getSource());
1017
        }
36741 ranu 1018
        if (Boolean.TRUE.equals(createLeadActivityRequest.getColorCheck())) {
32471 tejbeer 1019
            lead.setColor("Green");
1020
        } else {
1021
            lead.setColor("Yellow");
1022
        }
32464 tejbeer 1023
        lead.setNotinterestedReason(createLeadActivityRequest.getReason());
1024
        lead.setUpdatedTimestamp(LocalDateTime.now());
29426 manish 1025
 
32464 tejbeer 1026
        int authId = 0;
34127 tejus.loha 1027
        authId = lead.getAssignTo();
1028
        Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
29426 manish 1029
 
34127 tejus.loha 1030
        List<LeadActivity> leadActivitys = leadActivityRepository.selectBYLeadId(lead.getId());
29426 manish 1031
 
34127 tejus.loha 1032
        if (!leadActivitys.isEmpty()) {
1033
            leadActivityMap.put(lead.getId(), leadActivitys.get(0));
1034
        }
29426 manish 1035
 
34127 tejus.loha 1036
        Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
1037
        AuthUser AuthUser = authRepository.selectById(authId);
29426 manish 1038
 
34127 tejus.loha 1039
        authIdAndAuthUserMap.put(AuthUser.getId(), AuthUser);
29426 manish 1040
 
34127 tejus.loha 1041
        model.addAttribute("leadActivityMap", leadActivityMap);
1042
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
29426 manish 1043
 
30185 tejbeer 1044
 
33223 amit.gupta 1045
        model.addAttribute("lead", lead);
30185 tejbeer 1046
 
32464 tejbeer 1047
        return "edit-lead";
30185 tejbeer 1048
 
32464 tejbeer 1049
    }
31370 tejbeer 1050
 
32464 tejbeer 1051
    @RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
1052
    public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
1053
        List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList());
31370 tejbeer 1054
 
32464 tejbeer 1055
        List<List<?>> rows = new ArrayList<>();
31496 tejbeer 1056
 
32464 tejbeer 1057
        List<LeadSource> lss = LeadSource.enumValues;
31370 tejbeer 1058
 
32464 tejbeer 1059
        for (LeadSource ls : lss) {
1060
            rows.add(Arrays.asList("-", "-", "-", "-", "-", "-", "-", ls));
31478 tejbeer 1061
 
32464 tejbeer 1062
        }
1063
        for (String stateName : stateNames) {
1064
            rows.add(Arrays.asList("-", "-", "-", "-", stateName, "-", "-", "-"));
31478 tejbeer 1065
 
32464 tejbeer 1066
        }
31478 tejbeer 1067
 
32464 tejbeer 1068
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("First Name", "Last Name", "Address", "City", "State", "Mobile", "Assign To(email)", "Source"), rows);
31478 tejbeer 1069
 
32464 tejbeer 1070
        final HttpHeaders headers = new HttpHeaders();
1071
        headers.set("Content-Type", "text/csv");
1072
        headers.set("Content-disposition", "inline; filename=leads.format.csv");
1073
        headers.setContentLength(baos.toByteArray().length);
31478 tejbeer 1074
 
32464 tejbeer 1075
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
1076
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
1077
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
31478 tejbeer 1078
 
32464 tejbeer 1079
    }
31478 tejbeer 1080
 
32464 tejbeer 1081
    @RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
1082
    public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
31478 tejbeer 1083
 
32464 tejbeer 1084
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1085
        String email = loginDetails.getEmailId();
31478 tejbeer 1086
 
32464 tejbeer 1087
        AuthUser createdBy = authRepository.selectByEmailOrMobile(email);
31478 tejbeer 1088
 
32464 tejbeer 1089
        LOGGER.info("file" + file.toString());
31478 tejbeer 1090
 
32464 tejbeer 1091
        String fileName = file.getName();
31370 tejbeer 1092
 
32464 tejbeer 1093
        String fileNames = file.getOriginalFilename();
31370 tejbeer 1094
 
32464 tejbeer 1095
        LOGGER.info("fileName" + fileName);
1096
        LOGGER.info("fileNames" + fileNames);
31370 tejbeer 1097
 
32464 tejbeer 1098
        List<CSVRecord> records = FileUtil.readFile(file);
31370 tejbeer 1099
 
32464 tejbeer 1100
        for (CSVRecord record : records) {
31370 tejbeer 1101
 
32464 tejbeer 1102
            Lead lead = new Lead();
1103
            lead.setFirstName(record.get(0));
1104
            lead.setLastName(record.get(1));
1105
            lead.setAddress(record.get(2));
1106
            lead.setCity(record.get(3));
1107
            lead.setState(record.get(4));
1108
            lead.setLeadMobile(record.get(5));
1109
            LOGGER.info("record" + record.get(6));
31370 tejbeer 1110
 
32464 tejbeer 1111
            AuthUser assignTo = authRepository.selectByEmailOrMobile(record.get(6));
31370 tejbeer 1112
 
32464 tejbeer 1113
            if (assignTo == null) {
1114
                throw new ProfitMandiBusinessException("Assign To ", record.get(6), "email id not exist");
1115
            }
31370 tejbeer 1116
 
32464 tejbeer 1117
            lead.setAssignTo(assignTo.getId());
1118
            lead.setSource(record.get(7));
31370 tejbeer 1119
 
32464 tejbeer 1120
            lead.setCreatedTimestamp(LocalDateTime.now());
31370 tejbeer 1121
 
32464 tejbeer 1122
            lead.setUpdatedTimestamp(LocalDateTime.now());
1123
            lead.setStatus(LeadStatus.pending);
1124
            lead.setColor("yellow");
1125
            // change
1126
            lead.setCreatedBy(createdBy.getFullName());
1127
            lead.setAuthId(createdBy.getId());
31370 tejbeer 1128
 
32464 tejbeer 1129
            leadRepository.persist(lead);
31370 tejbeer 1130
 
32464 tejbeer 1131
            LeadActivity leadActivity = new LeadActivity();
1132
            leadActivity.setLeadId(lead.getId());
1133
            leadActivity.setRemark("New Lead");
1134
            leadActivity.setSchelduleTimestamp(null);
31370 tejbeer 1135
 
32464 tejbeer 1136
            leadActivity.setCreatedTimestamp(LocalDateTime.now());
1137
            leadActivityRepository.persist(leadActivity);
1138
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 1139
 
32464 tejbeer 1140
        }
31370 tejbeer 1141
 
32464 tejbeer 1142
        model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
31370 tejbeer 1143
 
32464 tejbeer 1144
        return "response";
31370 tejbeer 1145
 
32464 tejbeer 1146
    }
31370 tejbeer 1147
 
32464 tejbeer 1148
    @RequestMapping(value = "/teamCommitment", method = RequestMethod.GET)
1149
    public String teamCommitments(HttpServletRequest request, Model model) throws Exception {
31370 tejbeer 1150
 
32464 tejbeer 1151
        return "team-commitment";
31370 tejbeer 1152
 
32464 tejbeer 1153
    }
31370 tejbeer 1154
 
32464 tejbeer 1155
    @RequestMapping(value = "/leadDetail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
1156
    public String leadDetail(HttpServletRequest request, @RequestBody LeadDetailModel leadDetailModel, Model model) throws Exception {
31370 tejbeer 1157
 
32464 tejbeer 1158
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1159
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
31370 tejbeer 1160
 
32471 tejbeer 1161
        leadRepository.persistLeadDetail(leadDetailModel, authUser);
32464 tejbeer 1162
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 1163
 
32464 tejbeer 1164
        return "response";
31370 tejbeer 1165
 
32464 tejbeer 1166
    }
31370 tejbeer 1167
 
32464 tejbeer 1168
    @RequestMapping(value = "/getLeadDetail", method = RequestMethod.GET)
1169
    public String getLeadDetail(HttpServletRequest request, Model model) throws Exception {
1170
        List<Integer> followUpleadIds = leadRepository.selectAllByStatus(LeadStatus.followUp).stream().map(x -> x.getId()).collect(Collectors.toList());
1171
        List<LeadDetail> leadDetails = leadDetailRepository.selectByLeadIds(followUpleadIds);
31370 tejbeer 1172
 
32464 tejbeer 1173
        List<DBObject> mobileBrands = mongoClient.getAllBrandsToDisplay(3);
31370 tejbeer 1174
 
32464 tejbeer 1175
        List<String> brands = mobileBrands.stream().map(x -> (String) x.get("name")).collect(Collectors.toList());
31370 tejbeer 1176
 
32464 tejbeer 1177
        model.addAttribute("brands", brands);
1178
        if (!leadDetails.isEmpty()) {
31370 tejbeer 1179
 
32464 tejbeer 1180
            List<Integer> detailsIds = leadDetails.stream().map(x -> x.getId()).collect(Collectors.toList());
31370 tejbeer 1181
 
32464 tejbeer 1182
            List<Integer> leadIds = leadDetails.stream().map(x -> x.getLeadId()).collect(Collectors.toList());
31370 tejbeer 1183
 
32464 tejbeer 1184
            Map<Integer, Lead> leadMap = leadRepository.selectAllByIds(leadIds).stream().filter(x -> x.getStatus().equals(LeadStatus.followUp)).collect(Collectors.toMap(x -> x.getId(), x -> x));
31370 tejbeer 1185
 
32464 tejbeer 1186
            Map<Integer, Optional<LeadActivity>> leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream().collect(Collectors.groupingBy(x -> x.getLeadId(), Collectors.maxBy(Comparator.comparing(LeadActivity::getId))));
31370 tejbeer 1187
 
32464 tejbeer 1188
            model.addAttribute("leadActivityMap", leadActivityMap);
30185 tejbeer 1189
 
32464 tejbeer 1190
            List<LeadBrand> leadBrands = leadBrandRepository.selectByLeadDetailId(detailsIds);
30185 tejbeer 1191
 
32464 tejbeer 1192
            LOGGER.info("leadBrands {}" + leadBrands);
30185 tejbeer 1193
 
32464 tejbeer 1194
            Map<Integer, Map<String, Integer>> leadDetailBrandValue = new HashMap<>();
30416 tejbeer 1195
 
32464 tejbeer 1196
            Map<Integer, List<LeadBrand>> leadDetail = leadBrands.stream().collect(Collectors.groupingBy(x -> x.getLeadDetailId(), Collectors.toList()));
30416 tejbeer 1197
 
32464 tejbeer 1198
            for (Entry<Integer, List<LeadBrand>> leadDetailEntry : leadDetail.entrySet()) {
30416 tejbeer 1199
 
32464 tejbeer 1200
                Map<String, Integer> brandValue = new HashMap<>();
30416 tejbeer 1201
 
32464 tejbeer 1202
                for (LeadBrand leadBrand : leadDetailEntry.getValue()) {
1203
                    brandValue.put(leadBrand.getBrand(), leadBrand.getValue());
30416 tejbeer 1204
 
32464 tejbeer 1205
                }
1206
                leadDetailBrandValue.put(leadDetailEntry.getKey(), brandValue);
1207
            }
30416 tejbeer 1208
 
32464 tejbeer 1209
            LOGGER.info("leadDetailBrandValue {}" + leadDetailBrandValue);
30416 tejbeer 1210
 
32464 tejbeer 1211
            model.addAttribute("leadDetailBrandValue", leadDetailBrandValue);
30416 tejbeer 1212
 
32464 tejbeer 1213
            model.addAttribute("leadMap", leadMap);
1214
        }
30434 tejbeer 1215
 
32464 tejbeer 1216
        model.addAttribute("leadDetails", leadDetails);
30434 tejbeer 1217
 
32464 tejbeer 1218
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1219
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
30434 tejbeer 1220
 
32464 tejbeer 1221
        return "lead-detail";
30458 tejbeer 1222
 
32464 tejbeer 1223
    }
30458 tejbeer 1224
 
32464 tejbeer 1225
    @RequestMapping(value = "/getLeadDetailByLeadId", method = RequestMethod.GET)
35548 aman 1226
    public ResponseEntity<?> getLeadDetailByLeadId(@RequestParam int leadId) {
30458 tejbeer 1227
 
35548 aman 1228
        Lead lead = leadRepository.selectById(leadId);
32464 tejbeer 1229
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(leadId);
35548 aman 1230
        Map<String, Object> response = new HashMap<>();
1231
        response.put("city", lead.getCity());
1232
        response.put("state", lead.getState());
1233
        if (leadDetail != null) {
1234
            response.put("outletName", leadDetail.getOutletName());
1235
            response.put("counterSize", leadDetail.getCounterSize());
1236
        }
1237
        return responseSender.ok(response);
1238
    }
30458 tejbeer 1239
 
35548 aman 1240
    @PostMapping("/upload-assign-id")
1241
    public ResponseEntity<?> uploadAssignIdCsv(
1242
            @RequestParam("file") MultipartFile file)
1243
            throws Exception {
1244
 
1245
        try (Reader reader = new InputStreamReader(file.getInputStream());
1246
             CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT)) {
1247
 
1248
            List<CSVRecord> records = parser.getRecords();
1249
 
1250
            if (records.size() < 2) {
1251
                throw new ProfitMandiBusinessException(
1252
                        "Uploaded File", "", "No records Found");
1253
            }
1254
 
1255
            records.remove(0);
1256
 
1257
            for (CSVRecord record : records) {
1258
 
1259
                int leadId = Integer.parseInt(record.get(0));
1260
                int assignId = Integer.parseInt(record.get(1));
1261
 
1262
                Lead lead = leadRepository.selectById(leadId);
1263
 
1264
                if (lead == null) {
1265
                    LOGGER.warn("Lead not found for id {}", leadId);
1266
                    continue;
1267
                }
1268
 
1269
                lead.setAssignTo(assignId);
1270
            }
1271
        }
1272
 
1273
        return responseSender.ok("CSV processed successfully");
32464 tejbeer 1274
    }
30434 tejbeer 1275
 
35548 aman 1276
 
1277
 
32464 tejbeer 1278
    @RequestMapping(value = "/getTeamCommitment", method = RequestMethod.GET)
1279
    public String getTeamCommitments(HttpServletRequest request, @RequestParam LocalDateTime date, Model model) throws Exception {
30781 tejbeer 1280
 
32464 tejbeer 1281
        List<TeamCommitmentModel> commitments = partnerCollectionPlanRepository.selectTeamCommitmentByDate(date.toLocalDate());
30416 tejbeer 1282
 
32464 tejbeer 1283
        model.addAttribute("commitments", commitments);
1284
        return "team-commitment-table";
30416 tejbeer 1285
 
32464 tejbeer 1286
    }
30416 tejbeer 1287
 
33917 ranu 1288
    @Autowired
1289
    RbmTargetService rbmTargetService;
1290
 
1291
    @RequestMapping(value = "/rbmTodayArr", method = RequestMethod.GET)
1292
    public String getRbmTodayArr(HttpServletRequest request, Model model, @RequestParam(value = "startDate", required = false) LocalDate startDate) throws Exception {
1293
        List<RbmArrViewModel> rbmArrViewModels;
35223 ranu 1294
        DecimalFormat decimalFormat = new DecimalFormat("#"); // No decimal places
33917 ranu 1295
        if (startDate != null) {
1296
            rbmArrViewModels = rbmTargetService.getRbmTodayArr(startDate);
1297
        } else {
1298
            rbmArrViewModels = rbmTargetService.getRbmTodayArr();
1299
        }
1300
 
35223 ranu 1301
        Set<AuthUser> authUsers = new HashSet<>();
1302
        Set<AuthUser> rbmAuthUsers = csService.getAuthUserByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM, EscalationType.L1).stream().filter(x -> x.isActive()).collect(Collectors.toSet());
1303
        Set<AuthUser> salesAuthUsers = csService.getAuthUserIds(ProfitMandiConstants.TICKET_CATEGORY_RBM, Arrays.asList(EscalationType.L1, EscalationType.L2)).stream().filter(x -> x.isActive()).collect(Collectors.toSet());
33953 ranu 1304
 
35223 ranu 1305
        authUsers.addAll(rbmAuthUsers);
1306
        authUsers.addAll(salesAuthUsers);
33953 ranu 1307
 
35223 ranu 1308
        double totalAchieved = rbmArrViewModels.stream().mapToDouble(RbmArrViewModel::getTotalAchievedTarget).sum();
1309
        double totalTargetSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayTarget).sum();
1310
 
1311
        double totalHidSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayHidTarget).sum();
1312
        double totalHidAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedHidTarget).sum();
1313
 
1314
        double totalFastSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayFastMovingTarget).sum();
1315
        double totalFastAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedFastMovingTarget).sum();
1316
 
1317
        double totalSlowSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodaySlowMovingTarget).sum();
1318
        double totalSlowAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedSlowMovingTarget).sum();
1319
 
1320
        double totalRunningSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayRunningTarget).sum();
1321
        double totalRunningAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedRunningTarget).sum();
1322
 
1323
        double totalOtherSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayOtherMovingTarget).sum();
1324
        double totalOtherAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedOtherMovingTarget).sum();
1325
 
34055 ranu 1326
        List<Sold15daysOldAgingModel> sold15daysOldAgingModels = rbmTargetService.getAgingSale(LocalDate.now(), LocalDate.now().plusDays(1));
1327
        List<Our15DaysOldAgingStock> our15DaysOldAgingStocks = rbmTargetService.our15DaysAgingStock();
1328
 
35223 ranu 1329
        long totalSoldSlow = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getSlowmovingBilled).sum();
1330
        long totalSoldRun = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getRunningBilled).sum();
1331
        long totalSoldFast = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getFastmovingBilled).sum();
1332
        long totalSoldHid = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getHidBilled).sum();
1333
        long totalSoldOther = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getOthersBilled).sum();
1334
        long totalSoldAging = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getTotalBilled).sum();
34103 ranu 1335
 
35223 ranu 1336
 
34103 ranu 1337
//        first week count of rbm partner billing
1338
        LocalDate firstOfCurrentMonth = LocalDate.now().withDayOfMonth(1);
1339
        LocalDate seventhOfCurrentMonth = LocalDate.now().withDayOfMonth(7);
1340
 
1341
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsFirstWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(firstOfCurrentMonth, seventhOfCurrentMonth);
1342
 
1343
        Map<String, Long> rbmBilledCountMapFirstWeek = rbmBilledFofoIdsModelsFirstWeek.stream()
1344
                .filter(x -> x.getStatus().equals("Billed"))
1345
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1346
 
34119 ranu 1347
        long totalFirstWeekCount = rbmBilledCountMapFirstWeek.values().stream()
1348
                .mapToLong(Long::longValue)
1349
                .sum();
1350
 
34114 ranu 1351
        Map<String, Long> rbmTargetedFofoIdCountMap = rbmBilledFofoIdsModelsFirstWeek.stream()
1352
                .collect(Collectors.groupingBy(
1353
                        RbmBilledFofoIdsModel::getRbmName, // Group by RBM Name
1354
                        Collectors.counting() // Count all fofoId entries for each RBM
1355
                ));
34103 ranu 1356
 
34119 ranu 1357
        long totalTargetedCount = rbmTargetedFofoIdCountMap.values().stream().mapToLong(x -> x.longValue()).sum();
34114 ranu 1358
 
1359
 
34103 ranu 1360
//        second week count of rbm partner billing
1361
 
1362
        LocalDate eightOfCurrentMonth = LocalDate.now().withDayOfMonth(8);
1363
        LocalDate fifteenOfCurrentMonth = LocalDate.now().withDayOfMonth(15);
1364
 
1365
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsSecondWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(eightOfCurrentMonth, fifteenOfCurrentMonth);
1366
 
1367
        Map<String, Long> rbmBilledCountMapSecondWeek = rbmBilledFofoIdsModelsSecondWeek.stream()
1368
                .filter(x -> x.getStatus().equals("Billed"))
1369
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1370
 
34119 ranu 1371
        long totalSecondWeekCount = rbmBilledCountMapSecondWeek.values().stream().mapToLong(Long::longValue).sum();
34103 ranu 1372
 
1373
//      third week count of rbm partner billing
1374
 
1375
        LocalDate sixteenOfCurrentMonth = LocalDate.now().withDayOfMonth(16);
34144 ranu 1376
        LocalDate twentySecondOfCurrentMonth = LocalDate.now().withDayOfMonth(22);
34103 ranu 1377
 
34144 ranu 1378
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsThirdWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(sixteenOfCurrentMonth, twentySecondOfCurrentMonth);
34103 ranu 1379
 
1380
        Map<String, Long> rbmBilledCountMapThirdWeek = rbmBilledFofoIdsModelsThirdWeek.stream()
1381
                .filter(x -> x.getStatus().equals("Billed"))
1382
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1383
 
34119 ranu 1384
        long totalThirdWeekCount = rbmBilledCountMapThirdWeek.values().stream().mapToLong(Long::longValue).sum();
34103 ranu 1385
 
34119 ranu 1386
 
34103 ranu 1387
        //      fourth week count of rbm partner billing
1388
 
34144 ranu 1389
        LocalDate twentyThirdOfCurrentMonth = LocalDate.now().withDayOfMonth(23);
34103 ranu 1390
        LocalDate lastDayOfCurrentMonth = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth());
1391
 
34144 ranu 1392
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsFourthWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(twentyThirdOfCurrentMonth, lastDayOfCurrentMonth);
34103 ranu 1393
 
1394
        Map<String, Long> rbmBilledCountMapFourthWeek = rbmBilledFofoIdsModelsFourthWeek.stream()
1395
                .filter(x -> x.getStatus().equals("Billed"))
1396
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1397
 
34119 ranu 1398
        long totalFourthWeekCount = rbmBilledCountMapFourthWeek.values().stream().mapToLong(x -> x.longValue()).sum();
34103 ranu 1399
 
34119 ranu 1400
 
34103 ranu 1401
//      mtd rbm partner billing
1402
 
1403
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsMtd = rbmTargetService.getDateWiseBilledFofoIdByRbm(firstOfCurrentMonth, LocalDate.now());
1404
 
1405
        Map<String, Long> rbmBilledCountMapMtd = rbmBilledFofoIdsModelsMtd.stream()
1406
                .filter(x -> x.getStatus().equals("Billed"))
1407
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1408
 
34119 ranu 1409
        long totalMtdCount = rbmBilledCountMapMtd.values().stream().mapToLong(Long::longValue).sum();
1410
 
1411
        Map<String, Long> zeroBilledCountMap = rbmTargetedFofoIdCountMap.entrySet().stream()
1412
                .collect(Collectors.toMap(
1413
                        Map.Entry::getKey,
1414
                        entry -> entry.getValue() - rbmBilledCountMapMtd.getOrDefault(entry.getKey(), 0L)
1415
                ));
1416
 
1417
        long totalZeroBilledCount = zeroBilledCountMap.values().stream().mapToLong(Long::longValue).sum();
1418
 
36101 ranu 1419
        //        rbmRating by franchisee visits (weekly: Monday to Sunday)
35223 ranu 1420
 
1421
        Map<Integer, String> rbmIdToNameMap = authUsers.stream()
1422
                .collect(Collectors.toMap(AuthUser::getId, AuthUser::getFullName));
1423
 
36101 ranu 1424
        // Calculate current week: Monday (start) to Sunday (end)
1425
        LocalDate today = LocalDate.now();
1426
        LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
1427
        LocalDate sunday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
1428
        LocalDateTime weekStart = monday.atStartOfDay();
1429
        LocalDateTime weekEnd = sunday.atTime(LocalTime.MAX);
1430
 
35223 ranu 1431
        Map<String, RbMRatingModel> rbmNameToRatingMap = rbmRatingRepository
36101 ranu 1432
                .findAverageRatingByRbmIdAndDateRange(new ArrayList<>(rbmIdToNameMap.keySet()), weekStart, weekEnd)
1433
                .stream().collect(Collectors.toMap(
35223 ranu 1434
                        x -> rbmIdToNameMap.get(x.getRbmId()),
1435
                        x -> x
1436
                ));
1437
 
1438
 
33917 ranu 1439
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
1440
        model.addAttribute("rbmArrViewModels", rbmArrViewModels);
35223 ranu 1441
        model.addAttribute("rbmNameToRatingMap", rbmNameToRatingMap);
1442
 
1443
        model.addAttribute("totalTargetSum", decimalFormat.format(totalTargetSum));
1444
        model.addAttribute("totalAchieved", decimalFormat.format(totalAchieved));
1445
 
1446
        model.addAttribute("totalHidSum", decimalFormat.format(totalHidSum));
1447
        model.addAttribute("totalHidAchievedSum", decimalFormat.format(totalHidAchievedSum));
1448
 
1449
        model.addAttribute("totalFastSum", decimalFormat.format(totalFastSum));
1450
        model.addAttribute("totalFastAchievedSum", decimalFormat.format(totalFastAchievedSum));
1451
 
1452
        model.addAttribute("totalSlowSum", decimalFormat.format(totalSlowSum));
1453
        model.addAttribute("totalSlowAchievedSum", decimalFormat.format(totalSlowAchievedSum));
1454
 
1455
        model.addAttribute("totalRunningSum", decimalFormat.format(totalRunningSum));
1456
        model.addAttribute("totalRunningAchievedSum", decimalFormat.format(totalRunningAchievedSum));
1457
 
1458
        model.addAttribute("totalOtherSum", decimalFormat.format(totalOtherSum));
1459
        model.addAttribute("totalOtherAchievedSum", decimalFormat.format(totalOtherAchievedSum));
1460
 
1461
        model.addAttribute("our15DaysOldAgingStocks", our15DaysOldAgingStocks);
34055 ranu 1462
        model.addAttribute("sold15daysOldAgingModels", sold15daysOldAgingModels);
35223 ranu 1463
        model.addAttribute("totalSoldSlow", totalSoldSlow);
1464
        model.addAttribute("totalSoldRun", totalSoldRun);
1465
        model.addAttribute("totalSoldFast", totalSoldFast);
1466
        model.addAttribute("totalSoldHid", totalSoldHid);
1467
        model.addAttribute("totalSoldOther", totalSoldOther);
1468
        model.addAttribute("totalSoldAging", totalSoldAging);
33917 ranu 1469
 
34114 ranu 1470
        model.addAttribute("rbmTargetedFofoIdCountMap", rbmTargetedFofoIdCountMap);
34103 ranu 1471
        model.addAttribute("rbmBilledCountMapFirstWeek", rbmBilledCountMapFirstWeek);
1472
        model.addAttribute("rbmBilledCountMapSecondWeek", rbmBilledCountMapSecondWeek);
1473
        model.addAttribute("rbmBilledCountMapThirdWeek", rbmBilledCountMapThirdWeek);
1474
        model.addAttribute("rbmBilledCountMapFourthWeek", rbmBilledCountMapFourthWeek);
1475
        model.addAttribute("rbmBilledCountMapMtd", rbmBilledCountMapMtd);
34119 ranu 1476
        model.addAttribute("zeroBilledCountMap", zeroBilledCountMap);
1477
        model.addAttribute("totalFirstWeekCount", totalFirstWeekCount);
1478
        model.addAttribute("totalTargetedCount", totalTargetedCount);
1479
        model.addAttribute("totalSecondWeekCount", totalSecondWeekCount);
1480
        model.addAttribute("totalThirdWeekCount", totalThirdWeekCount);
1481
        model.addAttribute("totalFourthWeekCount", totalFourthWeekCount);
1482
        model.addAttribute("totalMtdCount", totalMtdCount);
1483
        model.addAttribute("totalZeroBilledCount", totalZeroBilledCount);
34103 ranu 1484
 
33917 ranu 1485
        return "rbm-today-arr";
1486
    }
1487
 
1488
 
32464 tejbeer 1489
    @RequestMapping(value = "/partnerHealth", method = RequestMethod.GET)
1490
    public String partnerHealth(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1491
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30416 tejbeer 1492
 
32464 tejbeer 1493
        if (StringUtils.isEmpty(email)) {
1494
            email = loginDetails.getEmailId();
1495
        } else {
1496
            AuthUser selectedUser = authRepository.selectByEmailOrMobile(email);
30416 tejbeer 1497
 
32464 tejbeer 1498
            model.addAttribute("selectedUser", selectedUser);
30445 tejbeer 1499
 
32464 tejbeer 1500
        }
30445 tejbeer 1501
 
32464 tejbeer 1502
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30445 tejbeer 1503
 
32464 tejbeer 1504
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1505
        List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(email));
1506
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1507
        if (fofoIds != null && fofoIds.size() > 0) {
1508
            List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30420 tejbeer 1509
 
32464 tejbeer 1510
            Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate);
30416 tejbeer 1511
 
32464 tejbeer 1512
            List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
30416 tejbeer 1513
 
32464 tejbeer 1514
            LOGGER.info("remarkIds {}", remarkIds);
30416 tejbeer 1515
 
32464 tejbeer 1516
            long todayOverallCall = 0;
1517
            if (!remarkIds.isEmpty()) {
30416 tejbeer 1518
 
32464 tejbeer 1519
                if (authUser.getEmailId().equals(email)) {
30441 tejbeer 1520
 
32464 tejbeer 1521
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
1522
                } else {
30441 tejbeer 1523
 
32464 tejbeer 1524
                    todayOverallCall = partnerCollectionRemarkRepository.selectByAuthIdAndIds(authRepository.selectByEmailOrMobile(email).getId(), remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
30416 tejbeer 1525
 
32464 tejbeer 1526
                }
30416 tejbeer 1527
 
32464 tejbeer 1528
            }
1529
            ChartLeadModel cm = new ChartLeadModel();
30416 tejbeer 1530
 
32464 tejbeer 1531
            if (!foundCollectionMap.isEmpty()) {
1532
                cm = this.getCollectionCount(foundCollectionMap.values().stream().collect(Collectors.toList()));
30416 tejbeer 1533
 
32464 tejbeer 1534
            }
1535
            model.addAttribute("chartPartnerHealth", gson.toJson(cm));
1536
            Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30416 tejbeer 1537
 
32464 tejbeer 1538
            List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
1539
            if (!partnerDailyInvestments.isEmpty()) {
1540
                partnerDailyInvestmentMap = partnerDailyInvestments.stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
1541
            }
30416 tejbeer 1542
 
32464 tejbeer 1543
            Map<LocalDate, Map<Integer, PartnerCollectionPlanModel>> pcpmMap = new TreeMap<>();
1544
            for (int i = 0; i <= 6; i++) {
30416 tejbeer 1545
 
32464 tejbeer 1546
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate.minusDays(i));
30416 tejbeer 1547
 
32464 tejbeer 1548
                pcpmMap.put(startDate.minusDays(i).toLocalDate(), collectionMap);
1549
            }
30416 tejbeer 1550
 
32464 tejbeer 1551
            Map<Integer, PartnerCollectionPlanModel> todayPcpmMap = pcpmMap.get(startDate.toLocalDate());
1552
            model.addAttribute("todayPcpmMap", todayPcpmMap);
30416 tejbeer 1553
 
32464 tejbeer 1554
            TotalTargetColectionModel totalTargetCollection = partnerCollectionService.getTotalTargetCollection(todayPcpmMap, startDate);
1555
            model.addAttribute("totalPartnerTargetCollection", totalTargetCollection.getTotalTarget());
30416 tejbeer 1556
 
32464 tejbeer 1557
            model.addAttribute("totalPartnerAchievement", totalTargetCollection.getTotalAchievement());
30416 tejbeer 1558
 
32464 tejbeer 1559
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1560
            Map<Integer, CustomRetailer> customRetailers = fofoIdList.stream().distinct().map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
1561
            List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30416 tejbeer 1562
 
32464 tejbeer 1563
            List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1564
            List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30416 tejbeer 1565
 
32464 tejbeer 1566
            salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30416 tejbeer 1567
 
32464 tejbeer 1568
            Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
34027 ranu 1569
            List<AuthUser> authUsers = new ArrayList<>();
1570
            if (!empHierarchy.isEmpty()) {
35395 amit 1571
                authUsers = authRepository.selectByIds(new ArrayList<>(empHierarchy));
34027 ranu 1572
            }
30416 tejbeer 1573
 
1574
 
32464 tejbeer 1575
            Map<Integer, AuthUser> authUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
30416 tejbeer 1576
 
32464 tejbeer 1577
            LOGGER.info("todayPcpmMap {}", todayPcpmMap);
30416 tejbeer 1578
 
32464 tejbeer 1579
            model.addAttribute("authUsers", authUsers);
1580
            model.addAttribute("authUserMap", authUserMap);
1581
            model.addAttribute("partnerCollectionPlanMap", pcpmMap);
1582
            model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
1583
            model.addAttribute("customRetailers", customRetailers);
1584
            model.addAttribute("rankColorMap", ProfitMandiConstants.Rank_Color_Map);
1585
            model.addAttribute("todayOverallCall", todayOverallCall);
30522 tejbeer 1586
 
32464 tejbeer 1587
        }
1588
        return "partner-health";
30522 tejbeer 1589
 
32464 tejbeer 1590
    }
30522 tejbeer 1591
 
32464 tejbeer 1592
    public ChartLeadModel getCollectionCount(List<PartnerCollectionPlanModel> pcpm) throws ProfitMandiBusinessException {
30522 tejbeer 1593
 
32464 tejbeer 1594
        Map<Integer, Long> rankCount = pcpm.stream().collect(Collectors.groupingBy(x -> x.getRank(), Collectors.mapping(PartnerCollectionPlanModel::getRank, Collectors.counting())));
30522 tejbeer 1595
 
32464 tejbeer 1596
        ChartLeadModel cm = new ChartLeadModel();
30522 tejbeer 1597
 
32464 tejbeer 1598
        List<String> labels = new ArrayList<>();
1599
        labels.add("Plan for Today");
1600
        labels.add("Carry Forward");
1601
        labels.add("Untouched");
1602
        labels.add("Plan for Future");
1603
        labels.add("Normal");
30522 tejbeer 1604
 
32464 tejbeer 1605
        List<String> backgroundColor = new ArrayList<>();
1606
        List<Long> values = new ArrayList<>();
30522 tejbeer 1607
 
32464 tejbeer 1608
        for (String label : labels) {
30522 tejbeer 1609
 
32464 tejbeer 1610
            if (label.equals("Plan for Today")) {
1611
                backgroundColor.add("#007bff");
1612
                values.add(rankCount.get(1));
1613
            }
1614
            if (label.equals("Carry Forward")) {
1615
                backgroundColor.add("#ffc107");
1616
                values.add(rankCount.get(2));
1617
            }
1618
            if (label.equals("Untouched")) {
1619
                backgroundColor.add("#dc3545");
1620
                values.add(rankCount.get(3));
1621
            }
1622
            if (label.equals("Plan for Future")) {
1623
                backgroundColor.add("#6c757d");
1624
                values.add(rankCount.get(4));
1625
            }
1626
            if (label.equals("Normal")) {
1627
                backgroundColor.add("White");
1628
                values.add(rankCount.get(5));
1629
            }
30522 tejbeer 1630
 
32464 tejbeer 1631
        }
30522 tejbeer 1632
 
32464 tejbeer 1633
        LOGGER.info("backgroundColor" + backgroundColor);
1634
        LOGGER.info("labelsChartLead" + labels);
1635
        LeadStatusData data = new LeadStatusData();
1636
        data.setData(values);
1637
        data.setBackgroundColor(backgroundColor);
1638
        data.setLabel("DataSet 1");
30522 tejbeer 1639
 
32464 tejbeer 1640
        PieLables label = new PieLables();
1641
        label.setFontColor("black");
1642
        label.setFontSize(15);
30522 tejbeer 1643
 
32464 tejbeer 1644
        Legend legend = new Legend();
1645
        legend.setLabels(label);
1646
        legend.setPosition("left");
30522 tejbeer 1647
 
32464 tejbeer 1648
        List<LeadStatusData> dataList = new ArrayList<>();
1649
        dataList.add(data);
30522 tejbeer 1650
 
32464 tejbeer 1651
        DataLeadModel datasets = new DataLeadModel();
1652
        datasets.setDatasets(dataList);
1653
        datasets.setLabels(labels);
30522 tejbeer 1654
 
32464 tejbeer 1655
        OptionModel om = new OptionModel();
1656
        om.setLegend(legend);
30522 tejbeer 1657
 
32464 tejbeer 1658
        cm.setType("pie");
1659
        cm.setData(datasets);
1660
        cm.setOptions(om);
30522 tejbeer 1661
 
32464 tejbeer 1662
        return cm;
1663
    }
30522 tejbeer 1664
 
32464 tejbeer 1665
    @RequestMapping(value = "/franchiseVisit", method = RequestMethod.GET)
1666
    public String franchiseVisit(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1667
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30522 tejbeer 1668
 
32464 tejbeer 1669
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30522 tejbeer 1670
 
32464 tejbeer 1671
        List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1672
        List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30522 tejbeer 1673
 
32464 tejbeer 1674
        salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30522 tejbeer 1675
 
32464 tejbeer 1676
        List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30522 tejbeer 1677
 
32464 tejbeer 1678
        Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
30522 tejbeer 1679
 
35395 amit 1680
        List<AuthUser> authUsers = authRepository.selectByIds(new ArrayList<>(empHierarchy));
30522 tejbeer 1681
 
32464 tejbeer 1682
        Map<Integer, String> monthValueMap = new HashMap<>();
1683
        for (int i = 0; i <= 5; i++) {
1684
            LocalDateTime startOfMonth = LocalDateTime.now().withDayOfMonth(1).minusMonths(i);
1685
            monthValueMap.put(i, startOfMonth.format(DateTimeFormatter.ofPattern("MMM''uu")));
1686
        }
30522 tejbeer 1687
 
32464 tejbeer 1688
        model.addAttribute("authUsers", authUsers);
1689
        model.addAttribute("monthValueMap", monthValueMap);
30522 tejbeer 1690
 
32464 tejbeer 1691
        return "franchise-visit";
30522 tejbeer 1692
 
32464 tejbeer 1693
    }
30522 tejbeer 1694
 
32464 tejbeer 1695
    @RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET)
1696
    public String getFranchiseVisit(HttpServletRequest request, @RequestParam(name = "authId", required = false) int authId, int yearMonth, Model model) throws Exception {
30522 tejbeer 1697
 
32464 tejbeer 1698
        LocalDateTime startDate = LocalDate.now().minusMonths(8).withDayOfMonth(1).atStartOfDay();
1699
        LocalDateTime endDate = startDate.plusMonths(1).withDayOfMonth(1).toLocalDate().atStartOfDay();
30522 tejbeer 1700
 
32464 tejbeer 1701
        DateRangeModel drm = DateRangeModel.of(startDate, endDate);
30522 tejbeer 1702
 
32464 tejbeer 1703
        List<FranchiseeVisit> visits = franchiseeVisitRepository.selectByAuthUserAndDateRange(drm, authId);
30522 tejbeer 1704
 
32464 tejbeer 1705
        if (!visits.isEmpty()) {
30522 tejbeer 1706
 
32464 tejbeer 1707
            Map<Integer, List<FranchiseeVisit>> franchiseeVisitMap = visits.stream().collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().getDayOfMonth()));
30522 tejbeer 1708
 
32464 tejbeer 1709
            model.addAttribute("franchiseeVisitMap", franchiseeVisitMap);
30522 tejbeer 1710
 
32464 tejbeer 1711
        }
30771 amit.gupta 1712
 
32464 tejbeer 1713
        model.addAttribute("visits", visits);
1714
        model.addAttribute("monthLength", startDate.toLocalDate().lengthOfMonth());
30771 amit.gupta 1715
 
32464 tejbeer 1716
        // Calender
30771 amit.gupta 1717
 
32464 tejbeer 1718
        int Year = startDate.getYear(); // year
1719
        int startDayOfMonth = 5;
1720
        int spaces = startDayOfMonth;
30771 amit.gupta 1721
 
32464 tejbeer 1722
        int month = startDate.getMonthValue();
30771 amit.gupta 1723
 
32464 tejbeer 1724
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
30771 amit.gupta 1725
 
32464 tejbeer 1726
        LOGGER.info("visits {} ", visits);
30771 amit.gupta 1727
 
32464 tejbeer 1728
        if ((((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) && month == 2) {
1729
            days[month] = 29;
1730
        }
30771 amit.gupta 1731
 
32464 tejbeer 1732
        spaces = (days[month - 1] + spaces) % 7;
30771 amit.gupta 1733
 
32464 tejbeer 1734
        model.addAttribute("month", month);
1735
        model.addAttribute("spaces", spaces);
1736
        model.addAttribute("days", days);
30771 amit.gupta 1737
 
32464 tejbeer 1738
        return "franchise-visit-container";
30771 amit.gupta 1739
 
32464 tejbeer 1740
    }
31249 tejbeer 1741
 
32464 tejbeer 1742
    @RequestMapping(value = "/getFranchiseeActivity", method = RequestMethod.GET)
1743
    public String getFranchiseeActivity(HttpServletRequest request, int visitId, Model model) throws Exception {
31249 tejbeer 1744
 
32464 tejbeer 1745
        List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(visitId);
31249 tejbeer 1746
 
32464 tejbeer 1747
        FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(visitId);
31249 tejbeer 1748
 
32464 tejbeer 1749
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1750
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
31249 tejbeer 1751
 
32464 tejbeer 1752
        model.addAttribute("franchiseeVisit", franchiseeVisit);
1753
        model.addAttribute("franchiseeActivity", franchiseeActivities.get(0));
31249 tejbeer 1754
 
32464 tejbeer 1755
        return "franchie-visit-detail";
31249 tejbeer 1756
 
32464 tejbeer 1757
    }
31249 tejbeer 1758
 
32464 tejbeer 1759
    @RequestMapping(value = "/indent/today_target", method = RequestMethod.GET)
1760
    public String todayTarget(HttpServletRequest request, Model model) throws Exception {
1761
        List<RBMPerformanceSummaryModel> summaryModels = new ArrayList<>();
1762
        List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().filter(x -> Arrays.asList(EscalationType.L1, EscalationType.L2).contains(x.getEscalationType())).map(x -> x.getAuthUserId()).distinct().collect(Collectors.toList());
1763
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1764
        List<TeamCommitmentModel> teamCommitmentModels = partnerCollectionPlanRepository.selectTeamCommitmentByDate(LocalDate.now());
1765
        Map<Integer, Double> rbmSecondaryTargetMap = teamCommitmentModels.stream().filter(x -> rbmPositionsAuthIds.contains(x.getAuthId())).collect(Collectors.groupingBy(x -> x.getAuthId(), Collectors.summingDouble(x -> x.getTotalTarget() == null ? 0 : x.getTotalTarget())));
1766
        Map<Integer, Double> rbmSecondaryMap = teamCommitmentModels.stream().filter(x -> rbmPositionsAuthIds.contains(x.getAuthId())).collect(Collectors.groupingBy(x -> x.getAuthId(), Collectors.summingDouble(x -> x.getTotalAchievement() == null ? 0 : x.getTotalAchievement())));
1767
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1768
        for (int rbmAuthId : rbmPositionsAuthIds) {
1769
            RBMPerformanceSummaryModel rbmPerformanceSummaryModel = new RBMPerformanceSummaryModel();
1770
            rbmPerformanceSummaryModel.setAuthId(rbmAuthId);
1771
            AuthUser authUser = authRepository.selectById(rbmAuthId);
1772
            rbmPerformanceSummaryModel.setAuthName(authUser.getFullName());
33844 ranu 1773
            List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(authUser.getEmailId()));
31249 tejbeer 1774
 
32464 tejbeer 1775
            if (fofoIds.size() > 0) {
1776
                fofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
31249 tejbeer 1777
 
32464 tejbeer 1778
                /*
1779
                 * Map<Integer, PartnerCollectionPlanModel> foundCollectionMap =
1780
                 * partnerCollectionService .getCollectionMap(fofoIds, startDate);
1781
                 */
31249 tejbeer 1782
 
33844 ranu 1783
                List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIds);
1784
 
32464 tejbeer 1785
                LOGGER.info("remarkIds {}", remarkIds);
31249 tejbeer 1786
 
32464 tejbeer 1787
                long todayOverallCall = 0;
1788
                if (!remarkIds.isEmpty()) {
1789
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
31249 tejbeer 1790
 
32464 tejbeer 1791
                }
31249 tejbeer 1792
 
32464 tejbeer 1793
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIds, startDate);
31249 tejbeer 1794
 
32464 tejbeer 1795
                ChartLeadModel cm = this.getCollectionCount(collectionMap.values().stream().collect(Collectors.toList()));
31249 tejbeer 1796
 
32464 tejbeer 1797
                long collectionTarget = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null).collect(Collectors.summingLong(x -> x.getTargetPlan()));
1798
                long collection = collectionMap.values().stream().filter(
1799
                        x -> x.getTargetPlan() != null && x.getTargetPlan() != 0 && x.getAchievementPlan() != null).collect(Collectors.summingLong(x -> x.getAchievementPlan()));
1800
                rbmPerformanceSummaryModel.setChartLeadModel(cm);
1801
                rbmPerformanceSummaryModel.setPartnersCommunicated(todayOverallCall);
1802
                rbmPerformanceSummaryModel.setCollectionTarget(collectionTarget);
1803
                rbmPerformanceSummaryModel.setCollection(collection);
1804
                rbmPerformanceSummaryModel.setSecondaryTarget(rbmSecondaryTargetMap.get(rbmAuthId) == null ? 0 : rbmSecondaryTargetMap.get(rbmAuthId).floatValue());
1805
                rbmPerformanceSummaryModel.setSecondary(
1806
                        rbmSecondaryMap.get(rbmAuthId) == null ? 0 : rbmSecondaryMap.get(rbmAuthId).floatValue());
1807
                summaryModels.add(rbmPerformanceSummaryModel);
1808
                // cm.getData().getDatasets().get(0).getData().;
1809
                // cm.getData().getDatasets().get(0).getBackgroundColor();
1810
                // cm.getData().getLabels()
31249 tejbeer 1811
 
32464 tejbeer 1812
            }
1813
        }
1814
        model.addAttribute("summaryModels", summaryModels);
1815
        return "today_target";
1816
    }
31249 tejbeer 1817
 
32464 tejbeer 1818
    @RequestMapping(value = "/visitPlan", method = RequestMethod.GET)
1819
    public String visitPlan(HttpServletRequest request, Model model) throws Exception {
31249 tejbeer 1820
 
32464 tejbeer 1821
        return "visit-request-plan";
1822
    }
31249 tejbeer 1823
 
32464 tejbeer 1824
    @RequestMapping(value = "/visit/getVisitPlan", method = RequestMethod.GET)
1825
    public String getVisitPlan(HttpServletRequest request, @RequestParam LocalDate date, Model model) throws Exception {
1826
        List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(date);
31249 tejbeer 1827
 
32464 tejbeer 1828
        List<Integer> leadIds = visitRequests.stream().filter(x -> x.getVisitType().equals("lead")).map(x -> x.getVisitId()).collect(Collectors.toList());
1829
        Map<Integer, Lead> leadMap = new HashMap<>();
1830
        if (!leadIds.isEmpty()) {
1831
            List<Lead> leads = leadRepository.selectAllByIds(leadIds);
31249 tejbeer 1832
 
32464 tejbeer 1833
            for (Lead lead : leads) {
1834
                List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
1835
                lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1836
                lead.setLeadActivity(leadActivities.get(0));
31249 tejbeer 1837
 
32464 tejbeer 1838
                leadMap.put(lead.getId(), lead);
1839
            }
31249 tejbeer 1840
 
32464 tejbeer 1841
        }
1842
        List<Integer> franchiseeIds = visitRequests.stream().filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId()).collect(Collectors.toList());
1843
        Map<Integer, FranchiseeVisit> franchiseeVisitsMap = new HashMap<>();
1844
        if (!franchiseeIds.isEmpty()) {
1845
            List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1846
            LOGGER.info("franchiseeVisits {}", franchiseeVisits);
31249 tejbeer 1847
 
32464 tejbeer 1848
            for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1849
                List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(franchiseeVisit.getId());
1850
                LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1851
 
1852
                franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1853
                franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
1854
 
1855
                franchiseeVisitsMap.put(franchiseeVisit.getId(), franchiseeVisit);
1856
            }
1857
 
1858
        }
1859
 
1860
        Map<Integer, List<VisitRequest>> visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy()));
1861
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
1862
        List<UserVisitModel> userVisits = new ArrayList<>();
1863
 
1864
        for (AuthUser authUser : authUsers) {
1865
 
1866
            List<VisitRequest> authVisitRequests = visitRequestMap.get(authUser.getId());
1867
 
1868
            if (authVisitRequests != null) {
1869
                UserVisitModel userVisitModel = new UserVisitModel();
1870
                userVisitModel.setAuthUser(authUser.getFullName());
1871
                List<VisitDescriptionModel> visitDescriptions = new ArrayList<>();
1872
 
1873
                for (VisitRequest authVisitRequest : authVisitRequests) {
1874
                    VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1875
                    visitDescriptionModel.setVisitId(authVisitRequest.getVisitId());
1876
 
1877
                    if (authVisitRequest.getVisitType().equals("lead")) {
1878
                        Lead lead = leadMap.get(authVisitRequest.getVisitId());
1879
 
1880
                        visitDescriptionModel.setVisitName(lead.getFirstName());
1881
                        visitDescriptionModel.setCity(lead.getCity());
1882
                        visitDescriptionModel.setState(lead.getState());
1883
                        visitDescriptionModel.setScheduleTime(lead.getScheduledTimestamp());
1884
                        visitDescriptionModel.setRemarks(lead.getLeadActivity().getRemark());
1885
 
1886
                    } else {
1887
                        FranchiseeVisit franchiseeVisit = franchiseeVisitsMap.get(authVisitRequest.getVisitId());
1888
                        CustomRetailer customRetailer = retailerService.getFofoRetailer(franchiseeVisit.getFofoId());
1889
 
1890
                        visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
1891
                        visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1892
                        visitDescriptionModel.setState(customRetailer.getAddress().getState());
1893
                        visitDescriptionModel.setScheduleTime(franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1894
                        visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1895
 
1896
                    }
1897
 
1898
                    if (authVisitRequest.getActionedBy() != 0) {
1899
                        AuthUser au = authRepository.selectById(authVisitRequest.getActionedBy());
1900
 
1901
                        visitDescriptionModel.setActionBy(au.getFullName());
1902
                    }
1903
                    visitDescriptionModel.setStatus(authVisitRequest.getStatus());
1904
                    visitDescriptionModel.setVisitType(authVisitRequest.getVisitType());
1905
                    visitDescriptions.add(visitDescriptionModel);
1906
                }
1907
 
1908
                userVisitModel.setVisitDescriptions(visitDescriptions);
1909
                userVisits.add(userVisitModel);
1910
            }
1911
 
1912
        }
1913
 
1914
        model.addAttribute("userVisits", userVisits);
1915
 
1916
        return "visit-request-plan";
1917
    }
25979 tejbeer 1918
}