Subversion Repositories SmartDukaan

Rev

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