Subversion Repositories SmartDukaan

Rev

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