Subversion Repositories SmartDukaan

Rev

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