Subversion Repositories SmartDukaan

Rev

Rev 36642 | Rev 36741 | 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());
32471 tejbeer 827
        if (createRefferalRequest.getColorCheck() == true) {
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
 
34113 tejus.loha 907
        if (leadDetail == null && !createLeadActivityRequest.getStatus().equals(LeadStatus.notInterested) && leadAuthUser.isActive()) {
29426 manish 908
 
32464 tejbeer 909
            throw new ProfitMandiBusinessException("LeadDetail", "", "Please fill lead detail");
910
        }
29445 manish 911
 
36642 ranu 912
        // Validate approved geolocation for physical visit
913
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp
914
                && createLeadActivityRequest.getCommunicationType() != null
915
                && createLeadActivityRequest.getCommunicationType().equals(CommunicationType.VISIT)) {
916
            LeadLiveLocation approvedGeo = leadLiveLocationRepository.selectApprovedByLeadId(createLeadActivityRequest.getId());
917
            if (approvedGeo == null) {
918
                throw new ProfitMandiBusinessException("Lead", "", "Missing Valid Live Geo Location for the lead");
919
            }
920
        }
921
 
32464 tejbeer 922
        LeadActivity leadActivity = new LeadActivity();
923
        leadActivity.setLeadId(createLeadActivityRequest.getId());
924
        leadActivity.setRemark(createLeadActivityRequest.getRemark());
29598 tejbeer 925
 
32464 tejbeer 926
        LOGGER.info("createRefferalRequest" + createLeadActivityRequest);
29598 tejbeer 927
 
32464 tejbeer 928
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
929
            leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
930
            leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
931
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
36644 ranu 932
                // Parse beat selection (format: "date|beatName|beatId")
933
                String beatSelection = createLeadActivityRequest.getBeatSelection();
934
                int beatId = 0;
935
                LocalDate beatDate = createLeadActivityRequest.getScheldule() != null
936
                        ? createLeadActivityRequest.getScheldule().toLocalDate() : LocalDate.now();
937
                String beatName = "Beat";
36642 ranu 938
 
939
                if (beatSelection != null && beatSelection.contains("|")) {
940
                    String[] parts = beatSelection.split("\\|", 3);
36644 ranu 941
                    beatDate = LocalDate.parse(parts[0]);
942
                    beatName = parts.length > 1 ? parts[1] : "Beat";
36642 ranu 943
                    if (parts.length > 2) {
36644 ranu 944
                        try {
945
                            beatId = Integer.parseInt(parts[2]);
946
                        } catch (NumberFormatException ignored) {
947
                        }
36642 ranu 948
                    }
949
                }
950
 
36644 ranu 951
                // Find optimal insert position using lead geolocation
952
                int insertAt = 0;
953
                LeadLiveLocation leadGeo = leadLiveLocationRepository.selectApprovedByLeadId(createLeadActivityRequest.getId());
954
                List<BeatRoute> existingStops = beatId > 0
955
                        ? beatRouteRepository.selectByBeatId(beatId).stream()
956
                        .sorted(Comparator.comparingInt(BeatRoute::getSequenceOrder))
957
                        .collect(Collectors.toList())
958
                        : new ArrayList<>();
36642 ranu 959
 
36644 ranu 960
                insertAt = existingStops.size(); // default: append at end
961
 
962
                if (!existingStops.isEmpty() && leadGeo != null) {
963
                    // Use nearest neighbor to find optimal position
964
                    // (simplified — append at end for now, full geocoding done in LeadGeoLocationController)
965
                    insertAt = existingStops.size();
966
                }
967
 
968
                // Shift existing stops
969
                for (BeatRoute stop : existingStops) {
970
                    if (stop.getSequenceOrder() >= insertAt) {
971
                        stop.setSequenceOrder(stop.getSequenceOrder() + 1);
972
                    }
973
                }
974
 
975
                // Create lead_route entry (directly APPROVED)
976
                LeadRoute leadRoute = new LeadRoute();
977
                leadRoute.setBeatId(beatId);
978
                leadRoute.setLeadId(createLeadActivityRequest.getId());
979
                leadRoute.setScheduleDate(beatDate);
980
                leadRoute.setSequenceOrder(insertAt);
981
                leadRoute.setStatus("APPROVED");
982
                leadRoute.setRequestedBy(authUser.getId());
983
                leadRoute.setApprovedBy(authUser.getId());
984
                leadRoute.setApprovedTimestamp(LocalDateTime.now());
985
                leadRoute.setCreatedTimestamp(LocalDateTime.now());
986
                leadRoute.setUpdatedTimestamp(LocalDateTime.now());
987
 
988
                // Set nearest store
989
                if (!existingStops.isEmpty()) {
990
                    leadRoute.setNearestStoreId(existingStops.get(Math.min(insertAt, existingStops.size() - 1)).getFofoId());
991
                }
992
                leadRouteRepository.persist(leadRoute);
993
 
994
                // Create visit request
995
                visitRequestRepository.createVisitRequest(
996
                        createLeadActivityRequest.getId(), "lead",
997
                        createLeadActivityRequest.getAssignTo(),
998
                        beatDate.atTime(10, 0));
999
 
36642 ranu 1000
                // Log activity
36644 ranu 1001
                LeadActivity visitActivity = new LeadActivity();
1002
                visitActivity.setLeadId(createLeadActivityRequest.getId());
1003
                visitActivity.setRemark("Lead scheduled for visit on beat: " + beatName
1004
                        + " (" + beatDate + ") at stop #" + (insertAt + 1));
1005
                visitActivity.setAuthId(authUser.getId());
1006
                visitActivity.setCreatedTimestamp(LocalDateTime.now());
1007
                leadActivityRepository.persist(visitActivity);
32464 tejbeer 1008
            }
1009
        } else {
1010
            leadActivity.setSchelduleTimestamp(null);
1011
        }
1012
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
1013
        leadActivity.setAuthId(authUser.getId());
1014
        leadActivityRepository.persist(leadActivity);
1015
        lead.setAssignTo(createLeadActivityRequest.getAssignTo());
1016
        lead.setStatus(createLeadActivityRequest.getStatus());
35548 aman 1017
        lead.setState(createLeadActivityRequest.getState());
1018
        lead.setCity(createLeadActivityRequest.getCity());
35769 amit 1019
        if (createLeadActivityRequest.getSource() != null && !createLeadActivityRequest.getSource().isEmpty()) {
1020
            lead.setSource(createLeadActivityRequest.getSource());
1021
        }
32471 tejbeer 1022
        if (createLeadActivityRequest.getColorCheck() == true) {
1023
            lead.setColor("Green");
1024
        } else {
1025
            lead.setColor("Yellow");
1026
        }
32464 tejbeer 1027
        lead.setNotinterestedReason(createLeadActivityRequest.getReason());
1028
        lead.setUpdatedTimestamp(LocalDateTime.now());
29426 manish 1029
 
32464 tejbeer 1030
        int authId = 0;
34127 tejus.loha 1031
        authId = lead.getAssignTo();
1032
        Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
29426 manish 1033
 
34127 tejus.loha 1034
        List<LeadActivity> leadActivitys = leadActivityRepository.selectBYLeadId(lead.getId());
29426 manish 1035
 
34127 tejus.loha 1036
        if (!leadActivitys.isEmpty()) {
1037
            leadActivityMap.put(lead.getId(), leadActivitys.get(0));
1038
        }
29426 manish 1039
 
34127 tejus.loha 1040
        Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
1041
        AuthUser AuthUser = authRepository.selectById(authId);
29426 manish 1042
 
34127 tejus.loha 1043
        authIdAndAuthUserMap.put(AuthUser.getId(), AuthUser);
29426 manish 1044
 
34127 tejus.loha 1045
        model.addAttribute("leadActivityMap", leadActivityMap);
1046
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
29426 manish 1047
 
30185 tejbeer 1048
 
33223 amit.gupta 1049
        model.addAttribute("lead", lead);
30185 tejbeer 1050
 
32464 tejbeer 1051
        return "edit-lead";
30185 tejbeer 1052
 
32464 tejbeer 1053
    }
31370 tejbeer 1054
 
32464 tejbeer 1055
    @RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
1056
    public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
1057
        List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList());
31370 tejbeer 1058
 
32464 tejbeer 1059
        List<List<?>> rows = new ArrayList<>();
31496 tejbeer 1060
 
32464 tejbeer 1061
        List<LeadSource> lss = LeadSource.enumValues;
31370 tejbeer 1062
 
32464 tejbeer 1063
        for (LeadSource ls : lss) {
1064
            rows.add(Arrays.asList("-", "-", "-", "-", "-", "-", "-", ls));
31478 tejbeer 1065
 
32464 tejbeer 1066
        }
1067
        for (String stateName : stateNames) {
1068
            rows.add(Arrays.asList("-", "-", "-", "-", stateName, "-", "-", "-"));
31478 tejbeer 1069
 
32464 tejbeer 1070
        }
31478 tejbeer 1071
 
32464 tejbeer 1072
        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 1073
 
32464 tejbeer 1074
        final HttpHeaders headers = new HttpHeaders();
1075
        headers.set("Content-Type", "text/csv");
1076
        headers.set("Content-disposition", "inline; filename=leads.format.csv");
1077
        headers.setContentLength(baos.toByteArray().length);
31478 tejbeer 1078
 
32464 tejbeer 1079
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
1080
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
1081
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
31478 tejbeer 1082
 
32464 tejbeer 1083
    }
31478 tejbeer 1084
 
32464 tejbeer 1085
    @RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
1086
    public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
31478 tejbeer 1087
 
32464 tejbeer 1088
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1089
        String email = loginDetails.getEmailId();
31478 tejbeer 1090
 
32464 tejbeer 1091
        AuthUser createdBy = authRepository.selectByEmailOrMobile(email);
31478 tejbeer 1092
 
32464 tejbeer 1093
        LOGGER.info("file" + file.toString());
31478 tejbeer 1094
 
32464 tejbeer 1095
        String fileName = file.getName();
31370 tejbeer 1096
 
32464 tejbeer 1097
        String fileNames = file.getOriginalFilename();
31370 tejbeer 1098
 
32464 tejbeer 1099
        LOGGER.info("fileName" + fileName);
1100
        LOGGER.info("fileNames" + fileNames);
31370 tejbeer 1101
 
32464 tejbeer 1102
        List<CSVRecord> records = FileUtil.readFile(file);
31370 tejbeer 1103
 
32464 tejbeer 1104
        for (CSVRecord record : records) {
31370 tejbeer 1105
 
32464 tejbeer 1106
            Lead lead = new Lead();
1107
            lead.setFirstName(record.get(0));
1108
            lead.setLastName(record.get(1));
1109
            lead.setAddress(record.get(2));
1110
            lead.setCity(record.get(3));
1111
            lead.setState(record.get(4));
1112
            lead.setLeadMobile(record.get(5));
1113
            LOGGER.info("record" + record.get(6));
31370 tejbeer 1114
 
32464 tejbeer 1115
            AuthUser assignTo = authRepository.selectByEmailOrMobile(record.get(6));
31370 tejbeer 1116
 
32464 tejbeer 1117
            if (assignTo == null) {
1118
                throw new ProfitMandiBusinessException("Assign To ", record.get(6), "email id not exist");
1119
            }
31370 tejbeer 1120
 
32464 tejbeer 1121
            lead.setAssignTo(assignTo.getId());
1122
            lead.setSource(record.get(7));
31370 tejbeer 1123
 
32464 tejbeer 1124
            lead.setCreatedTimestamp(LocalDateTime.now());
31370 tejbeer 1125
 
32464 tejbeer 1126
            lead.setUpdatedTimestamp(LocalDateTime.now());
1127
            lead.setStatus(LeadStatus.pending);
1128
            lead.setColor("yellow");
1129
            // change
1130
            lead.setCreatedBy(createdBy.getFullName());
1131
            lead.setAuthId(createdBy.getId());
31370 tejbeer 1132
 
32464 tejbeer 1133
            leadRepository.persist(lead);
31370 tejbeer 1134
 
32464 tejbeer 1135
            LeadActivity leadActivity = new LeadActivity();
1136
            leadActivity.setLeadId(lead.getId());
1137
            leadActivity.setRemark("New Lead");
1138
            leadActivity.setSchelduleTimestamp(null);
31370 tejbeer 1139
 
32464 tejbeer 1140
            leadActivity.setCreatedTimestamp(LocalDateTime.now());
1141
            leadActivityRepository.persist(leadActivity);
1142
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 1143
 
32464 tejbeer 1144
        }
31370 tejbeer 1145
 
32464 tejbeer 1146
        model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
31370 tejbeer 1147
 
32464 tejbeer 1148
        return "response";
31370 tejbeer 1149
 
32464 tejbeer 1150
    }
31370 tejbeer 1151
 
32464 tejbeer 1152
    @RequestMapping(value = "/teamCommitment", method = RequestMethod.GET)
1153
    public String teamCommitments(HttpServletRequest request, Model model) throws Exception {
31370 tejbeer 1154
 
32464 tejbeer 1155
        return "team-commitment";
31370 tejbeer 1156
 
32464 tejbeer 1157
    }
31370 tejbeer 1158
 
32464 tejbeer 1159
    @RequestMapping(value = "/leadDetail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
1160
    public String leadDetail(HttpServletRequest request, @RequestBody LeadDetailModel leadDetailModel, Model model) throws Exception {
31370 tejbeer 1161
 
32464 tejbeer 1162
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1163
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
31370 tejbeer 1164
 
32471 tejbeer 1165
        leadRepository.persistLeadDetail(leadDetailModel, authUser);
32464 tejbeer 1166
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 1167
 
32464 tejbeer 1168
        return "response";
31370 tejbeer 1169
 
32464 tejbeer 1170
    }
31370 tejbeer 1171
 
32464 tejbeer 1172
    @RequestMapping(value = "/getLeadDetail", method = RequestMethod.GET)
1173
    public String getLeadDetail(HttpServletRequest request, Model model) throws Exception {
1174
        List<Integer> followUpleadIds = leadRepository.selectAllByStatus(LeadStatus.followUp).stream().map(x -> x.getId()).collect(Collectors.toList());
1175
        List<LeadDetail> leadDetails = leadDetailRepository.selectByLeadIds(followUpleadIds);
31370 tejbeer 1176
 
32464 tejbeer 1177
        List<DBObject> mobileBrands = mongoClient.getAllBrandsToDisplay(3);
31370 tejbeer 1178
 
32464 tejbeer 1179
        List<String> brands = mobileBrands.stream().map(x -> (String) x.get("name")).collect(Collectors.toList());
31370 tejbeer 1180
 
32464 tejbeer 1181
        model.addAttribute("brands", brands);
1182
        if (!leadDetails.isEmpty()) {
31370 tejbeer 1183
 
32464 tejbeer 1184
            List<Integer> detailsIds = leadDetails.stream().map(x -> x.getId()).collect(Collectors.toList());
31370 tejbeer 1185
 
32464 tejbeer 1186
            List<Integer> leadIds = leadDetails.stream().map(x -> x.getLeadId()).collect(Collectors.toList());
31370 tejbeer 1187
 
32464 tejbeer 1188
            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 1189
 
32464 tejbeer 1190
            Map<Integer, Optional<LeadActivity>> leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream().collect(Collectors.groupingBy(x -> x.getLeadId(), Collectors.maxBy(Comparator.comparing(LeadActivity::getId))));
31370 tejbeer 1191
 
32464 tejbeer 1192
            model.addAttribute("leadActivityMap", leadActivityMap);
30185 tejbeer 1193
 
32464 tejbeer 1194
            List<LeadBrand> leadBrands = leadBrandRepository.selectByLeadDetailId(detailsIds);
30185 tejbeer 1195
 
32464 tejbeer 1196
            LOGGER.info("leadBrands {}" + leadBrands);
30185 tejbeer 1197
 
32464 tejbeer 1198
            Map<Integer, Map<String, Integer>> leadDetailBrandValue = new HashMap<>();
30416 tejbeer 1199
 
32464 tejbeer 1200
            Map<Integer, List<LeadBrand>> leadDetail = leadBrands.stream().collect(Collectors.groupingBy(x -> x.getLeadDetailId(), Collectors.toList()));
30416 tejbeer 1201
 
32464 tejbeer 1202
            for (Entry<Integer, List<LeadBrand>> leadDetailEntry : leadDetail.entrySet()) {
30416 tejbeer 1203
 
32464 tejbeer 1204
                Map<String, Integer> brandValue = new HashMap<>();
30416 tejbeer 1205
 
32464 tejbeer 1206
                for (LeadBrand leadBrand : leadDetailEntry.getValue()) {
1207
                    brandValue.put(leadBrand.getBrand(), leadBrand.getValue());
30416 tejbeer 1208
 
32464 tejbeer 1209
                }
1210
                leadDetailBrandValue.put(leadDetailEntry.getKey(), brandValue);
1211
            }
30416 tejbeer 1212
 
32464 tejbeer 1213
            LOGGER.info("leadDetailBrandValue {}" + leadDetailBrandValue);
30416 tejbeer 1214
 
32464 tejbeer 1215
            model.addAttribute("leadDetailBrandValue", leadDetailBrandValue);
30416 tejbeer 1216
 
32464 tejbeer 1217
            model.addAttribute("leadMap", leadMap);
1218
        }
30434 tejbeer 1219
 
32464 tejbeer 1220
        model.addAttribute("leadDetails", leadDetails);
30434 tejbeer 1221
 
32464 tejbeer 1222
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1223
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
30434 tejbeer 1224
 
32464 tejbeer 1225
        return "lead-detail";
30458 tejbeer 1226
 
32464 tejbeer 1227
    }
30458 tejbeer 1228
 
32464 tejbeer 1229
    @RequestMapping(value = "/getLeadDetailByLeadId", method = RequestMethod.GET)
35548 aman 1230
    public ResponseEntity<?> getLeadDetailByLeadId(@RequestParam int leadId) {
30458 tejbeer 1231
 
35548 aman 1232
        Lead lead = leadRepository.selectById(leadId);
32464 tejbeer 1233
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(leadId);
35548 aman 1234
        Map<String, Object> response = new HashMap<>();
1235
        response.put("city", lead.getCity());
1236
        response.put("state", lead.getState());
1237
        if (leadDetail != null) {
1238
            response.put("outletName", leadDetail.getOutletName());
1239
            response.put("counterSize", leadDetail.getCounterSize());
1240
        }
1241
        return responseSender.ok(response);
1242
    }
30458 tejbeer 1243
 
35548 aman 1244
    @PostMapping("/upload-assign-id")
1245
    public ResponseEntity<?> uploadAssignIdCsv(
1246
            @RequestParam("file") MultipartFile file)
1247
            throws Exception {
1248
 
1249
        try (Reader reader = new InputStreamReader(file.getInputStream());
1250
             CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT)) {
1251
 
1252
            List<CSVRecord> records = parser.getRecords();
1253
 
1254
            if (records.size() < 2) {
1255
                throw new ProfitMandiBusinessException(
1256
                        "Uploaded File", "", "No records Found");
1257
            }
1258
 
1259
            records.remove(0);
1260
 
1261
            for (CSVRecord record : records) {
1262
 
1263
                int leadId = Integer.parseInt(record.get(0));
1264
                int assignId = Integer.parseInt(record.get(1));
1265
 
1266
                Lead lead = leadRepository.selectById(leadId);
1267
 
1268
                if (lead == null) {
1269
                    LOGGER.warn("Lead not found for id {}", leadId);
1270
                    continue;
1271
                }
1272
 
1273
                lead.setAssignTo(assignId);
1274
            }
1275
        }
1276
 
1277
        return responseSender.ok("CSV processed successfully");
32464 tejbeer 1278
    }
30434 tejbeer 1279
 
35548 aman 1280
 
1281
 
32464 tejbeer 1282
    @RequestMapping(value = "/getTeamCommitment", method = RequestMethod.GET)
1283
    public String getTeamCommitments(HttpServletRequest request, @RequestParam LocalDateTime date, Model model) throws Exception {
30781 tejbeer 1284
 
32464 tejbeer 1285
        List<TeamCommitmentModel> commitments = partnerCollectionPlanRepository.selectTeamCommitmentByDate(date.toLocalDate());
30416 tejbeer 1286
 
32464 tejbeer 1287
        model.addAttribute("commitments", commitments);
1288
        return "team-commitment-table";
30416 tejbeer 1289
 
32464 tejbeer 1290
    }
30416 tejbeer 1291
 
33917 ranu 1292
    @Autowired
1293
    RbmTargetService rbmTargetService;
1294
 
1295
    @RequestMapping(value = "/rbmTodayArr", method = RequestMethod.GET)
1296
    public String getRbmTodayArr(HttpServletRequest request, Model model, @RequestParam(value = "startDate", required = false) LocalDate startDate) throws Exception {
1297
        List<RbmArrViewModel> rbmArrViewModels;
35223 ranu 1298
        DecimalFormat decimalFormat = new DecimalFormat("#"); // No decimal places
33917 ranu 1299
        if (startDate != null) {
1300
            rbmArrViewModels = rbmTargetService.getRbmTodayArr(startDate);
1301
        } else {
1302
            rbmArrViewModels = rbmTargetService.getRbmTodayArr();
1303
        }
1304
 
35223 ranu 1305
        Set<AuthUser> authUsers = new HashSet<>();
1306
        Set<AuthUser> rbmAuthUsers = csService.getAuthUserByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM, EscalationType.L1).stream().filter(x -> x.isActive()).collect(Collectors.toSet());
1307
        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 1308
 
35223 ranu 1309
        authUsers.addAll(rbmAuthUsers);
1310
        authUsers.addAll(salesAuthUsers);
33953 ranu 1311
 
35223 ranu 1312
        double totalAchieved = rbmArrViewModels.stream().mapToDouble(RbmArrViewModel::getTotalAchievedTarget).sum();
1313
        double totalTargetSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayTarget).sum();
1314
 
1315
        double totalHidSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayHidTarget).sum();
1316
        double totalHidAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedHidTarget).sum();
1317
 
1318
        double totalFastSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayFastMovingTarget).sum();
1319
        double totalFastAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedFastMovingTarget).sum();
1320
 
1321
        double totalSlowSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodaySlowMovingTarget).sum();
1322
        double totalSlowAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedSlowMovingTarget).sum();
1323
 
1324
        double totalRunningSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayRunningTarget).sum();
1325
        double totalRunningAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedRunningTarget).sum();
1326
 
1327
        double totalOtherSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayOtherMovingTarget).sum();
1328
        double totalOtherAchievedSum = rbmArrViewModels.stream().mapToLong(RbmArrViewModel::getTodayAchievedOtherMovingTarget).sum();
1329
 
34055 ranu 1330
        List<Sold15daysOldAgingModel> sold15daysOldAgingModels = rbmTargetService.getAgingSale(LocalDate.now(), LocalDate.now().plusDays(1));
1331
        List<Our15DaysOldAgingStock> our15DaysOldAgingStocks = rbmTargetService.our15DaysAgingStock();
1332
 
35223 ranu 1333
        long totalSoldSlow = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getSlowmovingBilled).sum();
1334
        long totalSoldRun = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getRunningBilled).sum();
1335
        long totalSoldFast = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getFastmovingBilled).sum();
1336
        long totalSoldHid = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getHidBilled).sum();
1337
        long totalSoldOther = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getOthersBilled).sum();
1338
        long totalSoldAging = sold15daysOldAgingModels.stream().mapToLong(Sold15daysOldAgingModel::getTotalBilled).sum();
34103 ranu 1339
 
35223 ranu 1340
 
34103 ranu 1341
//        first week count of rbm partner billing
1342
        LocalDate firstOfCurrentMonth = LocalDate.now().withDayOfMonth(1);
1343
        LocalDate seventhOfCurrentMonth = LocalDate.now().withDayOfMonth(7);
1344
 
1345
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsFirstWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(firstOfCurrentMonth, seventhOfCurrentMonth);
1346
 
1347
        Map<String, Long> rbmBilledCountMapFirstWeek = rbmBilledFofoIdsModelsFirstWeek.stream()
1348
                .filter(x -> x.getStatus().equals("Billed"))
1349
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1350
 
34119 ranu 1351
        long totalFirstWeekCount = rbmBilledCountMapFirstWeek.values().stream()
1352
                .mapToLong(Long::longValue)
1353
                .sum();
1354
 
34114 ranu 1355
        Map<String, Long> rbmTargetedFofoIdCountMap = rbmBilledFofoIdsModelsFirstWeek.stream()
1356
                .collect(Collectors.groupingBy(
1357
                        RbmBilledFofoIdsModel::getRbmName, // Group by RBM Name
1358
                        Collectors.counting() // Count all fofoId entries for each RBM
1359
                ));
34103 ranu 1360
 
34119 ranu 1361
        long totalTargetedCount = rbmTargetedFofoIdCountMap.values().stream().mapToLong(x -> x.longValue()).sum();
34114 ranu 1362
 
1363
 
34103 ranu 1364
//        second week count of rbm partner billing
1365
 
1366
        LocalDate eightOfCurrentMonth = LocalDate.now().withDayOfMonth(8);
1367
        LocalDate fifteenOfCurrentMonth = LocalDate.now().withDayOfMonth(15);
1368
 
1369
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsSecondWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(eightOfCurrentMonth, fifteenOfCurrentMonth);
1370
 
1371
        Map<String, Long> rbmBilledCountMapSecondWeek = rbmBilledFofoIdsModelsSecondWeek.stream()
1372
                .filter(x -> x.getStatus().equals("Billed"))
1373
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1374
 
34119 ranu 1375
        long totalSecondWeekCount = rbmBilledCountMapSecondWeek.values().stream().mapToLong(Long::longValue).sum();
34103 ranu 1376
 
1377
//      third week count of rbm partner billing
1378
 
1379
        LocalDate sixteenOfCurrentMonth = LocalDate.now().withDayOfMonth(16);
34144 ranu 1380
        LocalDate twentySecondOfCurrentMonth = LocalDate.now().withDayOfMonth(22);
34103 ranu 1381
 
34144 ranu 1382
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsThirdWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(sixteenOfCurrentMonth, twentySecondOfCurrentMonth);
34103 ranu 1383
 
1384
        Map<String, Long> rbmBilledCountMapThirdWeek = rbmBilledFofoIdsModelsThirdWeek.stream()
1385
                .filter(x -> x.getStatus().equals("Billed"))
1386
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1387
 
34119 ranu 1388
        long totalThirdWeekCount = rbmBilledCountMapThirdWeek.values().stream().mapToLong(Long::longValue).sum();
34103 ranu 1389
 
34119 ranu 1390
 
34103 ranu 1391
        //      fourth week count of rbm partner billing
1392
 
34144 ranu 1393
        LocalDate twentyThirdOfCurrentMonth = LocalDate.now().withDayOfMonth(23);
34103 ranu 1394
        LocalDate lastDayOfCurrentMonth = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth());
1395
 
34144 ranu 1396
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsFourthWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(twentyThirdOfCurrentMonth, lastDayOfCurrentMonth);
34103 ranu 1397
 
1398
        Map<String, Long> rbmBilledCountMapFourthWeek = rbmBilledFofoIdsModelsFourthWeek.stream()
1399
                .filter(x -> x.getStatus().equals("Billed"))
1400
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1401
 
34119 ranu 1402
        long totalFourthWeekCount = rbmBilledCountMapFourthWeek.values().stream().mapToLong(x -> x.longValue()).sum();
34103 ranu 1403
 
34119 ranu 1404
 
34103 ranu 1405
//      mtd rbm partner billing
1406
 
1407
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsMtd = rbmTargetService.getDateWiseBilledFofoIdByRbm(firstOfCurrentMonth, LocalDate.now());
1408
 
1409
        Map<String, Long> rbmBilledCountMapMtd = rbmBilledFofoIdsModelsMtd.stream()
1410
                .filter(x -> x.getStatus().equals("Billed"))
1411
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1412
 
34119 ranu 1413
        long totalMtdCount = rbmBilledCountMapMtd.values().stream().mapToLong(Long::longValue).sum();
1414
 
1415
        Map<String, Long> zeroBilledCountMap = rbmTargetedFofoIdCountMap.entrySet().stream()
1416
                .collect(Collectors.toMap(
1417
                        Map.Entry::getKey,
1418
                        entry -> entry.getValue() - rbmBilledCountMapMtd.getOrDefault(entry.getKey(), 0L)
1419
                ));
1420
 
1421
        long totalZeroBilledCount = zeroBilledCountMap.values().stream().mapToLong(Long::longValue).sum();
1422
 
36101 ranu 1423
        //        rbmRating by franchisee visits (weekly: Monday to Sunday)
35223 ranu 1424
 
1425
        Map<Integer, String> rbmIdToNameMap = authUsers.stream()
1426
                .collect(Collectors.toMap(AuthUser::getId, AuthUser::getFullName));
1427
 
36101 ranu 1428
        // Calculate current week: Monday (start) to Sunday (end)
1429
        LocalDate today = LocalDate.now();
1430
        LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
1431
        LocalDate sunday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
1432
        LocalDateTime weekStart = monday.atStartOfDay();
1433
        LocalDateTime weekEnd = sunday.atTime(LocalTime.MAX);
1434
 
35223 ranu 1435
        Map<String, RbMRatingModel> rbmNameToRatingMap = rbmRatingRepository
36101 ranu 1436
                .findAverageRatingByRbmIdAndDateRange(new ArrayList<>(rbmIdToNameMap.keySet()), weekStart, weekEnd)
1437
                .stream().collect(Collectors.toMap(
35223 ranu 1438
                        x -> rbmIdToNameMap.get(x.getRbmId()),
1439
                        x -> x
1440
                ));
1441
 
1442
 
33917 ranu 1443
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
1444
        model.addAttribute("rbmArrViewModels", rbmArrViewModels);
35223 ranu 1445
        model.addAttribute("rbmNameToRatingMap", rbmNameToRatingMap);
1446
 
1447
        model.addAttribute("totalTargetSum", decimalFormat.format(totalTargetSum));
1448
        model.addAttribute("totalAchieved", decimalFormat.format(totalAchieved));
1449
 
1450
        model.addAttribute("totalHidSum", decimalFormat.format(totalHidSum));
1451
        model.addAttribute("totalHidAchievedSum", decimalFormat.format(totalHidAchievedSum));
1452
 
1453
        model.addAttribute("totalFastSum", decimalFormat.format(totalFastSum));
1454
        model.addAttribute("totalFastAchievedSum", decimalFormat.format(totalFastAchievedSum));
1455
 
1456
        model.addAttribute("totalSlowSum", decimalFormat.format(totalSlowSum));
1457
        model.addAttribute("totalSlowAchievedSum", decimalFormat.format(totalSlowAchievedSum));
1458
 
1459
        model.addAttribute("totalRunningSum", decimalFormat.format(totalRunningSum));
1460
        model.addAttribute("totalRunningAchievedSum", decimalFormat.format(totalRunningAchievedSum));
1461
 
1462
        model.addAttribute("totalOtherSum", decimalFormat.format(totalOtherSum));
1463
        model.addAttribute("totalOtherAchievedSum", decimalFormat.format(totalOtherAchievedSum));
1464
 
1465
        model.addAttribute("our15DaysOldAgingStocks", our15DaysOldAgingStocks);
34055 ranu 1466
        model.addAttribute("sold15daysOldAgingModels", sold15daysOldAgingModels);
35223 ranu 1467
        model.addAttribute("totalSoldSlow", totalSoldSlow);
1468
        model.addAttribute("totalSoldRun", totalSoldRun);
1469
        model.addAttribute("totalSoldFast", totalSoldFast);
1470
        model.addAttribute("totalSoldHid", totalSoldHid);
1471
        model.addAttribute("totalSoldOther", totalSoldOther);
1472
        model.addAttribute("totalSoldAging", totalSoldAging);
33917 ranu 1473
 
34114 ranu 1474
        model.addAttribute("rbmTargetedFofoIdCountMap", rbmTargetedFofoIdCountMap);
34103 ranu 1475
        model.addAttribute("rbmBilledCountMapFirstWeek", rbmBilledCountMapFirstWeek);
1476
        model.addAttribute("rbmBilledCountMapSecondWeek", rbmBilledCountMapSecondWeek);
1477
        model.addAttribute("rbmBilledCountMapThirdWeek", rbmBilledCountMapThirdWeek);
1478
        model.addAttribute("rbmBilledCountMapFourthWeek", rbmBilledCountMapFourthWeek);
1479
        model.addAttribute("rbmBilledCountMapMtd", rbmBilledCountMapMtd);
34119 ranu 1480
        model.addAttribute("zeroBilledCountMap", zeroBilledCountMap);
1481
        model.addAttribute("totalFirstWeekCount", totalFirstWeekCount);
1482
        model.addAttribute("totalTargetedCount", totalTargetedCount);
1483
        model.addAttribute("totalSecondWeekCount", totalSecondWeekCount);
1484
        model.addAttribute("totalThirdWeekCount", totalThirdWeekCount);
1485
        model.addAttribute("totalFourthWeekCount", totalFourthWeekCount);
1486
        model.addAttribute("totalMtdCount", totalMtdCount);
1487
        model.addAttribute("totalZeroBilledCount", totalZeroBilledCount);
34103 ranu 1488
 
33917 ranu 1489
        return "rbm-today-arr";
1490
    }
1491
 
1492
 
32464 tejbeer 1493
    @RequestMapping(value = "/partnerHealth", method = RequestMethod.GET)
1494
    public String partnerHealth(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1495
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30416 tejbeer 1496
 
32464 tejbeer 1497
        if (StringUtils.isEmpty(email)) {
1498
            email = loginDetails.getEmailId();
1499
        } else {
1500
            AuthUser selectedUser = authRepository.selectByEmailOrMobile(email);
30416 tejbeer 1501
 
32464 tejbeer 1502
            model.addAttribute("selectedUser", selectedUser);
30445 tejbeer 1503
 
32464 tejbeer 1504
        }
30445 tejbeer 1505
 
32464 tejbeer 1506
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30445 tejbeer 1507
 
32464 tejbeer 1508
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1509
        List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(email));
1510
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1511
        if (fofoIds != null && fofoIds.size() > 0) {
1512
            List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30420 tejbeer 1513
 
32464 tejbeer 1514
            Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate);
30416 tejbeer 1515
 
32464 tejbeer 1516
            List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
30416 tejbeer 1517
 
32464 tejbeer 1518
            LOGGER.info("remarkIds {}", remarkIds);
30416 tejbeer 1519
 
32464 tejbeer 1520
            long todayOverallCall = 0;
1521
            if (!remarkIds.isEmpty()) {
30416 tejbeer 1522
 
32464 tejbeer 1523
                if (authUser.getEmailId().equals(email)) {
30441 tejbeer 1524
 
32464 tejbeer 1525
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
1526
                } else {
30441 tejbeer 1527
 
32464 tejbeer 1528
                    todayOverallCall = partnerCollectionRemarkRepository.selectByAuthIdAndIds(authRepository.selectByEmailOrMobile(email).getId(), remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
30416 tejbeer 1529
 
32464 tejbeer 1530
                }
30416 tejbeer 1531
 
32464 tejbeer 1532
            }
1533
            ChartLeadModel cm = new ChartLeadModel();
30416 tejbeer 1534
 
32464 tejbeer 1535
            if (!foundCollectionMap.isEmpty()) {
1536
                cm = this.getCollectionCount(foundCollectionMap.values().stream().collect(Collectors.toList()));
30416 tejbeer 1537
 
32464 tejbeer 1538
            }
1539
            model.addAttribute("chartPartnerHealth", gson.toJson(cm));
1540
            Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30416 tejbeer 1541
 
32464 tejbeer 1542
            List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
1543
            if (!partnerDailyInvestments.isEmpty()) {
1544
                partnerDailyInvestmentMap = partnerDailyInvestments.stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
1545
            }
30416 tejbeer 1546
 
32464 tejbeer 1547
            Map<LocalDate, Map<Integer, PartnerCollectionPlanModel>> pcpmMap = new TreeMap<>();
1548
            for (int i = 0; i <= 6; i++) {
30416 tejbeer 1549
 
32464 tejbeer 1550
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate.minusDays(i));
30416 tejbeer 1551
 
32464 tejbeer 1552
                pcpmMap.put(startDate.minusDays(i).toLocalDate(), collectionMap);
1553
            }
30416 tejbeer 1554
 
32464 tejbeer 1555
            Map<Integer, PartnerCollectionPlanModel> todayPcpmMap = pcpmMap.get(startDate.toLocalDate());
1556
            model.addAttribute("todayPcpmMap", todayPcpmMap);
30416 tejbeer 1557
 
32464 tejbeer 1558
            TotalTargetColectionModel totalTargetCollection = partnerCollectionService.getTotalTargetCollection(todayPcpmMap, startDate);
1559
            model.addAttribute("totalPartnerTargetCollection", totalTargetCollection.getTotalTarget());
30416 tejbeer 1560
 
32464 tejbeer 1561
            model.addAttribute("totalPartnerAchievement", totalTargetCollection.getTotalAchievement());
30416 tejbeer 1562
 
32464 tejbeer 1563
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1564
            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));
1565
            List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30416 tejbeer 1566
 
32464 tejbeer 1567
            List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1568
            List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30416 tejbeer 1569
 
32464 tejbeer 1570
            salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30416 tejbeer 1571
 
32464 tejbeer 1572
            Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
34027 ranu 1573
            List<AuthUser> authUsers = new ArrayList<>();
1574
            if (!empHierarchy.isEmpty()) {
35395 amit 1575
                authUsers = authRepository.selectByIds(new ArrayList<>(empHierarchy));
34027 ranu 1576
            }
30416 tejbeer 1577
 
1578
 
32464 tejbeer 1579
            Map<Integer, AuthUser> authUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
30416 tejbeer 1580
 
32464 tejbeer 1581
            LOGGER.info("todayPcpmMap {}", todayPcpmMap);
30416 tejbeer 1582
 
32464 tejbeer 1583
            model.addAttribute("authUsers", authUsers);
1584
            model.addAttribute("authUserMap", authUserMap);
1585
            model.addAttribute("partnerCollectionPlanMap", pcpmMap);
1586
            model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
1587
            model.addAttribute("customRetailers", customRetailers);
1588
            model.addAttribute("rankColorMap", ProfitMandiConstants.Rank_Color_Map);
1589
            model.addAttribute("todayOverallCall", todayOverallCall);
30522 tejbeer 1590
 
32464 tejbeer 1591
        }
1592
        return "partner-health";
30522 tejbeer 1593
 
32464 tejbeer 1594
    }
30522 tejbeer 1595
 
32464 tejbeer 1596
    public ChartLeadModel getCollectionCount(List<PartnerCollectionPlanModel> pcpm) throws ProfitMandiBusinessException {
30522 tejbeer 1597
 
32464 tejbeer 1598
        Map<Integer, Long> rankCount = pcpm.stream().collect(Collectors.groupingBy(x -> x.getRank(), Collectors.mapping(PartnerCollectionPlanModel::getRank, Collectors.counting())));
30522 tejbeer 1599
 
32464 tejbeer 1600
        ChartLeadModel cm = new ChartLeadModel();
30522 tejbeer 1601
 
32464 tejbeer 1602
        List<String> labels = new ArrayList<>();
1603
        labels.add("Plan for Today");
1604
        labels.add("Carry Forward");
1605
        labels.add("Untouched");
1606
        labels.add("Plan for Future");
1607
        labels.add("Normal");
30522 tejbeer 1608
 
32464 tejbeer 1609
        List<String> backgroundColor = new ArrayList<>();
1610
        List<Long> values = new ArrayList<>();
30522 tejbeer 1611
 
32464 tejbeer 1612
        for (String label : labels) {
30522 tejbeer 1613
 
32464 tejbeer 1614
            if (label.equals("Plan for Today")) {
1615
                backgroundColor.add("#007bff");
1616
                values.add(rankCount.get(1));
1617
            }
1618
            if (label.equals("Carry Forward")) {
1619
                backgroundColor.add("#ffc107");
1620
                values.add(rankCount.get(2));
1621
            }
1622
            if (label.equals("Untouched")) {
1623
                backgroundColor.add("#dc3545");
1624
                values.add(rankCount.get(3));
1625
            }
1626
            if (label.equals("Plan for Future")) {
1627
                backgroundColor.add("#6c757d");
1628
                values.add(rankCount.get(4));
1629
            }
1630
            if (label.equals("Normal")) {
1631
                backgroundColor.add("White");
1632
                values.add(rankCount.get(5));
1633
            }
30522 tejbeer 1634
 
32464 tejbeer 1635
        }
30522 tejbeer 1636
 
32464 tejbeer 1637
        LOGGER.info("backgroundColor" + backgroundColor);
1638
        LOGGER.info("labelsChartLead" + labels);
1639
        LeadStatusData data = new LeadStatusData();
1640
        data.setData(values);
1641
        data.setBackgroundColor(backgroundColor);
1642
        data.setLabel("DataSet 1");
30522 tejbeer 1643
 
32464 tejbeer 1644
        PieLables label = new PieLables();
1645
        label.setFontColor("black");
1646
        label.setFontSize(15);
30522 tejbeer 1647
 
32464 tejbeer 1648
        Legend legend = new Legend();
1649
        legend.setLabels(label);
1650
        legend.setPosition("left");
30522 tejbeer 1651
 
32464 tejbeer 1652
        List<LeadStatusData> dataList = new ArrayList<>();
1653
        dataList.add(data);
30522 tejbeer 1654
 
32464 tejbeer 1655
        DataLeadModel datasets = new DataLeadModel();
1656
        datasets.setDatasets(dataList);
1657
        datasets.setLabels(labels);
30522 tejbeer 1658
 
32464 tejbeer 1659
        OptionModel om = new OptionModel();
1660
        om.setLegend(legend);
30522 tejbeer 1661
 
32464 tejbeer 1662
        cm.setType("pie");
1663
        cm.setData(datasets);
1664
        cm.setOptions(om);
30522 tejbeer 1665
 
32464 tejbeer 1666
        return cm;
1667
    }
30522 tejbeer 1668
 
32464 tejbeer 1669
    @RequestMapping(value = "/franchiseVisit", method = RequestMethod.GET)
1670
    public String franchiseVisit(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1671
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30522 tejbeer 1672
 
32464 tejbeer 1673
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30522 tejbeer 1674
 
32464 tejbeer 1675
        List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1676
        List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30522 tejbeer 1677
 
32464 tejbeer 1678
        salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30522 tejbeer 1679
 
32464 tejbeer 1680
        List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30522 tejbeer 1681
 
32464 tejbeer 1682
        Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
30522 tejbeer 1683
 
35395 amit 1684
        List<AuthUser> authUsers = authRepository.selectByIds(new ArrayList<>(empHierarchy));
30522 tejbeer 1685
 
32464 tejbeer 1686
        Map<Integer, String> monthValueMap = new HashMap<>();
1687
        for (int i = 0; i <= 5; i++) {
1688
            LocalDateTime startOfMonth = LocalDateTime.now().withDayOfMonth(1).minusMonths(i);
1689
            monthValueMap.put(i, startOfMonth.format(DateTimeFormatter.ofPattern("MMM''uu")));
1690
        }
30522 tejbeer 1691
 
32464 tejbeer 1692
        model.addAttribute("authUsers", authUsers);
1693
        model.addAttribute("monthValueMap", monthValueMap);
30522 tejbeer 1694
 
32464 tejbeer 1695
        return "franchise-visit";
30522 tejbeer 1696
 
32464 tejbeer 1697
    }
30522 tejbeer 1698
 
32464 tejbeer 1699
    @RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET)
1700
    public String getFranchiseVisit(HttpServletRequest request, @RequestParam(name = "authId", required = false) int authId, int yearMonth, Model model) throws Exception {
30522 tejbeer 1701
 
32464 tejbeer 1702
        LocalDateTime startDate = LocalDate.now().minusMonths(8).withDayOfMonth(1).atStartOfDay();
1703
        LocalDateTime endDate = startDate.plusMonths(1).withDayOfMonth(1).toLocalDate().atStartOfDay();
30522 tejbeer 1704
 
32464 tejbeer 1705
        DateRangeModel drm = DateRangeModel.of(startDate, endDate);
30522 tejbeer 1706
 
32464 tejbeer 1707
        List<FranchiseeVisit> visits = franchiseeVisitRepository.selectByAuthUserAndDateRange(drm, authId);
30522 tejbeer 1708
 
32464 tejbeer 1709
        if (!visits.isEmpty()) {
30522 tejbeer 1710
 
32464 tejbeer 1711
            Map<Integer, List<FranchiseeVisit>> franchiseeVisitMap = visits.stream().collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().getDayOfMonth()));
30522 tejbeer 1712
 
32464 tejbeer 1713
            model.addAttribute("franchiseeVisitMap", franchiseeVisitMap);
30522 tejbeer 1714
 
32464 tejbeer 1715
        }
30771 amit.gupta 1716
 
32464 tejbeer 1717
        model.addAttribute("visits", visits);
1718
        model.addAttribute("monthLength", startDate.toLocalDate().lengthOfMonth());
30771 amit.gupta 1719
 
32464 tejbeer 1720
        // Calender
30771 amit.gupta 1721
 
32464 tejbeer 1722
        int Year = startDate.getYear(); // year
1723
        int startDayOfMonth = 5;
1724
        int spaces = startDayOfMonth;
30771 amit.gupta 1725
 
32464 tejbeer 1726
        int month = startDate.getMonthValue();
30771 amit.gupta 1727
 
32464 tejbeer 1728
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
30771 amit.gupta 1729
 
32464 tejbeer 1730
        LOGGER.info("visits {} ", visits);
30771 amit.gupta 1731
 
32464 tejbeer 1732
        if ((((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) && month == 2) {
1733
            days[month] = 29;
1734
        }
30771 amit.gupta 1735
 
32464 tejbeer 1736
        spaces = (days[month - 1] + spaces) % 7;
30771 amit.gupta 1737
 
32464 tejbeer 1738
        model.addAttribute("month", month);
1739
        model.addAttribute("spaces", spaces);
1740
        model.addAttribute("days", days);
30771 amit.gupta 1741
 
32464 tejbeer 1742
        return "franchise-visit-container";
30771 amit.gupta 1743
 
32464 tejbeer 1744
    }
31249 tejbeer 1745
 
32464 tejbeer 1746
    @RequestMapping(value = "/getFranchiseeActivity", method = RequestMethod.GET)
1747
    public String getFranchiseeActivity(HttpServletRequest request, int visitId, Model model) throws Exception {
31249 tejbeer 1748
 
32464 tejbeer 1749
        List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(visitId);
31249 tejbeer 1750
 
32464 tejbeer 1751
        FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(visitId);
31249 tejbeer 1752
 
32464 tejbeer 1753
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1754
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
31249 tejbeer 1755
 
32464 tejbeer 1756
        model.addAttribute("franchiseeVisit", franchiseeVisit);
1757
        model.addAttribute("franchiseeActivity", franchiseeActivities.get(0));
31249 tejbeer 1758
 
32464 tejbeer 1759
        return "franchie-visit-detail";
31249 tejbeer 1760
 
32464 tejbeer 1761
    }
31249 tejbeer 1762
 
32464 tejbeer 1763
    @RequestMapping(value = "/indent/today_target", method = RequestMethod.GET)
1764
    public String todayTarget(HttpServletRequest request, Model model) throws Exception {
1765
        List<RBMPerformanceSummaryModel> summaryModels = new ArrayList<>();
1766
        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());
1767
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1768
        List<TeamCommitmentModel> teamCommitmentModels = partnerCollectionPlanRepository.selectTeamCommitmentByDate(LocalDate.now());
1769
        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())));
1770
        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())));
1771
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1772
        for (int rbmAuthId : rbmPositionsAuthIds) {
1773
            RBMPerformanceSummaryModel rbmPerformanceSummaryModel = new RBMPerformanceSummaryModel();
1774
            rbmPerformanceSummaryModel.setAuthId(rbmAuthId);
1775
            AuthUser authUser = authRepository.selectById(rbmAuthId);
1776
            rbmPerformanceSummaryModel.setAuthName(authUser.getFullName());
33844 ranu 1777
            List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(authUser.getEmailId()));
31249 tejbeer 1778
 
32464 tejbeer 1779
            if (fofoIds.size() > 0) {
1780
                fofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
31249 tejbeer 1781
 
32464 tejbeer 1782
                /*
1783
                 * Map<Integer, PartnerCollectionPlanModel> foundCollectionMap =
1784
                 * partnerCollectionService .getCollectionMap(fofoIds, startDate);
1785
                 */
31249 tejbeer 1786
 
33844 ranu 1787
                List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIds);
1788
 
32464 tejbeer 1789
                LOGGER.info("remarkIds {}", remarkIds);
31249 tejbeer 1790
 
32464 tejbeer 1791
                long todayOverallCall = 0;
1792
                if (!remarkIds.isEmpty()) {
1793
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
31249 tejbeer 1794
 
32464 tejbeer 1795
                }
31249 tejbeer 1796
 
32464 tejbeer 1797
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIds, startDate);
31249 tejbeer 1798
 
32464 tejbeer 1799
                ChartLeadModel cm = this.getCollectionCount(collectionMap.values().stream().collect(Collectors.toList()));
31249 tejbeer 1800
 
32464 tejbeer 1801
                long collectionTarget = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null).collect(Collectors.summingLong(x -> x.getTargetPlan()));
1802
                long collection = collectionMap.values().stream().filter(
1803
                        x -> x.getTargetPlan() != null && x.getTargetPlan() != 0 && x.getAchievementPlan() != null).collect(Collectors.summingLong(x -> x.getAchievementPlan()));
1804
                rbmPerformanceSummaryModel.setChartLeadModel(cm);
1805
                rbmPerformanceSummaryModel.setPartnersCommunicated(todayOverallCall);
1806
                rbmPerformanceSummaryModel.setCollectionTarget(collectionTarget);
1807
                rbmPerformanceSummaryModel.setCollection(collection);
1808
                rbmPerformanceSummaryModel.setSecondaryTarget(rbmSecondaryTargetMap.get(rbmAuthId) == null ? 0 : rbmSecondaryTargetMap.get(rbmAuthId).floatValue());
1809
                rbmPerformanceSummaryModel.setSecondary(
1810
                        rbmSecondaryMap.get(rbmAuthId) == null ? 0 : rbmSecondaryMap.get(rbmAuthId).floatValue());
1811
                summaryModels.add(rbmPerformanceSummaryModel);
1812
                // cm.getData().getDatasets().get(0).getData().;
1813
                // cm.getData().getDatasets().get(0).getBackgroundColor();
1814
                // cm.getData().getLabels()
31249 tejbeer 1815
 
32464 tejbeer 1816
            }
1817
        }
1818
        model.addAttribute("summaryModels", summaryModels);
1819
        return "today_target";
1820
    }
31249 tejbeer 1821
 
32464 tejbeer 1822
    @RequestMapping(value = "/visitPlan", method = RequestMethod.GET)
1823
    public String visitPlan(HttpServletRequest request, Model model) throws Exception {
31249 tejbeer 1824
 
32464 tejbeer 1825
        return "visit-request-plan";
1826
    }
31249 tejbeer 1827
 
32464 tejbeer 1828
    @RequestMapping(value = "/visit/getVisitPlan", method = RequestMethod.GET)
1829
    public String getVisitPlan(HttpServletRequest request, @RequestParam LocalDate date, Model model) throws Exception {
1830
        List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(date);
31249 tejbeer 1831
 
32464 tejbeer 1832
        List<Integer> leadIds = visitRequests.stream().filter(x -> x.getVisitType().equals("lead")).map(x -> x.getVisitId()).collect(Collectors.toList());
1833
        Map<Integer, Lead> leadMap = new HashMap<>();
1834
        if (!leadIds.isEmpty()) {
1835
            List<Lead> leads = leadRepository.selectAllByIds(leadIds);
31249 tejbeer 1836
 
32464 tejbeer 1837
            for (Lead lead : leads) {
1838
                List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
1839
                lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1840
                lead.setLeadActivity(leadActivities.get(0));
31249 tejbeer 1841
 
32464 tejbeer 1842
                leadMap.put(lead.getId(), lead);
1843
            }
31249 tejbeer 1844
 
32464 tejbeer 1845
        }
1846
        List<Integer> franchiseeIds = visitRequests.stream().filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId()).collect(Collectors.toList());
1847
        Map<Integer, FranchiseeVisit> franchiseeVisitsMap = new HashMap<>();
1848
        if (!franchiseeIds.isEmpty()) {
1849
            List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1850
            LOGGER.info("franchiseeVisits {}", franchiseeVisits);
31249 tejbeer 1851
 
32464 tejbeer 1852
            for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1853
                List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(franchiseeVisit.getId());
1854
                LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1855
 
1856
                franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1857
                franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
1858
 
1859
                franchiseeVisitsMap.put(franchiseeVisit.getId(), franchiseeVisit);
1860
            }
1861
 
1862
        }
1863
 
1864
        Map<Integer, List<VisitRequest>> visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy()));
1865
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
1866
        List<UserVisitModel> userVisits = new ArrayList<>();
1867
 
1868
        for (AuthUser authUser : authUsers) {
1869
 
1870
            List<VisitRequest> authVisitRequests = visitRequestMap.get(authUser.getId());
1871
 
1872
            if (authVisitRequests != null) {
1873
                UserVisitModel userVisitModel = new UserVisitModel();
1874
                userVisitModel.setAuthUser(authUser.getFullName());
1875
                List<VisitDescriptionModel> visitDescriptions = new ArrayList<>();
1876
 
1877
                for (VisitRequest authVisitRequest : authVisitRequests) {
1878
                    VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1879
                    visitDescriptionModel.setVisitId(authVisitRequest.getVisitId());
1880
 
1881
                    if (authVisitRequest.getVisitType().equals("lead")) {
1882
                        Lead lead = leadMap.get(authVisitRequest.getVisitId());
1883
 
1884
                        visitDescriptionModel.setVisitName(lead.getFirstName());
1885
                        visitDescriptionModel.setCity(lead.getCity());
1886
                        visitDescriptionModel.setState(lead.getState());
1887
                        visitDescriptionModel.setScheduleTime(lead.getScheduledTimestamp());
1888
                        visitDescriptionModel.setRemarks(lead.getLeadActivity().getRemark());
1889
 
1890
                    } else {
1891
                        FranchiseeVisit franchiseeVisit = franchiseeVisitsMap.get(authVisitRequest.getVisitId());
1892
                        CustomRetailer customRetailer = retailerService.getFofoRetailer(franchiseeVisit.getFofoId());
1893
 
1894
                        visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
1895
                        visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1896
                        visitDescriptionModel.setState(customRetailer.getAddress().getState());
1897
                        visitDescriptionModel.setScheduleTime(franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1898
                        visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1899
 
1900
                    }
1901
 
1902
                    if (authVisitRequest.getActionedBy() != 0) {
1903
                        AuthUser au = authRepository.selectById(authVisitRequest.getActionedBy());
1904
 
1905
                        visitDescriptionModel.setActionBy(au.getFullName());
1906
                    }
1907
                    visitDescriptionModel.setStatus(authVisitRequest.getStatus());
1908
                    visitDescriptionModel.setVisitType(authVisitRequest.getVisitType());
1909
                    visitDescriptions.add(visitDescriptionModel);
1910
                }
1911
 
1912
                userVisitModel.setVisitDescriptions(visitDescriptions);
1913
                userVisits.add(userVisitModel);
1914
            }
1915
 
1916
        }
1917
 
1918
        model.addAttribute("userVisits", userVisits);
1919
 
1920
        return "visit-request-plan";
1921
    }
25979 tejbeer 1922
}