Subversion Repositories SmartDukaan

Rev

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