Subversion Repositories SmartDukaan

Rev

Rev 27723 | Rev 29266 | 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
 
3
import java.time.LocalDateTime;
4
import java.util.ArrayList;
25988 tejbeer 5
import java.util.Arrays;
27604 tejbeer 6
import java.util.HashMap;
25979 tejbeer 7
import java.util.List;
8
import java.util.Map;
9
import java.util.stream.Collectors;
10
 
11
import javax.servlet.http.HttpServletRequest;
12
import javax.transaction.Transactional;
13
 
14
import org.apache.logging.log4j.LogManager;
15
import org.apache.logging.log4j.Logger;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.stereotype.Controller;
18
import org.springframework.ui.Model;
19
import org.springframework.web.bind.annotation.RequestBody;
20
import org.springframework.web.bind.annotation.RequestMapping;
21
import org.springframework.web.bind.annotation.RequestMethod;
22
import org.springframework.web.bind.annotation.RequestParam;
23
 
25988 tejbeer 24
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25979 tejbeer 25
import com.spice.profitmandi.dao.entity.auth.AuthUser;
26
import com.spice.profitmandi.dao.entity.user.Lead;
27
import com.spice.profitmandi.dao.entity.user.LeadActivity;
28
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
27605 tejbeer 29
import com.spice.profitmandi.dao.model.CreateLeacdActivityRequest;
25979 tejbeer 30
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
31
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
32
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
33
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
34
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
35
import com.spice.profitmandi.web.model.LoginDetails;
36
import com.spice.profitmandi.web.util.CookiesProcessor;
37
import com.spice.profitmandi.web.util.MVCResponseSender;
38
 
39
@Controller
40
@Transactional(rollbackOn = Throwable.class)
41
public class LeadController {
42
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
43
 
44
	@Autowired
45
	private LeadRepository leadRepository;
46
 
47
	@Autowired
48
	private LeadActivityRepository leadActivityRepository;
49
 
50
	@Autowired
51
	private StateRepository stateRepository;
52
 
53
	@Autowired
54
	private AuthRepository authRepository;
55
 
56
	@Autowired
57
	private CookiesProcessor cookiesProcessor;
58
 
59
	@Autowired
60
	private MVCResponseSender mvcResponseSender;
61
 
25988 tejbeer 62
	List<LeadStatus> status = Arrays.asList(LeadStatus.notInterested, LeadStatus.finalized);
63
 
25979 tejbeer 64
	@RequestMapping(value = "/getOpenLead", method = RequestMethod.GET)
27609 tejbeer 65
	public String getOpenLead(HttpServletRequest request,
27610 tejbeer 66
			@RequestParam(name = "leadStatus", required = false, defaultValue = "followUp") List<LeadStatus> leadStatus,
27723 tejbeer 67
			@RequestParam(name = "color", required = false, defaultValue = "") List<String> color, Model model)
27642 tejbeer 68
			throws Exception {
27609 tejbeer 69
 
27610 tejbeer 70
		if (leadStatus.contains(LeadStatus.All)) {
71
 
72
			leadStatus.addAll(Arrays.asList(LeadStatus.values()));
73
		}
27615 tejbeer 74
 
27642 tejbeer 75
		List<Lead> leads = null;
76
		Map<Integer, LeadActivity> leadActivityMap = new HashMap<>();
27617 tejbeer 77
 
27723 tejbeer 78
		if (!color.isEmpty()) {
79
			if (color.contains("All")) {
80
				color.add("yellow");
81
				color.add("green");
82
			}
27642 tejbeer 83
			leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
84
					LocalDateTime.now().withDayOfMonth(1).minusMonths(3));
85
 
86
		} else {
87
 
88
			leads = leadRepository.selectAllByStatusAndUpdatedTimestamp(leadStatus,
89
					LocalDateTime.now().withDayOfMonth(1).minusMonths(3));
90
 
91
			// List<Lead> leads = leadRepository.selectAllBylistStatus(leadStatus);
92
			if (!leads.isEmpty()) {
93
				leads.addAll(leadRepository.selectAllByStatus(LeadStatus.pending));
94
			}
27652 tejbeer 95
		}
27642 tejbeer 96
 
27723 tejbeer 97
		List<Integer> authIds = new ArrayList<>();
98
		if (!leads.isEmpty()) {
25979 tejbeer 99
 
27723 tejbeer 100
			authIds.addAll(leads.stream().map(x -> x.getAssignTo()).collect(Collectors.toList()));
27610 tejbeer 101
 
27723 tejbeer 102
			for (Lead lead : leads) {
103
				List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(lead.getId());
104
				if (!leadActivity.isEmpty()) {
105
					leadActivityMap.put(lead.getId(), leadActivity.get(0));
27604 tejbeer 106
				}
27723 tejbeer 107
			}
108
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
109
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
110
			model.addAttribute("lead", leads);
111
			model.addAttribute("leadActivityMap", leadActivityMap);
112
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
27610 tejbeer 113
 
27723 tejbeer 114
		} else {
115
			model.addAttribute("lead", leads);
116
		}
117
 
27610 tejbeer 118
		LOGGER.info("leads" + leads);
25979 tejbeer 119
		List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName())
120
				.collect(Collectors.toList());
121
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
122
		model.addAttribute("stateNames", stateNames);
123
		model.addAttribute("authUsers", authUsers);
27610 tejbeer 124
		model.addAttribute("lead", leads);
125
		model.addAttribute("leadStatus", LeadStatus.values());
25979 tejbeer 126
 
27610 tejbeer 127
		model.addAttribute("selectedLeadStatus", leadStatus.get(0));
25979 tejbeer 128
		return "lead";
27642 tejbeer 129
 
25979 tejbeer 130
	}
131
 
25988 tejbeer 132
	@RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
133
	public String getClosedLead(HttpServletRequest request,
134
			@RequestParam(name = "offset", defaultValue = "0") int offset,
135
			@RequestParam(name = "limit", defaultValue = "10") int limit,
136
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
137
			throws Exception {
138
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
139
		List<Lead> leads = null;
140
		long size = 0;
141
		leads = leadRepository.selectAllByStatus(status, offset, limit);
142
		size = leadRepository.selectCountByStatus(status);
143
 
144
		if (!leads.isEmpty()) {
145
			List<Integer> authIds = new ArrayList<>();
146
			for (Lead lead : leads) {
147
				authIds.add(lead.getAssignTo());
148
			}
149
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
150
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
151
 
152
			model.addAttribute("leads", leads);
153
			model.addAttribute("start", offset + 1);
154
			model.addAttribute("size", size);
155
			model.addAttribute("searchTerm", searchTerm);
156
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25990 tejbeer 157
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 158
 
159
			if (leads.size() < limit) {
160
				model.addAttribute("end", offset + leads.size());
161
			} else {
162
				model.addAttribute("end", offset + limit);
163
			}
164
 
165
		} else {
166
			model.addAttribute("lead", leads);
167
 
168
			model.addAttribute("size", size);
169
		}
170
 
171
		model.addAttribute("authUsers", authUsers);
172
		return "lead-close";
173
	}
174
 
175
	@RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
25990 tejbeer 176
	public String getPaginatedClosedLeads(HttpServletRequest request,
25988 tejbeer 177
			@RequestParam(name = "offset", defaultValue = "0") int offset,
178
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
179
			throws ProfitMandiBusinessException {
180
		List<Lead> leads = null;
181
		leads = leadRepository.selectAllByStatus(status, offset, limit);
182
 
183
		if (!leads.isEmpty()) {
184
			List<Integer> authIds = new ArrayList<>();
185
			for (Lead lead : leads) {
186
				authIds.add(lead.getAssignTo());
187
			}
188
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
189
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
190
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
191
			model.addAttribute("leads", leads);
25990 tejbeer 192
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 193
 
194
		} else {
195
			model.addAttribute("leads", leads);
196
 
197
		}
198
		return "lead-close-paginated";
199
	}
200
 
201
	@RequestMapping(value = "/searchLeads")
202
	public String getClosedLeads(HttpServletRequest request,
203
			@RequestParam(name = "offset", defaultValue = "0") int offset,
204
			@RequestParam(name = "limit", defaultValue = "10") int limit,
205
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
206
			throws ProfitMandiBusinessException {
207
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
208
		List<Lead> leads = null;
209
		long size = 0;
210
		if (!(searchTerm.equals(""))) {
211
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
212
			if (!(leads.size() == 0)) {
213
				size = leadRepository.selectCountByStatus(status);
214
				List<Integer> authIds = new ArrayList<>();
215
				for (Lead lead : leads) {
216
					authIds.add(lead.getAssignTo());
217
				}
218
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
219
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
220
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
221
				model.addAttribute("leads", leads);
222
				model.addAttribute("start", offset + 1);
223
				model.addAttribute("size", size);
224
				model.addAttribute("searchTerm", searchTerm);
225
 
226
				if (leads.size() < limit) {
227
					model.addAttribute("end", offset + leads.size());
228
				} else {
229
					model.addAttribute("end", offset + limit);
230
				}
231
			} else {
232
				throw new ProfitMandiBusinessException("lead", searchTerm, "leads Not Found");
233
			}
234
		} else {
235
			leads = leadRepository.selectAllByStatus(status, offset, limit);
236
			size = leadRepository.selectCountByStatus(status);
237
 
238
			if (!leads.isEmpty()) {
239
				List<Integer> authIds = new ArrayList<>();
240
				for (Lead lead : leads) {
241
					authIds.add(lead.getAssignTo());
242
				}
243
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
244
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
245
 
246
				model.addAttribute("leads", leads);
247
				model.addAttribute("start", offset + 1);
248
				model.addAttribute("size", size);
249
				model.addAttribute("searchTerm", searchTerm);
250
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
251
 
252
				if (leads.size() < limit) {
253
					model.addAttribute("end", offset + leads.size());
254
				} else {
255
					model.addAttribute("end", offset + limit);
256
				}
257
 
258
			}
259
		}
260
 
261
		model.addAttribute("authUsers", authUsers);
262
		return "lead-close";
263
	}
264
 
265
	@RequestMapping(value = "/searchLeadPaginated")
25990 tejbeer 266
	public String searchLeadPaginated(HttpServletRequest request,
25988 tejbeer 267
			@RequestParam(name = "offset", defaultValue = "0") int offset,
268
			@RequestParam(name = "limit", defaultValue = "10") int limit,
269
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
270
			throws ProfitMandiBusinessException {
271
		LOGGER.info("In search Item....");
272
		List<Lead> leads = null;
273
		if (!searchTerm.equals("")) {
274
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
275
			if (!(leads.size() == 0)) {
276
 
277
				List<Integer> authIds = new ArrayList<>();
278
				for (Lead lead : leads) {
279
					authIds.add(lead.getAssignTo());
280
				}
281
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
282
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
283
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
284
				model.addAttribute("leads", leads);
285
			}
286
		}
287
 
288
		return "lead-close-paginated";
289
 
290
	}
291
 
25979 tejbeer 292
	@RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
293
	public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
294
		List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
295
		model.addAttribute("leadActivity", leadActivity);
296
		return "lead_activity_modal";
297
	}
298
 
299
	@RequestMapping(value = "/createLead", method = RequestMethod.POST)
300
	public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
301
			Model model) throws Exception {
302
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
303
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
304
		Lead lead = new Lead();
305
		lead.setFirstName(createRefferalRequest.getFirstName());
306
		lead.setLastName(createRefferalRequest.getLastName());
307
		lead.setLeadMobile(createRefferalRequest.getMobile());
308
		lead.setState(createRefferalRequest.getState());
309
		lead.setCity(createRefferalRequest.getCity());
310
		lead.setAddress(createRefferalRequest.getAddress());
311
		lead.setCreatedTimestamp(LocalDateTime.now());
312
		lead.setUpdatedTimestamp(LocalDateTime.now());
313
		lead.setStatus(createRefferalRequest.getStatus());
314
		lead.setAssignTo(createRefferalRequest.getAssignTo());
315
		lead.setSource(createRefferalRequest.getSource());
26298 tejbeer 316
		lead.setColor("yellow");
25979 tejbeer 317
		// change
25989 tejbeer 318
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
25979 tejbeer 319
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
320
		lead.setCreatedBy(authUserName);
321
		lead.setAuthId(authUser.getId());
322
 
323
		leadRepository.persist(lead);
324
		LeadActivity leadActivity = new LeadActivity();
325
		leadActivity.setLeadId(lead.getId());
326
		leadActivity.setRemark(createRefferalRequest.getRemark());
327
 
328
		if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
329
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
330
		} else {
331
			leadActivity.setSchelduleTimestamp(null);
332
		}
333
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
334
		leadActivityRepository.persist(leadActivity);
335
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
336
		return "response";
337
 
338
	}
339
 
340
	@RequestMapping(value = "/editLead", method = RequestMethod.POST)
27605 tejbeer 341
	public String EditLead(HttpServletRequest request,
342
			@RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
25979 tejbeer 343
 
344
		LeadActivity leadActivity = new LeadActivity();
27605 tejbeer 345
		leadActivity.setLeadId(createLeadActivityRequest.getId());
346
		leadActivity.setRemark(createLeadActivityRequest.getRemark());
347
 
348
		if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
349
			leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
350
		} else {
351
			leadActivity.setSchelduleTimestamp(null);
352
		}
25979 tejbeer 353
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
354
		leadActivityRepository.persist(leadActivity);
27605 tejbeer 355
		Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
356
		lead.setAssignTo(createLeadActivityRequest.getAssignTo());
357
		lead.setStatus(createLeadActivityRequest.getStatus());
28200 tejbeer 358
		lead.setNotinterestedReason(createLeadActivityRequest.getReason());
25979 tejbeer 359
		lead.setUpdatedTimestamp(LocalDateTime.now());
360
 
361
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
362
		return "response";
363
 
364
	}
365
}