Subversion Repositories SmartDukaan

Rev

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