Subversion Repositories SmartDukaan

Rev

Rev 29445 | Rev 29450 | 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);
29448 manish 462
 
463
		LOGGER.info("hotLeads" + hotLeads);
29445 manish 464
 
29266 manish 465
		List<LeadStatus> labelList = new ArrayList<>(labels);
466
		List<String> backgroundColor = new ArrayList<>();
29426 manish 467
		LOGGER.info("hotLeadKeys" + hotLeadKeys);
29266 manish 468
		List<Long> values = new ArrayList<>();
469
 
29448 manish 470
		for (String hotLead : hotLeads) {
471
 
29266 manish 472
 
29448 manish 473
			if (hotLead.equals("pending")) {
29266 manish 474
				backgroundColor.add("pink");
29448 manish 475
				values.add(leadStatusMap.get(LeadStatus.pending));
29266 manish 476
			}
29448 manish 477
			if (hotLead.equals("notInterested")) {
29266 manish 478
				backgroundColor.add("red");
29448 manish 479
				values.add(leadStatusMap.get(LeadStatus.notInterested));
29266 manish 480
			}
29448 manish 481
			if (hotLead.equals("followUp")) {
29266 manish 482
				backgroundColor.add("#9ACD32");
29448 manish 483
				values.add(leadStatusMap.get(LeadStatus.followUp));
29266 manish 484
			}
29448 manish 485
			if (hotLead.equals("finalized")) {
29266 manish 486
				backgroundColor.add("blue");
29448 manish 487
				values.add(leadStatusMap.get(LeadStatus.finalized));
29445 manish 488
			}
29448 manish 489
 
490
			if (hotLead.equals("HotLead")) {
29426 manish 491
				backgroundColor.add("green");
492
				values.add(hotLeadsMap.get("Green"));
29445 manish 493
 
29266 manish 494
			}
29445 manish 495
 
29266 manish 496
		}
497
		LOGGER.info("labelList" + labelList);
498
 
499
		LOGGER.info("backgroundColor" + backgroundColor);
500
		LOGGER.info("labelsChartLead" + labels);
501
		LeadStatusData data = new LeadStatusData();
502
		data.setData(values);
503
		data.setBackgroundColor(backgroundColor);
504
		data.setLabel("DataSet 1");
505
 
506
		PieLables label = new PieLables();
507
		label.setFontColor("black");
508
		label.setFontSize(15);
509
 
510
		Legend legend = new Legend();
511
		legend.setLabels(label);
512
		legend.setPosition("left");
513
 
514
		List<LeadStatusData> dataList = new ArrayList<>();
515
		dataList.add(data);
516
 
517
		DataLeadModel datasets = new DataLeadModel();
518
		datasets.setDatasets(dataList);
29426 manish 519
		datasets.setLabels(hotLeads);
29266 manish 520
 
521
		OptionModel om = new OptionModel();
522
		om.setLegend(legend);
523
 
524
		cm.setType("pie");
525
		cm.setData(datasets);
526
		cm.setOptions(om);
527
 
528
		return cm;
529
	}
530
 
25988 tejbeer 531
	@RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
532
	public String getClosedLead(HttpServletRequest request,
533
			@RequestParam(name = "offset", defaultValue = "0") int offset,
534
			@RequestParam(name = "limit", defaultValue = "10") int limit,
535
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
536
			throws Exception {
537
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
538
		List<Lead> leads = null;
539
		long size = 0;
540
		leads = leadRepository.selectAllByStatus(status, offset, limit);
541
		size = leadRepository.selectCountByStatus(status);
542
 
543
		if (!leads.isEmpty()) {
544
			List<Integer> authIds = new ArrayList<>();
545
			for (Lead lead : leads) {
546
				authIds.add(lead.getAssignTo());
547
			}
548
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
549
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
550
 
551
			model.addAttribute("leads", leads);
552
			model.addAttribute("start", offset + 1);
553
			model.addAttribute("size", size);
554
			model.addAttribute("searchTerm", searchTerm);
555
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25990 tejbeer 556
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 557
 
558
			if (leads.size() < limit) {
559
				model.addAttribute("end", offset + leads.size());
560
			} else {
561
				model.addAttribute("end", offset + limit);
562
			}
563
 
564
		} else {
565
			model.addAttribute("lead", leads);
566
 
567
			model.addAttribute("size", size);
568
		}
569
 
570
		model.addAttribute("authUsers", authUsers);
571
		return "lead-close";
572
	}
573
 
574
	@RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
25990 tejbeer 575
	public String getPaginatedClosedLeads(HttpServletRequest request,
25988 tejbeer 576
			@RequestParam(name = "offset", defaultValue = "0") int offset,
577
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
578
			throws ProfitMandiBusinessException {
579
		List<Lead> leads = null;
580
		leads = leadRepository.selectAllByStatus(status, offset, limit);
581
 
582
		if (!leads.isEmpty()) {
583
			List<Integer> authIds = new ArrayList<>();
584
			for (Lead lead : leads) {
585
				authIds.add(lead.getAssignTo());
586
			}
587
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
588
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
589
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
590
			model.addAttribute("leads", leads);
25990 tejbeer 591
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 592
 
593
		} else {
594
			model.addAttribute("leads", leads);
595
 
596
		}
597
		return "lead-close-paginated";
598
	}
599
 
600
	@RequestMapping(value = "/searchLeads")
601
	public String getClosedLeads(HttpServletRequest request,
602
			@RequestParam(name = "offset", defaultValue = "0") int offset,
603
			@RequestParam(name = "limit", defaultValue = "10") int limit,
604
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
605
			throws ProfitMandiBusinessException {
606
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
607
		List<Lead> leads = null;
608
		long size = 0;
609
		if (!(searchTerm.equals(""))) {
610
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
611
			if (!(leads.size() == 0)) {
612
				size = leadRepository.selectCountByStatus(status);
613
				List<Integer> authIds = new ArrayList<>();
614
				for (Lead lead : leads) {
615
					authIds.add(lead.getAssignTo());
616
				}
617
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
618
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
619
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
620
				model.addAttribute("leads", leads);
621
				model.addAttribute("start", offset + 1);
622
				model.addAttribute("size", size);
623
				model.addAttribute("searchTerm", searchTerm);
624
 
625
				if (leads.size() < limit) {
626
					model.addAttribute("end", offset + leads.size());
627
				} else {
628
					model.addAttribute("end", offset + limit);
629
				}
630
			} else {
631
				throw new ProfitMandiBusinessException("lead", searchTerm, "leads Not Found");
632
			}
633
		} else {
634
			leads = leadRepository.selectAllByStatus(status, offset, limit);
635
			size = leadRepository.selectCountByStatus(status);
636
 
637
			if (!leads.isEmpty()) {
638
				List<Integer> authIds = new ArrayList<>();
639
				for (Lead lead : leads) {
640
					authIds.add(lead.getAssignTo());
641
				}
642
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
643
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
644
 
645
				model.addAttribute("leads", leads);
646
				model.addAttribute("start", offset + 1);
647
				model.addAttribute("size", size);
648
				model.addAttribute("searchTerm", searchTerm);
649
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
650
 
651
				if (leads.size() < limit) {
652
					model.addAttribute("end", offset + leads.size());
653
				} else {
654
					model.addAttribute("end", offset + limit);
655
				}
656
 
657
			}
658
		}
659
 
660
		model.addAttribute("authUsers", authUsers);
661
		return "lead-close";
662
	}
663
 
664
	@RequestMapping(value = "/searchLeadPaginated")
25990 tejbeer 665
	public String searchLeadPaginated(HttpServletRequest request,
25988 tejbeer 666
			@RequestParam(name = "offset", defaultValue = "0") int offset,
667
			@RequestParam(name = "limit", defaultValue = "10") int limit,
668
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
669
			throws ProfitMandiBusinessException {
670
		LOGGER.info("In search Item....");
671
		List<Lead> leads = null;
672
		if (!searchTerm.equals("")) {
673
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
674
			if (!(leads.size() == 0)) {
675
 
676
				List<Integer> authIds = new ArrayList<>();
677
				for (Lead lead : leads) {
678
					authIds.add(lead.getAssignTo());
679
				}
680
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
681
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
682
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
683
				model.addAttribute("leads", leads);
684
			}
685
		}
686
 
687
		return "lead-close-paginated";
688
 
689
	}
690
 
25979 tejbeer 691
	@RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
692
	public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
693
		List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
694
		model.addAttribute("leadActivity", leadActivity);
695
		return "lead_activity_modal";
696
	}
697
 
698
	@RequestMapping(value = "/createLead", method = RequestMethod.POST)
699
	public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
700
			Model model) throws Exception {
701
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
702
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
703
		Lead lead = new Lead();
704
		lead.setFirstName(createRefferalRequest.getFirstName());
705
		lead.setLastName(createRefferalRequest.getLastName());
706
		lead.setLeadMobile(createRefferalRequest.getMobile());
707
		lead.setState(createRefferalRequest.getState());
708
		lead.setCity(createRefferalRequest.getCity());
709
		lead.setAddress(createRefferalRequest.getAddress());
710
		lead.setCreatedTimestamp(LocalDateTime.now());
711
		lead.setUpdatedTimestamp(LocalDateTime.now());
712
		lead.setStatus(createRefferalRequest.getStatus());
713
		lead.setAssignTo(createRefferalRequest.getAssignTo());
714
		lead.setSource(createRefferalRequest.getSource());
26298 tejbeer 715
		lead.setColor("yellow");
25979 tejbeer 716
		// change
25989 tejbeer 717
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
25979 tejbeer 718
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
719
		lead.setCreatedBy(authUserName);
720
		lead.setAuthId(authUser.getId());
721
 
722
		leadRepository.persist(lead);
723
		LeadActivity leadActivity = new LeadActivity();
724
		leadActivity.setLeadId(lead.getId());
725
		leadActivity.setRemark(createRefferalRequest.getRemark());
726
 
727
		if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
728
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
729
		} else {
730
			leadActivity.setSchelduleTimestamp(null);
731
		}
732
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
733
		leadActivityRepository.persist(leadActivity);
734
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
735
		return "response";
736
 
737
	}
738
 
739
	@RequestMapping(value = "/editLead", method = RequestMethod.POST)
27605 tejbeer 740
	public String EditLead(HttpServletRequest request,
741
			@RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
25979 tejbeer 742
 
743
		LeadActivity leadActivity = new LeadActivity();
27605 tejbeer 744
		leadActivity.setLeadId(createLeadActivityRequest.getId());
745
		leadActivity.setRemark(createLeadActivityRequest.getRemark());
746
 
747
		if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
748
			leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
749
		} else {
750
			leadActivity.setSchelduleTimestamp(null);
751
		}
25979 tejbeer 752
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
753
		leadActivityRepository.persist(leadActivity);
27605 tejbeer 754
		Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
755
		lead.setAssignTo(createLeadActivityRequest.getAssignTo());
756
		lead.setStatus(createLeadActivityRequest.getStatus());
28200 tejbeer 757
		lead.setNotinterestedReason(createLeadActivityRequest.getReason());
25979 tejbeer 758
		lead.setUpdatedTimestamp(LocalDateTime.now());
759
 
760
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
761
		return "response";
762
 
763
	}
29445 manish 764
 
29426 manish 765
	@RequestMapping(value = "/downloadIvoryLead", method = RequestMethod.GET)
766
	public ResponseEntity<?> downloadDelayDayTemplate(HttpServletRequest request) throws Exception {
767
		List<List<?>> rows = new ArrayList<>();
768
 
769
		org.apache.commons.io.output.ByteArrayOutputStream baos = FileUtil
29445 manish 770
				.getCSVByteStream(Arrays.asList("created_time", "Name", "email", "Mobile", "state", "city"), rows);
29426 manish 771
 
772
		final HttpHeaders headers = new HttpHeaders();
773
		headers.set("Content-Type", "text/csv");
774
		headers.set("Content-disposition", "inline; filename=Ivory.format.csv");
775
		headers.setContentLength(baos.toByteArray().length);
776
 
777
		final InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
778
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
779
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
780
 
781
	}
29445 manish 782
 
29426 manish 783
	@RequestMapping(value = "/csvFileAndSetLead", method = RequestMethod.POST)
784
	public String readCsvFileAndSetLead(HttpServletRequest request, Model model, HttpServletResponse response,
785
			@RequestPart MultipartFile file) throws Throwable {
786
 
787
		LOGGER.info("file" + file.toString());
788
 
789
		String fileName = file.getName();
790
 
791
		String fileNames = file.getOriginalFilename();
792
 
793
		LOGGER.info("fileName" + fileName);
794
		LOGGER.info("fileNames" + fileNames);
795
 
796
		List<LeadIvoryModel> leadIvoryModels = leadActivityRepository.readFile(file);
797
 
798
		LOGGER.info("sgtFileName" + leadIvoryModels);
799
		if (leadIvoryModels.isEmpty()) {
800
			return "";
801
		}
802
 
803
		for (LeadIvoryModel leadIvoryModel : leadIvoryModels) {
804
 
805
			Lead lead = new Lead();
806
			lead.setFirstName(leadIvoryModel.getFirstName());
807
			lead.setLastName("");
808
			lead.setLeadMobile(leadIvoryModel.getMobile());
809
 
810
			lead.setState(leadIvoryModel.getState());
811
			lead.setCity(leadIvoryModel.getCity());
812
			lead.setAddress("NOT AVAILABLE");
813
 
814
			AuthUser authUser = authRepository.selectById(4);
29445 manish 815
 
816
			if (leadIvoryModel.getCreatedTime() != null) {
817
				lead.setCreatedTimestamp(leadIvoryModel.getCreatedTime());
818
			} else {
819
				lead.setCreatedTimestamp(LocalDateTime.now());
29426 manish 820
			}
821
			lead.setUpdatedTimestamp(LocalDateTime.now());
822
			lead.setStatus(LeadStatus.pending);
823
			lead.setAssignTo(authUser.getId());
824
			lead.setSource("IVORY");
825
			lead.setColor("yellow");
826
			// change
827
 
828
			String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
829
			lead.setCreatedBy(authUserName);
830
			lead.setAuthId(authUser.getId());
831
 
832
			leadRepository.persist(lead);
833
 
834
			LeadActivity leadActivity = new LeadActivity();
835
			leadActivity.setLeadId(lead.getId());
836
			leadActivity.setRemark("Internet");
837
			leadActivity.setSchelduleTimestamp(null);
838
 
839
			leadActivity.setCreatedTimestamp(LocalDateTime.now());
840
			leadActivityRepository.persist(leadActivity);
841
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
842
 
843
		}
844
 
845
		model.addAttribute("responseSTG", mvcResponseSender.createResponseString(true));
846
 
847
		return "response";
848
 
849
	}
850
 
25979 tejbeer 851
}