Subversion Repositories SmartDukaan

Rev

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