Subversion Repositories SmartDukaan

Rev

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