Subversion Repositories SmartDukaan

Rev

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

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