Subversion Repositories SmartDukaan

Rev

Rev 30582 | Rev 30773 | 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;
29598 tejbeer 13
import com.spice.profitmandi.dao.enumuration.dtr.LeadSource;
25979 tejbeer 14
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
30771 amit.gupta 15
import com.spice.profitmandi.dao.model.*;
25979 tejbeer 16
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30185 tejbeer 17
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
30434 tejbeer 18
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
30416 tejbeer 19
import com.spice.profitmandi.dao.repository.cs.CsService;
29266 manish 20
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
30771 amit.gupta 21
import com.spice.profitmandi.dao.repository.dtr.*;
30416 tejbeer 22
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
25979 tejbeer 23
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
30445 tejbeer 24
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
29266 manish 25
import com.spice.profitmandi.service.AuthService;
30416 tejbeer 26
import com.spice.profitmandi.service.PartnerCollectionService;
27
import com.spice.profitmandi.service.user.RetailerService;
25979 tejbeer 28
import com.spice.profitmandi.web.model.LoginDetails;
29
import com.spice.profitmandi.web.util.CookiesProcessor;
30
import com.spice.profitmandi.web.util.MVCResponseSender;
30771 amit.gupta 31
import org.apache.commons.csv.CSVRecord;
32
import org.apache.logging.log4j.LogManager;
33
import org.apache.logging.log4j.Logger;
34
import org.springframework.beans.factory.annotation.Autowired;
35
import org.springframework.core.io.InputStreamResource;
36
import org.springframework.http.HttpHeaders;
37
import org.springframework.http.HttpStatus;
38
import org.springframework.http.ResponseEntity;
39
import org.springframework.stereotype.Controller;
40
import org.springframework.ui.Model;
41
import org.springframework.util.StringUtils;
42
import org.springframework.web.bind.annotation.*;
43
import org.springframework.web.multipart.MultipartFile;
25979 tejbeer 44
 
30771 amit.gupta 45
import javax.servlet.http.HttpServletRequest;
46
import javax.servlet.http.HttpServletResponse;
47
import javax.transaction.Transactional;
48
import java.io.ByteArrayInputStream;
49
import java.io.InputStream;
50
import java.time.LocalDate;
51
import java.time.LocalDateTime;
52
import java.time.format.DateTimeFormatter;
53
import java.util.*;
54
import java.util.Map.Entry;
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);
648
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
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);
795
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
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
			}
872
 
30416 tejbeer 873
			ChartLeadModel cm = this
874
					.getCollectionCount(foundCollectionMap.values().stream().collect(Collectors.toList()));
875
			model.addAttribute("chartPartnerHealth", gson.toJson(cm));
876
			Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
877
 
878
			List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository
879
					.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
880
			if (!partnerDailyInvestments.isEmpty()) {
881
				partnerDailyInvestmentMap = partnerDailyInvestments.stream()
882
						.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
883
			}
884
 
885
			Map<LocalDate, Map<Integer, PartnerCollectionPlanModel>> pcpmMap = new TreeMap<>();
886
			for (int i = 0; i <= 6; i++) {
887
 
888
				Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService
889
						.getCollectionMap(fofoIdList, startDate.minusDays(i));
890
 
30420 tejbeer 891
				LOGGER.info("dddd {} {}", startDate.minusDays(i), collectionMap.get(175138989));
892
 
30416 tejbeer 893
				pcpmMap.put(startDate.minusDays(i).toLocalDate(), collectionMap);
894
			}
895
 
896
			Map<Integer, PartnerCollectionPlanModel> todayPcpmMap = pcpmMap.get(startDate.toLocalDate());
897
			model.addAttribute("todayPcpmMap", todayPcpmMap);
30445 tejbeer 898
 
899
			int totalPartnerTargetCollection = 0;
900
 
901
			long totalPartnerAchievement = 0;
902
 
903
			for (Entry<Integer, PartnerCollectionPlanModel> todayPcpmMapEntry : todayPcpmMap.entrySet()) {
904
				PartnerCollectionPlanModel collectionPlan = todayPcpmMapEntry.getValue();
905
				if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
906
					float targetCollection = 0;
907
 
908
					if (collectionPlan.getRank() == 2) {
909
						targetCollection = collectionPlan.getTargetPlan() - collectionPlan.getAchievementPlan();
910
					} else {
911
						targetCollection = collectionPlan.getTargetPlan();
912
					}
913
 
914
					if (!collectionPlan.getCommittedDate().isAfter(startDate)) {
915
						totalPartnerTargetCollection += targetCollection;
916
					}
917
 
918
				}
919
			}
920
			model.addAttribute("totalPartnerTargetCollection", totalPartnerTargetCollection);
921
			Map<Integer, PartnerCollectionAchievementModel> collectionAchievementMap = userWalletRepository
922
					.getPartnerWiseCollectionAchievement(fofoIdList, startDate).stream()
923
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
924
 
925
			totalPartnerAchievement = collectionAchievementMap.entrySet().stream()
926
					.filter(x -> x.getValue().getAmount() != null)
927
					.collect(Collectors.summingLong(x -> x.getValue().getAmount()));
928
 
929
			model.addAttribute("totalPartnerAchievement", totalPartnerAchievement);
930
 
30426 tejbeer 931
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30582 tejbeer 932
			Map<Integer, CustomRetailer> customRetailers = fofoIdList.stream().distinct()
933
					.map(x -> customRetailerMap.get(x)).filter(x -> x != null).collect(Collectors.toList()).stream()
30426 tejbeer 934
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
30416 tejbeer 935
			List<Integer> allReportees = authService.getAllReportees(authUser.getId());
30420 tejbeer 936
 
30416 tejbeer 937
			List<Integer> salesPositionsAuthIds = positionRepository
938
					.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream()
939
					.map(x -> x.getAuthUserId()).collect(Collectors.toList());
940
			List<Integer> rbmPositionsAuthIds = positionRepository
941
					.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream()
942
					.map(x -> x.getAuthUserId()).collect(Collectors.toList());
943
 
944
			salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
945
 
946
			Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x))
947
					.collect(Collectors.toSet());
948
 
949
			List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
950
 
30441 tejbeer 951
			Map<Integer, AuthUser> authUserMap = authRepository.selectAll().stream()
952
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
953
 
954
			LOGGER.info("todayPcpmMap {}", todayPcpmMap);
955
 
30416 tejbeer 956
			model.addAttribute("authUsers", authUsers);
30441 tejbeer 957
			model.addAttribute("authUserMap", authUserMap);
30416 tejbeer 958
			model.addAttribute("partnerCollectionPlanMap", pcpmMap);
959
			model.addAttribute("partnerDailyInvestmentMap", partnerDailyInvestmentMap);
960
			model.addAttribute("customRetailers", customRetailers);
961
			model.addAttribute("rankColorMap", ProfitMandiConstants.Rank_Color_Map);
30434 tejbeer 962
			model.addAttribute("todayOverallCall", todayOverallCall);
30416 tejbeer 963
 
964
		}
965
		return "partner-health";
966
 
967
	}
968
 
969
	public ChartLeadModel getCollectionCount(List<PartnerCollectionPlanModel> pcpm)
970
			throws ProfitMandiBusinessException {
971
 
972
		Map<Integer, Long> rankCount = pcpm.stream().collect(Collectors.groupingBy(x -> x.getRank(),
973
				Collectors.mapping(PartnerCollectionPlanModel::getRank, Collectors.counting())));
974
 
975
		ChartLeadModel cm = new ChartLeadModel();
976
 
30771 amit.gupta 977
		List<String> labels = new ArrayList<>();
30416 tejbeer 978
		labels.add("Plan for Today");
979
		labels.add("Carry Forward");
980
		labels.add("Untouched");
981
		labels.add("Plan for Future");
982
		labels.add("Normal");
983
 
984
		List<String> backgroundColor = new ArrayList<>();
985
		List<Long> values = new ArrayList<>();
986
 
987
		for (String label : labels) {
988
 
989
			if (label.equals("Plan for Today")) {
990
				backgroundColor.add("#007bff");
991
				values.add(rankCount.get(1));
992
			}
993
			if (label.equals("Carry Forward")) {
994
				backgroundColor.add("#ffc107");
995
				values.add(rankCount.get(2));
996
			}
997
			if (label.equals("Untouched")) {
998
				backgroundColor.add("#dc3545");
999
				values.add(rankCount.get(3));
1000
			}
1001
			if (label.equals("Plan for Future")) {
1002
				backgroundColor.add("#6c757d");
1003
				values.add(rankCount.get(4));
1004
			}
1005
			if (label.equals("Normal")) {
1006
				backgroundColor.add("White");
1007
				values.add(rankCount.get(5));
1008
			}
1009
 
1010
		}
1011
 
1012
		LOGGER.info("backgroundColor" + backgroundColor);
1013
		LOGGER.info("labelsChartLead" + labels);
1014
		LeadStatusData data = new LeadStatusData();
1015
		data.setData(values);
1016
		data.setBackgroundColor(backgroundColor);
1017
		data.setLabel("DataSet 1");
1018
 
1019
		PieLables label = new PieLables();
1020
		label.setFontColor("black");
1021
		label.setFontSize(15);
1022
 
1023
		Legend legend = new Legend();
1024
		legend.setLabels(label);
1025
		legend.setPosition("left");
1026
 
1027
		List<LeadStatusData> dataList = new ArrayList<>();
1028
		dataList.add(data);
1029
 
1030
		DataLeadModel datasets = new DataLeadModel();
1031
		datasets.setDatasets(dataList);
1032
		datasets.setLabels(labels);
1033
 
1034
		OptionModel om = new OptionModel();
1035
		om.setLegend(legend);
1036
 
1037
		cm.setType("pie");
1038
		cm.setData(datasets);
1039
		cm.setOptions(om);
1040
 
1041
		return cm;
1042
	}
1043
 
30522 tejbeer 1044
	@RequestMapping(value = "/franchiseVisit", method = RequestMethod.GET)
1045
	public String franchiseVisit(HttpServletRequest request,
1046
			@RequestParam(name = "email", required = false) String email, Model model) throws Exception {
1047
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
1048
 
1049
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
1050
 
1051
		List<Integer> salesPositionsAuthIds = positionRepository
1052
				.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_SALES).stream()
1053
				.map(x -> x.getAuthUserId()).collect(Collectors.toList());
1054
		List<Integer> rbmPositionsAuthIds = positionRepository
1055
				.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream()
1056
				.map(x -> x.getAuthUserId()).collect(Collectors.toList());
1057
 
1058
		salesPositionsAuthIds.addAll(rbmPositionsAuthIds);
1059
 
1060
		List<Integer> allReportees = authService.getAllReportees(authUser.getId());
1061
 
1062
		Set<Integer> empHierarchy = allReportees.stream().filter(x -> salesPositionsAuthIds.contains(x))
1063
				.collect(Collectors.toSet());
1064
 
1065
		List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(new ArrayList<>(empHierarchy));
1066
 
1067
		Map<Integer, String> monthValueMap = new HashMap<>();
1068
		for (int i = 0; i <= 5; i++) {
1069
			LocalDateTime startOfMonth = LocalDateTime.now().withDayOfMonth(1).minusMonths(i);
1070
			monthValueMap.put(i, startOfMonth.format(DateTimeFormatter.ofPattern("MMM''uu")));
1071
		}
1072
 
1073
		model.addAttribute("authUsers", authUsers);
1074
		model.addAttribute("monthValueMap", monthValueMap);
1075
 
1076
		return "franchise-visit";
1077
 
1078
	}
1079
 
1080
	@RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET)
1081
	public String getFranchiseVisit(HttpServletRequest request,
1082
			@RequestParam(name = "authId", required = false) int authId, int yearMonth, Model model) throws Exception {
1083
 
30582 tejbeer 1084
		LocalDateTime startDate = LocalDate.now().minusMonths(8).withDayOfMonth(1).atStartOfDay();
30522 tejbeer 1085
		LocalDateTime endDate = startDate.plusMonths(1).withDayOfMonth(1).toLocalDate().atStartOfDay();
1086
 
1087
		DateRangeModel drm = DateRangeModel.of(startDate, endDate);
1088
 
1089
		List<FranchiseeVisit> visits = franchiseeVisitRepository.selectByAuthUserAndDateRange(drm, authId);
1090
 
1091
		if (!visits.isEmpty()) {
1092
 
1093
			Map<Integer, List<FranchiseeVisit>> franchiseeVisitMap = visits.stream()
1094
					.collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().getDayOfMonth()));
1095
 
1096
			model.addAttribute("franchiseeVisitMap", franchiseeVisitMap);
1097
 
1098
		}
1099
 
1100
		model.addAttribute("visits", visits);
1101
		model.addAttribute("monthLength", startDate.toLocalDate().lengthOfMonth());
1102
 
1103
		// Calender
1104
 
1105
		int Year = startDate.getYear(); // year
1106
		int startDayOfMonth = 5;
1107
		int spaces = startDayOfMonth;
1108
 
1109
		int month = startDate.getMonthValue();
1110
 
1111
		int[] days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
1112
 
1113
		LOGGER.info("visits {} ", visits);
1114
 
1115
		if ((((Year % 4 == 0) && (Year % 100 != 0)) || (Year % 400 == 0)) && month == 2) {
1116
			days[month] = 29;
1117
		}
1118
 
1119
		spaces = (days[month - 1] + spaces) % 7;
1120
 
1121
		model.addAttribute("month", month);
1122
		model.addAttribute("spaces", spaces);
1123
		model.addAttribute("days", days);
1124
 
1125
		return "franchise-visit-container";
1126
 
1127
	}
1128
 
1129
	@RequestMapping(value = "/getFranchiseeActivity", method = RequestMethod.GET)
1130
	public String getFranchiseeActivity(HttpServletRequest request, int visitId, Model model) throws Exception {
1131
 
1132
		List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(visitId);
1133
 
1134
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(visitId);
1135
 
1136
		Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAll().stream()
1137
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
1138
		model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
1139
 
1140
		model.addAttribute("franchiseeVisit", franchiseeVisit);
1141
		model.addAttribute("franchiseeActivity", franchiseeActivities.get(0));
1142
 
1143
		return "franchie-visit-detail";
1144
 
1145
	}
1146
 
30771 amit.gupta 1147
	@RequestMapping(value = "/indent/today_target", method = RequestMethod.GET)
1148
	public String todayTarget(HttpServletRequest request, Model model) throws Exception {
1149
		//model.addAttribute("warehouseCollectionMap", warehouseCollectionMap);
1150
		List<RBMPerformanceSummaryModel> summaryModels = new ArrayList<>();
1151
		List<Integer> rbmPositionsAuthIds = positionRepository
1152
				.selectPositionByCategoryId(ProfitMandiConstants.TICKET_CATEGORY_RBM).stream()
1153
				.map(x -> x.getAuthUserId()).distinct().collect(Collectors.toList());
1154
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
1155
		List<TeamCommitmentModel> teamCommitmentModels = partnerCollectionPlanRepository.selectTeamCommitmentByDate(LocalDate.now());
1156
		Map<Integer, TeamCommitmentModel> rbmCommittmentMap = teamCommitmentModels.stream().filter(x -> rbmPositionsAuthIds.contains(x.getAuthId())).collect(Collectors.toMap(x -> x.getAuthId(), x -> x));
1157
		LocalDateTime startDate = LocalDate.now().atStartOfDay();
1158
		for (int rbmAuthId : rbmPositionsAuthIds) {
1159
			RBMPerformanceSummaryModel rbmPerformanceSummaryModel = new RBMPerformanceSummaryModel();
1160
			rbmPerformanceSummaryModel.setAuthId(rbmAuthId);
1161
			AuthUser authUser = authRepository.selectById(rbmAuthId);
1162
			rbmPerformanceSummaryModel.setAuthName(authUser.getFullName());
1163
			List<Integer> fofoIds = new ArrayList<>(storeGuyMap.get(authUser.getEmailId()));
1164
 
1165
			if (fofoIds.size() > 0) {
1166
				fofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
1167
						.filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
1168
 
1169
				/*Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService
1170
						.getCollectionMap(fofoIds, startDate);*/
1171
 
1172
				List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIds);
1173
 
1174
				LOGGER.info("remarkIds {}", remarkIds);
1175
 
1176
				long todayOverallCall = 0;
1177
				if (!remarkIds.isEmpty()) {
1178
					todayOverallCall = partnerCollectionRemarkRepository.selectByIds(remarkIds).stream()
1179
							.filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now()))
1180
							.collect(Collectors.counting());
1181
 
1182
				}
1183
 
1184
				Map<Integer, PartnerCollectionPlanModel> collectionMap = partnerCollectionService
1185
						.getCollectionMap(fofoIds, startDate);
1186
 
1187
				ChartLeadModel cm = this
1188
						.getCollectionCount(collectionMap.values().stream().collect(Collectors.toList()));
1189
 
1190
				long collectionTarget = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null).collect(Collectors.summingLong(x -> x.getTargetPlan()));
1191
				long collection = collectionMap.values().stream().filter(x -> x.getTargetPlan() != null && x.getTargetPlan() != 0 && x.getAchievementPlan() != null).collect(Collectors.summingLong(x -> x.getAchievementPlan()));
1192
				rbmPerformanceSummaryModel.setChartLeadModel(cm);
1193
				rbmPerformanceSummaryModel.setPartnersCommunicated(todayOverallCall);
1194
				rbmPerformanceSummaryModel.setCollectionTarget(collectionTarget);
1195
				rbmPerformanceSummaryModel.setCollection(collection);
1196
				rbmPerformanceSummaryModel.setSecondaryTarget(rbmCommittmentMap.get(rbmAuthId) == null ? 0 : rbmCommittmentMap.get(rbmAuthId).getTotalTarget() == null ? 0 : rbmCommittmentMap.get(rbmAuthId).getTotalTarget());
1197
				rbmPerformanceSummaryModel.setSecondary(rbmCommittmentMap.get(rbmAuthId) == null ? 0 : rbmCommittmentMap.get(rbmAuthId).getTotalAchievement() == null ? 0 : rbmCommittmentMap.get(rbmAuthId).getTotalAchievement());
1198
				summaryModels.add(rbmPerformanceSummaryModel);
1199
				//cm.getData().getDatasets().get(0).getData().;
1200
				//cm.getData().getDatasets().get(0).getBackgroundColor();
1201
				//cm.getData().getLabels()
1202
 
1203
			}
1204
		}
1205
		model.addAttribute("summaryModels", summaryModels);
1206
		return "today_target";
1207
	}
1208
 
25979 tejbeer 1209
}