Subversion Repositories SmartDukaan

Rev

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