Subversion Repositories SmartDukaan

Rev

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