Subversion Repositories SmartDukaan

Rev

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

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