Subversion Repositories SmartDukaan

Rev

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