Subversion Repositories SmartDukaan

Rev

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