Subversion Repositories SmartDukaan

Rev

Rev 32471 | Rev 33843 | 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);
33223 amit.gupta 383
        model.addAttribute("leads", leads);
32464 tejbeer 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());
32471 tejbeer 678
        if (createRefferalRequest.getColorCheck() == true) {
679
            lead.setColor("Green");
680
        } else {
681
            lead.setColor("Yellow");
682
        }
32464 tejbeer 683
        // change
684
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
685
        String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
686
        lead.setCreatedBy(authUserName);
687
        lead.setAuthId(authUser.getId());
688
        LOGGER.info("lead --- {}", lead);
689
        leadRepository.persist(lead);
690
        LeadActivity leadActivity = new LeadActivity();
691
        leadActivity.setLeadId(lead.getId());
692
        leadActivity.setRemark(createRefferalRequest.getRemark());
693
        leadActivity.setAuthId(authUser.getId());
32471 tejbeer 694
 
32464 tejbeer 695
        LOGGER.info("createRefferalRequest" + createRefferalRequest.getCommunicationType());
25979 tejbeer 696
 
32464 tejbeer 697
        if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
698
            leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
699
            leadActivity.setCommunicationType(createRefferalRequest.getCommunicationType());
25979 tejbeer 700
 
32464 tejbeer 701
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
702
                visitRequestRepository.createVisitRequest(lead.getId(), "lead", lead.getAssignTo(), createRefferalRequest.getSchelduleTimestamp());
703
            }
704
        } else {
705
            leadActivity.setSchelduleTimestamp(null);
706
        }
707
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
708
        leadActivityRepository.persist(leadActivity);
25979 tejbeer 709
 
32464 tejbeer 710
        LeadDetailModel leadDetail = new LeadDetailModel();
711
        leadDetail.setLeadId(lead.getId());
712
        leadDetail.setOutletName(createRefferalRequest.getOutletName());
713
        leadDetail.setCounterSize(createRefferalRequest.getCounterSize());
31249 tejbeer 714
 
31370 tejbeer 715
 
32464 tejbeer 716
        leadDetail.setFrontp(createRefferalRequest.getFrontp());
717
        leadDetail.setFrontWithMarket(createRefferalRequest.getFrontWithMarket());
31370 tejbeer 718
 
719
 
32464 tejbeer 720
        leadDetail.setInternalLongShot(createRefferalRequest.getInternalLongShot());
29598 tejbeer 721
 
32464 tejbeer 722
        leadDetail.setInternalLeftWall(createRefferalRequest.getInternalLeftWall());
27605 tejbeer 723
 
32464 tejbeer 724
        leadDetail.setInternalRightWall(createRefferalRequest.getInternalRightWall());
725
        List<LeadBrandModel> brandModels = new ArrayList<LeadBrandModel>();
25979 tejbeer 726
 
32464 tejbeer 727
        for (LeadBrandModel leadBrandModel : createRefferalRequest.getLeadBrands()) {
29598 tejbeer 728
 
32464 tejbeer 729
            LeadBrandModel leadBrand = new LeadBrandModel();
730
            leadBrand.setBrand(leadBrandModel.getBrand());
731
            leadBrand.setValue(leadBrandModel.getValue());
25979 tejbeer 732
 
32464 tejbeer 733
            brandModels.add(leadBrand);
29598 tejbeer 734
 
32464 tejbeer 735
        }
29598 tejbeer 736
 
32464 tejbeer 737
        leadDetail.setLeadBrands(brandModels);
32471 tejbeer 738
        if (!lead.getStatus().equals(LeadStatus.notInterested)) {
739
            leadRepository.persistLeadDetail(leadDetail, authUser);
740
        }
32464 tejbeer 741
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
29598 tejbeer 742
 
32464 tejbeer 743
        return "response";
29598 tejbeer 744
 
32464 tejbeer 745
    }
29476 manish 746
 
29473 manish 747
 
32464 tejbeer 748
    @RequestMapping(value = "/editLead", method = RequestMethod.POST)
749
    public String EditLead(HttpServletRequest request, @RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
750
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
29426 manish 751
 
32464 tejbeer 752
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
29426 manish 753
 
32464 tejbeer 754
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(createLeadActivityRequest.getId());
29426 manish 755
 
32464 tejbeer 756
        if (leadDetail == null && !createLeadActivityRequest.getStatus().equals(LeadStatus.notInterested)) {
29426 manish 757
 
32464 tejbeer 758
            throw new ProfitMandiBusinessException("LeadDetail", "", "Please fill lead detail");
759
        }
29445 manish 760
 
32464 tejbeer 761
        LeadActivity leadActivity = new LeadActivity();
762
        leadActivity.setLeadId(createLeadActivityRequest.getId());
763
        leadActivity.setRemark(createLeadActivityRequest.getRemark());
29598 tejbeer 764
 
32464 tejbeer 765
        LOGGER.info("createRefferalRequest" + createLeadActivityRequest);
29598 tejbeer 766
 
32464 tejbeer 767
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
768
            leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
769
            leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
770
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
771
                visitRequestRepository.createVisitRequest(createLeadActivityRequest.getId(), "lead", createLeadActivityRequest.getAssignTo(), createLeadActivityRequest.getScheldule());
772
            }
773
        } else {
774
            leadActivity.setSchelduleTimestamp(null);
775
        }
776
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
777
        leadActivity.setAuthId(authUser.getId());
778
        leadActivityRepository.persist(leadActivity);
779
        Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
780
        lead.setAssignTo(createLeadActivityRequest.getAssignTo());
781
        lead.setStatus(createLeadActivityRequest.getStatus());
32471 tejbeer 782
        if (createLeadActivityRequest.getColorCheck() == true) {
783
            lead.setColor("Green");
784
        } else {
785
            lead.setColor("Yellow");
786
        }
32464 tejbeer 787
        lead.setNotinterestedReason(createLeadActivityRequest.getReason());
788
        lead.setUpdatedTimestamp(LocalDateTime.now());
29426 manish 789
 
32464 tejbeer 790
        lead = leadRepository.selectById(createLeadActivityRequest.getId());
29426 manish 791
 
32464 tejbeer 792
        int authId = 0;
793
        if (lead != null) {
29426 manish 794
 
32464 tejbeer 795
            authId = lead.getAssignTo();
796
            Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
29426 manish 797
 
32464 tejbeer 798
            List<LeadActivity> leadActivitys = leadActivityRepository.selectBYLeadId(lead.getId());
29426 manish 799
 
32464 tejbeer 800
            if (!leadActivitys.isEmpty()) {
801
                leadActivityMap.put(lead.getId(), leadActivitys.get(0));
802
            }
29426 manish 803
 
32464 tejbeer 804
            Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
805
            AuthUser AuthUser = authRepository.selectById(authId);
29426 manish 806
 
32464 tejbeer 807
            authIdAndAuthUserMap.put(AuthUser.getId(), AuthUser);
29426 manish 808
 
32464 tejbeer 809
            model.addAttribute("leadActivityMap", leadActivityMap);
810
            model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
811
        }
30185 tejbeer 812
 
33223 amit.gupta 813
        model.addAttribute("lead", lead);
30185 tejbeer 814
 
32464 tejbeer 815
        return "edit-lead";
30185 tejbeer 816
 
32464 tejbeer 817
    }
31370 tejbeer 818
 
32464 tejbeer 819
    @RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
820
    public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
821
        List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName()).collect(Collectors.toList());
31370 tejbeer 822
 
32464 tejbeer 823
        List<List<?>> rows = new ArrayList<>();
31496 tejbeer 824
 
32464 tejbeer 825
        List<LeadSource> lss = LeadSource.enumValues;
31370 tejbeer 826
 
32464 tejbeer 827
        for (LeadSource ls : lss) {
828
            rows.add(Arrays.asList("-", "-", "-", "-", "-", "-", "-", ls));
31478 tejbeer 829
 
32464 tejbeer 830
        }
831
        for (String stateName : stateNames) {
832
            rows.add(Arrays.asList("-", "-", "-", "-", stateName, "-", "-", "-"));
31478 tejbeer 833
 
32464 tejbeer 834
        }
31478 tejbeer 835
 
32464 tejbeer 836
        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 837
 
32464 tejbeer 838
        final HttpHeaders headers = new HttpHeaders();
839
        headers.set("Content-Type", "text/csv");
840
        headers.set("Content-disposition", "inline; filename=leads.format.csv");
841
        headers.setContentLength(baos.toByteArray().length);
31478 tejbeer 842
 
32464 tejbeer 843
        final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
844
        final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
845
        return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
31478 tejbeer 846
 
32464 tejbeer 847
    }
31478 tejbeer 848
 
32464 tejbeer 849
    @RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
850
    public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response, @RequestPart MultipartFile file) throws Throwable {
31478 tejbeer 851
 
32464 tejbeer 852
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
853
        String email = loginDetails.getEmailId();
31478 tejbeer 854
 
32464 tejbeer 855
        AuthUser createdBy = authRepository.selectByEmailOrMobile(email);
31478 tejbeer 856
 
32464 tejbeer 857
        LOGGER.info("file" + file.toString());
31478 tejbeer 858
 
32464 tejbeer 859
        String fileName = file.getName();
31370 tejbeer 860
 
32464 tejbeer 861
        String fileNames = file.getOriginalFilename();
31370 tejbeer 862
 
32464 tejbeer 863
        LOGGER.info("fileName" + fileName);
864
        LOGGER.info("fileNames" + fileNames);
31370 tejbeer 865
 
32464 tejbeer 866
        List<CSVRecord> records = FileUtil.readFile(file);
31370 tejbeer 867
 
32464 tejbeer 868
        for (CSVRecord record : records) {
31370 tejbeer 869
 
32464 tejbeer 870
            Lead lead = new Lead();
871
            lead.setFirstName(record.get(0));
872
            lead.setLastName(record.get(1));
873
            lead.setAddress(record.get(2));
874
            lead.setCity(record.get(3));
875
            lead.setState(record.get(4));
876
            lead.setLeadMobile(record.get(5));
877
            LOGGER.info("record" + record.get(6));
31370 tejbeer 878
 
32464 tejbeer 879
            AuthUser assignTo = authRepository.selectByEmailOrMobile(record.get(6));
31370 tejbeer 880
 
32464 tejbeer 881
            if (assignTo == null) {
882
                throw new ProfitMandiBusinessException("Assign To ", record.get(6), "email id not exist");
883
            }
31370 tejbeer 884
 
32464 tejbeer 885
            lead.setAssignTo(assignTo.getId());
886
            lead.setSource(record.get(7));
31370 tejbeer 887
 
32464 tejbeer 888
            lead.setCreatedTimestamp(LocalDateTime.now());
31370 tejbeer 889
 
32464 tejbeer 890
            lead.setUpdatedTimestamp(LocalDateTime.now());
891
            lead.setStatus(LeadStatus.pending);
892
            lead.setColor("yellow");
893
            // change
894
            lead.setCreatedBy(createdBy.getFullName());
895
            lead.setAuthId(createdBy.getId());
31370 tejbeer 896
 
32464 tejbeer 897
            leadRepository.persist(lead);
31370 tejbeer 898
 
32464 tejbeer 899
            LeadActivity leadActivity = new LeadActivity();
900
            leadActivity.setLeadId(lead.getId());
901
            leadActivity.setRemark("New Lead");
902
            leadActivity.setSchelduleTimestamp(null);
31370 tejbeer 903
 
32464 tejbeer 904
            leadActivity.setCreatedTimestamp(LocalDateTime.now());
905
            leadActivityRepository.persist(leadActivity);
906
            model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 907
 
32464 tejbeer 908
        }
31370 tejbeer 909
 
32464 tejbeer 910
        model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
31370 tejbeer 911
 
32464 tejbeer 912
        return "response";
31370 tejbeer 913
 
32464 tejbeer 914
    }
31370 tejbeer 915
 
32464 tejbeer 916
    @RequestMapping(value = "/teamCommitment", method = RequestMethod.GET)
917
    public String teamCommitments(HttpServletRequest request, Model model) throws Exception {
31370 tejbeer 918
 
32464 tejbeer 919
        return "team-commitment";
31370 tejbeer 920
 
32464 tejbeer 921
    }
31370 tejbeer 922
 
32464 tejbeer 923
    @RequestMapping(value = "/leadDetail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
924
    public String leadDetail(HttpServletRequest request, @RequestBody LeadDetailModel leadDetailModel, Model model) throws Exception {
31370 tejbeer 925
 
32464 tejbeer 926
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
927
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
31370 tejbeer 928
 
32471 tejbeer 929
        leadRepository.persistLeadDetail(leadDetailModel, authUser);
32464 tejbeer 930
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31370 tejbeer 931
 
32464 tejbeer 932
        return "response";
31370 tejbeer 933
 
32464 tejbeer 934
    }
31370 tejbeer 935
 
32464 tejbeer 936
    @RequestMapping(value = "/getLeadDetail", method = RequestMethod.GET)
937
    public String getLeadDetail(HttpServletRequest request, Model model) throws Exception {
938
        List<Integer> followUpleadIds = leadRepository.selectAllByStatus(LeadStatus.followUp).stream().map(x -> x.getId()).collect(Collectors.toList());
939
        List<LeadDetail> leadDetails = leadDetailRepository.selectByLeadIds(followUpleadIds);
31370 tejbeer 940
 
32464 tejbeer 941
        List<DBObject> mobileBrands = mongoClient.getAllBrandsToDisplay(3);
31370 tejbeer 942
 
32464 tejbeer 943
        List<String> brands = mobileBrands.stream().map(x -> (String) x.get("name")).collect(Collectors.toList());
31370 tejbeer 944
 
32464 tejbeer 945
        model.addAttribute("brands", brands);
946
        if (!leadDetails.isEmpty()) {
31370 tejbeer 947
 
32464 tejbeer 948
            List<Integer> detailsIds = leadDetails.stream().map(x -> x.getId()).collect(Collectors.toList());
31370 tejbeer 949
 
32464 tejbeer 950
            List<Integer> leadIds = leadDetails.stream().map(x -> x.getLeadId()).collect(Collectors.toList());
31370 tejbeer 951
 
32464 tejbeer 952
            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 953
 
32464 tejbeer 954
            Map<Integer, Optional<LeadActivity>> leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream().collect(Collectors.groupingBy(x -> x.getLeadId(), Collectors.maxBy(Comparator.comparing(LeadActivity::getId))));
31370 tejbeer 955
 
32464 tejbeer 956
            model.addAttribute("leadActivityMap", leadActivityMap);
30185 tejbeer 957
 
32464 tejbeer 958
            List<LeadBrand> leadBrands = leadBrandRepository.selectByLeadDetailId(detailsIds);
30185 tejbeer 959
 
32464 tejbeer 960
            LOGGER.info("leadBrands {}" + leadBrands);
30185 tejbeer 961
 
32464 tejbeer 962
            Map<Integer, Map<String, Integer>> leadDetailBrandValue = new HashMap<>();
30416 tejbeer 963
 
32464 tejbeer 964
            Map<Integer, List<LeadBrand>> leadDetail = leadBrands.stream().collect(Collectors.groupingBy(x -> x.getLeadDetailId(), Collectors.toList()));
30416 tejbeer 965
 
32464 tejbeer 966
            for (Entry<Integer, List<LeadBrand>> leadDetailEntry : leadDetail.entrySet()) {
30416 tejbeer 967
 
32464 tejbeer 968
                Map<String, Integer> brandValue = new HashMap<>();
30416 tejbeer 969
 
32464 tejbeer 970
                for (LeadBrand leadBrand : leadDetailEntry.getValue()) {
971
                    brandValue.put(leadBrand.getBrand(), leadBrand.getValue());
30416 tejbeer 972
 
32464 tejbeer 973
                }
974
                leadDetailBrandValue.put(leadDetailEntry.getKey(), brandValue);
975
            }
30416 tejbeer 976
 
32464 tejbeer 977
            LOGGER.info("leadDetailBrandValue {}" + leadDetailBrandValue);
30416 tejbeer 978
 
32464 tejbeer 979
            model.addAttribute("leadDetailBrandValue", leadDetailBrandValue);
30416 tejbeer 980
 
32464 tejbeer 981
            model.addAttribute("leadMap", leadMap);
982
        }
30434 tejbeer 983
 
32464 tejbeer 984
        model.addAttribute("leadDetails", leadDetails);
30434 tejbeer 985
 
32464 tejbeer 986
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
987
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
30434 tejbeer 988
 
32464 tejbeer 989
        return "lead-detail";
30458 tejbeer 990
 
32464 tejbeer 991
    }
30458 tejbeer 992
 
32464 tejbeer 993
    @RequestMapping(value = "/getLeadDetailByLeadId", method = RequestMethod.GET)
994
    public ResponseEntity<?> getLeadDetailByLeadId(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
30458 tejbeer 995
 
32464 tejbeer 996
        LeadDetail leadDetail = leadDetailRepository.selectByLeadId(leadId);
997
        return responseSender.ok(leadDetail);
30458 tejbeer 998
 
32464 tejbeer 999
    }
30434 tejbeer 1000
 
32464 tejbeer 1001
    @RequestMapping(value = "/getTeamCommitment", method = RequestMethod.GET)
1002
    public String getTeamCommitments(HttpServletRequest request, @RequestParam LocalDateTime date, Model model) throws Exception {
30781 tejbeer 1003
 
32464 tejbeer 1004
        List<TeamCommitmentModel> commitments = partnerCollectionPlanRepository.selectTeamCommitmentByDate(date.toLocalDate());
30416 tejbeer 1005
 
32464 tejbeer 1006
        model.addAttribute("commitments", commitments);
1007
        return "team-commitment-table";
30416 tejbeer 1008
 
32464 tejbeer 1009
    }
30416 tejbeer 1010
 
32464 tejbeer 1011
    @RequestMapping(value = "/partnerHealth", method = RequestMethod.GET)
1012
    public String partnerHealth(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1013
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30416 tejbeer 1014
 
32464 tejbeer 1015
        if (StringUtils.isEmpty(email)) {
1016
            email = loginDetails.getEmailId();
1017
        } else {
1018
            AuthUser selectedUser = authRepository.selectByEmailOrMobile(email);
30416 tejbeer 1019
 
32464 tejbeer 1020
            model.addAttribute("selectedUser", selectedUser);
30445 tejbeer 1021
 
32464 tejbeer 1022
        }
30445 tejbeer 1023
 
32464 tejbeer 1024
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30445 tejbeer 1025
 
32464 tejbeer 1026
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1027
        List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(email));
1028
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1029
        if (fofoIds != null && fofoIds.size() > 0) {
1030
            List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30420 tejbeer 1031
 
32464 tejbeer 1032
            Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate);
30416 tejbeer 1033
 
32464 tejbeer 1034
            List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
30416 tejbeer 1035
 
32464 tejbeer 1036
            LOGGER.info("remarkIds {}", remarkIds);
30416 tejbeer 1037
 
32464 tejbeer 1038
            long todayOverallCall = 0;
1039
            if (!remarkIds.isEmpty()) {
30416 tejbeer 1040
 
32464 tejbeer 1041
                if (authUser.getEmailId().equals(email)) {
30441 tejbeer 1042
 
32464 tejbeer 1043
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
1044
                } else {
30441 tejbeer 1045
 
32464 tejbeer 1046
                    todayOverallCall = partnerCollectionRemarkRepository.selectByAuthIdAndIds(authRepository.selectByEmailOrMobile(email).getId(), remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
30416 tejbeer 1047
 
32464 tejbeer 1048
                }
30416 tejbeer 1049
 
32464 tejbeer 1050
            }
1051
            ChartLeadModel cm = new ChartLeadModel();
30416 tejbeer 1052
 
32464 tejbeer 1053
            if (!foundCollectionMap.isEmpty()) {
1054
                cm = this.getCollectionCount(foundCollectionMap.values().stream().collect(Collectors.toList()));
30416 tejbeer 1055
 
32464 tejbeer 1056
            }
1057
            model.addAttribute("chartPartnerHealth", gson.toJson(cm));
1058
            Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30416 tejbeer 1059
 
32464 tejbeer 1060
            List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
1061
            if (!partnerDailyInvestments.isEmpty()) {
1062
                partnerDailyInvestmentMap = partnerDailyInvestments.stream().collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
1063
            }
30416 tejbeer 1064
 
32464 tejbeer 1065
            Map<LocalDate, Map<Integer, PartnerCollectionPlanModel>> pcpmMap = new TreeMap<>();
1066
            for (int i = 0; i <= 6; i++) {
30416 tejbeer 1067
 
32464 tejbeer 1068
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIdList, startDate.minusDays(i));
30416 tejbeer 1069
 
32464 tejbeer 1070
                pcpmMap.put(startDate.minusDays(i).toLocalDate(), collectionMap);
1071
            }
30416 tejbeer 1072
 
32464 tejbeer 1073
            Map<Integer, PartnerCollectionPlanModel> todayPcpmMap = pcpmMap.get(startDate.toLocalDate());
1074
            model.addAttribute("todayPcpmMap", todayPcpmMap);
30416 tejbeer 1075
 
32464 tejbeer 1076
            TotalTargetColectionModel totalTargetCollection = partnerCollectionService.getTotalTargetCollection(todayPcpmMap, startDate);
1077
            model.addAttribute("totalPartnerTargetCollection", totalTargetCollection.getTotalTarget());
30416 tejbeer 1078
 
32464 tejbeer 1079
            model.addAttribute("totalPartnerAchievement", totalTargetCollection.getTotalAchievement());
30416 tejbeer 1080
 
32464 tejbeer 1081
            Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
1082
            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));
1083
            List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30416 tejbeer 1084
 
32464 tejbeer 1085
            List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1086
            List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30416 tejbeer 1087
 
32464 tejbeer 1088
            salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30416 tejbeer 1089
 
32464 tejbeer 1090
            Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
30416 tejbeer 1091
 
32464 tejbeer 1092
            List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
30416 tejbeer 1093
 
32464 tejbeer 1094
            Map<Integer, AuthUser> authUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
30416 tejbeer 1095
 
32464 tejbeer 1096
            LOGGER.info("todayPcpmMap {}", todayPcpmMap);
30416 tejbeer 1097
 
32464 tejbeer 1098
            model.addAttribute("authUsers", authUsers);
1099
            model.addAttribute("authUserMap", authUserMap);
1100
            model.addAttribute("partnerCollectionPlanMap", pcpmMap);
1101
            model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
1102
            model.addAttribute("customRetailers", customRetailers);
1103
            model.addAttribute("rankColorMap", ProfitMandiConstants.Rank_Color_Map);
1104
            model.addAttribute("todayOverallCall", todayOverallCall);
30522 tejbeer 1105
 
32464 tejbeer 1106
        }
1107
        return "partner-health";
30522 tejbeer 1108
 
32464 tejbeer 1109
    }
30522 tejbeer 1110
 
32464 tejbeer 1111
    public ChartLeadModel getCollectionCount(List<PartnerCollectionPlanModel> pcpm) throws ProfitMandiBusinessException {
30522 tejbeer 1112
 
32464 tejbeer 1113
        Map<Integer, Long> rankCount = pcpm.stream().collect(Collectors.groupingBy(x -> x.getRank(), Collectors.mapping(PartnerCollectionPlanModel::getRank, Collectors.counting())));
30522 tejbeer 1114
 
32464 tejbeer 1115
        ChartLeadModel cm = new ChartLeadModel();
30522 tejbeer 1116
 
32464 tejbeer 1117
        List<String> labels = new ArrayList<>();
1118
        labels.add("Plan for Today");
1119
        labels.add("Carry Forward");
1120
        labels.add("Untouched");
1121
        labels.add("Plan for Future");
1122
        labels.add("Normal");
30522 tejbeer 1123
 
32464 tejbeer 1124
        List<String> backgroundColor = new ArrayList<>();
1125
        List<Long> values = new ArrayList<>();
30522 tejbeer 1126
 
32464 tejbeer 1127
        for (String label : labels) {
30522 tejbeer 1128
 
32464 tejbeer 1129
            if (label.equals("Plan for Today")) {
1130
                backgroundColor.add("#007bff");
1131
                values.add(rankCount.get(1));
1132
            }
1133
            if (label.equals("Carry Forward")) {
1134
                backgroundColor.add("#ffc107");
1135
                values.add(rankCount.get(2));
1136
            }
1137
            if (label.equals("Untouched")) {
1138
                backgroundColor.add("#dc3545");
1139
                values.add(rankCount.get(3));
1140
            }
1141
            if (label.equals("Plan for Future")) {
1142
                backgroundColor.add("#6c757d");
1143
                values.add(rankCount.get(4));
1144
            }
1145
            if (label.equals("Normal")) {
1146
                backgroundColor.add("White");
1147
                values.add(rankCount.get(5));
1148
            }
30522 tejbeer 1149
 
32464 tejbeer 1150
        }
30522 tejbeer 1151
 
32464 tejbeer 1152
        LOGGER.info("backgroundColor" + backgroundColor);
1153
        LOGGER.info("labelsChartLead" + labels);
1154
        LeadStatusData data = new LeadStatusData();
1155
        data.setData(values);
1156
        data.setBackgroundColor(backgroundColor);
1157
        data.setLabel("DataSet 1");
30522 tejbeer 1158
 
32464 tejbeer 1159
        PieLables label = new PieLables();
1160
        label.setFontColor("black");
1161
        label.setFontSize(15);
30522 tejbeer 1162
 
32464 tejbeer 1163
        Legend legend = new Legend();
1164
        legend.setLabels(label);
1165
        legend.setPosition("left");
30522 tejbeer 1166
 
32464 tejbeer 1167
        List<LeadStatusData> dataList = new ArrayList<>();
1168
        dataList.add(data);
30522 tejbeer 1169
 
32464 tejbeer 1170
        DataLeadModel datasets = new DataLeadModel();
1171
        datasets.setDatasets(dataList);
1172
        datasets.setLabels(labels);
30522 tejbeer 1173
 
32464 tejbeer 1174
        OptionModel om = new OptionModel();
1175
        om.setLegend(legend);
30522 tejbeer 1176
 
32464 tejbeer 1177
        cm.setType("pie");
1178
        cm.setData(datasets);
1179
        cm.setOptions(om);
30522 tejbeer 1180
 
32464 tejbeer 1181
        return cm;
1182
    }
30522 tejbeer 1183
 
32464 tejbeer 1184
    @RequestMapping(value = "/franchiseVisit", method = RequestMethod.GET)
1185
    public String franchiseVisit(HttpServletRequest request, @RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1186
        LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
30522 tejbeer 1187
 
32464 tejbeer 1188
        AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
30522 tejbeer 1189
 
32464 tejbeer 1190
        List<Integer> salesPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
1191
        List<Integer> rbmPositionsAuthIds = positionRepository.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream().map(x -> x.getAuthUserId()).collect(Collectors.toList());
30522 tejbeer 1192
 
32464 tejbeer 1193
        salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
30522 tejbeer 1194
 
32464 tejbeer 1195
        List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30522 tejbeer 1196
 
32464 tejbeer 1197
        Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x)).collect(Collectors.toSet());
30522 tejbeer 1198
 
32464 tejbeer 1199
        List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
30522 tejbeer 1200
 
32464 tejbeer 1201
        Map<Integer, String> monthValueMap = new HashMap<>();
1202
        for (int i = 0; i <= 5; i++) {
1203
            LocalDateTime startOfMonth = LocalDateTime.now().withDayOfMonth(1).minusMonths(i);
1204
            monthValueMap.put(i, startOfMonth.format(DateTimeFormatter.ofPattern("MMM''uu")));
1205
        }
30522 tejbeer 1206
 
32464 tejbeer 1207
        model.addAttribute("authUsers", authUsers);
1208
        model.addAttribute("monthValueMap", monthValueMap);
30522 tejbeer 1209
 
32464 tejbeer 1210
        return "franchise-visit";
30522 tejbeer 1211
 
32464 tejbeer 1212
    }
30522 tejbeer 1213
 
32464 tejbeer 1214
    @RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET)
1215
    public String getFranchiseVisit(HttpServletRequest request, @RequestParam(name = "authId", required = false) int authId, int yearMonth, Model model) throws Exception {
30522 tejbeer 1216
 
32464 tejbeer 1217
        LocalDateTime startDate = LocalDate.now().minusMonths(8).withDayOfMonth(1).atStartOfDay();
1218
        LocalDateTime endDate = startDate.plusMonths(1).withDayOfMonth(1).toLocalDate().atStartOfDay();
30522 tejbeer 1219
 
32464 tejbeer 1220
        DateRangeModel drm = DateRangeModel.of(startDate, endDate);
30522 tejbeer 1221
 
32464 tejbeer 1222
        List<FranchiseeVisit> visits = franchiseeVisitRepository.selectByAuthUserAndDateRange(drm, authId);
30522 tejbeer 1223
 
32464 tejbeer 1224
        if (!visits.isEmpty()) {
30522 tejbeer 1225
 
32464 tejbeer 1226
            Map<Integer, List<FranchiseeVisit>> franchiseeVisitMap = visits.stream().collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().getDayOfMonth()));
30522 tejbeer 1227
 
32464 tejbeer 1228
            model.addAttribute("franchiseeVisitMap", franchiseeVisitMap);
30522 tejbeer 1229
 
32464 tejbeer 1230
        }
30771 amit.gupta 1231
 
32464 tejbeer 1232
        model.addAttribute("visits", visits);
1233
        model.addAttribute("monthLength", startDate.toLocalDate().lengthOfMonth());
30771 amit.gupta 1234
 
32464 tejbeer 1235
        // Calender
30771 amit.gupta 1236
 
32464 tejbeer 1237
        int Year = startDate.getYear(); // year
1238
        int startDayOfMonth = 5;
1239
        int spaces = startDayOfMonth;
30771 amit.gupta 1240
 
32464 tejbeer 1241
        int month = startDate.getMonthValue();
30771 amit.gupta 1242
 
32464 tejbeer 1243
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
30771 amit.gupta 1244
 
32464 tejbeer 1245
        LOGGER.info("visits {} ", visits);
30771 amit.gupta 1246
 
32464 tejbeer 1247
        if ((((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) && month == 2) {
1248
            days[month] = 29;
1249
        }
30771 amit.gupta 1250
 
32464 tejbeer 1251
        spaces = (days[month - 1] + spaces) % 7;
30771 amit.gupta 1252
 
32464 tejbeer 1253
        model.addAttribute("month", month);
1254
        model.addAttribute("spaces", spaces);
1255
        model.addAttribute("days", days);
30771 amit.gupta 1256
 
32464 tejbeer 1257
        return "franchise-visit-container";
30771 amit.gupta 1258
 
32464 tejbeer 1259
    }
31249 tejbeer 1260
 
32464 tejbeer 1261
    @RequestMapping(value = "/getFranchiseeActivity", method = RequestMethod.GET)
1262
    public String getFranchiseeActivity(HttpServletRequest request, int visitId, Model model) throws Exception {
31249 tejbeer 1263
 
32464 tejbeer 1264
        List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(visitId);
31249 tejbeer 1265
 
32464 tejbeer 1266
        FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(visitId);
31249 tejbeer 1267
 
32464 tejbeer 1268
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
1269
        model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
31249 tejbeer 1270
 
32464 tejbeer 1271
        model.addAttribute("franchiseeVisit", franchiseeVisit);
1272
        model.addAttribute("franchiseeActivity", franchiseeActivities.get(0));
31249 tejbeer 1273
 
32464 tejbeer 1274
        return "franchie-visit-detail";
31249 tejbeer 1275
 
32464 tejbeer 1276
    }
31249 tejbeer 1277
 
32464 tejbeer 1278
    @RequestMapping(value = "/indent/today_target", method = RequestMethod.GET)
1279
    public String todayTarget(HttpServletRequest request, Model model) throws Exception {
1280
        List<RBMPerformanceSummaryModel> summaryModels = new ArrayList<>();
1281
        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());
1282
        Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1283
        List<TeamCommitmentModel> teamCommitmentModels = partnerCollectionPlanRepository.selectTeamCommitmentByDate(LocalDate.now());
1284
        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())));
1285
        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())));
1286
        LocalDateTime startDate = LocalDate.now().atStartOfDay();
1287
        for (int rbmAuthId : rbmPositionsAuthIds) {
1288
            RBMPerformanceSummaryModel rbmPerformanceSummaryModel = new RBMPerformanceSummaryModel();
1289
            rbmPerformanceSummaryModel.setAuthId(rbmAuthId);
1290
            AuthUser authUser = authRepository.selectById(rbmAuthId);
1291
            rbmPerformanceSummaryModel.setAuthName(authUser.getFullName());
1292
            List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(authUser.getEmailId()));
31249 tejbeer 1293
 
32464 tejbeer 1294
            if (fofoIds.size() > 0) {
1295
                fofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
31249 tejbeer 1296
 
32464 tejbeer 1297
                /*
1298
                 * Map<Integer, PartnerCollectionPlanModel> foundCollectionMap =
1299
                 * partnerCollectionService .getCollectionMap(fofoIds, startDate);
1300
                 */
31249 tejbeer 1301
 
32464 tejbeer 1302
                List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIds);
31249 tejbeer 1303
 
32464 tejbeer 1304
                LOGGER.info("remarkIds {}", remarkIds);
31249 tejbeer 1305
 
32464 tejbeer 1306
                long todayOverallCall = 0;
1307
                if (!remarkIds.isEmpty()) {
1308
                    todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now())).collect(Collectors.counting());
31249 tejbeer 1309
 
32464 tejbeer 1310
                }
31249 tejbeer 1311
 
32464 tejbeer 1312
                Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService.getCollectionMap(fofoIds, startDate);
31249 tejbeer 1313
 
32464 tejbeer 1314
                ChartLeadModel cm = this.getCollectionCount(collectionMap.values().stream().collect(Collectors.toList()));
31249 tejbeer 1315
 
32464 tejbeer 1316
                long collectionTarget = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null).collect(Collectors.summingLong(x -> x.getTargetPlan()));
1317
                long collection = collectionMap.values().stream().filter(
1318
                        x -> x.getTargetPlan() != null && x.getTargetPlan() != 0 && x.getAchievementPlan() != null).collect(Collectors.summingLong(x -> x.getAchievementPlan()));
1319
                rbmPerformanceSummaryModel.setChartLeadModel(cm);
1320
                rbmPerformanceSummaryModel.setPartnersCommunicated(todayOverallCall);
1321
                rbmPerformanceSummaryModel.setCollectionTarget(collectionTarget);
1322
                rbmPerformanceSummaryModel.setCollection(collection);
1323
                rbmPerformanceSummaryModel.setSecondaryTarget(rbmSecondaryTargetMap.get(rbmAuthId) == null ? 0 : rbmSecondaryTargetMap.get(rbmAuthId).floatValue());
1324
                rbmPerformanceSummaryModel.setSecondary(
1325
                        rbmSecondaryMap.get(rbmAuthId) == null ? 0 : rbmSecondaryMap.get(rbmAuthId).floatValue());
1326
                summaryModels.add(rbmPerformanceSummaryModel);
1327
                // cm.getData().getDatasets().get(0).getData().;
1328
                // cm.getData().getDatasets().get(0).getBackgroundColor();
1329
                // cm.getData().getLabels()
31249 tejbeer 1330
 
32464 tejbeer 1331
            }
1332
        }
1333
        model.addAttribute("summaryModels", summaryModels);
1334
        return "today_target";
1335
    }
31249 tejbeer 1336
 
32464 tejbeer 1337
    @RequestMapping(value = "/visitPlan", method = RequestMethod.GET)
1338
    public String visitPlan(HttpServletRequest request, Model model) throws Exception {
31249 tejbeer 1339
 
32464 tejbeer 1340
        return "visit-request-plan";
1341
    }
31249 tejbeer 1342
 
32464 tejbeer 1343
    @RequestMapping(value = "/visit/getVisitPlan", method = RequestMethod.GET)
1344
    public String getVisitPlan(HttpServletRequest request, @RequestParam LocalDate date, Model model) throws Exception {
1345
        List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(date);
31249 tejbeer 1346
 
32464 tejbeer 1347
        List<Integer> leadIds = visitRequests.stream().filter(x -> x.getVisitType().equals("lead")).map(x -> x.getVisitId()).collect(Collectors.toList());
1348
        Map<Integer, Lead> leadMap = new HashMap<>();
1349
        if (!leadIds.isEmpty()) {
1350
            List<Lead> leads = leadRepository.selectAllByIds(leadIds);
31249 tejbeer 1351
 
32464 tejbeer 1352
            for (Lead lead : leads) {
1353
                List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
1354
                lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1355
                lead.setLeadActivity(leadActivities.get(0));
31249 tejbeer 1356
 
32464 tejbeer 1357
                leadMap.put(lead.getId(), lead);
1358
            }
31249 tejbeer 1359
 
32464 tejbeer 1360
        }
1361
        List<Integer> franchiseeIds = visitRequests.stream().filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId()).collect(Collectors.toList());
1362
        Map<Integer, FranchiseeVisit> franchiseeVisitsMap = new HashMap<>();
1363
        if (!franchiseeIds.isEmpty()) {
1364
            List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1365
            LOGGER.info("franchiseeVisits {}", franchiseeVisits);
31249 tejbeer 1366
 
32464 tejbeer 1367
            for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1368
                List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(franchiseeVisit.getId());
1369
                LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1370
 
1371
                franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1372
                franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
1373
 
1374
                franchiseeVisitsMap.put(franchiseeVisit.getId(), franchiseeVisit);
1375
            }
1376
 
1377
        }
1378
 
1379
        Map<Integer, List<VisitRequest>> visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy()));
1380
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
1381
        List<UserVisitModel> userVisits = new ArrayList<>();
1382
 
1383
        for (AuthUser authUser : authUsers) {
1384
 
1385
            List<VisitRequest> authVisitRequests = visitRequestMap.get(authUser.getId());
1386
 
1387
            if (authVisitRequests != null) {
1388
                UserVisitModel userVisitModel = new UserVisitModel();
1389
                userVisitModel.setAuthUser(authUser.getFullName());
1390
                List<VisitDescriptionModel> visitDescriptions = new ArrayList<>();
1391
 
1392
                for (VisitRequest authVisitRequest : authVisitRequests) {
1393
                    VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1394
                    visitDescriptionModel.setVisitId(authVisitRequest.getVisitId());
1395
 
1396
                    if (authVisitRequest.getVisitType().equals("lead")) {
1397
                        Lead lead = leadMap.get(authVisitRequest.getVisitId());
1398
 
1399
                        visitDescriptionModel.setVisitName(lead.getFirstName());
1400
                        visitDescriptionModel.setCity(lead.getCity());
1401
                        visitDescriptionModel.setState(lead.getState());
1402
                        visitDescriptionModel.setScheduleTime(lead.getScheduledTimestamp());
1403
                        visitDescriptionModel.setRemarks(lead.getLeadActivity().getRemark());
1404
 
1405
                    } else {
1406
                        FranchiseeVisit franchiseeVisit = franchiseeVisitsMap.get(authVisitRequest.getVisitId());
1407
                        CustomRetailer customRetailer = retailerService.getFofoRetailer(franchiseeVisit.getFofoId());
1408
 
1409
                        visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
1410
                        visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1411
                        visitDescriptionModel.setState(customRetailer.getAddress().getState());
1412
                        visitDescriptionModel.setScheduleTime(franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1413
                        visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1414
 
1415
                    }
1416
 
1417
                    if (authVisitRequest.getActionedBy() != 0) {
1418
                        AuthUser au = authRepository.selectById(authVisitRequest.getActionedBy());
1419
 
1420
                        visitDescriptionModel.setActionBy(au.getFullName());
1421
                    }
1422
                    visitDescriptionModel.setStatus(authVisitRequest.getStatus());
1423
                    visitDescriptionModel.setVisitType(authVisitRequest.getVisitType());
1424
                    visitDescriptions.add(visitDescriptionModel);
1425
                }
1426
 
1427
                userVisitModel.setVisitDescriptions(visitDescriptions);
1428
                userVisits.add(userVisitModel);
1429
            }
1430
 
1431
        }
1432
 
1433
        model.addAttribute("userVisits", userVisits);
1434
 
1435
        return "visit-request-plan";
1436
    }
25979 tejbeer 1437
}