Subversion Repositories SmartDukaan

Rev

Rev 34890 | Rev 34963 | 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);
474
        }
475
        if (color.contains("All")) {
476
            color.add("yellow");
477
            color.add("green");
478
        }
34650 aman.kumar 479
 
480
        Map<Integer, List<LeadActivity>> leadActivityMap = new HashMap<>();
481
        boolean authPositon = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_SALES);
482
        List<Integer> authUserIds = null;
483
        List<Lead> leadFollowUp = new ArrayList<>();
484
 
485
        if (authPositon) {
486
            authUserIds = authService.getAllReportees(authUser.getId());
487
            authUserIds.add(authUser.getId());
488
            if (localDateTime == null) {
489
                if (!leadStatus.contains(LeadStatus.followUp)) {
490
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, LocalDateTime.now().minusMonths(1));
491
                }
492
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
493
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
494
                    leads.addAll(leadFollowUp);
495
                }
496
            } else {
497
                if (!leadStatus.contains(LeadStatus.followUp)) {
498
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, localDateTime);
499
                }
500
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
501
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
502
                    leads.addAll(leadFollowUp);
503
                }
504
            }
505
        } else {
506
            if (localDateTime == null) {
507
                if (!leadStatus.contains(LeadStatus.followUp)) {
508
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, LocalDateTime.now().minusMonths(1));
509
                }
510
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
511
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
512
                    leads.addAll(leadFollowUp);
513
                }
514
            } else {
515
                if (!leadStatus.contains(LeadStatus.followUp)) {
34894 aman 516
                    leads = leadRepository.selectAllByColorStatusAndCreatedTimestamp(leadStatus, color, localDateTime);
34650 aman.kumar 517
                }
34894 aman 518
                if (leadStatus.contains(LeadStatus.followUp)) {
34650 aman.kumar 519
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
520
                    leads.addAll(leadFollowUp);
521
                }
522
            }
34707 aman.kumar 523
        }
34650 aman.kumar 524
 
34707 aman.kumar 525
        // Build activity map and auth map (SAME AS VIEW ENDPOINT)
34650 aman.kumar 526
        if (!leads.isEmpty()) {
34707 aman.kumar 527
            List<Integer> leadIds = leads.stream().map(Lead::getId).collect(Collectors.toList());
528
            leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream()
529
                    .collect(Collectors.groupingBy(LeadActivity::getLeadId));
34650 aman.kumar 530
        }
34707 aman.kumar 531
        List<Integer> authIds = leads.stream().map(Lead::getAssignTo).collect(Collectors.toList());
532
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
533
                .collect(Collectors.toMap(AuthUser::getId, x -> x));
534
 
535
        // Build CSV rows (USE DIRECT LEAD PROPERTIES - NO ACTIVITY FALLBACK)
34650 aman.kumar 536
        List<List<?>> rows = new ArrayList<>();
537
        for (Lead lead : leads) {
538
            List<LeadActivity> activities = leadActivityMap.get(lead.getId());
34707 aman.kumar 539
 
540
            // Use FIRST activity's schedule timestamp if exists
34650 aman.kumar 541
            String scheduleTimestamp = (activities != null && !activities.isEmpty())
542
                    ? FormattingUtils.format(activities.get(0).getSchelduleTimestamp())
34707 aman.kumar 543
                    : "";
34650 aman.kumar 544
 
34707 aman.kumar 545
            // DIRECTLY use Lead properties (NO fallback to activity)
546
            Double potential = lead.getPotential();
547
            String outLetName = lead.getOutLetName() != null ? lead.getOutLetName() : "";
34650 aman.kumar 548
 
34707 aman.kumar 549
            // Assignee name (blank if missing)
550
            String assignTo = "";
551
            if (authIdAndAuthUserMap.containsKey(lead.getAssignTo())) {
552
                AuthUser user = authIdAndAuthUserMap.get(lead.getAssignTo());
553
                assignTo = (user.getFirstName() + " " + user.getLastName()).trim();
554
            }
34650 aman.kumar 555
 
34707 aman.kumar 556
            rows.add(Arrays.asList(
557
                    lead.getSource(),
558
                    lead.getFullName(),
559
                    outLetName,
560
                    potential,
561
                    lead.getLeadMobile(),
562
                    lead.getAddress() != null ? lead.getAddress() : "",
563
                    lead.getCity() != null ? lead.getCity() : "",
564
                    lead.getState() != null ? lead.getState() : "",
565
                    lead.getCreatedBy() != null ? lead.getCreatedBy() : "",
566
                    lead.getStatus().toString(),
567
                    FormattingUtils.format(lead.getCreatedTimestamp()),
568
                    FormattingUtils.format(lead.getUpdatedTimestamp()),
569
                    scheduleTimestamp,
570
                    lead.getClosureTimestamp() != null
571
                            ? FormattingUtils.format(lead.getClosureTimestamp())
572
                            : "",  // Handle null closure
573
                    assignTo,
574
                    lead.getColor() != null ? lead.getColor() : ""
575
            ));
576
        }
34650 aman.kumar 577
 
34707 aman.kumar 578
        // Generate CSV response
579
        ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
34650 aman.kumar 580
                Arrays.asList("Source", "Partner Name", "Outlet Name", "Potential", "Mobile", "Address", "City", "State",
34707 aman.kumar 581
                        "Created By", "Status", "Created On", "Updated On", "Scheduled Timestamp",
582
                        "Closure Timestamp", "Assign To", "Color"),
583
                rows
584
        );
585
        return orderService.downloadReportInCsv(baos, rows, "LeadDetails_");
34650 aman.kumar 586
    }
587
 
32464 tejbeer 588
    @RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
589
    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 {
590
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
591
        List<Lead> leads = null;
592
        long size = 0;
593
        leads = leadRepository.selectAllByStatus(status, offset, limit);
594
        size = leadRepository.selectCountByStatus(status);
25988 tejbeer 595
 
32464 tejbeer 596
        if (!leads.isEmpty()) {
597
            List<Integer> authIds = new ArrayList<>();
598
            for (Lead lead : leads) {
599
                authIds.add(lead.getAssignTo());
600
            }
601
            Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
25988 tejbeer 602
 
32464 tejbeer 603
            model.addAttribute("leads", leads);
604
            model.addAttribute("start", offset + 1);
605
            model.addAttribute("size", size);
606
            model.addAttribute("searchTerm", searchTerm);
607
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
608
            model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 609
 
32464 tejbeer 610
            if (leads.size() < limit) {
611
                model.addAttribute("end", offset + leads.size());
612
            } else {
613
                model.addAttribute("end", offset + limit);
614
            }
25988 tejbeer 615
 
32464 tejbeer 616
        } else {
617
            model.addAttribute("lead", leads);
25988 tejbeer 618
 
32464 tejbeer 619
            model.addAttribute("size", size);
620
        }
25988 tejbeer 621
 
32464 tejbeer 622
        model.addAttribute("authUsers", authUsers);
623
        return "lead-close";
624
    }
25988 tejbeer 625
 
32464 tejbeer 626
    @RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
627
    public String getPaginatedClosedLeads(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException {
628
        List<Lead> leads = null;
629
        leads = leadRepository.selectAllByStatus(status, offset, limit);
25988 tejbeer 630
 
32464 tejbeer 631
        if (!leads.isEmpty()) {
632
            List<Integer> authIds = new ArrayList<>();
633
            for (Lead lead : leads) {
634
                authIds.add(lead.getAssignTo());
635
            }
636
            Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
637
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
638
            model.addAttribute("leads", leads);
639
            model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 640
 
32464 tejbeer 641
        } else {
642
            model.addAttribute("leads", leads);
25988 tejbeer 643
 
32464 tejbeer 644
        }
645
        return "lead-close-paginated";
646
    }
25988 tejbeer 647
 
32464 tejbeer 648
    @RequestMapping(value = "/searchLeads")
649
    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 {
650
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
651
        List<Lead> leads = null;
652
        long size = 0;
653
        if (!(searchTerm.equals(""))) {
654
            leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
34155 tejus.loha 655
            size = leadRepository.selectCountByStatus(status);
656
            Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
657
            List<Integer> authIds = new ArrayList<>();
32464 tejbeer 658
            if (!(leads.size() == 0)) {
659
                for (Lead lead : leads) {
660
                    authIds.add(lead.getAssignTo());
661
                }
34155 tejus.loha 662
                authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
32464 tejbeer 663
                if (leads.size() < limit) {
664
                    model.addAttribute("end", offset + leads.size());
665
                } else {
666
                    model.addAttribute("end", offset + limit);
667
                }
668
            } else {
34155 tejus.loha 669
                model.addAttribute("end", offset + limit);
32464 tejbeer 670
            }
34155 tejus.loha 671
            model.addAttribute("leads", leads);
672
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
673
            model.addAttribute("start", offset + 1);
674
            model.addAttribute("size", size);
675
            model.addAttribute("searchTerm", searchTerm);
32464 tejbeer 676
        } else {
677
            leads = leadRepository.selectAllByStatus(status, offset, limit);
678
            size = leadRepository.selectCountByStatus(status);
25988 tejbeer 679
 
32464 tejbeer 680
            if (!leads.isEmpty()) {
681
                List<Integer> authIds = new ArrayList<>();
682
                for (Lead lead : leads) {
683
                    authIds.add(lead.getAssignTo());
684
                }
685
                Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
25988 tejbeer 686
 
32464 tejbeer 687
                model.addAttribute("leads", leads);
688
                model.addAttribute("start", offset + 1);
689
                model.addAttribute("size", size);
690
                model.addAttribute("searchTerm", searchTerm);
691
                model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25988 tejbeer 692
 
32464 tejbeer 693
                if (leads.size() < limit) {
694
                    model.addAttribute("end", offset + leads.size());
695
                } else {
696
                    model.addAttribute("end", offset + limit);
697
                }
25988 tejbeer 698
 
32464 tejbeer 699
            }
700
        }
25988 tejbeer 701
 
32464 tejbeer 702
        model.addAttribute("authUsers", authUsers);
703
        return "lead-close";
704
    }
25988 tejbeer 705
 
32464 tejbeer 706
    @RequestMapping(value = "/searchLeadPaginated")
707
    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 {
708
        LOGGER.info("In search Item....");
709
        List<Lead> leads = null;
710
        if (!searchTerm.equals("")) {
711
            leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
712
            if (!(leads.size() == 0)) {
25988 tejbeer 713
 
32464 tejbeer 714
                List<Integer> authIds = new ArrayList<>();
715
                for (Lead lead : leads) {
716
                    authIds.add(lead.getAssignTo());
717
                }
718
                Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
719
                model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
720
                model.addAttribute("leads", leads);
721
            }
722
        }
31249 tejbeer 723
 
32464 tejbeer 724
        return "lead-close-paginated";
31249 tejbeer 725
 
32464 tejbeer 726
    }
31249 tejbeer 727
 
32464 tejbeer 728
    @RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
729
    public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
730
        List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
25979 tejbeer 731
 
32464 tejbeer 732
        LOGGER.info("leadActivity" + leadActivity);
31370 tejbeer 733
 
32464 tejbeer 734
        model.addAttribute("leadActivity", leadActivity);
735
        model.addAttribute("authUserMap", authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x)));
31370 tejbeer 736
 
32464 tejbeer 737
        return "lead_activity_modal";
738
    }
31370 tejbeer 739
 
32464 tejbeer 740
    @RequestMapping(value = "/getLead", method = RequestMethod.GET)
741
    public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam int leadId) throws Exception {
742
        Lead lead = leadRepository.selectById(leadId);
31370 tejbeer 743
 
32464 tejbeer 744
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(lead.getId());
745
        if (leadDetail != null) {
746
            lead.setOutLetName(leadDetail.getOutletName());
747
        }
31249 tejbeer 748
 
32464 tejbeer 749
        return responseSender.ok(lead);
25979 tejbeer 750
 
32464 tejbeer 751
    }
31249 tejbeer 752
 
32464 tejbeer 753
    @RequestMapping(value = "/createLead", method = RequestMethod.POST)
754
    public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest, Model model) throws Exception {
755
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
34627 aman.kumar 756
        List<Lead> leadDetailList = leadRepository.selectByMobileNumber(createRefferalRequest.getMobile());
757
        LOGGER.info("Lead Details {}", leadDetailList);
31249 tejbeer 758
 
34671 aman.kumar 759
        if (!leadDetailList.isEmpty() && leadDetailList.get(0).getStatus() != LeadStatus.notInterested) {
34627 aman.kumar 760
            AuthUser authUser1 = authRepository.selectById(leadDetailList.get(0).getAssignTo());
34671 aman.kumar 761
            model.addAttribute("response1", "Lead already exists, created by " + leadDetailList.get(0).getCreatedBy() +
762
                    " on " + FormattingUtils.format(leadDetailList.get(0).getCreatedTimestamp()) +
763
                    ", assigned to " + authUser1.getFullName());
764
            return "response";
34627 aman.kumar 765
 
34671 aman.kumar 766
 
34627 aman.kumar 767
        }
768
 
32464 tejbeer 769
        LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
770
        Lead lead = new Lead();
771
        lead.setFirstName(createRefferalRequest.getFirstName());
772
        lead.setLastName(createRefferalRequest.getLastName());
773
        lead.setLeadMobile(createRefferalRequest.getMobile());
774
        lead.setState(createRefferalRequest.getState());
775
        lead.setCity(createRefferalRequest.getCity());
776
        lead.setAddress(createRefferalRequest.getAddress());
777
        lead.setCreatedTimestamp(LocalDateTime.now());
778
        lead.setUpdatedTimestamp(LocalDateTime.now());
779
        lead.setStatus(createRefferalRequest.getStatus());
780
        lead.setAssignTo(createRefferalRequest.getAssignTo());
781
        lead.setSource(createRefferalRequest.getSource());
32471 tejbeer 782
        if (createRefferalRequest.getColorCheck() == true) {
783
            lead.setColor("Green");
784
        } else {
785
            lead.setColor("Yellow");
786
        }
32464 tejbeer 787
        // change
788
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
789
        String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
790
        lead.setCreatedBy(authUserName);
791
        lead.setAuthId(authUser.getId());
792
        LOGGER.info("lead --- {}", lead);
793
        leadRepository.persist(lead);
794
        LeadActivity leadActivity = new LeadActivity();
795
        leadActivity.setLeadId(lead.getId());
796
        leadActivity.setRemark(createRefferalRequest.getRemark());
797
        leadActivity.setAuthId(authUser.getId());
32471 tejbeer 798
 
32464 tejbeer 799
        LOGGER.info("createRefferalRequest" + createRefferalRequest.getCommunicationType());
25979 tejbeer 800
 
32464 tejbeer 801
        if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
802
            leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
803
            leadActivity.setCommunicationType(createRefferalRequest.getCommunicationType());
25979 tejbeer 804
 
32464 tejbeer 805
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
806
                visitRequestRepository.createVisitRequest(lead.getId(), "lead", lead.getAssignTo(), createRefferalRequest.getSchelduleTimestamp());
807
            }
808
        } else {
809
            leadActivity.setSchelduleTimestamp(null);
810
        }
811
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
812
        leadActivityRepository.persist(leadActivity);
34127 tejus.loha 813
        if (!lead.getStatus().equals(LeadStatus.notInterested)) {
814
            LeadDetailModel leadDetail = new LeadDetailModel();
815
            leadDetail.setLeadId(lead.getId());
816
            leadDetail.setOutletName(createRefferalRequest.getOutletName());
817
            leadDetail.setCounterSize(createRefferalRequest.getCounterSize());
25979 tejbeer 818
 
31249 tejbeer 819
 
34127 tejus.loha 820
            leadDetail.setFrontp(createRefferalRequest.getFrontp());
821
            leadDetail.setFrontWithMarket(createRefferalRequest.getFrontWithMarket());
31370 tejbeer 822
 
823
 
34127 tejus.loha 824
            leadDetail.setInternalLongShot(createRefferalRequest.getInternalLongShot());
31370 tejbeer 825
 
34127 tejus.loha 826
            leadDetail.setInternalLeftWall(createRefferalRequest.getInternalLeftWall());
29598 tejbeer 827
 
34127 tejus.loha 828
            leadDetail.setInternalRightWall(createRefferalRequest.getInternalRightWall());
829
            List<LeadBrandModel> brandModels = new ArrayList<LeadBrandModel>();
27605 tejbeer 830
 
34127 tejus.loha 831
            for (LeadBrandModel leadBrandModel : createRefferalRequest.getLeadBrands()) {
25979 tejbeer 832
 
34127 tejus.loha 833
                LeadBrandModel leadBrand = new LeadBrandModel();
834
                leadBrand.setBrand(leadBrandModel.getBrand());
835
                leadBrand.setValue(leadBrandModel.getValue());
29598 tejbeer 836
 
34127 tejus.loha 837
                brandModels.add(leadBrand);
25979 tejbeer 838
 
34127 tejus.loha 839
            }
29598 tejbeer 840
 
34127 tejus.loha 841
            leadDetail.setLeadBrands(brandModels);
29598 tejbeer 842
 
32471 tejbeer 843
            leadRepository.persistLeadDetail(leadDetail, authUser);
844
        }
32464 tejbeer 845
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
29598 tejbeer 846
 
32464 tejbeer 847
        return "response";
29598 tejbeer 848
 
32464 tejbeer 849
    }
29476 manish 850
 
29473 manish 851
 
32464 tejbeer 852
    @RequestMapping(value = "/editLead", method = RequestMethod.POST)
853
    public String EditLead(HttpServletRequest request, @RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
854
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
29426 manish 855
 
32464 tejbeer 856
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
29426 manish 857
 
34113 tejus.loha 858
        Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
859
        AuthUser leadAuthUser = authRepository.selectById(lead.getAuthId());
32464 tejbeer 860
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(createLeadActivityRequest.getId());
29426 manish 861
 
34113 tejus.loha 862
        if (leadDetail == null && !createLeadActivityRequest.getStatus().equals(LeadStatus.notInterested) && leadAuthUser.isActive()) {
29426 manish 863
 
32464 tejbeer 864
            throw new ProfitMandiBusinessException("LeadDetail", "", "Please fill lead detail");
865
        }
29445 manish 866
 
32464 tejbeer 867
        LeadActivity leadActivity = new LeadActivity();
868
        leadActivity.setLeadId(createLeadActivityRequest.getId());
869
        leadActivity.setRemark(createLeadActivityRequest.getRemark());
29598 tejbeer 870
 
32464 tejbeer 871
        LOGGER.info("createRefferalRequest" + createLeadActivityRequest);
29598 tejbeer 872
 
32464 tejbeer 873
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
874
            leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
875
            leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
876
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
877
                visitRequestRepository.createVisitRequest(createLeadActivityRequest.getId(), "lead", createLeadActivityRequest.getAssignTo(), createLeadActivityRequest.getScheldule());
878
            }
879
        } else {
880
            leadActivity.setSchelduleTimestamp(null);
881
        }
882
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
883
        leadActivity.setAuthId(authUser.getId());
884
        leadActivityRepository.persist(leadActivity);
885
        lead.setAssignTo(createLeadActivityRequest.getAssignTo());
886
        lead.setStatus(createLeadActivityRequest.getStatus());
32471 tejbeer 887
        if (createLeadActivityRequest.getColorCheck() == true) {
888
            lead.setColor("Green");
889
        } else {
890
            lead.setColor("Yellow");
891
        }
32464 tejbeer 892
        lead.setNotinterestedReason(createLeadActivityRequest.getReason());
893
        lead.setUpdatedTimestamp(LocalDateTime.now());
29426 manish 894
 
32464 tejbeer 895
        int authId = 0;
34127 tejus.loha 896
        authId = lead.getAssignTo();
897
        Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
29426 manish 898
 
34127 tejus.loha 899
        List<LeadActivity> leadActivitys = leadActivityRepository.selectBYLeadId(lead.getId());
29426 manish 900
 
34127 tejus.loha 901
        if (!leadActivitys.isEmpty()) {
902
            leadActivityMap.put(lead.getId(), leadActivitys.get(0));
903
        }
29426 manish 904
 
34127 tejus.loha 905
        Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
906
        AuthUser AuthUser = authRepository.selectById(authId);
29426 manish 907
 
34127 tejus.loha 908
        authIdAndAuthUserMap.put(AuthUser.getId(), AuthUser);
29426 manish 909
 
34127 tejus.loha 910
        model.addAttribute("leadActivityMap", leadActivityMap);
911
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
29426 manish 912
 
30185 tejbeer 913
 
33223 amit.gupta 914
        model.addAttribute("lead", lead);
30185 tejbeer 915
 
32464 tejbeer 916
        return "edit-lead";
30185 tejbeer 917
 
32464 tejbeer 918
    }
31370 tejbeer 919
 
32464 tejbeer 920
    @RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
921
    public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
922
        List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList());
31370 tejbeer 923
 
32464 tejbeer 924
        List<List<?>> rows = new ArrayList<>();
31496 tejbeer 925
 
32464 tejbeer 926
        List<LeadSource> lss = LeadSource.enumValues;
31370 tejbeer 927
 
32464 tejbeer 928
        for (LeadSource ls : lss) {
929
            rows.add(Arrays.asList("-", "-", "-", "-", "-", "-", "-", ls));
31478 tejbeer 930
 
32464 tejbeer 931
        }
932
        for (String stateName : stateNames) {
933
            rows.add(Arrays.asList("-", "-", "-", "-", stateName, "-", "-", "-"));
31478 tejbeer 934
 
32464 tejbeer 935
        }
31478 tejbeer 936
 
32464 tejbeer 937
        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 938
 
32464 tejbeer 939
        final HttpHeaders headers = new HttpHeaders();
940
        headers.set("Content-Type", "text/csv");
941
        headers.set("Content-disposition", "inline; filename=leads.format.csv");
942
        headers.setContentLength(baos.toByteArray().length);
31478 tejbeer 943
 
32464 tejbeer 944
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
945
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
946
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
31478 tejbeer 947
 
32464 tejbeer 948
    }
31478 tejbeer 949
 
32464 tejbeer 950
    @RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
951
    public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
31478 tejbeer 952
 
32464 tejbeer 953
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
954
        String email = loginDetails.getEmailId();
31478 tejbeer 955
 
32464 tejbeer 956
        AuthUser createdBy = authRepository.selectByEmailOrMobile(email);
31478 tejbeer 957
 
32464 tejbeer 958
        LOGGER.info("file" + file.toString());
31478 tejbeer 959
 
32464 tejbeer 960
        String fileName = file.getName();
31370 tejbeer 961
 
32464 tejbeer 962
        String fileNames = file.getOriginalFilename();
31370 tejbeer 963
 
32464 tejbeer 964
        LOGGER.info("fileName" + fileName);
965
        LOGGER.info("fileNames" + fileNames);
31370 tejbeer 966
 
32464 tejbeer 967
        List<CSVRecord> records = FileUtil.readFile(file);
31370 tejbeer 968
 
32464 tejbeer 969
        for (CSVRecord record : records) {
31370 tejbeer 970
 
32464 tejbeer 971
            Lead lead = new Lead();
972
            lead.setFirstName(record.get(0));
973
            lead.setLastName(record.get(1));
974
            lead.setAddress(record.get(2));
975
            lead.setCity(record.get(3));
976
            lead.setState(record.get(4));
977
            lead.setLeadMobile(record.get(5));
978
            LOGGER.info("record" + record.get(6));
31370 tejbeer 979
 
32464 tejbeer 980
            AuthUser assignTo = authRepository.selectByEmailOrMobile(record.get(6));
31370 tejbeer 981
 
32464 tejbeer 982
            if (assignTo == null) {
983
                throw new ProfitMandiBusinessException("Assign To ", record.get(6), "email id not exist");
984
            }
31370 tejbeer 985
 
32464 tejbeer 986
            lead.setAssignTo(assignTo.getId());
987
            lead.setSource(record.get(7));
31370 tejbeer 988
 
32464 tejbeer 989
            lead.setCreatedTimestamp(LocalDateTime.now());
31370 tejbeer 990
 
32464 tejbeer 991
            lead.setUpdatedTimestamp(LocalDateTime.now());
992
            lead.setStatus(LeadStatus.pending);
993
            lead.setColor("yellow");
994
            // change
995
            lead.setCreatedBy(createdBy.getFullName());
996
            lead.setAuthId(createdBy.getId());
31370 tejbeer 997
 
32464 tejbeer 998
            leadRepository.persist(lead);
31370 tejbeer 999
 
32464 tejbeer 1000
            LeadActivity leadActivity = new LeadActivity();
1001
            leadActivity.setLeadId(lead.getId());
1002
            leadActivity.setRemark("New Lead");
1003
            leadActivity.setSchelduleTimestamp(null);
31370 tejbeer 1004
 
32464 tejbeer 1005
            leadActivity.setCreatedTimestamp(LocalDateTime.now());
1006
            leadActivityRepository.persist(leadActivity);
1007
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 1008
 
32464 tejbeer 1009
        }
31370 tejbeer 1010
 
32464 tejbeer 1011
        model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
31370 tejbeer 1012
 
32464 tejbeer 1013
        return "response";
31370 tejbeer 1014
 
32464 tejbeer 1015
    }
31370 tejbeer 1016
 
32464 tejbeer 1017
    @RequestMapping(value = "/teamCommitment", method = RequestMethod.GET)
1018
    public String teamCommitments(HttpServletRequest request, Model model) throws Exception {
31370 tejbeer 1019
 
32464 tejbeer 1020
        return "team-commitment";
31370 tejbeer 1021
 
32464 tejbeer 1022
    }
31370 tejbeer 1023
 
32464 tejbeer 1024
    @RequestMapping(value = "/leadDetail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
1025
    public String leadDetail(HttpServletRequest request, @RequestBody LeadDetailModel leadDetailModel, Model model) throws Exception {
31370 tejbeer 1026
 
32464 tejbeer 1027
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1028
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
31370 tejbeer 1029
 
32471 tejbeer 1030
        leadRepository.persistLeadDetail(leadDetailModel, authUser);
32464 tejbeer 1031
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 1032
 
32464 tejbeer 1033
        return "response";
31370 tejbeer 1034
 
32464 tejbeer 1035
    }
31370 tejbeer 1036
 
32464 tejbeer 1037
    @RequestMapping(value = "/getLeadDetail", method = RequestMethod.GET)
1038
    public String getLeadDetail(HttpServletRequest request, Model model) throws Exception {
1039
        List<Integer> followUpleadIds = leadRepository.selectAllByStatus(LeadStatus.followUp).stream().map(x -> x.getId()).collect(Collectors.toList());
1040
        List<LeadDetail> leadDetails = leadDetailRepository.selectByLeadIds(followUpleadIds);
31370 tejbeer 1041
 
32464 tejbeer 1042
        List<DBObject> mobileBrands = mongoClient.getAllBrandsToDisplay(3);
31370 tejbeer 1043
 
32464 tejbeer 1044
        List<String> brands = mobileBrands.stream().map(x -> (String) x.get("name")).collect(Collectors.toList());
31370 tejbeer 1045
 
32464 tejbeer 1046
        model.addAttribute("brands", brands);
1047
        if (!leadDetails.isEmpty()) {
31370 tejbeer 1048
 
32464 tejbeer 1049
            List<Integer> detailsIds = leadDetails.stream().map(x -> x.getId()).collect(Collectors.toList());
31370 tejbeer 1050
 
32464 tejbeer 1051
            List<Integer> leadIds = leadDetails.stream().map(x -> x.getLeadId()).collect(Collectors.toList());
31370 tejbeer 1052
 
32464 tejbeer 1053
            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 1054
 
32464 tejbeer 1055
            Map<Integer, Optional<LeadActivity>> leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream().collect(Collectors.groupingBy(x -> x.getLeadId(), Collectors.maxBy(Comparator.comparing(LeadActivity::getId))));
31370 tejbeer 1056
 
32464 tejbeer 1057
            model.addAttribute("leadActivityMap", leadActivityMap);
30185 tejbeer 1058
 
32464 tejbeer 1059
            List<LeadBrand> leadBrands = leadBrandRepository.selectByLeadDetailId(detailsIds);
30185 tejbeer 1060
 
32464 tejbeer 1061
            LOGGER.info("leadBrands {}" + leadBrands);
30185 tejbeer 1062
 
32464 tejbeer 1063
            Map<Integer, Map<String, Integer>> leadDetailBrandValue = new HashMap<>();
30416 tejbeer 1064
 
32464 tejbeer 1065
            Map<Integer, List<LeadBrand>> leadDetail = leadBrands.stream().collect(Collectors.groupingBy(x -> x.getLeadDetailId(), Collectors.toList()));
30416 tejbeer 1066
 
32464 tejbeer 1067
            for (Entry<Integer, List<LeadBrand>> leadDetailEntry : leadDetail.entrySet()) {
30416 tejbeer 1068
 
32464 tejbeer 1069
                Map<String, Integer> brandValue = new HashMap<>();
30416 tejbeer 1070
 
32464 tejbeer 1071
                for (LeadBrand leadBrand : leadDetailEntry.getValue()) {
1072
                    brandValue.put(leadBrand.getBrand(), leadBrand.getValue());
30416 tejbeer 1073
 
32464 tejbeer 1074
                }
1075
                leadDetailBrandValue.put(leadDetailEntry.getKey(), brandValue);
1076
            }
30416 tejbeer 1077
 
32464 tejbeer 1078
            LOGGER.info("leadDetailBrandValue {}" + leadDetailBrandValue);
30416 tejbeer 1079
 
32464 tejbeer 1080
            model.addAttribute("leadDetailBrandValue", leadDetailBrandValue);
30416 tejbeer 1081
 
32464 tejbeer 1082
            model.addAttribute("leadMap", leadMap);
1083
        }
30434 tejbeer 1084
 
32464 tejbeer 1085
        model.addAttribute("leadDetails", leadDetails);
30434 tejbeer 1086
 
32464 tejbeer 1087
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1088
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
30434 tejbeer 1089
 
32464 tejbeer 1090
        return "lead-detail";
30458 tejbeer 1091
 
32464 tejbeer 1092
    }
30458 tejbeer 1093
 
32464 tejbeer 1094
    @RequestMapping(value = "/getLeadDetailByLeadId", method = RequestMethod.GET)
1095
    public ResponseEntity<?> getLeadDetailByLeadId(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
30458 tejbeer 1096
 
32464 tejbeer 1097
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(leadId);
1098
        return responseSender.ok(leadDetail);
30458 tejbeer 1099
 
32464 tejbeer 1100
    }
30434 tejbeer 1101
 
32464 tejbeer 1102
    @RequestMapping(value = "/getTeamCommitment", method = RequestMethod.GET)
1103
    public String getTeamCommitments(HttpServletRequest request, @RequestParam LocalDateTime date, Model model) throws Exception {
30781 tejbeer 1104
 
32464 tejbeer 1105
        List<TeamCommitmentModel> commitments = partnerCollectionPlanRepository.selectTeamCommitmentByDate(date.toLocalDate());
30416 tejbeer 1106
 
32464 tejbeer 1107
        model.addAttribute("commitments", commitments);
1108
        return "team-commitment-table";
30416 tejbeer 1109
 
32464 tejbeer 1110
    }
30416 tejbeer 1111
 
33917 ranu 1112
    @Autowired
1113
    RbmTargetService rbmTargetService;
1114
 
1115
    @RequestMapping(value = "/rbmTodayArr", method = RequestMethod.GET)
1116
    public String getRbmTodayArr(HttpServletRequest request, Model model, @RequestParam(value = "startDate", required = false) LocalDate startDate) throws Exception {
1117
        List<RbmArrViewModel> rbmArrViewModels;
1118
 
1119
        if (startDate != null) {
1120
            rbmArrViewModels = rbmTargetService.getRbmTodayArr(startDate);
1121
        } else {
1122
            rbmArrViewModels = rbmTargetService.getRbmTodayArr();
1123
        }
1124
 
33953 ranu 1125
        double totalAchieved = rbmArrViewModels.stream()
1126
                .mapToDouble(RbmArrViewModel::getTotalAchievedTarget) // Replace with the actual getter method
1127
                .sum();
1128
 
1129
        double totalTarget = rbmArrViewModels.stream()
1130
                .mapToDouble(RbmArrViewModel::getTodayTarget) // Replace with the actual getter method
1131
                .sum();
1132
 
34055 ranu 1133
        List<Sold15daysOldAgingModel> sold15daysOldAgingModels = rbmTargetService.getAgingSale(LocalDate.now(), LocalDate.now().plusDays(1));
1134
        List<Our15DaysOldAgingStock> our15DaysOldAgingStocks = rbmTargetService.our15DaysAgingStock();
1135
 
34103 ranu 1136
 
1137
//        first week count of rbm partner billing
1138
        LocalDate firstOfCurrentMonth = LocalDate.now().withDayOfMonth(1);
1139
        LocalDate seventhOfCurrentMonth = LocalDate.now().withDayOfMonth(7);
1140
 
1141
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsFirstWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(firstOfCurrentMonth, seventhOfCurrentMonth);
1142
 
1143
        Map<String, Long> rbmBilledCountMapFirstWeek = rbmBilledFofoIdsModelsFirstWeek.stream()
1144
                .filter(x -> x.getStatus().equals("Billed"))
1145
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1146
 
34119 ranu 1147
        long totalFirstWeekCount = rbmBilledCountMapFirstWeek.values().stream()
1148
                .mapToLong(Long::longValue)
1149
                .sum();
1150
 
34114 ranu 1151
        Map<String, Long> rbmTargetedFofoIdCountMap = rbmBilledFofoIdsModelsFirstWeek.stream()
1152
                .collect(Collectors.groupingBy(
1153
                        RbmBilledFofoIdsModel::getRbmName, // Group by RBM Name
1154
                        Collectors.counting() // Count all fofoId entries for each RBM
1155
                ));
34103 ranu 1156
 
34119 ranu 1157
        long totalTargetedCount = rbmTargetedFofoIdCountMap.values().stream().mapToLong(x -> x.longValue()).sum();
34114 ranu 1158
 
1159
 
34103 ranu 1160
//        second week count of rbm partner billing
1161
 
1162
        LocalDate eightOfCurrentMonth = LocalDate.now().withDayOfMonth(8);
1163
        LocalDate fifteenOfCurrentMonth = LocalDate.now().withDayOfMonth(15);
1164
 
1165
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsSecondWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(eightOfCurrentMonth, fifteenOfCurrentMonth);
1166
 
1167
        Map<String, Long> rbmBilledCountMapSecondWeek = rbmBilledFofoIdsModelsSecondWeek.stream()
1168
                .filter(x -> x.getStatus().equals("Billed"))
1169
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1170
 
34119 ranu 1171
        long totalSecondWeekCount = rbmBilledCountMapSecondWeek.values().stream().mapToLong(Long::longValue).sum();
34103 ranu 1172
 
1173
//      third week count of rbm partner billing
1174
 
1175
        LocalDate sixteenOfCurrentMonth = LocalDate.now().withDayOfMonth(16);
34144 ranu 1176
        LocalDate twentySecondOfCurrentMonth = LocalDate.now().withDayOfMonth(22);
34103 ranu 1177
 
34144 ranu 1178
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsThirdWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(sixteenOfCurrentMonth, twentySecondOfCurrentMonth);
34103 ranu 1179
 
1180
        Map<String, Long> rbmBilledCountMapThirdWeek = rbmBilledFofoIdsModelsThirdWeek.stream()
1181
                .filter(x -> x.getStatus().equals("Billed"))
1182
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1183
 
34119 ranu 1184
        long totalThirdWeekCount = rbmBilledCountMapThirdWeek.values().stream().mapToLong(Long::longValue).sum();
34103 ranu 1185
 
34119 ranu 1186
 
34103 ranu 1187
        //      fourth week count of rbm partner billing
1188
 
34144 ranu 1189
        LocalDate twentyThirdOfCurrentMonth = LocalDate.now().withDayOfMonth(23);
34103 ranu 1190
        LocalDate lastDayOfCurrentMonth = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth());
1191
 
34144 ranu 1192
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsFourthWeek = rbmTargetService.getDateWiseBilledFofoIdByRbm(twentyThirdOfCurrentMonth, lastDayOfCurrentMonth);
34103 ranu 1193
 
1194
        Map<String, Long> rbmBilledCountMapFourthWeek = rbmBilledFofoIdsModelsFourthWeek.stream()
1195
                .filter(x -> x.getStatus().equals("Billed"))
1196
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1197
 
34119 ranu 1198
        long totalFourthWeekCount = rbmBilledCountMapFourthWeek.values().stream().mapToLong(x -> x.longValue()).sum();
34103 ranu 1199
 
34119 ranu 1200
 
34103 ranu 1201
//      mtd rbm partner billing
1202
 
1203
        List<RbmBilledFofoIdsModel> rbmBilledFofoIdsModelsMtd = rbmTargetService.getDateWiseBilledFofoIdByRbm(firstOfCurrentMonth, LocalDate.now());
1204
 
1205
        Map<String, Long> rbmBilledCountMapMtd = rbmBilledFofoIdsModelsMtd.stream()
1206
                .filter(x -> x.getStatus().equals("Billed"))
1207
                .collect(Collectors.groupingBy(RbmBilledFofoIdsModel::getRbmName, Collectors.counting()));
1208
 
34119 ranu 1209
        long totalMtdCount = rbmBilledCountMapMtd.values().stream().mapToLong(Long::longValue).sum();
1210
 
1211
        Map<String, Long> zeroBilledCountMap = rbmTargetedFofoIdCountMap.entrySet().stream()
1212
                .collect(Collectors.toMap(
1213
                        Map.Entry::getKey,
1214
                        entry -> entry.getValue() - rbmBilledCountMapMtd.getOrDefault(entry.getKey(), 0L)
1215
                ));
1216
 
1217
        long totalZeroBilledCount = zeroBilledCountMap.values().stream().mapToLong(Long::longValue).sum();
1218
 
33917 ranu 1219
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
1220
        model.addAttribute("rbmArrViewModels", rbmArrViewModels);
33953 ranu 1221
        model.addAttribute("totalTarget", totalTarget);
1222
        model.addAttribute("totalAchieved", totalAchieved);
34055 ranu 1223
        model.addAttribute("sold15daysOldAgingModels", sold15daysOldAgingModels);
1224
        model.addAttribute("our15DaysOldAgingStocks", our15DaysOldAgingStocks);
33917 ranu 1225
 
34114 ranu 1226
        model.addAttribute("rbmTargetedFofoIdCountMap", rbmTargetedFofoIdCountMap);
34103 ranu 1227
        model.addAttribute("rbmBilledCountMapFirstWeek", rbmBilledCountMapFirstWeek);
1228
        model.addAttribute("rbmBilledCountMapSecondWeek", rbmBilledCountMapSecondWeek);
1229
        model.addAttribute("rbmBilledCountMapThirdWeek", rbmBilledCountMapThirdWeek);
1230
        model.addAttribute("rbmBilledCountMapFourthWeek", rbmBilledCountMapFourthWeek);
1231
        model.addAttribute("rbmBilledCountMapMtd", rbmBilledCountMapMtd);
34119 ranu 1232
        model.addAttribute("zeroBilledCountMap", zeroBilledCountMap);
1233
        model.addAttribute("totalFirstWeekCount", totalFirstWeekCount);
1234
        model.addAttribute("totalTargetedCount", totalTargetedCount);
1235
        model.addAttribute("totalSecondWeekCount", totalSecondWeekCount);
1236
        model.addAttribute("totalThirdWeekCount", totalThirdWeekCount);
1237
        model.addAttribute("totalFourthWeekCount", totalFourthWeekCount);
1238
        model.addAttribute("totalMtdCount", totalMtdCount);
1239
        model.addAttribute("totalZeroBilledCount", totalZeroBilledCount);
34103 ranu 1240
 
33917 ranu 1241
        return "rbm-today-arr";
1242
    }
1243
 
1244
 
32464 tejbeer 1245
    @RequestMapping(value = "/partnerHealth", method = RequestMethod.GET)
1246
    public String partnerHealth(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1247
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30416 tejbeer 1248
 
32464 tejbeer 1249
        if (StringUtils.isEmpty(email)) {
1250
            email = loginDetails.getEmailId();
1251
        } else {
1252
            AuthUser selectedUser = authRepository.selectByEmailOrMobile(email);
30416 tejbeer 1253
 
32464 tejbeer 1254
            model.addAttribute("selectedUser", selectedUser);
30445 tejbeer 1255
 
32464 tejbeer 1256
        }
30445 tejbeer 1257
 
32464 tejbeer 1258
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30445 tejbeer 1259
 
32464 tejbeer 1260
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1261
        List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(email));
1262
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1263
        if (fofoIds != null && fofoIds.size() > 0) {
1264
            List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30420 tejbeer 1265
 
32464 tejbeer 1266
            Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate);
30416 tejbeer 1267
 
32464 tejbeer 1268
            List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
30416 tejbeer 1269
 
32464 tejbeer 1270
            LOGGER.info("remarkIds {}", remarkIds);
30416 tejbeer 1271
 
32464 tejbeer 1272
            long todayOverallCall = 0;
1273
            if (!remarkIds.isEmpty()) {
30416 tejbeer 1274
 
32464 tejbeer 1275
                if (authUser.getEmailId().equals(email)) {
30441 tejbeer 1276
 
32464 tejbeer 1277
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
1278
                } else {
30441 tejbeer 1279
 
32464 tejbeer 1280
                    todayOverallCall = partnerCollectionRemarkRepository.selectByAuthIdAndIds(authRepository.selectByEmailOrMobile(email).getId(), remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
30416 tejbeer 1281
 
32464 tejbeer 1282
                }
30416 tejbeer 1283
 
32464 tejbeer 1284
            }
1285
            ChartLeadModel cm = new ChartLeadModel();
30416 tejbeer 1286
 
32464 tejbeer 1287
            if (!foundCollectionMap.isEmpty()) {
1288
                cm = this.getCollectionCount(foundCollectionMap.values().stream().collect(Collectors.toList()));
30416 tejbeer 1289
 
32464 tejbeer 1290
            }
1291
            model.addAttribute("chartPartnerHealth", gson.toJson(cm));
1292
            Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30416 tejbeer 1293
 
32464 tejbeer 1294
            List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
1295
            if (!partnerDailyInvestments.isEmpty()) {
1296
                partnerDailyInvestmentMap = partnerDailyInvestments.stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
1297
            }
30416 tejbeer 1298
 
32464 tejbeer 1299
            Map<LocalDate, Map<Integer, PartnerCollectionPlanModel>> pcpmMap = new TreeMap<>();
1300
            for (int i = 0; i <= 6; i++) {
30416 tejbeer 1301
 
32464 tejbeer 1302
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate.minusDays(i));
30416 tejbeer 1303
 
32464 tejbeer 1304
                pcpmMap.put(startDate.minusDays(i).toLocalDate(), collectionMap);
1305
            }
30416 tejbeer 1306
 
32464 tejbeer 1307
            Map<Integer, PartnerCollectionPlanModel> todayPcpmMap = pcpmMap.get(startDate.toLocalDate());
1308
            model.addAttribute("todayPcpmMap", todayPcpmMap);
30416 tejbeer 1309
 
32464 tejbeer 1310
            TotalTargetColectionModel totalTargetCollection = partnerCollectionService.getTotalTargetCollection(todayPcpmMap, startDate);
1311
            model.addAttribute("totalPartnerTargetCollection", totalTargetCollection.getTotalTarget());
30416 tejbeer 1312
 
32464 tejbeer 1313
            model.addAttribute("totalPartnerAchievement", totalTargetCollection.getTotalAchievement());
30416 tejbeer 1314
 
32464 tejbeer 1315
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1316
            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));
1317
            List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30416 tejbeer 1318
 
32464 tejbeer 1319
            List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1320
            List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30416 tejbeer 1321
 
32464 tejbeer 1322
            salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30416 tejbeer 1323
 
32464 tejbeer 1324
            Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
34027 ranu 1325
            List<AuthUser> authUsers = new ArrayList<>();
1326
            if (!empHierarchy.isEmpty()) {
1327
                authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
1328
            }
30416 tejbeer 1329
 
1330
 
32464 tejbeer 1331
            Map<Integer, AuthUser> authUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
30416 tejbeer 1332
 
32464 tejbeer 1333
            LOGGER.info("todayPcpmMap {}", todayPcpmMap);
30416 tejbeer 1334
 
32464 tejbeer 1335
            model.addAttribute("authUsers", authUsers);
1336
            model.addAttribute("authUserMap", authUserMap);
1337
            model.addAttribute("partnerCollectionPlanMap", pcpmMap);
1338
            model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
1339
            model.addAttribute("customRetailers", customRetailers);
1340
            model.addAttribute("rankColorMap", ProfitMandiConstants.Rank_Color_Map);
1341
            model.addAttribute("todayOverallCall", todayOverallCall);
30522 tejbeer 1342
 
32464 tejbeer 1343
        }
1344
        return "partner-health";
30522 tejbeer 1345
 
32464 tejbeer 1346
    }
30522 tejbeer 1347
 
32464 tejbeer 1348
    public ChartLeadModel getCollectionCount(List<PartnerCollectionPlanModel> pcpm) throws ProfitMandiBusinessException {
30522 tejbeer 1349
 
32464 tejbeer 1350
        Map<Integer, Long> rankCount = pcpm.stream().collect(Collectors.groupingBy(x -> x.getRank(), Collectors.mapping(PartnerCollectionPlanModel::getRank, Collectors.counting())));
30522 tejbeer 1351
 
32464 tejbeer 1352
        ChartLeadModel cm = new ChartLeadModel();
30522 tejbeer 1353
 
32464 tejbeer 1354
        List<String> labels = new ArrayList<>();
1355
        labels.add("Plan for Today");
1356
        labels.add("Carry Forward");
1357
        labels.add("Untouched");
1358
        labels.add("Plan for Future");
1359
        labels.add("Normal");
30522 tejbeer 1360
 
32464 tejbeer 1361
        List<String> backgroundColor = new ArrayList<>();
1362
        List<Long> values = new ArrayList<>();
30522 tejbeer 1363
 
32464 tejbeer 1364
        for (String label : labels) {
30522 tejbeer 1365
 
32464 tejbeer 1366
            if (label.equals("Plan for Today")) {
1367
                backgroundColor.add("#007bff");
1368
                values.add(rankCount.get(1));
1369
            }
1370
            if (label.equals("Carry Forward")) {
1371
                backgroundColor.add("#ffc107");
1372
                values.add(rankCount.get(2));
1373
            }
1374
            if (label.equals("Untouched")) {
1375
                backgroundColor.add("#dc3545");
1376
                values.add(rankCount.get(3));
1377
            }
1378
            if (label.equals("Plan for Future")) {
1379
                backgroundColor.add("#6c757d");
1380
                values.add(rankCount.get(4));
1381
            }
1382
            if (label.equals("Normal")) {
1383
                backgroundColor.add("White");
1384
                values.add(rankCount.get(5));
1385
            }
30522 tejbeer 1386
 
32464 tejbeer 1387
        }
30522 tejbeer 1388
 
32464 tejbeer 1389
        LOGGER.info("backgroundColor" + backgroundColor);
1390
        LOGGER.info("labelsChartLead" + labels);
1391
        LeadStatusData data = new LeadStatusData();
1392
        data.setData(values);
1393
        data.setBackgroundColor(backgroundColor);
1394
        data.setLabel("DataSet 1");
30522 tejbeer 1395
 
32464 tejbeer 1396
        PieLables label = new PieLables();
1397
        label.setFontColor("black");
1398
        label.setFontSize(15);
30522 tejbeer 1399
 
32464 tejbeer 1400
        Legend legend = new Legend();
1401
        legend.setLabels(label);
1402
        legend.setPosition("left");
30522 tejbeer 1403
 
32464 tejbeer 1404
        List<LeadStatusData> dataList = new ArrayList<>();
1405
        dataList.add(data);
30522 tejbeer 1406
 
32464 tejbeer 1407
        DataLeadModel datasets = new DataLeadModel();
1408
        datasets.setDatasets(dataList);
1409
        datasets.setLabels(labels);
30522 tejbeer 1410
 
32464 tejbeer 1411
        OptionModel om = new OptionModel();
1412
        om.setLegend(legend);
30522 tejbeer 1413
 
32464 tejbeer 1414
        cm.setType("pie");
1415
        cm.setData(datasets);
1416
        cm.setOptions(om);
30522 tejbeer 1417
 
32464 tejbeer 1418
        return cm;
1419
    }
30522 tejbeer 1420
 
32464 tejbeer 1421
    @RequestMapping(value = "/franchiseVisit", method = RequestMethod.GET)
1422
    public String franchiseVisit(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1423
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30522 tejbeer 1424
 
32464 tejbeer 1425
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30522 tejbeer 1426
 
32464 tejbeer 1427
        List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1428
        List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30522 tejbeer 1429
 
32464 tejbeer 1430
        salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30522 tejbeer 1431
 
32464 tejbeer 1432
        List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30522 tejbeer 1433
 
32464 tejbeer 1434
        Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
30522 tejbeer 1435
 
32464 tejbeer 1436
        List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
30522 tejbeer 1437
 
32464 tejbeer 1438
        Map<Integer, String> monthValueMap = new HashMap<>();
1439
        for (int i = 0; i <= 5; i++) {
1440
            LocalDateTime startOfMonth = LocalDateTime.now().withDayOfMonth(1).minusMonths(i);
1441
            monthValueMap.put(i, startOfMonth.format(DateTimeFormatter.ofPattern("MMM''uu")));
1442
        }
30522 tejbeer 1443
 
32464 tejbeer 1444
        model.addAttribute("authUsers", authUsers);
1445
        model.addAttribute("monthValueMap", monthValueMap);
30522 tejbeer 1446
 
32464 tejbeer 1447
        return "franchise-visit";
30522 tejbeer 1448
 
32464 tejbeer 1449
    }
30522 tejbeer 1450
 
32464 tejbeer 1451
    @RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET)
1452
    public String getFranchiseVisit(HttpServletRequest request, @RequestParam(name = "authId", required = false) int authId, int yearMonth, Model model) throws Exception {
30522 tejbeer 1453
 
32464 tejbeer 1454
        LocalDateTime startDate = LocalDate.now().minusMonths(8).withDayOfMonth(1).atStartOfDay();
1455
        LocalDateTime endDate = startDate.plusMonths(1).withDayOfMonth(1).toLocalDate().atStartOfDay();
30522 tejbeer 1456
 
32464 tejbeer 1457
        DateRangeModel drm = DateRangeModel.of(startDate, endDate);
30522 tejbeer 1458
 
32464 tejbeer 1459
        List<FranchiseeVisit> visits = franchiseeVisitRepository.selectByAuthUserAndDateRange(drm, authId);
30522 tejbeer 1460
 
32464 tejbeer 1461
        if (!visits.isEmpty()) {
30522 tejbeer 1462
 
32464 tejbeer 1463
            Map<Integer, List<FranchiseeVisit>> franchiseeVisitMap = visits.stream().collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().getDayOfMonth()));
30522 tejbeer 1464
 
32464 tejbeer 1465
            model.addAttribute("franchiseeVisitMap", franchiseeVisitMap);
30522 tejbeer 1466
 
32464 tejbeer 1467
        }
30771 amit.gupta 1468
 
32464 tejbeer 1469
        model.addAttribute("visits", visits);
1470
        model.addAttribute("monthLength", startDate.toLocalDate().lengthOfMonth());
30771 amit.gupta 1471
 
32464 tejbeer 1472
        // Calender
30771 amit.gupta 1473
 
32464 tejbeer 1474
        int Year = startDate.getYear(); // year
1475
        int startDayOfMonth = 5;
1476
        int spaces = startDayOfMonth;
30771 amit.gupta 1477
 
32464 tejbeer 1478
        int month = startDate.getMonthValue();
30771 amit.gupta 1479
 
32464 tejbeer 1480
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
30771 amit.gupta 1481
 
32464 tejbeer 1482
        LOGGER.info("visits {} ", visits);
30771 amit.gupta 1483
 
32464 tejbeer 1484
        if ((((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) && month == 2) {
1485
            days[month] = 29;
1486
        }
30771 amit.gupta 1487
 
32464 tejbeer 1488
        spaces = (days[month - 1] + spaces) % 7;
30771 amit.gupta 1489
 
32464 tejbeer 1490
        model.addAttribute("month", month);
1491
        model.addAttribute("spaces", spaces);
1492
        model.addAttribute("days", days);
30771 amit.gupta 1493
 
32464 tejbeer 1494
        return "franchise-visit-container";
30771 amit.gupta 1495
 
32464 tejbeer 1496
    }
31249 tejbeer 1497
 
32464 tejbeer 1498
    @RequestMapping(value = "/getFranchiseeActivity", method = RequestMethod.GET)
1499
    public String getFranchiseeActivity(HttpServletRequest request, int visitId, Model model) throws Exception {
31249 tejbeer 1500
 
32464 tejbeer 1501
        List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(visitId);
31249 tejbeer 1502
 
32464 tejbeer 1503
        FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(visitId);
31249 tejbeer 1504
 
32464 tejbeer 1505
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1506
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
31249 tejbeer 1507
 
32464 tejbeer 1508
        model.addAttribute("franchiseeVisit", franchiseeVisit);
1509
        model.addAttribute("franchiseeActivity", franchiseeActivities.get(0));
31249 tejbeer 1510
 
32464 tejbeer 1511
        return "franchie-visit-detail";
31249 tejbeer 1512
 
32464 tejbeer 1513
    }
31249 tejbeer 1514
 
32464 tejbeer 1515
    @RequestMapping(value = "/indent/today_target", method = RequestMethod.GET)
1516
    public String todayTarget(HttpServletRequest request, Model model) throws Exception {
1517
        List<RBMPerformanceSummaryModel> summaryModels = new ArrayList<>();
1518
        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());
1519
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1520
        List<TeamCommitmentModel> teamCommitmentModels = partnerCollectionPlanRepository.selectTeamCommitmentByDate(LocalDate.now());
1521
        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())));
1522
        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())));
1523
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1524
        for (int rbmAuthId : rbmPositionsAuthIds) {
1525
            RBMPerformanceSummaryModel rbmPerformanceSummaryModel = new RBMPerformanceSummaryModel();
1526
            rbmPerformanceSummaryModel.setAuthId(rbmAuthId);
1527
            AuthUser authUser = authRepository.selectById(rbmAuthId);
1528
            rbmPerformanceSummaryModel.setAuthName(authUser.getFullName());
33844 ranu 1529
            List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(authUser.getEmailId()));
31249 tejbeer 1530
 
32464 tejbeer 1531
            if (fofoIds.size() > 0) {
1532
                fofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
31249 tejbeer 1533
 
32464 tejbeer 1534
                /*
1535
                 * Map<Integer, PartnerCollectionPlanModel> foundCollectionMap =
1536
                 * partnerCollectionService .getCollectionMap(fofoIds, startDate);
1537
                 */
31249 tejbeer 1538
 
33844 ranu 1539
                List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIds);
1540
 
32464 tejbeer 1541
                LOGGER.info("remarkIds {}", remarkIds);
31249 tejbeer 1542
 
32464 tejbeer 1543
                long todayOverallCall = 0;
1544
                if (!remarkIds.isEmpty()) {
1545
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
31249 tejbeer 1546
 
32464 tejbeer 1547
                }
31249 tejbeer 1548
 
32464 tejbeer 1549
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIds, startDate);
31249 tejbeer 1550
 
32464 tejbeer 1551
                ChartLeadModel cm = this.getCollectionCount(collectionMap.values().stream().collect(Collectors.toList()));
31249 tejbeer 1552
 
32464 tejbeer 1553
                long collectionTarget = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null).collect(Collectors.summingLong(x -> x.getTargetPlan()));
1554
                long collection = collectionMap.values().stream().filter(
1555
                        x -> x.getTargetPlan() != null && x.getTargetPlan() != 0 && x.getAchievementPlan() != null).collect(Collectors.summingLong(x -> x.getAchievementPlan()));
1556
                rbmPerformanceSummaryModel.setChartLeadModel(cm);
1557
                rbmPerformanceSummaryModel.setPartnersCommunicated(todayOverallCall);
1558
                rbmPerformanceSummaryModel.setCollectionTarget(collectionTarget);
1559
                rbmPerformanceSummaryModel.setCollection(collection);
1560
                rbmPerformanceSummaryModel.setSecondaryTarget(rbmSecondaryTargetMap.get(rbmAuthId) == null ? 0 : rbmSecondaryTargetMap.get(rbmAuthId).floatValue());
1561
                rbmPerformanceSummaryModel.setSecondary(
1562
                        rbmSecondaryMap.get(rbmAuthId) == null ? 0 : rbmSecondaryMap.get(rbmAuthId).floatValue());
1563
                summaryModels.add(rbmPerformanceSummaryModel);
1564
                // cm.getData().getDatasets().get(0).getData().;
1565
                // cm.getData().getDatasets().get(0).getBackgroundColor();
1566
                // cm.getData().getLabels()
31249 tejbeer 1567
 
32464 tejbeer 1568
            }
1569
        }
1570
        model.addAttribute("summaryModels", summaryModels);
1571
        return "today_target";
1572
    }
31249 tejbeer 1573
 
32464 tejbeer 1574
    @RequestMapping(value = "/visitPlan", method = RequestMethod.GET)
1575
    public String visitPlan(HttpServletRequest request, Model model) throws Exception {
31249 tejbeer 1576
 
32464 tejbeer 1577
        return "visit-request-plan";
1578
    }
31249 tejbeer 1579
 
32464 tejbeer 1580
    @RequestMapping(value = "/visit/getVisitPlan", method = RequestMethod.GET)
1581
    public String getVisitPlan(HttpServletRequest request, @RequestParam LocalDate date, Model model) throws Exception {
1582
        List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(date);
31249 tejbeer 1583
 
32464 tejbeer 1584
        List<Integer> leadIds = visitRequests.stream().filter(x -> x.getVisitType().equals("lead")).map(x -> x.getVisitId()).collect(Collectors.toList());
1585
        Map<Integer, Lead> leadMap = new HashMap<>();
1586
        if (!leadIds.isEmpty()) {
1587
            List<Lead> leads = leadRepository.selectAllByIds(leadIds);
31249 tejbeer 1588
 
32464 tejbeer 1589
            for (Lead lead : leads) {
1590
                List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
1591
                lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1592
                lead.setLeadActivity(leadActivities.get(0));
31249 tejbeer 1593
 
32464 tejbeer 1594
                leadMap.put(lead.getId(), lead);
1595
            }
31249 tejbeer 1596
 
32464 tejbeer 1597
        }
1598
        List<Integer> franchiseeIds = visitRequests.stream().filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId()).collect(Collectors.toList());
1599
        Map<Integer, FranchiseeVisit> franchiseeVisitsMap = new HashMap<>();
1600
        if (!franchiseeIds.isEmpty()) {
1601
            List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1602
            LOGGER.info("franchiseeVisits {}", franchiseeVisits);
31249 tejbeer 1603
 
32464 tejbeer 1604
            for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1605
                List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(franchiseeVisit.getId());
1606
                LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1607
 
1608
                franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1609
                franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
1610
 
1611
                franchiseeVisitsMap.put(franchiseeVisit.getId(), franchiseeVisit);
1612
            }
1613
 
1614
        }
1615
 
1616
        Map<Integer, List<VisitRequest>> visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy()));
1617
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
1618
        List<UserVisitModel> userVisits = new ArrayList<>();
1619
 
1620
        for (AuthUser authUser : authUsers) {
1621
 
1622
            List<VisitRequest> authVisitRequests = visitRequestMap.get(authUser.getId());
1623
 
1624
            if (authVisitRequests != null) {
1625
                UserVisitModel userVisitModel = new UserVisitModel();
1626
                userVisitModel.setAuthUser(authUser.getFullName());
1627
                List<VisitDescriptionModel> visitDescriptions = new ArrayList<>();
1628
 
1629
                for (VisitRequest authVisitRequest : authVisitRequests) {
1630
                    VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1631
                    visitDescriptionModel.setVisitId(authVisitRequest.getVisitId());
1632
 
1633
                    if (authVisitRequest.getVisitType().equals("lead")) {
1634
                        Lead lead = leadMap.get(authVisitRequest.getVisitId());
1635
 
1636
                        visitDescriptionModel.setVisitName(lead.getFirstName());
1637
                        visitDescriptionModel.setCity(lead.getCity());
1638
                        visitDescriptionModel.setState(lead.getState());
1639
                        visitDescriptionModel.setScheduleTime(lead.getScheduledTimestamp());
1640
                        visitDescriptionModel.setRemarks(lead.getLeadActivity().getRemark());
1641
 
1642
                    } else {
1643
                        FranchiseeVisit franchiseeVisit = franchiseeVisitsMap.get(authVisitRequest.getVisitId());
1644
                        CustomRetailer customRetailer = retailerService.getFofoRetailer(franchiseeVisit.getFofoId());
1645
 
1646
                        visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
1647
                        visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1648
                        visitDescriptionModel.setState(customRetailer.getAddress().getState());
1649
                        visitDescriptionModel.setScheduleTime(franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1650
                        visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1651
 
1652
                    }
1653
 
1654
                    if (authVisitRequest.getActionedBy() != 0) {
1655
                        AuthUser au = authRepository.selectById(authVisitRequest.getActionedBy());
1656
 
1657
                        visitDescriptionModel.setActionBy(au.getFullName());
1658
                    }
1659
                    visitDescriptionModel.setStatus(authVisitRequest.getStatus());
1660
                    visitDescriptionModel.setVisitType(authVisitRequest.getVisitType());
1661
                    visitDescriptions.add(visitDescriptionModel);
1662
                }
1663
 
1664
                userVisitModel.setVisitDescriptions(visitDescriptions);
1665
                userVisits.add(userVisitModel);
1666
            }
1667
 
1668
        }
1669
 
1670
        model.addAttribute("userVisits", userVisits);
1671
 
1672
        return "visit-request-plan";
1673
    }
25979 tejbeer 1674
}