Subversion Repositories SmartDukaan

Rev

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