Subversion Repositories SmartDukaan

Rev

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