Subversion Repositories SmartDukaan

Rev

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