Subversion Repositories SmartDukaan

Rev

Rev 29426 | Rev 29448 | 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
 
29426 manish 3
import java.io.ByteArrayInputStream;
4
import java.io.InputStream;
29266 manish 5
import java.time.LocalDate;
25979 tejbeer 6
import java.time.LocalDateTime;
29266 manish 7
import java.time.format.DateTimeFormatter;
25979 tejbeer 8
import java.util.ArrayList;
25988 tejbeer 9
import java.util.Arrays;
27604 tejbeer 10
import java.util.HashMap;
29266 manish 11
import java.util.HashSet;
25979 tejbeer 12
import java.util.List;
13
import java.util.Map;
14
import java.util.stream.Collectors;
15
 
16
import javax.servlet.http.HttpServletRequest;
29426 manish 17
import javax.servlet.http.HttpServletResponse;
25979 tejbeer 18
import javax.transaction.Transactional;
19
 
20
import org.apache.logging.log4j.LogManager;
21
import org.apache.logging.log4j.Logger;
22
import org.springframework.beans.factory.annotation.Autowired;
29445 manish 23
import org.springframework.cache.annotation.Cacheable;
29426 manish 24
import org.springframework.core.io.InputStreamResource;
25
import org.springframework.http.HttpHeaders;
26
import org.springframework.http.HttpStatus;
27
import org.springframework.http.ResponseEntity;
25979 tejbeer 28
import org.springframework.stereotype.Controller;
29
import org.springframework.ui.Model;
30
import org.springframework.web.bind.annotation.RequestBody;
31
import org.springframework.web.bind.annotation.RequestMapping;
32
import org.springframework.web.bind.annotation.RequestMethod;
33
import org.springframework.web.bind.annotation.RequestParam;
29426 manish 34
import org.springframework.web.bind.annotation.RequestPart;
35
import org.springframework.web.multipart.MultipartFile;
25979 tejbeer 36
 
29266 manish 37
import com.google.gson.Gson;
25988 tejbeer 38
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29445 manish 39
 
29266 manish 40
import com.spice.profitmandi.common.model.Legend;
41
import com.spice.profitmandi.common.model.OptionModel;
42
import com.spice.profitmandi.common.model.PieLables;
29278 manish 43
import com.spice.profitmandi.common.model.ProfitMandiConstants;
29426 manish 44
import com.spice.profitmandi.common.util.FileUtil;
25979 tejbeer 45
import com.spice.profitmandi.dao.entity.auth.AuthUser;
29445 manish 46
 
25979 tejbeer 47
import com.spice.profitmandi.dao.entity.user.Lead;
48
import com.spice.profitmandi.dao.entity.user.LeadActivity;
49
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
29266 manish 50
import com.spice.profitmandi.dao.model.ChartLeadModel;
27605 tejbeer 51
import com.spice.profitmandi.dao.model.CreateLeacdActivityRequest;
25979 tejbeer 52
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
29266 manish 53
import com.spice.profitmandi.dao.model.DataLeadModel;
29426 manish 54
import com.spice.profitmandi.dao.model.LeadIvoryModel;
29266 manish 55
import com.spice.profitmandi.dao.model.LeadStatusData;
29445 manish 56
 
25979 tejbeer 57
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
29266 manish 58
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
25979 tejbeer 59
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
60
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
61
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
29266 manish 62
import com.spice.profitmandi.service.AuthService;
25979 tejbeer 63
import com.spice.profitmandi.web.model.LoginDetails;
64
import com.spice.profitmandi.web.util.CookiesProcessor;
65
import com.spice.profitmandi.web.util.MVCResponseSender;
66
 
67
@Controller
68
@Transactional(rollbackOn = Throwable.class)
69
public class LeadController {
70
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
71
 
72
	@Autowired
73
	private LeadRepository leadRepository;
74
 
75
	@Autowired
76
	private LeadActivityRepository leadActivityRepository;
77
 
78
	@Autowired
79
	private StateRepository stateRepository;
80
 
81
	@Autowired
29266 manish 82
	private AuthService authService;
83
 
84
	@Autowired
25979 tejbeer 85
	private AuthRepository authRepository;
86
 
87
	@Autowired
29266 manish 88
	private Gson gson;
89
 
90
	@Autowired
25979 tejbeer 91
	private CookiesProcessor cookiesProcessor;
29426 manish 92
 
29278 manish 93
	@Autowired
94
	PositionRepository positionRepository;
25979 tejbeer 95
 
96
	@Autowired
97
	private MVCResponseSender mvcResponseSender;
98
 
25988 tejbeer 99
	List<LeadStatus> status = Arrays.asList(LeadStatus.notInterested, LeadStatus.finalized);
100
 
25979 tejbeer 101
	@RequestMapping(value = "/getOpenLead", method = RequestMethod.GET)
27609 tejbeer 102
	public String getOpenLead(HttpServletRequest request,
29426 manish 103
			@RequestParam(name = "leadStatus", required = false, defaultValue = "All") List<LeadStatus> leadStatus,
29445 manish 104
			@RequestParam(name = "color", required = false, defaultValue = "") List<String> color,
105
			@RequestParam(name = "leadDate", required = false, defaultValue = "") LocalDate leadDate, Model model)
27642 tejbeer 106
			throws Exception {
27609 tejbeer 107
 
29445 manish 108
		LocalDateTime localDateTime = null;
109
 
110
		LOGGER.info("color" + color);
111
 
112
		LOGGER.info("leadDate" + leadDate);
113
 
114
		if (leadDate != null) {
115
			localDateTime = leadDate.atStartOfDay();
116
 
117
		}
118
 
119
		if (color == null) {
120
			color.add("");
121
		}
122
 
123
		LOGGER.info("localDateTime" + localDateTime);
124
 
29266 manish 125
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
126
		String emailId = loginDetails.getEmailId();
127
		AuthUser authUser = authRepository.selectByEmailOrMobile(emailId);
29426 manish 128
 
129
		boolean authPositon = positionRepository.hasCategory(authUser.getId(),
130
				ProfitMandiConstants.TICKET_CATEGORY_SALES);
131
 
27610 tejbeer 132
		if (leadStatus.contains(LeadStatus.All)) {
133
 
29445 manish 134
			leadStatus.add(LeadStatus.pending);
135
			leadStatus.add(LeadStatus.notInterested);
136
			leadStatus.add(LeadStatus.finalized);
27610 tejbeer 137
		}
27615 tejbeer 138
 
27642 tejbeer 139
		List<Lead> leads = null;
29445 manish 140
 
141
		model.addAttribute("colors", color);
142
 
27642 tejbeer 143
		Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
29287 amit.gupta 144
		List<Integer> authUserIds = null;
27723 tejbeer 145
		if (!color.isEmpty()) {
146
			if (color.contains("All")) {
147
				color.add("yellow");
148
				color.add("green");
149
			}
29445 manish 150
 
151
			LOGGER.info("color111" + color);
152
 
29426 manish 153
			if (authPositon) {
29287 amit.gupta 154
				authUserIds = authService.getAllReportees(authUser.getId());
29284 amit.gupta 155
				authUserIds.add(authUser.getId());
29278 manish 156
				LOGGER.info("authIds" + authUserIds);
29426 manish 157
 
29445 manish 158
				if (leadStatus.contains(LeadStatus.All)) {
159
					if (localDateTime == null) {
29426 manish 160
 
29445 manish 161
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus,
162
								authUserIds, color, LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1));
163
 
164
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
165
 
166
						leads.addAll(leadFollowUp);
167
 
168
					}
169
 
170
					else {
171
 
172
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus,
173
								authUserIds, color, localDateTime);
174
 
175
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
176
 
177
						leads.addAll(leadFollowUp);
178
 
179
					}
180
				} else
181
 
182
				{
183
					if (localDateTime == null) {
184
 
185
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus,
186
								authUserIds, color, LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1));
187
 
188
					} else {
189
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestampAndAuthIds(leadStatus,
190
								authUserIds, color, localDateTime);
191
 
192
					}
193
 
194
				}
195
 
29278 manish 196
			}
29426 manish 197
 
29445 manish 198
			else {
27642 tejbeer 199
 
29445 manish 200
				if (leadStatus.contains(LeadStatus.All)) {
201
 
202
					if (localDateTime == null) {
203
 
204
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
205
								LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1));
206
 
207
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
208
						leads.addAll(leadFollowUp);
209
						LOGGER.info("leadlocalDateTime1" + leads);
210
 
211
					} else {
212
 
213
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
214
								localDateTime);
215
 
216
						LOGGER.info("leadlocalDateTime2" + leads);
217
 
218
					}
219
				}
220
 
221
				else {
222
 
223
					if (localDateTime == null) {
224
 
225
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
226
								LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1));
227
 
228
						LOGGER.info("leadlocalDateTime3" + leads);
229
					} else {
230
 
231
						leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
232
								localDateTime);
233
						LOGGER.info("leadlocalDateTime4" + leads);
234
					}
235
				}
236
			}
237
		}
238
 
239
		else {
240
 
29426 manish 241
			if (authPositon) {
29287 amit.gupta 242
				authUserIds = authService.getAllReportees(authUser.getId());
29284 amit.gupta 243
				authUserIds.add(authUser.getId());
29278 manish 244
				LOGGER.info("authIds" + authUserIds);
29445 manish 245
				if (leadStatus.contains(LeadStatus.All)) {
246
					if (localDateTime == null) {
29426 manish 247
 
29445 manish 248
						leads = leadRepository.selectAllByStatusAndUpdatedTimestampAndAuthId(leadStatus,
249
								LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1), authUserIds);
250
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
251
						leads.addAll(leadFollowUp);
252
						LOGGER.info("leadlocalDateTime1" + leads);
253
					}
254
 
255
					else {
256
 
257
						leads = leadRepository.selectAllByStatusAndUpdatedTimestampAndAuthId(leadStatus, localDateTime,
258
								authUserIds);
259
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
260
						leads.addAll(leadFollowUp);
261
						LOGGER.info("leadlocalDateTime1" + leads);
262
 
263
					}
264
				}
265
 
266
				else {
267
 
268
					if (localDateTime == null) {
269
						leads = leadRepository.selectAllByStatusAndUpdatedTimestampAndAuthId(leadStatus,
270
								LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1), authUserIds);
271
					}
272
 
273
					else {
274
						leads = leadRepository.selectAllByStatusAndUpdatedTimestampAndAuthId(leadStatus, localDateTime,
275
								authUserIds);
276
					}
277
				}
29278 manish 278
			}
29445 manish 279
 
280
			else {
281
 
282
				if (leadStatus.contains(LeadStatus.All)) {
283
 
284
					if (localDateTime == null) {
285
 
286
						leads = leadRepository.selectAllByStatusAndUpdatedTimestamp(leadStatus,
287
								LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1));
288
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
289
						leads.addAll(leadFollowUp);
290
						LOGGER.info("leadlocalDateTime1" + leads);
291
 
292
					}
293
 
294
					else {
295
 
296
						leads = leadRepository.selectAllByStatusAndUpdatedTimestamp(leadStatus, localDateTime);
297
						List<Lead> leadFollowUp = leadRepository.selectAllByStatus(LeadStatus.followUp);
298
						leads.addAll(leadFollowUp);
299
						LOGGER.info("leadlocalDateTime1" + leads);
300
					}
301
				}
302
 
303
				else {
304
 
305
					if (localDateTime == null) {
306
 
307
						leads = leadRepository.selectAllByStatusAndUpdatedTimestamp(leadStatus,
308
								LocalDate.now().atStartOfDay().withDayOfMonth(1).minusMonths(1));
309
 
310
						LOGGER.info("manish!233" + leads);
311
 
312
					}
313
 
314
					else {
315
 
316
						leads = leadRepository.selectAllByStatusAndUpdatedTimestamp(leadStatus, localDateTime);
317
					}
318
 
319
				}
320
 
321
			}
27642 tejbeer 322
			// List<Lead> leads = leadRepository.selectAllBylistStatus(leadStatus);
27652 tejbeer 323
		}
29426 manish 324
		if (authPositon && authUserIds.size() > 0) {
29287 amit.gupta 325
			List<String> leadCreators = new ArrayList<>();
326
			leadCreators.add("daily-sync");
29426 manish 327
			leadCreators.addAll(authRepository.selectAllAuthUserByIds(authUserIds).stream().map(x -> x.getFullName())
328
					.collect(Collectors.toList()));
29289 amit.gupta 329
			model.addAttribute("leadCreators", leadCreators);
29287 amit.gupta 330
		}
29266 manish 331
		List<Lead> weekLast = new ArrayList<>();
332
		List<Lead> weekThird = new ArrayList<>();
333
		List<Lead> weekSecond = new ArrayList<>();
334
		List<Lead> weekFirst = new ArrayList<>();
335
		LocalDateTime curDate = LocalDate.now().atStartOfDay();
336
		List<LeadWeakWiseModel> lwDays = new ArrayList<>();
27642 tejbeer 337
 
29266 manish 338
		for (int i = 7; i >= 1; i--) {
339
			LocalDateTime startOfDay = curDate.minusDays(i);
340
 
341
			LeadWeakWiseModel lm = new LeadWeakWiseModel();
342
			lm.setMonth(startOfDay.toLocalDate());
343
			lwDays.add(lm);
344
		}
29426 manish 345
		if (!leads.isEmpty()) {
346
			for (Lead lead : leads) {
29266 manish 347
 
29426 manish 348
				if (lead.getCreatedTimestamp().isAfter(curDate.minusDays(28))
349
						&& lead.getCreatedTimestamp().isBefore(curDate.minusDays(21))) {
350
					weekLast.add(lead);
29266 manish 351
 
29426 manish 352
				} else if (lead.getCreatedTimestamp().isAfter(curDate.minusDays(21))
353
						&& lead.getCreatedTimestamp().isBefore(curDate.minusDays(14))) {
354
					weekThird.add(lead);
355
				} else if (lead.getCreatedTimestamp().isAfter(curDate.minusDays(14))
356
						&& lead.getCreatedTimestamp().isBefore(curDate.minusDays(7))) {
29266 manish 357
 
29426 manish 358
					weekSecond.add(lead);
359
				} else if (lead.getCreatedTimestamp().isAfter(curDate.minusDays(7))) {
360
					weekFirst.add(lead);
361
				}
362
 
29266 manish 363
			}
364
		}
365
		LOGGER.info("weekLast" + weekLast);
366
		LOGGER.info("weekThird" + weekThird);
367
		LOGGER.info("weekSecond" + weekSecond);
29426 manish 368
		Map<String, Long> leadLasts = weekLast.stream()
369
				.collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.counting()));
370
		Map<String, Long> leadThirds = weekThird.stream()
371
				.collect(Collectors.groupingBy(x -> x.getCreatedBy(), Collectors.counting()));
29266 manish 372
		Map<String, Long> leadSeconds = weekSecond.stream().collect(Collectors.groupingBy(x -> x.getCreatedBy(),
373
				Collectors.mapping(Lead::getCreatedBy, Collectors.counting())));
374
 
375
		Map<String, Map<LocalDate, Long>> leadFirsts = weekFirst.stream()
376
				.collect(Collectors.groupingBy(x -> x.getCreatedBy(),
377
						Collectors.groupingBy(x -> x.getCreatedTimestamp().toLocalDate(), Collectors.counting())));
378
 
379
		LOGGER.info("leadFirsts" + leadFirsts);
380
 
27723 tejbeer 381
		List<Integer> authIds = new ArrayList<>();
382
		if (!leads.isEmpty()) {
25979 tejbeer 383
 
27723 tejbeer 384
			authIds.addAll(leads.stream().map(x -> x.getAssignTo()).collect(Collectors.toList()));
27610 tejbeer 385
 
27723 tejbeer 386
			for (Lead lead : leads) {
387
				List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(lead.getId());
388
				if (!leadActivity.isEmpty()) {
389
					leadActivityMap.put(lead.getId(), leadActivity.get(0));
27604 tejbeer 390
				}
27723 tejbeer 391
			}
392
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
393
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
394
			model.addAttribute("leadActivityMap", leadActivityMap);
395
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
396
		}
397
 
29266 manish 398
		ChartLeadModel cm = this.getLeadChart(leads);
399
		model.addAttribute("chartLead", gson.toJson(cm));
400
 
401
		LOGGER.info("ChartLeadModel" + gson.toJson(cm));
402
		LOGGER.info("lwDays" + lwDays);
403
 
27610 tejbeer 404
		LOGGER.info("leads" + leads);
25979 tejbeer 405
		List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName())
406
				.collect(Collectors.toList());
407
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
29266 manish 408
		LocalDate lastDate = curDate.minusDays(1).toLocalDate();
29426 manish 409
 
29266 manish 410
		List<LocalDate> weekDates = new ArrayList<>();
29426 manish 411
 
29266 manish 412
		weekDates.add(curDate.minusDays(28).toLocalDate());
413
		weekDates.add(curDate.minusDays(22).toLocalDate());
414
		weekDates.add(curDate.minusDays(21).toLocalDate());
415
		weekDates.add(curDate.minusDays(15).toLocalDate());
416
		weekDates.add(curDate.minusDays(14).toLocalDate());
417
		weekDates.add(curDate.minusDays(8).toLocalDate());
418
		weekDates.add(curDate.minusDays(7).toLocalDate());
419
		LOGGER.info("lastDate" + lastDate);
29426 manish 420
 
29266 manish 421
		model.addAttribute("weekDates", weekDates);
29426 manish 422
 
29445 manish 423
		model.addAttribute("leadDate", leadDate);
29266 manish 424
		model.addAttribute("lastDate", lastDate);
25979 tejbeer 425
		model.addAttribute("stateNames", stateNames);
426
		model.addAttribute("authUsers", authUsers);
27610 tejbeer 427
		model.addAttribute("lead", leads);
428
		model.addAttribute("leadStatus", LeadStatus.values());
29266 manish 429
		model.addAttribute("leadLasts", leadLasts);
430
		model.addAttribute("leadThirds", leadThirds);
431
		model.addAttribute("leadSeconds", leadSeconds);
432
		model.addAttribute("leadFirsts", leadFirsts);
433
		model.addAttribute("lwDays", lwDays);
25979 tejbeer 434
 
27610 tejbeer 435
		model.addAttribute("selectedLeadStatus", leadStatus.get(0));
25979 tejbeer 436
		return "lead";
27642 tejbeer 437
 
25979 tejbeer 438
	}
439
 
29266 manish 440
	public ChartLeadModel getLeadChart(List<Lead> leads) throws ProfitMandiBusinessException {
441
 
442
		Map<LeadStatus, Long> leadStatusMap = leads.stream().collect(
443
				Collectors.groupingBy(x -> x.getStatus(), Collectors.mapping(Lead::getStatus, Collectors.counting())));
444
 
29426 manish 445
		Map<String, Long> hotLeadsMap = leads.stream().collect(
446
				Collectors.groupingBy(x -> x.getColor(), Collectors.mapping(Lead::getColor, Collectors.counting())));
447
 
448
		LOGGER.info("hotLeadsMap" + hotLeadsMap);
29266 manish 449
		ChartLeadModel cm = new ChartLeadModel();
450
 
451
		HashSet<LeadStatus> labels = new HashSet<LeadStatus>();
452
		labels.addAll(leadStatusMap.keySet());
29445 manish 453
 
29426 manish 454
		HashSet<String> hotLeads = new HashSet<String>();
455
		hotLeads.addAll(leadStatusMap.keySet().stream().map(x -> x.toString()).collect(Collectors.toSet()));
456
		hotLeads.add("HotLead");
29445 manish 457
 
29426 manish 458
		HashSet<String> hotLeadKeys = new HashSet<String>();
29445 manish 459
 
29426 manish 460
		hotLeadKeys.add("HotLead");
461
		List<String> hotLeadGreen = new ArrayList<>(hotLeadKeys);
29445 manish 462
 
29266 manish 463
		List<LeadStatus> labelList = new ArrayList<>(labels);
464
		List<String> backgroundColor = new ArrayList<>();
29426 manish 465
		LOGGER.info("hotLeadKeys" + hotLeadKeys);
29266 manish 466
		List<Long> values = new ArrayList<>();
467
 
468
		for (LeadStatus label : labelList) {
469
			values.add(leadStatusMap.get(label));
470
 
471
			if (label.equals(LeadStatus.pending)) {
472
				backgroundColor.add("pink");
473
			}
474
			if (label.equals(LeadStatus.notInterested)) {
475
				backgroundColor.add("red");
476
			}
477
			if (label.equals(LeadStatus.followUp)) {
478
				backgroundColor.add("#9ACD32");
479
			}
480
			if (label.equals(LeadStatus.finalized)) {
481
				backgroundColor.add("blue");
29445 manish 482
			}
29426 manish 483
		}
29445 manish 484
 
485
		for (String hotLeadList : hotLeadGreen) {
486
 
487
			if (hotLeadList.equals("HotLead")) {
29426 manish 488
				backgroundColor.add("green");
489
				values.add(hotLeadsMap.get("Green"));
29445 manish 490
 
29266 manish 491
			}
29445 manish 492
 
29266 manish 493
		}
494
		LOGGER.info("labelList" + labelList);
495
 
496
		LOGGER.info("backgroundColor" + backgroundColor);
497
		LOGGER.info("labelsChartLead" + labels);
498
		LeadStatusData data = new LeadStatusData();
499
		data.setData(values);
500
		data.setBackgroundColor(backgroundColor);
501
		data.setLabel("DataSet 1");
502
 
503
		PieLables label = new PieLables();
504
		label.setFontColor("black");
505
		label.setFontSize(15);
506
 
507
		Legend legend = new Legend();
508
		legend.setLabels(label);
509
		legend.setPosition("left");
510
 
511
		List<LeadStatusData> dataList = new ArrayList<>();
512
		dataList.add(data);
513
 
514
		DataLeadModel datasets = new DataLeadModel();
515
		datasets.setDatasets(dataList);
29426 manish 516
		datasets.setLabels(hotLeads);
29266 manish 517
 
518
		OptionModel om = new OptionModel();
519
		om.setLegend(legend);
520
 
521
		cm.setType("pie");
522
		cm.setData(datasets);
523
		cm.setOptions(om);
524
 
525
		return cm;
526
	}
527
 
25988 tejbeer 528
	@RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
529
	public String getClosedLead(HttpServletRequest request,
530
			@RequestParam(name = "offset", defaultValue = "0") int offset,
531
			@RequestParam(name = "limit", defaultValue = "10") int limit,
532
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
533
			throws Exception {
534
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
535
		List<Lead> leads = null;
536
		long size = 0;
537
		leads = leadRepository.selectAllByStatus(status, offset, limit);
538
		size = leadRepository.selectCountByStatus(status);
539
 
540
		if (!leads.isEmpty()) {
541
			List<Integer> authIds = new ArrayList<>();
542
			for (Lead lead : leads) {
543
				authIds.add(lead.getAssignTo());
544
			}
545
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
546
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
547
 
548
			model.addAttribute("leads", leads);
549
			model.addAttribute("start", offset + 1);
550
			model.addAttribute("size", size);
551
			model.addAttribute("searchTerm", searchTerm);
552
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25990 tejbeer 553
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 554
 
555
			if (leads.size() < limit) {
556
				model.addAttribute("end", offset + leads.size());
557
			} else {
558
				model.addAttribute("end", offset + limit);
559
			}
560
 
561
		} else {
562
			model.addAttribute("lead", leads);
563
 
564
			model.addAttribute("size", size);
565
		}
566
 
567
		model.addAttribute("authUsers", authUsers);
568
		return "lead-close";
569
	}
570
 
571
	@RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
25990 tejbeer 572
	public String getPaginatedClosedLeads(HttpServletRequest request,
25988 tejbeer 573
			@RequestParam(name = "offset", defaultValue = "0") int offset,
574
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
575
			throws ProfitMandiBusinessException {
576
		List<Lead> leads = null;
577
		leads = leadRepository.selectAllByStatus(status, offset, limit);
578
 
579
		if (!leads.isEmpty()) {
580
			List<Integer> authIds = new ArrayList<>();
581
			for (Lead lead : leads) {
582
				authIds.add(lead.getAssignTo());
583
			}
584
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
585
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
586
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
587
			model.addAttribute("leads", leads);
25990 tejbeer 588
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 589
 
590
		} else {
591
			model.addAttribute("leads", leads);
592
 
593
		}
594
		return "lead-close-paginated";
595
	}
596
 
597
	@RequestMapping(value = "/searchLeads")
598
	public String getClosedLeads(HttpServletRequest request,
599
			@RequestParam(name = "offset", defaultValue = "0") int offset,
600
			@RequestParam(name = "limit", defaultValue = "10") int limit,
601
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
602
			throws ProfitMandiBusinessException {
603
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
604
		List<Lead> leads = null;
605
		long size = 0;
606
		if (!(searchTerm.equals(""))) {
607
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
608
			if (!(leads.size() == 0)) {
609
				size = leadRepository.selectCountByStatus(status);
610
				List<Integer> authIds = new ArrayList<>();
611
				for (Lead lead : leads) {
612
					authIds.add(lead.getAssignTo());
613
				}
614
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
615
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
616
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
617
				model.addAttribute("leads", leads);
618
				model.addAttribute("start", offset + 1);
619
				model.addAttribute("size", size);
620
				model.addAttribute("searchTerm", searchTerm);
621
 
622
				if (leads.size() < limit) {
623
					model.addAttribute("end", offset + leads.size());
624
				} else {
625
					model.addAttribute("end", offset + limit);
626
				}
627
			} else {
628
				throw new ProfitMandiBusinessException("lead", searchTerm, "leads Not Found");
629
			}
630
		} else {
631
			leads = leadRepository.selectAllByStatus(status, offset, limit);
632
			size = leadRepository.selectCountByStatus(status);
633
 
634
			if (!leads.isEmpty()) {
635
				List<Integer> authIds = new ArrayList<>();
636
				for (Lead lead : leads) {
637
					authIds.add(lead.getAssignTo());
638
				}
639
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
640
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
641
 
642
				model.addAttribute("leads", leads);
643
				model.addAttribute("start", offset + 1);
644
				model.addAttribute("size", size);
645
				model.addAttribute("searchTerm", searchTerm);
646
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
647
 
648
				if (leads.size() < limit) {
649
					model.addAttribute("end", offset + leads.size());
650
				} else {
651
					model.addAttribute("end", offset + limit);
652
				}
653
 
654
			}
655
		}
656
 
657
		model.addAttribute("authUsers", authUsers);
658
		return "lead-close";
659
	}
660
 
661
	@RequestMapping(value = "/searchLeadPaginated")
25990 tejbeer 662
	public String searchLeadPaginated(HttpServletRequest request,
25988 tejbeer 663
			@RequestParam(name = "offset", defaultValue = "0") int offset,
664
			@RequestParam(name = "limit", defaultValue = "10") int limit,
665
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
666
			throws ProfitMandiBusinessException {
667
		LOGGER.info("In search Item....");
668
		List<Lead> leads = null;
669
		if (!searchTerm.equals("")) {
670
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
671
			if (!(leads.size() == 0)) {
672
 
673
				List<Integer> authIds = new ArrayList<>();
674
				for (Lead lead : leads) {
675
					authIds.add(lead.getAssignTo());
676
				}
677
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
678
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
679
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
680
				model.addAttribute("leads", leads);
681
			}
682
		}
683
 
684
		return "lead-close-paginated";
685
 
686
	}
687
 
25979 tejbeer 688
	@RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
689
	public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
690
		List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
691
		model.addAttribute("leadActivity", leadActivity);
692
		return "lead_activity_modal";
693
	}
694
 
695
	@RequestMapping(value = "/createLead", method = RequestMethod.POST)
696
	public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
697
			Model model) throws Exception {
698
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
699
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
700
		Lead lead = new Lead();
701
		lead.setFirstName(createRefferalRequest.getFirstName());
702
		lead.setLastName(createRefferalRequest.getLastName());
703
		lead.setLeadMobile(createRefferalRequest.getMobile());
704
		lead.setState(createRefferalRequest.getState());
705
		lead.setCity(createRefferalRequest.getCity());
706
		lead.setAddress(createRefferalRequest.getAddress());
707
		lead.setCreatedTimestamp(LocalDateTime.now());
708
		lead.setUpdatedTimestamp(LocalDateTime.now());
709
		lead.setStatus(createRefferalRequest.getStatus());
710
		lead.setAssignTo(createRefferalRequest.getAssignTo());
711
		lead.setSource(createRefferalRequest.getSource());
26298 tejbeer 712
		lead.setColor("yellow");
25979 tejbeer 713
		// change
25989 tejbeer 714
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
25979 tejbeer 715
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
716
		lead.setCreatedBy(authUserName);
717
		lead.setAuthId(authUser.getId());
718
 
719
		leadRepository.persist(lead);
720
		LeadActivity leadActivity = new LeadActivity();
721
		leadActivity.setLeadId(lead.getId());
722
		leadActivity.setRemark(createRefferalRequest.getRemark());
723
 
724
		if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
725
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
726
		} else {
727
			leadActivity.setSchelduleTimestamp(null);
728
		}
729
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
730
		leadActivityRepository.persist(leadActivity);
731
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
732
		return "response";
733
 
734
	}
735
 
736
	@RequestMapping(value = "/editLead", method = RequestMethod.POST)
27605 tejbeer 737
	public String EditLead(HttpServletRequest request,
738
			@RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
25979 tejbeer 739
 
740
		LeadActivity leadActivity = new LeadActivity();
27605 tejbeer 741
		leadActivity.setLeadId(createLeadActivityRequest.getId());
742
		leadActivity.setRemark(createLeadActivityRequest.getRemark());
743
 
744
		if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
745
			leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
746
		} else {
747
			leadActivity.setSchelduleTimestamp(null);
748
		}
25979 tejbeer 749
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
750
		leadActivityRepository.persist(leadActivity);
27605 tejbeer 751
		Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
752
		lead.setAssignTo(createLeadActivityRequest.getAssignTo());
753
		lead.setStatus(createLeadActivityRequest.getStatus());
28200 tejbeer 754
		lead.setNotinterestedReason(createLeadActivityRequest.getReason());
25979 tejbeer 755
		lead.setUpdatedTimestamp(LocalDateTime.now());
756
 
757
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
758
		return "response";
759
 
760
	}
29445 manish 761
 
29426 manish 762
	@RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
763
	public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
764
		List<List<?>> rows = new ArrayList<>();
765
 
766
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
29445 manish 767
				.getCSVByteStream(Arrays.asList("created_time", "Name", "email", "Mobile", "state", "city"), rows);
29426 manish 768
 
769
		final HttpHeaders headers = new HttpHeaders();
770
		headers.set("Content-Type", "text/csv");
771
		headers.set("Content-disposition", "inline; filename=Ivory.format.csv");
772
		headers.setContentLength(baos.toByteArray().length);
773
 
774
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
775
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
776
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
777
 
778
	}
29445 manish 779
 
29426 manish 780
	@RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
781
	public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response,
782
			@RequestPart MultipartFile file) throws Throwable {
783
 
784
		LOGGER.info("file" + file.toString());
785
 
786
		String fileName = file.getName();
787
 
788
		String fileNames = file.getOriginalFilename();
789
 
790
		LOGGER.info("fileName" + fileName);
791
		LOGGER.info("fileNames" + fileNames);
792
 
793
		List<LeadIvoryModel> leadIvoryModels = leadActivityRepository.readFile(file);
794
 
795
		LOGGER.info("sgtFileName" + leadIvoryModels);
796
		if (leadIvoryModels.isEmpty()) {
797
			return "";
798
		}
799
 
800
		for (LeadIvoryModel leadIvoryModel : leadIvoryModels) {
801
 
802
			Lead lead = new Lead();
803
			lead.setFirstName(leadIvoryModel.getFirstName());
804
			lead.setLastName("");
805
			lead.setLeadMobile(leadIvoryModel.getMobile());
806
 
807
			lead.setState(leadIvoryModel.getState());
808
			lead.setCity(leadIvoryModel.getCity());
809
			lead.setAddress("NOT AVAILABLE");
810
 
811
			AuthUser authUser = authRepository.selectById(4);
29445 manish 812
 
813
			if (leadIvoryModel.getCreatedTime() != null) {
814
				lead.setCreatedTimestamp(leadIvoryModel.getCreatedTime());
815
			} else {
816
				lead.setCreatedTimestamp(LocalDateTime.now());
29426 manish 817
			}
818
			lead.setUpdatedTimestamp(LocalDateTime.now());
819
			lead.setStatus(LeadStatus.pending);
820
			lead.setAssignTo(authUser.getId());
821
			lead.setSource("IVORY");
822
			lead.setColor("yellow");
823
			// change
824
 
825
			String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
826
			lead.setCreatedBy(authUserName);
827
			lead.setAuthId(authUser.getId());
828
 
829
			leadRepository.persist(lead);
830
 
831
			LeadActivity leadActivity = new LeadActivity();
832
			leadActivity.setLeadId(lead.getId());
833
			leadActivity.setRemark("Internet");
834
			leadActivity.setSchelduleTimestamp(null);
835
 
836
			leadActivity.setCreatedTimestamp(LocalDateTime.now());
837
			leadActivityRepository.persist(leadActivity);
838
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
839
 
840
		}
841
 
842
		model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
843
 
844
		return "response";
845
 
846
	}
847
 
25979 tejbeer 848
}