Subversion Repositories SmartDukaan

Rev

Rev 35579 | Details | Compare with Previous | Last modification | View Log | RSS feed

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