Subversion Repositories SmartDukaan

Rev

Rev 35508 | Rev 35579 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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