Subversion Repositories SmartDukaan

Rev

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