Subversion Repositories SmartDukaan

Rev

Rev 34671 | Rev 34890 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 34671 Rev 34707
Line 33... Line 33...
33
import com.spice.profitmandi.service.user.RetailerService;
33
import com.spice.profitmandi.service.user.RetailerService;
34
import com.spice.profitmandi.web.model.LoginDetails;
34
import com.spice.profitmandi.web.model.LoginDetails;
35
import com.spice.profitmandi.web.util.CookiesProcessor;
35
import com.spice.profitmandi.web.util.CookiesProcessor;
36
import com.spice.profitmandi.web.util.MVCResponseSender;
36
import com.spice.profitmandi.web.util.MVCResponseSender;
37
import org.apache.commons.csv.CSVRecord;
37
import org.apache.commons.csv.CSVRecord;
-
 
38
import org.apache.commons.io.output.ByteArrayOutputStream;
38
import org.apache.logging.log4j.LogManager;
39
import org.apache.logging.log4j.LogManager;
39
import org.apache.logging.log4j.Logger;
40
import org.apache.logging.log4j.Logger;
40
import org.springframework.beans.factory.annotation.Autowired;
41
import org.springframework.beans.factory.annotation.Autowired;
41
import org.springframework.core.io.InputStreamResource;
42
import org.springframework.core.io.InputStreamResource;
42
import org.springframework.http.HttpHeaders;
43
import org.springframework.http.HttpHeaders;
Line 452... Line 453...
452
 
453
 
453
        return cm;
454
        return cm;
454
    }
455
    }
455
 
456
 
456
    @RequestMapping(value = "/downloadDateWiseLead", method = RequestMethod.GET)
457
    @RequestMapping(value = "/downloadDateWiseLead", method = RequestMethod.GET)
457
    public ResponseEntity<?> getdownloadLeadDataByDate(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 {
458
    public ResponseEntity<?> getdownloadLeadDataByDate(HttpServletRequest request,
-
 
459
                                                       @RequestParam(name = "leadStatus", required = false, defaultValue = "All") List<LeadStatus> leadStatus,
-
 
460
                                                       @RequestParam(name = "color", required = false, defaultValue = "All") List<String> color,
-
 
461
                                                       @RequestParam(name = "leadDate", required = false, defaultValue = "") LocalDate leadDate) throws Exception {
458
 
462
 
459
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
463
        LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
460
        String emailId = fofoDetails.getEmailId();
464
        String emailId = fofoDetails.getEmailId();
461
        LocalDateTime localDateTime = null;
465
        LocalDateTime localDateTime = null;
462
        if (leadDate != null) {
466
        if (leadDate != null) {
463
            localDateTime = leadDate.atStartOfDay();
467
            localDateTime = leadDate.atStartOfDay();
464
        }
468
        }
465
        List<Lead> leads = new ArrayList<>();
469
        List<Lead> leads = new ArrayList<>();
466
 
-
 
467
        AuthUser authUser = authRepository.selectByEmailOrMobile(emailId);
470
        AuthUser authUser = authRepository.selectByEmailOrMobile(emailId);
468
 
471
 
-
 
472
        if (leadStatus.contains(LeadStatus.All)) {
469
        model.addAttribute("colors", color);
473
            leadStatus.add(LeadStatus.pending);
-
 
474
            leadStatus.add(LeadStatus.notInterested);
-
 
475
            leadStatus.add(LeadStatus.finalized);
-
 
476
        }
-
 
477
        if (color.contains("All")) {
-
 
478
            color.add("yellow");
-
 
479
            color.add("green");
-
 
480
        }
470
 
481
 
471
        Map<Integer, List<LeadActivity>> leadActivityMap = new HashMap<>();
482
        Map<Integer, List<LeadActivity>> leadActivityMap = new HashMap<>();
472
        boolean authPositon = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_SALES);
483
        boolean authPositon = positionRepository.hasCategory(authUser.getId(), ProfitMandiConstants.TICKET_CATEGORY_SALES);
473
        List<Integer> authUserIds = null;
484
        List<Integer> authUserIds = null;
474
 
-
 
475
        LOGGER.info("color111" + color);
-
 
476
 
-
 
477
        List<Lead> leadFollowUp = new ArrayList<>();
485
        List<Lead> leadFollowUp = new ArrayList<>();
478
 
486
 
479
        if (authPositon) {
487
        if (authPositon) {
480
            authUserIds = authService.getAllReportees(authUser.getId());
488
            authUserIds = authService.getAllReportees(authUser.getId());
481
            authUserIds.add(authUser.getId());
489
            authUserIds.add(authUser.getId());
482
            LOGGER.info("authIds" + authUserIds);
-
 
483
 
-
 
484
            LOGGER.info("leadStatus" + leadStatus);
-
 
485
 
-
 
486
            if (localDateTime == null) {
490
            if (localDateTime == null) {
487
 
-
 
488
                if (!leadStatus.contains(LeadStatus.followUp)) {
491
                if (!leadStatus.contains(LeadStatus.followUp)) {
489
 
-
 
490
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, LocalDateTime.now().minusMonths(1));
492
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, LocalDateTime.now().minusMonths(1));
491
                }
493
                }
492
 
-
 
493
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
494
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
494
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
495
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
495
                    leads.addAll(leadFollowUp);
496
                    leads.addAll(leadFollowUp);
496
                }
497
                }
497
 
-
 
498
            } else {
498
            } else {
499
 
-
 
500
                if (!leadStatus.contains(LeadStatus.followUp)) {
499
                if (!leadStatus.contains(LeadStatus.followUp)) {
501
 
-
 
502
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, localDateTime);
500
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds, color, localDateTime);
503
                }
501
                }
504
 
-
 
505
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
502
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
506
 
-
 
507
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
503
                    leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
508
 
-
 
509
                    leads.addAll(leadFollowUp);
504
                    leads.addAll(leadFollowUp);
510
 
-
 
511
                }
505
                }
512
 
-
 
513
            }
506
            }
514
 
-
 
515
        } else {
507
        } else {
516
 
-
 
517
            if (localDateTime == null) {
508
            if (localDateTime == null) {
518
                if (!leadStatus.contains(LeadStatus.followUp)) {
509
                if (!leadStatus.contains(LeadStatus.followUp)) {
519
 
-
 
520
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, LocalDateTime.now().minusMonths(1));
510
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, LocalDateTime.now().minusMonths(1));
521
                }
511
                }
522
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
512
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
523
 
-
 
524
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
513
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
525
 
-
 
526
                    leads.addAll(leadFollowUp);
514
                    leads.addAll(leadFollowUp);
527
                }
515
                }
528
                LOGGER.info("leadlocalDateTime1" + leads);
-
 
529
 
-
 
530
            } else {
516
            } else {
531
                if (!leadStatus.contains(LeadStatus.followUp)) {
517
                if (!leadStatus.contains(LeadStatus.followUp)) {
532
 
-
 
533
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, localDateTime);
518
                    leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, localDateTime);
534
                }
519
                }
535
 
-
 
536
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
520
                if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
537
 
-
 
538
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
521
                    leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
539
 
-
 
540
                    leads.addAll(leadFollowUp);
522
                    leads.addAll(leadFollowUp);
541
                }
523
                }
542
                LOGGER.info("leadlocalDateTime2" + leads);
-
 
543
 
-
 
544
            }
524
            }
545
 
-
 
546
        }
525
        }
547
        leadActivityMap = leadActivityRepository.selectAllByleadIds(leads.stream().map(x -> x.getId()).collect(Collectors.toList())).stream().collect(Collectors.groupingBy(LeadActivity::getLeadId, Collectors.toList()));
-
 
-
 
526
 
548
        List<Integer> authIds = new ArrayList<>();
527
        // Build activity map and auth map (SAME AS VIEW ENDPOINT)
549
        if (!leads.isEmpty()) {
528
        if (!leads.isEmpty()) {
550
            authIds.addAll(leads.stream().map(x -> x.getAssignTo()).collect(Collectors.toList()));
529
            List<Integer> leadIds = leads.stream().map(Lead::getId).collect(Collectors.toList());
-
 
530
            leadActivityMap = leadActivityRepository.selectAllByleadIds(leadIds).stream()
-
 
531
                    .collect(Collectors.groupingBy(LeadActivity::getLeadId));
551
        }
532
        }
-
 
533
        List<Integer> authIds = leads.stream().map(Lead::getAssignTo).collect(Collectors.toList());
552
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
534
        Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
-
 
535
                .collect(Collectors.toMap(AuthUser::getId, x -> x));
-
 
536
 
-
 
537
        // Build CSV rows (USE DIRECT LEAD PROPERTIES - NO ACTIVITY FALLBACK)
553
        List<List<?>> rows = new ArrayList<>();
538
        List<List<?>> rows = new ArrayList<>();
554
        for (Lead lead : leads) {
539
        for (Lead lead : leads) {
555
            List<LeadActivity> activities = leadActivityMap.get(lead.getId());
540
            List<LeadActivity> activities = leadActivityMap.get(lead.getId());
-
 
541
 
-
 
542
            // Use FIRST activity's schedule timestamp if exists
556
            String scheduleTimestamp = (activities != null && !activities.isEmpty())
543
            String scheduleTimestamp = (activities != null && !activities.isEmpty())
557
                    ? FormattingUtils.format(activities.get(0).getSchelduleTimestamp())
544
                    ? FormattingUtils.format(activities.get(0).getSchelduleTimestamp())
558
                    : null;
545
                    : "";
-
 
546
 
-
 
547
            // DIRECTLY use Lead properties (NO fallback to activity)
559
            Double potental = 0d;
548
            Double potential = lead.getPotential();
560
            String outLetName = "";
549
            String outLetName = lead.getOutLetName() != null ? lead.getOutLetName() : "";
561
 
550
 
562
            if (lead.getPotential() >= 0) {
551
            // Assignee name (blank if missing)
563
                potental = lead.getPotential();
552
            String assignTo = "";
564
            } else if (activities != null && !activities.isEmpty()) {
553
            if (authIdAndAuthUserMap.containsKey(lead.getAssignTo())) {
565
                potental = activities.get(0).getPotential();
554
                AuthUser user = authIdAndAuthUserMap.get(lead.getAssignTo());
-
 
555
                assignTo = (user.getFirstName() + " " + user.getLastName()).trim();
566
            } else potental = 0d;
556
            }
567
 
557
 
-
 
558
            rows.add(Arrays.asList(
-
 
559
                    lead.getSource(),
568
            if (lead.getOutLetName() != null) {
560
                    lead.getFullName(),
-
 
561
                    outLetName,
-
 
562
                    potential,
569
                outLetName = lead.getOutLetName();
563
                    lead.getLeadMobile(),
570
            } else if (activities != null && !activities.isEmpty()) {
564
                    lead.getAddress() != null ? lead.getAddress() : "",
571
                outLetName = activities.get(0).getOutletName();
565
                    lead.getCity() != null ? lead.getCity() : "",
572
            } else outLetName = "-";
566
                    lead.getState() != null ? lead.getState() : "",
573
 
-
 
-
 
567
                    lead.getCreatedBy() != null ? lead.getCreatedBy() : "",
574
            String assignTo = "-";
568
                    lead.getStatus().toString(),
575
            if (authIdAndAuthUserMap.get(lead.getAssignTo()) != null) {
569
                    FormattingUtils.format(lead.getCreatedTimestamp()),
576
                assignTo = authIdAndAuthUserMap.get(lead.getAssignTo()).getFirstName() + " " + authIdAndAuthUserMap.get(lead.getAssignTo()).getLastName();
570
                    FormattingUtils.format(lead.getUpdatedTimestamp()),
577
            } else assignTo = "-";
571
                    scheduleTimestamp,
578
 
-
 
579
            rows.add(Arrays.asList(lead.getSource(), lead.getFullName(), outLetName, potental, lead.getLeadMobile(),
572
                    lead.getClosureTimestamp() != null
580
                    lead.getAddress(), lead.getCity(), lead.getState(), lead.getCreatedBy(), lead.getStatus(),
573
                            ? FormattingUtils.format(lead.getClosureTimestamp())
-
 
574
                            : "",  // Handle null closure
-
 
575
                    assignTo,
581
                    FormattingUtils.format(lead.getCreatedTimestamp()), FormattingUtils.format(lead.getUpdatedTimestamp()), scheduleTimestamp, FormattingUtils.format(lead.getClosureTimestamp()), assignTo, lead.getColor()));
576
                    lead.getColor() != null ? lead.getColor() : ""
-
 
577
            ));
582
        }
578
        }
583
//        #if($leadActivityMap.get($lead.getId()).get(0).getSchelduleTimestamp())
-
 
584
        org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
-
 
585
                Arrays.asList("Source", "Partner Name", "Outlet Name", "Potential", "Mobile", "Address", "City", "State",
-
 
586
                        "Created By", "Status", "Created On", "Updated On", "Scheduled Timestamp", "Closure Timestamp", "Assign To", "Color"
-
 
587
                ),
-
 
588
                rows);
-
 
589
        ResponseEntity<?> responseEntity = orderService.downloadReportInCsv(baos, rows, "Lead Details ");
-
 
590
        return responseEntity;
-
 
591
 
579
 
-
 
580
        // Generate CSV response
-
 
581
        ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
-
 
582
                Arrays.asList("Source", "Partner Name", "Outlet Name", "Potential", "Mobile", "Address", "City", "State",
-
 
583
                        "Created By", "Status", "Created On", "Updated On", "Scheduled Timestamp",
-
 
584
                        "Closure Timestamp", "Assign To", "Color"),
-
 
585
                rows
-
 
586
        );
-
 
587
        return orderService.downloadReportInCsv(baos, rows, "LeadDetails_");
592
    }
588
    }
593
 
589
 
594
 
-
 
595
    @RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
590
    @RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
596
    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 {
591
    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 {
597
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
592
        List<AuthUser> authUsers = authRepository.selectAllActiveUser();
598
        List<Lead> leads = null;
593
        List<Lead> leads = null;
599
        long size = 0;
594
        long size = 0;