Subversion Repositories SmartDukaan

Rev

Rev 27642 | Rev 27723 | 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,
27642 tejbeer 67
			@RequestParam(name = "color", required = false, defaultValue = "") String color, Model model)
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
 
27642 tejbeer 78
		if (!color.equals("")) {
79
			leads = leadRepository.selectAllByColorStatusAndUpdatedTimestamp(leadStatus, color,
80
					LocalDateTime.now().withDayOfMonth(1).minusMonths(3));
81
 
82
		} else {
83
 
84
			leads = leadRepository.selectAllByStatusAndUpdatedTimestamp(leadStatus,
85
					LocalDateTime.now().withDayOfMonth(1).minusMonths(3));
86
 
87
			// List<Lead> leads = leadRepository.selectAllBylistStatus(leadStatus);
88
			if (!leads.isEmpty()) {
89
				leads.addAll(leadRepository.selectAllByStatus(LeadStatus.pending));
90
			}
27652 tejbeer 91
		}
27642 tejbeer 92
 
27610 tejbeer 93
			List<Integer> authIds = new ArrayList<>();
94
			if (!leads.isEmpty()) {
25979 tejbeer 95
 
27610 tejbeer 96
				authIds.addAll(leads.stream().map(x -> x.getAssignTo()).collect(Collectors.toList()));
97
 
98
				for (Lead lead : leads) {
99
					List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(lead.getId());
100
					if (!leadActivity.isEmpty()) {
101
						leadActivityMap.put(lead.getId(), leadActivity.get(0));
102
					}
27604 tejbeer 103
				}
27610 tejbeer 104
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
105
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
106
				model.addAttribute("lead", leads);
107
				model.addAttribute("leadActivityMap", leadActivityMap);
108
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
109
 
110
			} else {
111
				model.addAttribute("lead", leads);
25979 tejbeer 112
			}
27652 tejbeer 113
 
27610 tejbeer 114
		LOGGER.info("leads" + leads);
25979 tejbeer 115
		List<String> stateNames = stateRepository.selectAll().stream().map(x -> x.getName())
116
				.collect(Collectors.toList());
117
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
118
		model.addAttribute("stateNames", stateNames);
119
		model.addAttribute("authUsers", authUsers);
27610 tejbeer 120
		model.addAttribute("lead", leads);
121
		model.addAttribute("leadStatus", LeadStatus.values());
25979 tejbeer 122
 
27610 tejbeer 123
		model.addAttribute("selectedLeadStatus", leadStatus.get(0));
25979 tejbeer 124
		return "lead";
27642 tejbeer 125
 
25979 tejbeer 126
	}
127
 
25988 tejbeer 128
	@RequestMapping(value = "/getClosedLead", method = RequestMethod.GET)
129
	public String getClosedLead(HttpServletRequest request,
130
			@RequestParam(name = "offset", defaultValue = "0") int offset,
131
			@RequestParam(name = "limit", defaultValue = "10") int limit,
132
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
133
			throws Exception {
134
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
135
		List<Lead> leads = null;
136
		long size = 0;
137
		leads = leadRepository.selectAllByStatus(status, offset, limit);
138
		size = leadRepository.selectCountByStatus(status);
139
 
140
		if (!leads.isEmpty()) {
141
			List<Integer> authIds = new ArrayList<>();
142
			for (Lead lead : leads) {
143
				authIds.add(lead.getAssignTo());
144
			}
145
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
146
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
147
 
148
			model.addAttribute("leads", leads);
149
			model.addAttribute("start", offset + 1);
150
			model.addAttribute("size", size);
151
			model.addAttribute("searchTerm", searchTerm);
152
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
25990 tejbeer 153
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 154
 
155
			if (leads.size() < limit) {
156
				model.addAttribute("end", offset + leads.size());
157
			} else {
158
				model.addAttribute("end", offset + limit);
159
			}
160
 
161
		} else {
162
			model.addAttribute("lead", leads);
163
 
164
			model.addAttribute("size", size);
165
		}
166
 
167
		model.addAttribute("authUsers", authUsers);
168
		return "lead-close";
169
	}
170
 
171
	@RequestMapping(value = "/getPaginatedClosedLeads", method = RequestMethod.GET)
25990 tejbeer 172
	public String getPaginatedClosedLeads(HttpServletRequest request,
25988 tejbeer 173
			@RequestParam(name = "offset", defaultValue = "0") int offset,
174
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
175
			throws ProfitMandiBusinessException {
176
		List<Lead> leads = null;
177
		leads = leadRepository.selectAllByStatus(status, offset, limit);
178
 
179
		if (!leads.isEmpty()) {
180
			List<Integer> authIds = new ArrayList<>();
181
			for (Lead lead : leads) {
182
				authIds.add(lead.getAssignTo());
183
			}
184
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
185
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
186
			model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
187
			model.addAttribute("leads", leads);
25990 tejbeer 188
			model.addAttribute("url", "/getPaginatedClosedLeads");
25988 tejbeer 189
 
190
		} else {
191
			model.addAttribute("leads", leads);
192
 
193
		}
194
		return "lead-close-paginated";
195
	}
196
 
197
	@RequestMapping(value = "/searchLeads")
198
	public String getClosedLeads(HttpServletRequest request,
199
			@RequestParam(name = "offset", defaultValue = "0") int offset,
200
			@RequestParam(name = "limit", defaultValue = "10") int limit,
201
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
202
			throws ProfitMandiBusinessException {
203
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
204
		List<Lead> leads = null;
205
		long size = 0;
206
		if (!(searchTerm.equals(""))) {
207
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
208
			if (!(leads.size() == 0)) {
209
				size = leadRepository.selectCountByStatus(status);
210
				List<Integer> authIds = new ArrayList<>();
211
				for (Lead lead : leads) {
212
					authIds.add(lead.getAssignTo());
213
				}
214
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
215
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
216
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
217
				model.addAttribute("leads", leads);
218
				model.addAttribute("start", offset + 1);
219
				model.addAttribute("size", size);
220
				model.addAttribute("searchTerm", searchTerm);
221
 
222
				if (leads.size() < limit) {
223
					model.addAttribute("end", offset + leads.size());
224
				} else {
225
					model.addAttribute("end", offset + limit);
226
				}
227
			} else {
228
				throw new ProfitMandiBusinessException("lead", searchTerm, "leads Not Found");
229
			}
230
		} else {
231
			leads = leadRepository.selectAllByStatus(status, offset, limit);
232
			size = leadRepository.selectCountByStatus(status);
233
 
234
			if (!leads.isEmpty()) {
235
				List<Integer> authIds = new ArrayList<>();
236
				for (Lead lead : leads) {
237
					authIds.add(lead.getAssignTo());
238
				}
239
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
240
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
241
 
242
				model.addAttribute("leads", leads);
243
				model.addAttribute("start", offset + 1);
244
				model.addAttribute("size", size);
245
				model.addAttribute("searchTerm", searchTerm);
246
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
247
 
248
				if (leads.size() < limit) {
249
					model.addAttribute("end", offset + leads.size());
250
				} else {
251
					model.addAttribute("end", offset + limit);
252
				}
253
 
254
			}
255
		}
256
 
257
		model.addAttribute("authUsers", authUsers);
258
		return "lead-close";
259
	}
260
 
261
	@RequestMapping(value = "/searchLeadPaginated")
25990 tejbeer 262
	public String searchLeadPaginated(HttpServletRequest request,
25988 tejbeer 263
			@RequestParam(name = "offset", defaultValue = "0") int offset,
264
			@RequestParam(name = "limit", defaultValue = "10") int limit,
265
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
266
			throws ProfitMandiBusinessException {
267
		LOGGER.info("In search Item....");
268
		List<Lead> leads = null;
269
		if (!searchTerm.equals("")) {
270
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
271
			if (!(leads.size() == 0)) {
272
 
273
				List<Integer> authIds = new ArrayList<>();
274
				for (Lead lead : leads) {
275
					authIds.add(lead.getAssignTo());
276
				}
277
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
278
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
279
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
280
				model.addAttribute("leads", leads);
281
			}
282
		}
283
 
284
		return "lead-close-paginated";
285
 
286
	}
287
 
25979 tejbeer 288
	@RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
289
	public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
290
		List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
291
		model.addAttribute("leadActivity", leadActivity);
292
		return "lead_activity_modal";
293
	}
294
 
295
	@RequestMapping(value = "/createLead", method = RequestMethod.POST)
296
	public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
297
			Model model) throws Exception {
298
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
299
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
300
		Lead lead = new Lead();
301
		lead.setFirstName(createRefferalRequest.getFirstName());
302
		lead.setLastName(createRefferalRequest.getLastName());
303
		lead.setLeadMobile(createRefferalRequest.getMobile());
304
		lead.setState(createRefferalRequest.getState());
305
		lead.setCity(createRefferalRequest.getCity());
306
		lead.setAddress(createRefferalRequest.getAddress());
307
		lead.setCreatedTimestamp(LocalDateTime.now());
308
		lead.setUpdatedTimestamp(LocalDateTime.now());
309
		lead.setStatus(createRefferalRequest.getStatus());
310
		lead.setAssignTo(createRefferalRequest.getAssignTo());
311
		lead.setSource(createRefferalRequest.getSource());
26298 tejbeer 312
		lead.setColor("yellow");
25979 tejbeer 313
		// change
25989 tejbeer 314
		AuthUser authUser = authRepository.selectByEmailOrMobile(loginDetails.getEmailId());
25979 tejbeer 315
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
316
		lead.setCreatedBy(authUserName);
317
		lead.setAuthId(authUser.getId());
318
 
319
		leadRepository.persist(lead);
320
		LeadActivity leadActivity = new LeadActivity();
321
		leadActivity.setLeadId(lead.getId());
322
		leadActivity.setRemark(createRefferalRequest.getRemark());
323
 
324
		if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
325
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
326
		} else {
327
			leadActivity.setSchelduleTimestamp(null);
328
		}
329
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
330
		leadActivityRepository.persist(leadActivity);
331
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
332
		return "response";
333
 
334
	}
335
 
336
	@RequestMapping(value = "/editLead", method = RequestMethod.POST)
27605 tejbeer 337
	public String EditLead(HttpServletRequest request,
338
			@RequestBody CreateLeacdActivityRequest createLeadActivityRequest, Model model) throws Exception {
25979 tejbeer 339
 
340
		LeadActivity leadActivity = new LeadActivity();
27605 tejbeer 341
		leadActivity.setLeadId(createLeadActivityRequest.getId());
342
		leadActivity.setRemark(createLeadActivityRequest.getRemark());
343
 
344
		if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
345
			leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
346
		} else {
347
			leadActivity.setSchelduleTimestamp(null);
348
		}
25979 tejbeer 349
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
350
		leadActivityRepository.persist(leadActivity);
27605 tejbeer 351
		Lead lead = leadRepository.selectById(createLeadActivityRequest.getId());
352
		lead.setAssignTo(createLeadActivityRequest.getAssignTo());
353
		lead.setStatus(createLeadActivityRequest.getStatus());
25979 tejbeer 354
		lead.setUpdatedTimestamp(LocalDateTime.now());
355
 
356
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
357
		return "response";
358
 
359
	}
360
}