Subversion Repositories SmartDukaan

Rev

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