Subversion Repositories SmartDukaan

Rev

Rev 35098 | Rev 35252 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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