Subversion Repositories SmartDukaan

Rev

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