Subversion Repositories SmartDukaan

Rev

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