Subversion Repositories SmartDukaan

Rev

Rev 25981 | Rev 25989 | 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;
24
import com.spice.profitmandi.common.model.CustomRetailer;
25979 tejbeer 25
import com.spice.profitmandi.dao.entity.auth.AuthUser;
25988 tejbeer 26
import com.spice.profitmandi.dao.entity.catalog.Scheme;
27
import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;
25979 tejbeer 28
import com.spice.profitmandi.dao.entity.user.Lead;
29
import com.spice.profitmandi.dao.entity.user.LeadActivity;
30
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
25988 tejbeer 31
import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;
25979 tejbeer 32
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
33
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
34
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
35
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
36
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
25988 tejbeer 37
import com.spice.profitmandi.service.user.LeadService;
25979 tejbeer 38
import com.spice.profitmandi.web.model.LoginDetails;
39
import com.spice.profitmandi.web.util.CookiesProcessor;
40
import com.spice.profitmandi.web.util.MVCResponseSender;
41
 
42
@Controller
43
@Transactional(rollbackOn = Throwable.class)
44
public class LeadController {
45
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
46
 
47
	@Autowired
48
	private LeadRepository leadRepository;
49
 
50
	@Autowired
51
	private LeadActivityRepository leadActivityRepository;
52
 
53
	@Autowired
54
	private StateRepository stateRepository;
55
 
56
	@Autowired
57
	private AuthRepository authRepository;
58
 
59
	@Autowired
60
	private CookiesProcessor cookiesProcessor;
61
 
62
	@Autowired
25988 tejbeer 63
	private LeadService leadService;
64
 
65
	@Autowired
25979 tejbeer 66
	private MVCResponseSender mvcResponseSender;
67
 
25988 tejbeer 68
	List<LeadStatus> status = Arrays.asList(LeadStatus.notInterested, LeadStatus.finalized);
69
 
25979 tejbeer 70
	@RequestMapping(value = "/getOpenLead", method = RequestMethod.GET)
71
	public String getOpenLead(HttpServletRequest request, Model model) throws Exception {
72
		List<Lead> leads = leadRepository.selectAllByStatus(LeadStatus.followUp);
73
		List<Integer> authIds = new ArrayList<>();
74
		if (!leads.isEmpty()) {
75
 
76
			for (Lead lead : leads) {
77
				authIds.add(lead.getAssignTo());
78
			}
79
			Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
80
					.collect(Collectors.toMap(x -> x.getId(), x -> x));
81
 
82
			model.addAttribute("lead", leads);
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);
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)
141
	public String getPaginatedSchemes(HttpServletRequest request,
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);
157
 
158
		} else {
159
			model.addAttribute("leads", leads);
160
 
161
		}
162
		return "lead-close-paginated";
163
	}
164
 
165
	@RequestMapping(value = "/searchLeads")
166
	public String getClosedLeads(HttpServletRequest request,
167
			@RequestParam(name = "offset", defaultValue = "0") int offset,
168
			@RequestParam(name = "limit", defaultValue = "10") int limit,
169
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
170
			throws ProfitMandiBusinessException {
171
		List<AuthUser> authUsers = authRepository.selectAllActiveUser();
172
		List<Lead> leads = null;
173
		long size = 0;
174
		if (!(searchTerm.equals(""))) {
175
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
176
			if (!(leads.size() == 0)) {
177
				size = leadRepository.selectCountByStatus(status);
178
				List<Integer> authIds = new ArrayList<>();
179
				for (Lead lead : leads) {
180
					authIds.add(lead.getAssignTo());
181
				}
182
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
183
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
184
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
185
				model.addAttribute("leads", leads);
186
				model.addAttribute("start", offset + 1);
187
				model.addAttribute("size", size);
188
				model.addAttribute("searchTerm", searchTerm);
189
 
190
				if (leads.size() < limit) {
191
					model.addAttribute("end", offset + leads.size());
192
				} else {
193
					model.addAttribute("end", offset + limit);
194
				}
195
			} else {
196
				throw new ProfitMandiBusinessException("lead", searchTerm, "leads Not Found");
197
			}
198
		} else {
199
			leads = leadRepository.selectAllByStatus(status, offset, limit);
200
			size = leadRepository.selectCountByStatus(status);
201
 
202
			if (!leads.isEmpty()) {
203
				List<Integer> authIds = new ArrayList<>();
204
				for (Lead lead : leads) {
205
					authIds.add(lead.getAssignTo());
206
				}
207
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
208
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
209
 
210
				model.addAttribute("leads", leads);
211
				model.addAttribute("start", offset + 1);
212
				model.addAttribute("size", size);
213
				model.addAttribute("searchTerm", searchTerm);
214
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
215
 
216
				if (leads.size() < limit) {
217
					model.addAttribute("end", offset + leads.size());
218
				} else {
219
					model.addAttribute("end", offset + limit);
220
				}
221
 
222
			}
223
		}
224
 
225
		model.addAttribute("authUsers", authUsers);
226
		return "lead-close";
227
	}
228
 
229
	@RequestMapping(value = "/searchLeadPaginated")
230
	public String getSchemeByItemPanigated(HttpServletRequest request,
231
			@RequestParam(name = "offset", defaultValue = "0") int offset,
232
			@RequestParam(name = "limit", defaultValue = "10") int limit,
233
			@RequestParam(name = "searchTerm", required = false, defaultValue = "") String searchTerm, Model model)
234
			throws ProfitMandiBusinessException {
235
		LOGGER.info("In search Item....");
236
		List<Lead> leads = null;
237
		if (!searchTerm.equals("")) {
238
			leads = leadRepository.selectBySearchTerm(status, searchTerm, offset, limit);
239
			if (!(leads.size() == 0)) {
240
 
241
				List<Integer> authIds = new ArrayList<>();
242
				for (Lead lead : leads) {
243
					authIds.add(lead.getAssignTo());
244
				}
245
				Map<Integer, AuthUser> authIdAndAuthUserMap = authRepository.selectAllAuthUserByIds(authIds).stream()
246
						.collect(Collectors.toMap(x -> x.getId(), x -> x));
247
				model.addAttribute("authIdAndAuthUserMap", authIdAndAuthUserMap);
248
				model.addAttribute("leads", leads);
249
			}
250
		}
251
 
252
		return "lead-close-paginated";
253
 
254
	}
255
 
25979 tejbeer 256
	@RequestMapping(value = "/getLeadActivity", method = RequestMethod.GET)
257
	public String getLeadActivity(HttpServletRequest request, @RequestParam int leadId, Model model) throws Exception {
258
		List<LeadActivity> leadActivity = leadActivityRepository.selectBYLeadId(leadId);
259
		model.addAttribute("leadActivity", leadActivity);
260
		return "lead_activity_modal";
261
	}
262
 
263
	@RequestMapping(value = "/createLead", method = RequestMethod.POST)
264
	public String CreateLead(HttpServletRequest request, @RequestBody CreateRefferalRequest createRefferalRequest,
265
			Model model) throws Exception {
266
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
267
		LOGGER.info("createRefferalRequest" + createRefferalRequest.getSchelduleTimestamp());
268
		Lead lead = new Lead();
269
		lead.setFirstName(createRefferalRequest.getFirstName());
270
		lead.setLastName(createRefferalRequest.getLastName());
271
		lead.setLeadMobile(createRefferalRequest.getMobile());
272
		lead.setState(createRefferalRequest.getState());
273
		lead.setCity(createRefferalRequest.getCity());
274
		lead.setAddress(createRefferalRequest.getAddress());
275
		lead.setCreatedTimestamp(LocalDateTime.now());
276
		lead.setUpdatedTimestamp(LocalDateTime.now());
277
		lead.setStatus(createRefferalRequest.getStatus());
278
		lead.setAssignTo(createRefferalRequest.getAssignTo());
279
		lead.setSource(createRefferalRequest.getSource());
280
		// change
25988 tejbeer 281
		AuthUser authUser = authRepository.selectByEmailOrMobile("prakash.rai@smartdukaan.com");
25979 tejbeer 282
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
283
		lead.setCreatedBy(authUserName);
284
		lead.setAuthId(authUser.getId());
285
 
286
		leadRepository.persist(lead);
287
		LeadActivity leadActivity = new LeadActivity();
288
		leadActivity.setLeadId(lead.getId());
289
		leadActivity.setRemark(createRefferalRequest.getRemark());
290
 
291
		if (createRefferalRequest.getStatus() == LeadStatus.followUp) {
292
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
293
		} else {
294
			leadActivity.setSchelduleTimestamp(null);
295
		}
296
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
297
		leadActivityRepository.persist(leadActivity);
298
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
299
		return "response";
300
 
301
	}
302
 
303
	@RequestMapping(value = "/editLead", method = RequestMethod.POST)
304
	public String EditLead(HttpServletRequest request, @RequestParam int assignTo, @RequestParam String remark,
305
			@RequestParam int leadId, Model model) throws Exception {
306
 
307
		LeadActivity leadActivity = new LeadActivity();
308
		leadActivity.setLeadId(leadId);
309
		leadActivity.setRemark(remark);
310
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
311
		leadActivityRepository.persist(leadActivity);
312
		Lead lead = leadRepository.selectById(leadId);
313
		lead.setAssignTo(assignTo);
314
		lead.setUpdatedTimestamp(LocalDateTime.now());
315
 
316
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
317
		return "response";
318
 
319
	}
320
}