Subversion Repositories SmartDukaan

Rev

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