Subversion Repositories SmartDukaan

Rev

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

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