Subversion Repositories SmartDukaan

Rev

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