Subversion Repositories SmartDukaan

Rev

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