Subversion Repositories SmartDukaan

Rev

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