Subversion Repositories SmartDukaan

Rev

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