Subversion Repositories SmartDukaan

Rev

Rev 31249 | Rev 31370 | 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
 
31249 tejbeer 3
import java.io.ByteArrayInputStream;
4
import java.io.InputStream;
5
import java.time.LocalDate;
6
import java.time.LocalDateTime;
7
import java.time.format.DateTimeFormatter;
8
import java.util.ArrayList;
9
import java.util.Arrays;
10
import java.util.HashMap;
11
import java.util.HashSet;
12
import java.util.List;
13
import java.util.Map;
14
import java.util.Set;
15
import java.util.TreeMap;
16
import java.util.stream.Collectors;
17
 
18
import javax.servlet.http.HttpServletRequest;
19
import javax.servlet.http.HttpServletResponse;
20
import javax.transaction.Transactional;
21
 
22
import org.apache.commons.csv.CSVRecord;
23
import org.apache.logging.log4j.LogManager;
24
import org.apache.logging.log4j.Logger;
25
import org.springframework.beans.factory.annotation.Autowired;
26
import org.springframework.core.io.InputStreamResource;
27
import org.springframework.http.HttpHeaders;
28
import org.springframework.http.HttpStatus;
29
import org.springframework.http.ResponseEntity;
30
import org.springframework.stereotype.Controller;
31
import org.springframework.ui.Model;
32
import org.springframework.util.StringUtils;
33
import org.springframework.web.bind.annotation.RequestBody;
34
import org.springframework.web.bind.annotation.RequestMapping;
35
import org.springframework.web.bind.annotation.RequestMethod;
36
import org.springframework.web.bind.annotation.RequestParam;
37
import org.springframework.web.bind.annotation.RequestPart;
38
import org.springframework.web.multipart.MultipartFile;
39
 
29266 manish 40
import com.google.gson.Gson;
25988 tejbeer 41
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
31249 tejbeer 42
import com.spice.profitmandi.common.model.CustomRetailer;
43
import com.spice.profitmandi.common.model.Legend;
44
import com.spice.profitmandi.common.model.OptionModel;
45
import com.spice.profitmandi.common.model.PieLables;
46
import com.spice.profitmandi.common.model.ProfitMandiConstants;
29426 manish 47
import com.spice.profitmandi.common.util.FileUtil;
25979 tejbeer 48
import com.spice.profitmandi.dao.entity.auth.AuthUser;
30416 tejbeer 49
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
30522 tejbeer 50
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
51
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
25979 tejbeer 52
import com.spice.profitmandi.dao.entity.user.Lead;
53
import com.spice.profitmandi.dao.entity.user.LeadActivity;
31249 tejbeer 54
import com.spice.profitmandi.dao.entity.user.VisitRequest;
30773 amit.gupta 55
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
31249 tejbeer 56
import com.spice.profitmandi.dao.enumuration.dtr.CommunicationType;
29598 tejbeer 57
import com.spice.profitmandi.dao.enumuration.dtr.LeadSource;
25979 tejbeer 58
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
31249 tejbeer 59
import com.spice.profitmandi.dao.model.ChartLeadModel;
60
import com.spice.profitmandi.dao.model.CreateLeacdActivityRequest;
61
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
62
import com.spice.profitmandi.dao.model.DataLeadModel;
63
import com.spice.profitmandi.dao.model.DateRangeModel;
64
import com.spice.profitmandi.dao.model.LeadStatusData;
65
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
66
import com.spice.profitmandi.dao.model.RBMPerformanceSummaryModel;
67
import com.spice.profitmandi.dao.model.TeamCommitmentModel;
68
import com.spice.profitmandi.dao.model.TotalTargetColectionModel;
69
import com.spice.profitmandi.dao.model.UserVisitModel;
70
import com.spice.profitmandi.dao.model.VisitDescriptionModel;
25979 tejbeer 71
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30185 tejbeer 72
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
30434 tejbeer 73
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
30416 tejbeer 74
import com.spice.profitmandi.dao.repository.cs.CsService;
29266 manish 75
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
30771 amit.gupta 76
import com.spice.profitmandi.dao.repository.dtr.*;
30416 tejbeer 77
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
25979 tejbeer 78
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
30445 tejbeer 79
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
29266 manish 80
import com.spice.profitmandi.service.AuthService;
30416 tejbeer 81
import com.spice.profitmandi.service.PartnerCollectionService;
82
import com.spice.profitmandi.service.user.RetailerService;
25979 tejbeer 83
import com.spice.profitmandi.web.model.LoginDetails;
84
import com.spice.profitmandi.web.util.CookiesProcessor;
85
import com.spice.profitmandi.web.util.MVCResponseSender;
86
 
87
@Controller
88
@Transactional(rollbackOn = Throwable.class)
89
public class LeadController {
90
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
91
 
92
	@Autowired
93
	private LeadRepository leadRepository;
94
 
95
	@Autowired
96
	private LeadActivityRepository leadActivityRepository;
97
 
98
	@Autowired
99
	private StateRepository stateRepository;
100
 
101
	@Autowired
29266 manish 102
	private AuthService authService;
103
 
104
	@Autowired
25979 tejbeer 105
	private AuthRepository authRepository;
106
 
107
	@Autowired
29266 manish 108
	private Gson gson;
109
 
110
	@Autowired
25979 tejbeer 111
	private CookiesProcessor cookiesProcessor;
29426 manish 112
 
29278 manish 113
	@Autowired
114
	PositionRepository positionRepository;
25979 tejbeer 115
 
116
	@Autowired
117
	private MVCResponseSender mvcResponseSender;
118
 
30185 tejbeer 119
	@Autowired
120
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
121
 
30416 tejbeer 122
	@Autowired
123
	private CsService csService;
124
 
125
	@Autowired
126
	private FofoStoreRepository fofoStoreRepository;
127
 
128
	@Autowired
129
	private PartnerCollectionService partnerCollectionService;
130
 
131
	@Autowired
132
	private RetailerService retailerService;
133
 
134
	@Autowired
30434 tejbeer 135
	private PartnerCollectionRemarkRepository partnerCollectionRemarkRepository;
136
 
137
	@Autowired
30416 tejbeer 138
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
30445 tejbeer 139
 
140
	@Autowired
141
	private UserWalletRepository userWalletRepository;
142
 
30522 tejbeer 143
	@Autowired
144
	private FranchiseeVisitRepository franchiseeVisitRepository;
145
 
146
	@Autowired
147
	private FranchiseeActivityRepository franchiseeActivityRepository;
148
 
31249 tejbeer 149
	@Autowired
150
	private VisitRequestRepository visitRequestRepository;
151
 
25988 tejbeer 152
	List<LeadStatus> status = Arrays.asList(LeadStatus.notInterested, LeadStatus.finalized);
153
 
25979 tejbeer 154
	@RequestMapping(value = "/getOpenLead", method = RequestMethod.GET)
27609 tejbeer 155
	public String getOpenLead(HttpServletRequest request,
29426 manish 156
			@RequestParam(name = "leadStatus", required = false, defaultValue = "All") List<LeadStatus> leadStatus,
29744 tejbeer 157
			@RequestParam(name = "color", required = false, defaultValue = "All") List<String> color,
29445 manish 158
			@RequestParam(name = "leadDate", required = false, defaultValue = "") LocalDate leadDate, Model model)
27642 tejbeer 159
			throws Exception {
27609 tejbeer 160
 
29445 manish 161
		LocalDateTime localDateTime = null;
162
		if (leadDate != null) {
163
			localDateTime = leadDate.atStartOfDay();
164
		}
165
		LOGGER.info("localDateTime" + localDateTime);
166
 
29266 manish 167
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
168
		String emailId = loginDetails.getEmailId();
169
		AuthUser authUser = authRepository.selectByEmailOrMobile(emailId);
29426 manish 170
 
171
		boolean authPositon = positionRepository.hasCategory(authUser.getId(),
172
				ProfitMandiConstants.TICKET_CATEGORY_SALES);
173
 
27610 tejbeer 174
		if (leadStatus.contains(LeadStatus.All)) {
175
 
29445 manish 176
			leadStatus.add(LeadStatus.pending);
177
			leadStatus.add(LeadStatus.notInterested);
178
			leadStatus.add(LeadStatus.finalized);
27610 tejbeer 179
		}
27615 tejbeer 180
 
29744 tejbeer 181
		if (color.contains("All")) {
182
			color.add("yellow");
183
			color.add("green");
184
		}
185
 
29852 tejbeer 186
		List<Lead> leads = new ArrayList<>();
29445 manish 187
 
188
		model.addAttribute("colors", color);
189
 
29744 tejbeer 190
		Map<Integer, List<LeadActivity>> leadActivityMap = new HashMap<>();
191
 
29287 amit.gupta 192
		List<Integer> authUserIds = null;
29445 manish 193
 
29744 tejbeer 194
		LOGGER.info("color111" + color);
29445 manish 195
 
29744 tejbeer 196
		List<Lead> leadFollowUp = new ArrayList<>();
29426 manish 197
 
29744 tejbeer 198
		if (authPositon) {
199
			authUserIds = authService.getAllReportees(authUser.getId());
200
			authUserIds.add(authUser.getId());
201
			LOGGER.info("authIds" + authUserIds);
29426 manish 202
 
29753 tejbeer 203
			LOGGER.info("leadStatus" + leadStatus);
204
 
29744 tejbeer 205
			if (localDateTime == null) {
29445 manish 206
 
29852 tejbeer 207
				if (!leadStatus.contains(LeadStatus.followUp)) {
29445 manish 208
 
29852 tejbeer 209
					leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds,
210
							color, LocalDateTime.now().minusMonths(1));
211
				}
212
 
213
				if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
30290 tejbeer 214
					leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
29852 tejbeer 215
					leads.addAll(leadFollowUp);
216
				}
217
 
29744 tejbeer 218
			} else {
29445 manish 219
 
29852 tejbeer 220
				if (!leadStatus.contains(LeadStatus.followUp)) {
221
 
222
					leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus, authUserIds,
223
							color, localDateTime);
224
				}
225
 
226
				if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
227
 
30290 tejbeer 228
					leadFollowUp = leadRepository.selectByAssignAuthIdsAndStatus(authUserIds, LeadStatus.followUp);
229
 
29852 tejbeer 230
					leads.addAll(leadFollowUp);
231
 
232
				}
233
 
29744 tejbeer 234
			}
29445 manish 235
 
29744 tejbeer 236
		} else {
29445 manish 237
 
29744 tejbeer 238
			if (localDateTime == null) {
29852 tejbeer 239
				if (!leadStatus.contains(LeadStatus.followUp)) {
29445 manish 240
 
29852 tejbeer 241
					leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
242
							LocalDateTime.now().minusMonths(1));
243
				}
244
				if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
245
 
30292 tejbeer 246
					leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
30290 tejbeer 247
 
29852 tejbeer 248
					leads.addAll(leadFollowUp);
249
				}
29744 tejbeer 250
				LOGGER.info("leadlocalDateTime1" + leads);
29445 manish 251
 
29744 tejbeer 252
			} else {
29852 tejbeer 253
				if (!leadStatus.contains(LeadStatus.followUp)) {
29445 manish 254
 
29852 tejbeer 255
					leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color, localDateTime);
256
				}
257
 
258
				if (leadStatus.contains(LeadStatus.followUp) || leadStatus.contains(LeadStatus.All)) {
259
 
30292 tejbeer 260
					leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
30290 tejbeer 261
 
29852 tejbeer 262
					leads.addAll(leadFollowUp);
263
				}
29744 tejbeer 264
				LOGGER.info("leadlocalDateTime2" + leads);
29445 manish 265
 
29278 manish 266
			}
29426 manish 267
 
29445 manish 268
		}
269
 
29426 manish 270
		if (authPositon && authUserIds.size() > 0) {
29287 amit.gupta 271
			List<String> leadCreators = new ArrayList<>();
272
			leadCreators.add("daily-sync");
29426 manish 273
			leadCreators.addAll(authRepository.selectAllAuthUserByIds(authUserIds).stream().map(x -> x.getFullName())
274
					.collect(Collectors.toList()));
29289 amit.gupta 275
			model.addAttribute("leadCreators", leadCreators);
29287 amit.gupta 276
		}
29266 manish 277
		List<Lead> weekLast = new ArrayList<>();
278
		List<Lead> weekThird = new ArrayList<>();
279
		List<Lead> weekSecond = new ArrayList<>();
280
		List<Lead> weekFirst = new ArrayList<>();
281
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
282
		List<LeadWeakWiseModel> lwDays = new ArrayList<>();
27642 tejbeer 283
 
29266 manish 284
		for (int i = 7; i >= 1; i--) {
285
			LocalDateTime startOfDay = curDate.minusDays(i);
286
 
287
			LeadWeakWiseModel lm = new LeadWeakWiseModel();
288
			lm.setMonth(startOfDay.toLocalDate());
289
			lwDays.add(lm);
290
		}
29426 manish 291
		if (!leads.isEmpty()) {
29266 manish 292
 
29744 tejbeer 293
			weekLast.addAll(
294
					leads.stream()
295
							.filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(28))
296
									&& x.getCreatedTimestamp().isBefore(curDate.minusDays(21)))
297
							.collect(Collectors.toList()));
29266 manish 298
 
29744 tejbeer 299
			weekThird
300
					.addAll(leads.stream()
301
							.filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(21))
302
									&& x.getCreatedTimestamp().isBefore(curDate.minusDays(14)))
303
							.collect(Collectors.toList()));
29266 manish 304
 
29744 tejbeer 305
			weekSecond
306
					.addAll(leads.stream()
307
							.filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(14))
308
									&& x.getCreatedTimestamp().isBefore(curDate.minusDays(7)))
309
							.collect(Collectors.toList()));
29426 manish 310
 
29744 tejbeer 311
			weekFirst.addAll(leads.stream().filter(x -> x.getCreatedTimestamp().isAfter(curDate.minusDays(7)))
312
					.collect(Collectors.toList()));
313
 
29266 manish 314
		}
315
		LOGGER.info("weekLast" + weekLast);
316
		LOGGER.info("weekThird" + weekThird);
317
		LOGGER.info("weekSecond" + weekSecond);
29426 manish 318
		Map<String, Long> leadLasts = weekLast.stream()
319
				.collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.counting()));
320
		Map<String, Long> leadThirds = weekThird.stream()
321
				.collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.counting()));
29266 manish 322
		Map<String, Long> leadSeconds = weekSecond.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy(),
323
				Collectors.mapping(Lead::getCreatedBy, Collectors.counting())));
324
 
325
		Map<String, Map<LocalDate, Long>> leadFirsts = weekFirst.stream()
326
				.collect(Collectors.groupingBy(x -> x.getCreatedBy(),
327
						Collectors.groupingBy(x -> x.getCreatedTimestamp().toLocalDate(), Collectors.counting())));
328
 
329
		LOGGER.info("leadFirsts" + leadFirsts);
330
 
27723 tejbeer 331
		List<Integer> authIds = new ArrayList<>();
332
		if (!leads.isEmpty()) {
25979 tejbeer 333
 
27723 tejbeer 334
			authIds.addAll(leads.stream().map(x -> x.getAssignTo()).collect(Collectors.toList()));
27610 tejbeer 335
 
29744 tejbeer 336
			leadActivityMap = leadActivityRepository
337
					.selectAllByleadIds(leads.stream().map(x -> x.getId()).collect(Collectors.toList())).stream()
338
					.collect(Collectors.groupingBy(LeadActivity::getLeadId, Collectors.toList()));
339
 
27723 tejbeer 340
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
341
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
342
			model.addAttribute("leadActivityMap", leadActivityMap);
343
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
344
		}
345
 
29266 manish 346
		ChartLeadModel cm = this.getLeadChart(leads);
347
		model.addAttribute("chartLead", gson.toJson(cm));
348
 
349
		LOGGER.info("ChartLeadModel" + gson.toJson(cm));
350
		LOGGER.info("lwDays" + lwDays);
351
 
27610 tejbeer 352
		LOGGER.info("leads" + leads);
25979 tejbeer 353
		List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName())
354
				.collect(Collectors.toList());
355
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
29266 manish 356
		LocalDate lastDate = curDate.minusDays(1).toLocalDate();
29426 manish 357
 
29266 manish 358
		List<LocalDate> weekDates = new ArrayList<>();
29426 manish 359
 
29266 manish 360
		weekDates.add(curDate.minusDays(28).toLocalDate());
361
		weekDates.add(curDate.minusDays(22).toLocalDate());
362
		weekDates.add(curDate.minusDays(21).toLocalDate());
363
		weekDates.add(curDate.minusDays(15).toLocalDate());
364
		weekDates.add(curDate.minusDays(14).toLocalDate());
365
		weekDates.add(curDate.minusDays(8).toLocalDate());
366
		weekDates.add(curDate.minusDays(7).toLocalDate());
367
		LOGGER.info("lastDate" + lastDate);
29426 manish 368
 
29266 manish 369
		model.addAttribute("weekDates", weekDates);
29426 manish 370
 
29445 manish 371
		model.addAttribute("leadDate", leadDate);
29266 manish 372
		model.addAttribute("lastDate", lastDate);
25979 tejbeer 373
		model.addAttribute("stateNames", stateNames);
31249 tejbeer 374
 
375
		model.addAttribute("communicationTypes", CommunicationType.values());
376
 
25979 tejbeer 377
		model.addAttribute("authUsers", authUsers);
27610 tejbeer 378
		model.addAttribute("lead", leads);
379
		model.addAttribute("leadStatus", LeadStatus.values());
29266 manish 380
		model.addAttribute("leadLasts", leadLasts);
381
		model.addAttribute("leadThirds", leadThirds);
382
		model.addAttribute("leadSeconds", leadSeconds);
383
		model.addAttribute("leadFirsts", leadFirsts);
384
		model.addAttribute("lwDays", lwDays);
25979 tejbeer 385
 
27610 tejbeer 386
		model.addAttribute("selectedLeadStatus", leadStatus.get(0));
25979 tejbeer 387
		return "lead";
27642 tejbeer 388
 
25979 tejbeer 389
	}
390
 
29266 manish 391
	public ChartLeadModel getLeadChart(List<Lead> leads) throws ProfitMandiBusinessException {
392
 
393
		Map<LeadStatus, Long> leadStatusMap = leads.stream().collect(
394
				Collectors.groupingBy(x -> x.getStatus(), Collectors.mapping(Lead::getStatus, Collectors.counting())));
395
 
29426 manish 396
		Map<String, Long> hotLeadsMap = leads.stream().collect(
397
				Collectors.groupingBy(x -> x.getColor(), Collectors.mapping(Lead::getColor, Collectors.counting())));
398
 
399
		LOGGER.info("hotLeadsMap" + hotLeadsMap);
29266 manish 400
		ChartLeadModel cm = new ChartLeadModel();
401
 
402
		HashSet<LeadStatus> labels = new HashSet<LeadStatus>();
403
		labels.addAll(leadStatusMap.keySet());
29445 manish 404
 
30771 amit.gupta 405
		List<String> hotLeads = new ArrayList<>();
29426 manish 406
		hotLeads.addAll(leadStatusMap.keySet().stream().map(x -> x.toString()).collect(Collectors.toSet()));
407
		hotLeads.add("HotLead");
29445 manish 408
 
30771 amit.gupta 409
		List<String> hotLeadKeys = new ArrayList<>();
29445 manish 410
 
29426 manish 411
		hotLeadKeys.add("HotLead");
412
		List<String> hotLeadGreen = new ArrayList<>(hotLeadKeys);
29598 tejbeer 413
 
29448 manish 414
		LOGGER.info("hotLeads" + hotLeads);
29445 manish 415
 
29266 manish 416
		List<LeadStatus> labelList = new ArrayList<>(labels);
417
		List<String> backgroundColor = new ArrayList<>();
29426 manish 418
		LOGGER.info("hotLeadKeys" + hotLeadKeys);
29266 manish 419
		List<Long> values = new ArrayList<>();
420
 
29448 manish 421
		for (String hotLead : hotLeads) {
29266 manish 422
 
29448 manish 423
			if (hotLead.equals("pending")) {
29266 manish 424
				backgroundColor.add("pink");
29448 manish 425
				values.add(leadStatusMap.get(LeadStatus.pending));
29266 manish 426
			}
29448 manish 427
			if (hotLead.equals("notInterested")) {
29266 manish 428
				backgroundColor.add("red");
29448 manish 429
				values.add(leadStatusMap.get(LeadStatus.notInterested));
29266 manish 430
			}
29448 manish 431
			if (hotLead.equals("followUp")) {
29266 manish 432
				backgroundColor.add("#9ACD32");
29448 manish 433
				values.add(leadStatusMap.get(LeadStatus.followUp));
29266 manish 434
			}
29448 manish 435
			if (hotLead.equals("finalized")) {
29266 manish 436
				backgroundColor.add("blue");
29448 manish 437
				values.add(leadStatusMap.get(LeadStatus.finalized));
29445 manish 438
			}
29598 tejbeer 439
 
29448 manish 440
			if (hotLead.equals("HotLead")) {
29426 manish 441
				backgroundColor.add("green");
442
				values.add(hotLeadsMap.get("Green"));
29445 manish 443
 
29266 manish 444
			}
29445 manish 445
 
29266 manish 446
		}
447
		LOGGER.info("labelList" + labelList);
448
 
449
		LOGGER.info("backgroundColor" + backgroundColor);
450
		LOGGER.info("labelsChartLead" + labels);
451
		LeadStatusData data = new LeadStatusData();
452
		data.setData(values);
453
		data.setBackgroundColor(backgroundColor);
454
		data.setLabel("DataSet 1");
455
 
456
		PieLables label = new PieLables();
457
		label.setFontColor("black");
458
		label.setFontSize(15);
459
 
460
		Legend legend = new Legend();
461
		legend.setLabels(label);
462
		legend.setPosition("left");
463
 
464
		List<LeadStatusData> dataList = new ArrayList<>();
465
		dataList.add(data);
466
 
467
		DataLeadModel datasets = new DataLeadModel();
468
		datasets.setDatasets(dataList);
29426 manish 469
		datasets.setLabels(hotLeads);
29266 manish 470
 
471
		OptionModel om = new OptionModel();
472
		om.setLegend(legend);
473
 
474
		cm.setType("pie");
475
		cm.setData(datasets);
476
		cm.setOptions(om);
477
 
478
		return cm;
479
	}
480
 
25988 tejbeer 481
	@RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
482
	public String getClosedLead(HttpServletRequest request,
483
			@RequestParam(name = "offset", defaultValue = "0") int offset,
484
			@RequestParam(name = "limit", defaultValue = "10") int limit,
485
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
486
			throws Exception {
487
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
488
		List<Lead> leads = null;
489
		long size = 0;
490
		leads = leadRepository.selectAllByStatus(status, offset, limit);
491
		size = leadRepository.selectCountByStatus(status);
492
 
493
		if (!leads.isEmpty()) {
494
			List<Integer> authIds = new ArrayList<>();
495
			for (Lead lead : leads) {
496
				authIds.add(lead.getAssignTo());
497
			}
498
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
499
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
500
 
501
			model.addAttribute("leads", leads);
502
			model.addAttribute("start", offset + 1);
503
			model.addAttribute("size", size);
504
			model.addAttribute("searchTerm", searchTerm);
505
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25990 tejbeer 506
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 507
 
508
			if (leads.size() < limit) {
509
				model.addAttribute("end", offset + leads.size());
510
			} else {
511
				model.addAttribute("end", offset + limit);
512
			}
513
 
514
		} else {
515
			model.addAttribute("lead", leads);
516
 
517
			model.addAttribute("size", size);
518
		}
519
 
520
		model.addAttribute("authUsers", authUsers);
521
		return "lead-close";
522
	}
523
 
524
	@RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
25990 tejbeer 525
	public String getPaginatedClosedLeads(HttpServletRequest request,
25988 tejbeer 526
			@RequestParam(name = "offset", defaultValue = "0") int offset,
527
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
528
			throws ProfitMandiBusinessException {
529
		List<Lead> leads = null;
530
		leads = leadRepository.selectAllByStatus(status, offset, limit);
531
 
532
		if (!leads.isEmpty()) {
533
			List<Integer> authIds = new ArrayList<>();
534
			for (Lead lead : leads) {
535
				authIds.add(lead.getAssignTo());
536
			}
537
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
538
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
539
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
540
			model.addAttribute("leads", leads);
25990 tejbeer 541
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 542
 
543
		} else {
544
			model.addAttribute("leads", leads);
545
 
546
		}
547
		return "lead-close-paginated";
548
	}
549
 
550
	@RequestMapping(value = "/searchLeads")
551
	public String getClosedLeads(HttpServletRequest request,
552
			@RequestParam(name = "offset", defaultValue = "0") int offset,
553
			@RequestParam(name = "limit", defaultValue = "10") int limit,
554
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
555
			throws ProfitMandiBusinessException {
556
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
557
		List<Lead> leads = null;
558
		long size = 0;
559
		if (!(searchTerm.equals(""))) {
560
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
561
			if (!(leads.size() == 0)) {
562
				size = leadRepository.selectCountByStatus(status);
563
				List<Integer> authIds = new ArrayList<>();
564
				for (Lead lead : leads) {
565
					authIds.add(lead.getAssignTo());
566
				}
567
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
568
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
569
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
570
				model.addAttribute("leads", leads);
571
				model.addAttribute("start", offset + 1);
572
				model.addAttribute("size", size);
573
				model.addAttribute("searchTerm", searchTerm);
574
 
575
				if (leads.size() < limit) {
576
					model.addAttribute("end", offset + leads.size());
577
				} else {
578
					model.addAttribute("end", offset + limit);
579
				}
580
			} else {
581
				throw new ProfitMandiBusinessException("lead", searchTerm, "leads Not Found");
582
			}
583
		} else {
584
			leads = leadRepository.selectAllByStatus(status, offset, limit);
585
			size = leadRepository.selectCountByStatus(status);
586
 
587
			if (!leads.isEmpty()) {
588
				List<Integer> authIds = new ArrayList<>();
589
				for (Lead lead : leads) {
590
					authIds.add(lead.getAssignTo());
591
				}
592
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
593
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
594
 
595
				model.addAttribute("leads", leads);
596
				model.addAttribute("start", offset + 1);
597
				model.addAttribute("size", size);
598
				model.addAttribute("searchTerm", searchTerm);
599
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
600
 
601
				if (leads.size() < limit) {
602
					model.addAttribute("end", offset + leads.size());
603
				} else {
604
					model.addAttribute("end", offset + limit);
605
				}
606
 
607
			}
608
		}
609
 
610
		model.addAttribute("authUsers", authUsers);
611
		return "lead-close";
612
	}
613
 
614
	@RequestMapping(value = "/searchLeadPaginated")
25990 tejbeer 615
	public String searchLeadPaginated(HttpServletRequest request,
25988 tejbeer 616
			@RequestParam(name = "offset", defaultValue = "0") int offset,
617
			@RequestParam(name = "limit", defaultValue = "10") int limit,
618
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
619
			throws ProfitMandiBusinessException {
620
		LOGGER.info("In search Item....");
621
		List<Lead> leads = null;
622
		if (!searchTerm.equals("")) {
623
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
624
			if (!(leads.size() == 0)) {
625
 
626
				List<Integer> authIds = new ArrayList<>();
627
				for (Lead lead : leads) {
628
					authIds.add(lead.getAssignTo());
629
				}
630
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
631
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
632
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
633
				model.addAttribute("leads", leads);
634
			}
635
		}
636
 
637
		return "lead-close-paginated";
638
 
639
	}
640
 
25979 tejbeer 641
	@RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
642
	public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
643
		List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
31249 tejbeer 644
 
645
		LOGGER.info("leadActivity" + leadActivity);
646
 
25979 tejbeer 647
		model.addAttribute("leadActivity", leadActivity);
31249 tejbeer 648
		model.addAttribute("authUserMap",
649
				authRepository.selectAllActiveUser().stream().collect(Collectors.toMap(x -> x.getId(), x -> x)));
650
 
25979 tejbeer 651
		return "lead_activity_modal";
652
	}
653
 
654
	@RequestMapping(value = "/createLead", method = RequestMethod.POST)
655
	public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
656
			Model model) throws Exception {
657
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
31249 tejbeer 658
 
25979 tejbeer 659
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
660
		Lead lead = new Lead();
661
		lead.setFirstName(createRefferalRequest.getFirstName());
662
		lead.setLastName(createRefferalRequest.getLastName());
663
		lead.setLeadMobile(createRefferalRequest.getMobile());
664
		lead.setState(createRefferalRequest.getState());
665
		lead.setCity(createRefferalRequest.getCity());
666
		lead.setAddress(createRefferalRequest.getAddress());
667
		lead.setCreatedTimestamp(LocalDateTime.now());
668
		lead.setUpdatedTimestamp(LocalDateTime.now());
669
		lead.setStatus(createRefferalRequest.getStatus());
670
		lead.setAssignTo(createRefferalRequest.getAssignTo());
671
		lead.setSource(createRefferalRequest.getSource());
26298 tejbeer 672
		lead.setColor("yellow");
25979 tejbeer 673
		// change
25989 tejbeer 674
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
25979 tejbeer 675
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
676
		lead.setCreatedBy(authUserName);
677
		lead.setAuthId(authUser.getId());
678
 
679
		leadRepository.persist(lead);
680
		LeadActivity leadActivity = new LeadActivity();
681
		leadActivity.setLeadId(lead.getId());
682
		leadActivity.setRemark(createRefferalRequest.getRemark());
31249 tejbeer 683
		leadActivity.setAuthId(authUser.getId());
684
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getCommunicationType());
25979 tejbeer 685
 
686
		if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
687
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
31249 tejbeer 688
			leadActivity.setCommunicationType(createRefferalRequest.getCommunicationType());
689
 
690
			if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
691
				visitRequestRepository.createVisitRequest(lead.getId(), "lead", lead.getAssignTo(),
692
						createRefferalRequest.getSchelduleTimestamp());
693
			}
25979 tejbeer 694
		} else {
695
			leadActivity.setSchelduleTimestamp(null);
696
		}
697
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
698
		leadActivityRepository.persist(leadActivity);
31265 tejbeer 699
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
31249 tejbeer 700
 
25979 tejbeer 701
		return "response";
702
 
703
	}
704
 
705
	@RequestMapping(value = "/editLead", method = RequestMethod.POST)
27605 tejbeer 706
	public String EditLead(HttpServletRequest request,
707
			@RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
31249 tejbeer 708
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
25979 tejbeer 709
 
31249 tejbeer 710
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
711
 
25979 tejbeer 712
		LeadActivity leadActivity = new LeadActivity();
27605 tejbeer 713
		leadActivity.setLeadId(createLeadActivityRequest.getId());
714
		leadActivity.setRemark(createLeadActivityRequest.getRemark());
29598 tejbeer 715
 
29476 manish 716
		LOGGER.info("createRefferalRequest" + createLeadActivityRequest);
27605 tejbeer 717
 
718
		if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
719
			leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
31249 tejbeer 720
			leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
721
			if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
722
				visitRequestRepository.createVisitRequest(createLeadActivityRequest.getId(), "lead",
723
						createLeadActivityRequest.getAssignTo(), createLeadActivityRequest.getScheldule());
724
			}
27605 tejbeer 725
		} else {
726
			leadActivity.setSchelduleTimestamp(null);
727
		}
25979 tejbeer 728
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
31249 tejbeer 729
		leadActivity.setAuthId(authUser.getId());
25979 tejbeer 730
		leadActivityRepository.persist(leadActivity);
29598 tejbeer 731
		Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
27605 tejbeer 732
		lead.setAssignTo(createLeadActivityRequest.getAssignTo());
733
		lead.setStatus(createLeadActivityRequest.getStatus());
28200 tejbeer 734
		lead.setNotinterestedReason(createLeadActivityRequest.getReason());
25979 tejbeer 735
		lead.setUpdatedTimestamp(LocalDateTime.now());
736
 
29473 manish 737
		lead = leadRepository.selectById(createLeadActivityRequest.getId());
29598 tejbeer 738
 
29476 manish 739
		int authId = 0;
740
		if (lead != null) {
25979 tejbeer 741
 
29476 manish 742
			authId = lead.getAssignTo();
743
			Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
29598 tejbeer 744
 
745
			List<LeadActivity> leadActivitys = leadActivityRepository.selectBYLeadId(lead.getId());
746
 
747
			if (!leadActivitys.isEmpty()) {
748
				leadActivityMap.put(lead.getId(), leadActivitys.get(0));
749
			}
750
 
751
			Map<Integer, AuthUser> authIdAndAuthUserMap = new HashMap<>();
752
			AuthUser AuthUser = authRepository.selectById(authId);
753
 
754
			authIdAndAuthUserMap.put(AuthUser.getId(), AuthUser);
755
 
29476 manish 756
			model.addAttribute("leadActivityMap", leadActivityMap);
757
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
758
		}
759
 
29473 manish 760
		model.addAttribute("request", lead);
761
 
762
		return "edit-lead";
763
 
25979 tejbeer 764
	}
29445 manish 765
 
29426 manish 766
	@RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
767
	public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
29598 tejbeer 768
		List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName())
769
				.collect(Collectors.toList());
770
 
29426 manish 771
		List<List<?>> rows = new ArrayList<>();
772
 
29598 tejbeer 773
		List<LeadSource> lss = LeadSource.enumValues;
29426 manish 774
 
29598 tejbeer 775
		for (LeadSource ls : lss) {
776
			rows.add(Arrays.asList("-", "-", "-", "-", "-", "-", "-", ls));
777
 
778
		}
779
		for (String stateName : stateNames) {
780
			rows.add(Arrays.asList("-", "-", "-", "-", stateName, "-", "-", "-"));
781
 
782
		}
783
 
784
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil.getCSVByteStream(Arrays.asList("First Name",
785
				"Last Name", "Address", "City", "State", "Mobile", "Assign To(email)", "Source"), rows);
786
 
29426 manish 787
		final HttpHeaders headers = new HttpHeaders();
788
		headers.set("Content-Type", "text/csv");
29598 tejbeer 789
		headers.set("Content-disposition", "inline; filename=leads.format.csv");
29426 manish 790
		headers.setContentLength(baos.toByteArray().length);
791
 
792
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
793
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
794
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
795
 
796
	}
29445 manish 797
 
29426 manish 798
	@RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
799
	public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response,
800
			@RequestPart MultipartFile file) throws Throwable {
801
 
29598 tejbeer 802
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
803
		String email = loginDetails.getEmailId();
804
 
805
		AuthUser createdBy = authRepository.selectByEmailOrMobile(email);
806
 
29426 manish 807
		LOGGER.info("file" + file.toString());
808
 
809
		String fileName = file.getName();
810
 
811
		String fileNames = file.getOriginalFilename();
812
 
813
		LOGGER.info("fileName" + fileName);
814
		LOGGER.info("fileNames" + fileNames);
815
 
29598 tejbeer 816
		List<CSVRecord> records = FileUtil.readFile(file);
29426 manish 817
 
29598 tejbeer 818
		for (CSVRecord record : records) {
29426 manish 819
 
820
			Lead lead = new Lead();
29598 tejbeer 821
			lead.setFirstName(record.get(0));
822
			lead.setLastName(record.get(1));
823
			lead.setAddress(record.get(2));
824
			lead.setCity(record.get(3));
825
			lead.setState(record.get(4));
826
			lead.setLeadMobile(record.get(5));
827
			LOGGER.info("record" + record.get(6));
29426 manish 828
 
29598 tejbeer 829
			AuthUser assignTo = authRepository.selectByEmailOrMobile(record.get(6));
29426 manish 830
 
29598 tejbeer 831
			if (assignTo == null) {
832
				throw new ProfitMandiBusinessException("Assign To ", record.get(6), "email id not exist");
833
			}
29445 manish 834
 
29598 tejbeer 835
			lead.setAssignTo(assignTo.getId());
836
			lead.setSource(record.get(7));
837
 
838
			lead.setCreatedTimestamp(LocalDateTime.now());
839
 
29426 manish 840
			lead.setUpdatedTimestamp(LocalDateTime.now());
841
			lead.setStatus(LeadStatus.pending);
842
			lead.setColor("yellow");
843
			// change
29598 tejbeer 844
			lead.setCreatedBy(createdBy.getFullName());
845
			lead.setAuthId(createdBy.getId());
29426 manish 846
 
847
			leadRepository.persist(lead);
848
 
849
			LeadActivity leadActivity = new LeadActivity();
850
			leadActivity.setLeadId(lead.getId());
29598 tejbeer 851
			leadActivity.setRemark("New Lead");
29426 manish 852
			leadActivity.setSchelduleTimestamp(null);
853
 
854
			leadActivity.setCreatedTimestamp(LocalDateTime.now());
855
			leadActivityRepository.persist(leadActivity);
31238 amit.gupta 856
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
29426 manish 857
 
858
		}
859
 
860
		model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
861
 
862
		return "response";
863
 
864
	}
865
 
30185 tejbeer 866
	@RequestMapping(value = "/teamCommitment", method = RequestMethod.GET)
867
	public String teamCommitments(HttpServletRequest request, Model model) throws Exception {
868
 
869
		return "team-commitment";
870
 
871
	}
872
 
873
	@RequestMapping(value = "/getTeamCommitment", method = RequestMethod.GET)
874
	public String getTeamCommitments(HttpServletRequest request, @RequestParam LocalDateTime date, Model model)
875
			throws Exception {
876
 
877
		List<TeamCommitmentModel> commitments = partnerCollectionPlanRepository
878
				.selectTeamCommitmentByDate(date.toLocalDate());
879
 
880
		model.addAttribute("commitments", commitments);
881
		return "team-commitment-table";
882
 
883
	}
30416 tejbeer 884
 
885
	@RequestMapping(value = "/partnerHealth", method = RequestMethod.GET)
886
	public String partnerHealth(HttpServletRequest request,
887
			@RequestParam(name = "email", required = false) String email, Model model) throws Exception {
888
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
889
 
890
		if (StringUtils.isEmpty(email)) {
891
			email = loginDetails.getEmailId();
892
		} else {
893
			AuthUser selectedUser = authRepository.selectByEmailOrMobile(email);
894
 
895
			model.addAttribute("selectedUser", selectedUser);
896
 
897
		}
898
 
899
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
900
 
901
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
30771 amit.gupta 902
		List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(email));
30416 tejbeer 903
		LocalDateTime startDate = LocalDate.now().atStartOfDay();
30771 amit.gupta 904
		if (fofoIds != null && fofoIds.size() > 0) {
905
			List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
30416 tejbeer 906
					.filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
907
 
908
			Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService
909
					.getCollectionMap(fofoIdList, startDate);
910
 
30434 tejbeer 911
			List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
912
 
913
			LOGGER.info("remarkIds {}", remarkIds);
914
 
915
			long todayOverallCall = 0;
916
			if (!remarkIds.isEmpty()) {
917
 
30459 tejbeer 918
				if (authUser.getEmailId().equals(email)) {
30458 tejbeer 919
 
920
					todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream()
921
							.filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now()))
922
							.collect(Collectors.counting());
923
				} else {
924
 
925
					todayOverallCall = partnerCollectionRemarkRepository
926
							.selectByAuthIdAndIds(authRepository.selectByEmailOrMobile(email).getId(), remarkIds)
927
							.stream().filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now()))
928
							.collect(Collectors.counting());
929
 
930
				}
931
 
30434 tejbeer 932
			}
30781 tejbeer 933
			ChartLeadModel cm = new ChartLeadModel();
30434 tejbeer 934
 
30781 tejbeer 935
			if (!foundCollectionMap.isEmpty()) {
936
				cm = this.getCollectionCount(foundCollectionMap.values().stream().collect(Collectors.toList()));
937
 
938
			}
30416 tejbeer 939
			model.addAttribute("chartPartnerHealth", gson.toJson(cm));
940
			Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
941
 
942
			List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository
943
					.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
944
			if (!partnerDailyInvestments.isEmpty()) {
945
				partnerDailyInvestmentMap = partnerDailyInvestments.stream()
946
						.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
947
			}
948
 
949
			Map<LocalDate, Map<Integer, PartnerCollectionPlanModel>> pcpmMap = new TreeMap<>();
950
			for (int i = 0; i <= 6; i++) {
951
 
952
				Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService
953
						.getCollectionMap(fofoIdList, startDate.minusDays(i));
954
 
955
				pcpmMap.put(startDate.minusDays(i).toLocalDate(), collectionMap);
956
			}
957
 
958
			Map<Integer, PartnerCollectionPlanModel> todayPcpmMap = pcpmMap.get(startDate.toLocalDate());
959
			model.addAttribute("todayPcpmMap", todayPcpmMap);
30445 tejbeer 960
 
30808 tejbeer 961
			TotalTargetColectionModel totalTargetCollection = partnerCollectionService
962
					.getTotalTargetCollection(todayPcpmMap, startDate);
963
			model.addAttribute("totalPartnerTargetCollection", totalTargetCollection.getTotalTarget());
30445 tejbeer 964
 
30808 tejbeer 965
			model.addAttribute("totalPartnerAchievement", totalTargetCollection.getTotalAchievement());
30445 tejbeer 966
 
30426 tejbeer 967
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30582 tejbeer 968
			Map<Integer, CustomRetailer> customRetailers = fofoIdList.stream().distinct()
969
					.map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream()
30426 tejbeer 970
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
30416 tejbeer 971
			List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30420 tejbeer 972
 
30416 tejbeer 973
			List<Integer> salesPositionsAuthIds = positionRepository
974
					.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream()
975
					.map(x -> x.getAuthUserId()).collect(Collectors.toList());
976
			List<Integer> rbmPositionsAuthIds = positionRepository
977
					.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream()
978
					.map(x -> x.getAuthUserId()).collect(Collectors.toList());
979
 
980
			salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
981
 
982
			Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x))
983
					.collect(Collectors.toSet());
984
 
985
			List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
986
 
30441 tejbeer 987
			Map<Integer, AuthUser> authUserMap = authRepository.selectAll().stream()
988
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
989
 
990
			LOGGER.info("todayPcpmMap {}", todayPcpmMap);
991
 
30416 tejbeer 992
			model.addAttribute("authUsers", authUsers);
30441 tejbeer 993
			model.addAttribute("authUserMap", authUserMap);
30416 tejbeer 994
			model.addAttribute("partnerCollectionPlanMap", pcpmMap);
995
			model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
996
			model.addAttribute("customRetailers", customRetailers);
997
			model.addAttribute("rankColorMap", ProfitMandiConstants.Rank_Color_Map);
30434 tejbeer 998
			model.addAttribute("todayOverallCall", todayOverallCall);
30416 tejbeer 999
 
1000
		}
1001
		return "partner-health";
1002
 
1003
	}
1004
 
1005
	public ChartLeadModel getCollectionCount(List<PartnerCollectionPlanModel> pcpm)
1006
			throws ProfitMandiBusinessException {
1007
 
1008
		Map<Integer, Long> rankCount = pcpm.stream().collect(Collectors.groupingBy(x -> x.getRank(),
1009
				Collectors.mapping(PartnerCollectionPlanModel::getRank, Collectors.counting())));
1010
 
1011
		ChartLeadModel cm = new ChartLeadModel();
1012
 
30771 amit.gupta 1013
		List<String> labels = new ArrayList<>();
30416 tejbeer 1014
		labels.add("Plan for Today");
1015
		labels.add("Carry Forward");
1016
		labels.add("Untouched");
1017
		labels.add("Plan for Future");
1018
		labels.add("Normal");
1019
 
1020
		List<String> backgroundColor = new ArrayList<>();
1021
		List<Long> values = new ArrayList<>();
1022
 
1023
		for (String label : labels) {
1024
 
1025
			if (label.equals("Plan for Today")) {
1026
				backgroundColor.add("#007bff");
1027
				values.add(rankCount.get(1));
1028
			}
1029
			if (label.equals("Carry Forward")) {
1030
				backgroundColor.add("#ffc107");
1031
				values.add(rankCount.get(2));
1032
			}
1033
			if (label.equals("Untouched")) {
1034
				backgroundColor.add("#dc3545");
1035
				values.add(rankCount.get(3));
1036
			}
1037
			if (label.equals("Plan for Future")) {
1038
				backgroundColor.add("#6c757d");
1039
				values.add(rankCount.get(4));
1040
			}
1041
			if (label.equals("Normal")) {
1042
				backgroundColor.add("White");
1043
				values.add(rankCount.get(5));
1044
			}
1045
 
1046
		}
1047
 
1048
		LOGGER.info("backgroundColor" + backgroundColor);
1049
		LOGGER.info("labelsChartLead" + labels);
1050
		LeadStatusData data = new LeadStatusData();
1051
		data.setData(values);
1052
		data.setBackgroundColor(backgroundColor);
1053
		data.setLabel("DataSet 1");
1054
 
1055
		PieLables label = new PieLables();
1056
		label.setFontColor("black");
1057
		label.setFontSize(15);
1058
 
1059
		Legend legend = new Legend();
1060
		legend.setLabels(label);
1061
		legend.setPosition("left");
1062
 
1063
		List<LeadStatusData> dataList = new ArrayList<>();
1064
		dataList.add(data);
1065
 
1066
		DataLeadModel datasets = new DataLeadModel();
1067
		datasets.setDatasets(dataList);
1068
		datasets.setLabels(labels);
1069
 
1070
		OptionModel om = new OptionModel();
1071
		om.setLegend(legend);
1072
 
1073
		cm.setType("pie");
1074
		cm.setData(datasets);
1075
		cm.setOptions(om);
1076
 
1077
		return cm;
1078
	}
1079
 
30522 tejbeer 1080
	@RequestMapping(value = "/franchiseVisit", method = RequestMethod.GET)
1081
	public String franchiseVisit(HttpServletRequest request,
1082
			@RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1083
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1084
 
1085
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1086
 
1087
		List<Integer> salesPositionsAuthIds = positionRepository
1088
				.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream()
1089
				.map(x -> x.getAuthUserId()).collect(Collectors.toList());
1090
		List<Integer> rbmPositionsAuthIds = positionRepository
1091
				.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream()
1092
				.map(x -> x.getAuthUserId()).collect(Collectors.toList());
1093
 
1094
		salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
1095
 
1096
		List<Integer> allReportees = authService.getAllReportees(authUser.getId());
1097
 
1098
		Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x))
1099
				.collect(Collectors.toSet());
1100
 
1101
		List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
1102
 
1103
		Map<Integer, String> monthValueMap = new HashMap<>();
1104
		for (int i = 0; i <= 5; i++) {
1105
			LocalDateTime startOfMonth = LocalDateTime.now().withDayOfMonth(1).minusMonths(i);
1106
			monthValueMap.put(i, startOfMonth.format(DateTimeFormatter.ofPattern("MMM''uu")));
1107
		}
1108
 
1109
		model.addAttribute("authUsers", authUsers);
1110
		model.addAttribute("monthValueMap", monthValueMap);
1111
 
1112
		return "franchise-visit";
1113
 
1114
	}
1115
 
1116
	@RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET)
1117
	public String getFranchiseVisit(HttpServletRequest request,
1118
			@RequestParam(name = "authId", required = false) int authId, int yearMonth, Model model) throws Exception {
1119
 
30582 tejbeer 1120
		LocalDateTime startDate = LocalDate.now().minusMonths(8).withDayOfMonth(1).atStartOfDay();
30522 tejbeer 1121
		LocalDateTime endDate = startDate.plusMonths(1).withDayOfMonth(1).toLocalDate().atStartOfDay();
1122
 
1123
		DateRangeModel drm = DateRangeModel.of(startDate, endDate);
1124
 
1125
		List<FranchiseeVisit> visits = franchiseeVisitRepository.selectByAuthUserAndDateRange(drm, authId);
1126
 
1127
		if (!visits.isEmpty()) {
1128
 
1129
			Map<Integer, List<FranchiseeVisit>> franchiseeVisitMap = visits.stream()
1130
					.collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().getDayOfMonth()));
1131
 
1132
			model.addAttribute("franchiseeVisitMap", franchiseeVisitMap);
1133
 
1134
		}
1135
 
1136
		model.addAttribute("visits", visits);
1137
		model.addAttribute("monthLength", startDate.toLocalDate().lengthOfMonth());
1138
 
1139
		// Calender
1140
 
1141
		int Year = startDate.getYear(); // year
1142
		int startDayOfMonth = 5;
1143
		int spaces = startDayOfMonth;
1144
 
1145
		int month = startDate.getMonthValue();
1146
 
1147
		int[] days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
1148
 
1149
		LOGGER.info("visits {} ", visits);
1150
 
1151
		if ((((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) && month == 2) {
1152
			days[month] = 29;
1153
		}
1154
 
1155
		spaces = (days[month - 1] + spaces) % 7;
1156
 
1157
		model.addAttribute("month", month);
1158
		model.addAttribute("spaces", spaces);
1159
		model.addAttribute("days", days);
1160
 
1161
		return "franchise-visit-container";
1162
 
1163
	}
1164
 
1165
	@RequestMapping(value = "/getFranchiseeActivity", method = RequestMethod.GET)
1166
	public String getFranchiseeActivity(HttpServletRequest request, int visitId, Model model) throws Exception {
1167
 
1168
		List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(visitId);
1169
 
1170
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(visitId);
1171
 
1172
		Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAll().stream()
1173
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
1174
		model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
1175
 
1176
		model.addAttribute("franchiseeVisit", franchiseeVisit);
1177
		model.addAttribute("franchiseeActivity", franchiseeActivities.get(0));
1178
 
1179
		return "franchie-visit-detail";
1180
 
1181
	}
1182
 
30771 amit.gupta 1183
	@RequestMapping(value = "/indent/today_target", method = RequestMethod.GET)
1184
	public String todayTarget(HttpServletRequest request, Model model) throws Exception {
1185
		List<RBMPerformanceSummaryModel> summaryModels = new ArrayList<>();
1186
		List<Integer> rbmPositionsAuthIds = positionRepository
30781 tejbeer 1187
				.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream()
1188
				.filter(x -> Arrays.asList(EscalationType.L1, EscalationType.L2).contains(x.getEscalationType()))
30771 amit.gupta 1189
				.map(x -> x.getAuthUserId()).distinct().collect(Collectors.toList());
1190
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
30781 tejbeer 1191
		List<TeamCommitmentModel> teamCommitmentModels = partnerCollectionPlanRepository
1192
				.selectTeamCommitmentByDate(LocalDate.now());
1193
		Map<Integer, Double> rbmSecondaryTargetMap = teamCommitmentModels.stream()
1194
				.filter(x -> rbmPositionsAuthIds.contains(x.getAuthId()))
1195
				.collect(Collectors.groupingBy(x -> x.getAuthId(),
1196
						Collectors.summingDouble(x -> x.getTotalTarget() == null ? 0 : x.getTotalTarget())));
1197
		Map<Integer, Double> rbmSecondaryMap = teamCommitmentModels.stream()
1198
				.filter(x -> rbmPositionsAuthIds.contains(x.getAuthId()))
1199
				.collect(Collectors.groupingBy(x -> x.getAuthId(),
1200
						Collectors.summingDouble(x -> x.getTotalAchievement() == null ? 0 : x.getTotalAchievement())));
30771 amit.gupta 1201
		LocalDateTime startDate = LocalDate.now().atStartOfDay();
1202
		for (int rbmAuthId : rbmPositionsAuthIds) {
1203
			RBMPerformanceSummaryModel rbmPerformanceSummaryModel = new RBMPerformanceSummaryModel();
1204
			rbmPerformanceSummaryModel.setAuthId(rbmAuthId);
1205
			AuthUser authUser = authRepository.selectById(rbmAuthId);
1206
			rbmPerformanceSummaryModel.setAuthName(authUser.getFullName());
1207
			List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(authUser.getEmailId()));
1208
 
1209
			if (fofoIds.size() > 0) {
30781 tejbeer 1210
				fofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream().filter(x -> !x.isInternal())
1211
						.map(x -> x.getId()).collect(Collectors.toList());
30771 amit.gupta 1212
 
30781 tejbeer 1213
				/*
1214
				 * Map<Integer, PartnerCollectionPlanModel> foundCollectionMap =
1215
				 * partnerCollectionService .getCollectionMap(fofoIds, startDate);
1216
				 */
30771 amit.gupta 1217
 
1218
				List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIds);
1219
 
1220
				LOGGER.info("remarkIds {}", remarkIds);
1221
 
1222
				long todayOverallCall = 0;
1223
				if (!remarkIds.isEmpty()) {
1224
					todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream()
1225
							.filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now()))
1226
							.collect(Collectors.counting());
1227
 
1228
				}
1229
 
1230
				Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService
1231
						.getCollectionMap(fofoIds, startDate);
1232
 
1233
				ChartLeadModel cm = this
1234
						.getCollectionCount(collectionMap.values().stream().collect(Collectors.toList()));
1235
 
30781 tejbeer 1236
				long collectionTarget = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null)
1237
						.collect(Collectors.summingLong(x -> x.getTargetPlan()));
1238
				long collection = collectionMap.values().stream().filter(
1239
						x -> x.getTargetPlan() != null && x.getTargetPlan() != 0 && x.getAchievementPlan() != null)
1240
						.collect(Collectors.summingLong(x -> x.getAchievementPlan()));
30771 amit.gupta 1241
				rbmPerformanceSummaryModel.setChartLeadModel(cm);
1242
				rbmPerformanceSummaryModel.setPartnersCommunicated(todayOverallCall);
1243
				rbmPerformanceSummaryModel.setCollectionTarget(collectionTarget);
1244
				rbmPerformanceSummaryModel.setCollection(collection);
30781 tejbeer 1245
				rbmPerformanceSummaryModel.setSecondaryTarget(rbmSecondaryTargetMap.get(rbmAuthId) == null ? 0
1246
						: rbmSecondaryTargetMap.get(rbmAuthId).floatValue());
1247
				rbmPerformanceSummaryModel.setSecondary(
1248
						rbmSecondaryMap.get(rbmAuthId) == null ? 0 : rbmSecondaryMap.get(rbmAuthId).floatValue());
30771 amit.gupta 1249
				summaryModels.add(rbmPerformanceSummaryModel);
30781 tejbeer 1250
				// cm.getData().getDatasets().get(0).getData().;
1251
				// cm.getData().getDatasets().get(0).getBackgroundColor();
1252
				// cm.getData().getLabels()
30771 amit.gupta 1253
 
1254
			}
1255
		}
1256
		model.addAttribute("summaryModels", summaryModels);
1257
		return "today_target";
1258
	}
1259
 
31249 tejbeer 1260
	@RequestMapping(value = "/visitPlan", method = RequestMethod.GET)
1261
	public String visitPlan(HttpServletRequest request, Model model) throws Exception {
1262
 
1263
		return "visit-request-plan";
1264
	}
1265
 
1266
	@RequestMapping(value = "/visit/getVisitPlan", method = RequestMethod.GET)
1267
	public String getVisitPlan(HttpServletRequest request, @RequestParam LocalDate date, Model model) throws Exception {
1268
		List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(date);
1269
 
1270
		List<Integer> leadIds = visitRequests.stream().filter(x -> x.getVisitType().equals("lead"))
1271
				.map(x -> x.getVisitId()).collect(Collectors.toList());
1272
		Map<Integer, Lead> leadMap = new HashMap<>();
1273
		if (!leadIds.isEmpty()) {
1274
			List<Lead> leads = leadRepository.selectAllByIds(leadIds);
1275
 
1276
			for (Lead lead : leads) {
1277
				List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
1278
				lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
1279
				lead.setLeadActivity(leadActivities.get(0));
1280
 
1281
				leadMap.put(lead.getId(), lead);
1282
			}
1283
 
1284
		}
1285
		List<Integer> franchiseeIds = visitRequests.stream().filter(x -> x.getVisitType().equals("franchiseeVisit"))
1286
				.map(x -> x.getVisitId()).collect(Collectors.toList());
1287
		Map<Integer, FranchiseeVisit> franchiseeVisitsMap = new HashMap<>();
1288
		if (!franchiseeIds.isEmpty()) {
1289
			List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
1290
			LOGGER.info("franchiseeVisits {}", franchiseeVisits);
1291
 
1292
			for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
1293
				List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository
1294
						.selectByFranchiseeVisitId(franchiseeVisit.getId());
1295
				LOGGER.info("franchiseeActivities {}", franchiseeActivities);
1296
 
1297
				franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
1298
				franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
1299
 
1300
				franchiseeVisitsMap.put(franchiseeVisit.getId(), franchiseeVisit);
1301
			}
1302
 
1303
		}
1304
 
1305
		Map<Integer, List<VisitRequest>> visitRequestMap = visitRequests.stream()
1306
				.collect(Collectors.groupingBy(x -> x.getCreatedBy()));
1307
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
1308
		List<UserVisitModel> userVisits = new ArrayList<>();
1309
 
1310
		for (AuthUser authUser : authUsers) {
1311
 
1312
			List<VisitRequest> authVisitRequests = visitRequestMap.get(authUser.getId());
1313
 
1314
			if (authVisitRequests != null) {
1315
				UserVisitModel userVisitModel = new UserVisitModel();
1316
				userVisitModel.setAuthUser(authUser.getFullName());
1317
				List<VisitDescriptionModel> visitDescriptions = new ArrayList<>();
1318
 
1319
				for (VisitRequest authVisitRequest : authVisitRequests) {
1320
					VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
1321
					visitDescriptionModel.setVisitId(authVisitRequest.getVisitId());
1322
 
1323
					if (authVisitRequest.getVisitType().equals("lead")) {
1324
						Lead lead = leadMap.get(authVisitRequest.getVisitId());
1325
 
1326
						visitDescriptionModel.setVisitName(lead.getFirstName());
1327
						visitDescriptionModel.setCity(lead.getCity());
1328
						visitDescriptionModel.setState(lead.getState());
1329
						visitDescriptionModel.setScheduleTime(lead.getScheduledTimestamp());
1330
						visitDescriptionModel.setRemarks(lead.getLeadActivity().getRemark());
1331
 
1332
					} else {
1333
						FranchiseeVisit franchiseeVisit = franchiseeVisitsMap.get(authVisitRequest.getVisitId());
1334
						CustomRetailer customRetailer = retailerService.getFofoRetailer(franchiseeVisit.getFofoId());
1335
 
1336
						visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
1337
						visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
1338
						visitDescriptionModel.setState(customRetailer.getAddress().getState());
1339
						visitDescriptionModel
1340
								.setScheduleTime(franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
1341
						visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
1342
 
1343
					}
1344
 
1345
					if (authVisitRequest.getActionedBy() != 0) {
1346
						AuthUser au = authRepository.selectById(authVisitRequest.getActionedBy());
1347
 
1348
						visitDescriptionModel.setActionBy(au.getFullName());
1349
					}
1350
					visitDescriptionModel.setStatus(authVisitRequest.getStatus());
1351
					visitDescriptionModel.setVisitType(authVisitRequest.getVisitType());
1352
					visitDescriptions.add(visitDescriptionModel);
1353
				}
1354
 
1355
				userVisitModel.setVisitDescriptions(visitDescriptions);
1356
				userVisits.add(userVisitModel);
1357
			}
1358
 
1359
		}
1360
 
1361
		model.addAttribute("userVisits", userVisits);
1362
 
1363
		return "visit-request-plan";
1364
	}
25979 tejbeer 1365
}