Subversion Repositories SmartDukaan

Rev

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