Subversion Repositories SmartDukaan

Rev

Rev 25587 | Rev 26498 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
25496 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
3
import java.time.LocalDateTime;
4
import java.util.ArrayList;
5
import java.util.List;
6
import java.util.Map;
25587 tejbeer 7
import java.util.function.Function;
8
import java.util.stream.Collector;
25496 tejbeer 9
import java.util.stream.Collectors;
10
 
11
import javax.servlet.http.HttpServletRequest;
12
 
13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
15
import org.json.JSONObject;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.stereotype.Controller;
18
import org.springframework.transaction.annotation.Transactional;
19
import org.springframework.ui.Model;
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
 
24
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25
import com.spice.profitmandi.common.model.CustomRetailer;
26
import com.spice.profitmandi.dao.entity.user.Refferal;
27
import com.spice.profitmandi.dao.entity.user.RefferalMonthlyAmount;
28
import com.spice.profitmandi.dao.entity.user.User;
29
import com.spice.profitmandi.dao.enumuration.dtr.RefferalStatus;
30
import com.spice.profitmandi.dao.model.DateRangeModel;
31
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
32
import com.spice.profitmandi.dao.repository.dtr.RefferalMonthlyAmountRepository;
33
import com.spice.profitmandi.dao.repository.dtr.RefferalRepository;
34
import com.spice.profitmandi.dao.repository.user.UserRepository;
35
import com.spice.profitmandi.service.user.RetailerService;
36
import com.spice.profitmandi.service.wallet.WalletService;
37
import com.spice.profitmandi.web.util.MVCResponseSender;
38
 
39
import in.shop2020.model.v1.order.WalletReferenceType;
40
 
41
@Controller
42
@Transactional(rollbackFor = Throwable.class)
43
public class RefferalController {
44
 
45
	@Autowired
46
	private RefferalRepository refferalRepository;
47
 
48
	@Autowired
49
	private MVCResponseSender mvcResponseSender;
50
 
51
	@Autowired
52
	private FofoStoreRepository fofoStoreRepository;
53
 
54
	@Autowired
55
	private RetailerService retailerService;
56
 
57
	@Autowired
58
	private WalletService walletService;
59
 
60
	@Autowired
61
	private RefferalMonthlyAmountRepository refferalMonthlyAmountRepository;
62
 
63
	@Autowired
64
	private UserRepository userRepository;
65
 
66
	private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
67
 
68
	@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
69
	public String getRefferalsRequest(HttpServletRequest request,
70
			@RequestParam(name = "offset", defaultValue = "0") int offset,
71
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
72
			throws ProfitMandiBusinessException {
73
 
74
		List<Refferal> refferals = null;
75
		long size = 0;
76
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.pending);
77
		LOGGER.info("refferals" + refferals);
78
		size = refferalRepository.selectCountByStatus(RefferalStatus.pending);
79
		if (!refferals.isEmpty()) {
80
 
81
			model.addAttribute("refferals", refferals);
82
			model.addAttribute("start", offset + 1);
83
			model.addAttribute("rStatus", "pending");
84
 
85
			model.addAttribute("size", size);
86
			model.addAttribute("url", "/getPaginatedRefferalsRequest");
87
 
88
			if (refferals.size() < limit) {
89
				model.addAttribute("end", offset + refferals.size());
90
			} else {
91
				model.addAttribute("end", offset + limit);
92
			}
93
 
94
		} else {
95
 
96
			model.addAttribute("refferals", refferals);
97
			model.addAttribute("size", size);
98
 
99
		}
100
 
101
		return "refferal";
102
	}
103
 
104
	@RequestMapping(value = "/getPaginatedRefferalsRequest", method = RequestMethod.GET)
105
	public String getPaginatedRefferalsRequest(HttpServletRequest request,
106
			@RequestParam(name = "offset", defaultValue = "0") int offset,
107
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
108
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
109
		List<Refferal> refferals = null;
110
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.pending);
111
		LOGGER.info("refferals" + refferals);
112
		if (!refferals.isEmpty()) {
113
 
114
			model.addAttribute("refferals", refferals);
115
			model.addAttribute("rStatus", "pending");
116
			model.addAttribute("url", "/getPaginatedRefferalsRequest");
117
 
118
		} else {
119
			model.addAttribute("refferals", refferals);
120
 
121
		}
122
 
123
		return "refferal-paginated";
124
	}
125
 
25587 tejbeer 126
	@RequestMapping(value = "/getValidateRefferals", method = RequestMethod.GET)
127
	public String getValidateRefferals(HttpServletRequest request,
128
			@RequestParam(name = "offset", defaultValue = "0") int offset,
129
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
130
			throws ProfitMandiBusinessException {
131
 
132
		List<Refferal> refferals = null;
133
		long size = 0;
134
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.validate);
135
		LOGGER.info("refferals" + refferals);
136
		size = refferalRepository.selectCountByStatus(RefferalStatus.validate);
137
		if (!refferals.isEmpty()) {
138
 
139
			model.addAttribute("refferals", refferals);
140
			model.addAttribute("start", offset + 1);
141
			model.addAttribute("rStatus", "validate");
142
 
143
			model.addAttribute("size", size);
144
			model.addAttribute("url", "/getPaginatedValidateRefferals");
145
 
146
			if (refferals.size() < limit) {
147
				model.addAttribute("end", offset + refferals.size());
148
			} else {
149
				model.addAttribute("end", offset + limit);
150
			}
151
 
152
		} else {
153
 
154
			model.addAttribute("refferals", refferals);
155
			model.addAttribute("size", size);
156
 
157
		}
158
 
159
		return "refferal";
160
	}
161
 
162
	@RequestMapping(value = "/getPaginatedValidateRefferals", method = RequestMethod.GET)
163
	public String getPaginatedValidateRefferals(HttpServletRequest request,
164
			@RequestParam(name = "offset", defaultValue = "0") int offset,
165
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
166
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
167
		List<Refferal> refferals = null;
168
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.validate);
169
		LOGGER.info("refferals" + refferals);
170
		if (!refferals.isEmpty()) {
171
 
172
			model.addAttribute("refferals", refferals);
173
			model.addAttribute("rStatus", "validate");
174
			model.addAttribute("url", "/getPaginatedValidateRefferals");
175
 
176
		} else {
177
			model.addAttribute("refferals", refferals);
178
 
179
		}
180
 
181
		return "refferal-paginated";
182
	}
183
 
184
	@RequestMapping(value = "/validateRefferal", method = RequestMethod.PUT)
185
	public String validateRefferal(HttpServletRequest request,
186
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, Model model) throws Exception {
187
 
188
		Refferal refferal = refferalRepository.selectById(refferalId);
189
 
190
		if (refferal.getStatus().equals(RefferalStatus.pending)) {
191
			refferal.setStatus(RefferalStatus.validate);
192
			refferal.setUpdatedTimestamp(LocalDateTime.now());
193
			refferalRepository.persist(refferal);
194
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
195
 
196
		} else {
197
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
198
 
199
		}
200
 
201
		return "response";
202
	}
203
 
25496 tejbeer 204
	@RequestMapping(value = "/approveRefferal", method = RequestMethod.PUT)
205
	public String approveRefferal(HttpServletRequest request,
206
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, Model model) throws Exception {
207
 
208
		Refferal refferal = refferalRepository.selectById(refferalId);
209
 
25587 tejbeer 210
		if (refferal.getStatus().equals(RefferalStatus.validate)) {
25496 tejbeer 211
			refferal.setStatus(RefferalStatus.approved);
212
			refferal.setUpdatedTimestamp(LocalDateTime.now());
213
			refferal.setApprovedTimestamp(LocalDateTime.now());
214
			refferalRepository.persist(refferal);
215
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
216
 
217
		} else {
218
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
219
 
220
		}
221
 
222
		return "response";
223
	}
224
 
225
	@RequestMapping(value = "/rejectRefferal", method = RequestMethod.PUT)
226
	public String rejectRefferal(HttpServletRequest request,
25645 tejbeer 227
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, @RequestParam String rejectionReason,
228
			Model model) throws Exception {
25496 tejbeer 229
		Refferal refferal = refferalRepository.selectById(refferalId);
230
 
231
		if (refferal.getStatus().equals(RefferalStatus.pending)) {
232
			refferal.setStatus(RefferalStatus.rejected);
25645 tejbeer 233
			refferal.setRejectedReason(rejectionReason);
25496 tejbeer 234
			refferal.setUpdatedTimestamp(LocalDateTime.now());
235
			refferalRepository.persist(refferal);
236
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
237
 
238
		} else {
239
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
240
 
241
		}
242
 
243
		return "response";
244
	}
245
 
246
	@RequestMapping(value = "/approvedRefferals", method = RequestMethod.GET)
247
	public String approvedRefferals(HttpServletRequest request, Model model) throws Exception {
248
		DateRangeModel drm = new DateRangeModel();
249
		drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
250
		drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
25587 tejbeer 251
 
25496 tejbeer 252
		List<Refferal> previousMonthapprovedRefferal = refferalRepository
25587 tejbeer 253
				.selectByStatusAndDateRanges(RefferalStatus.approved, drm);
254
 
25496 tejbeer 255
		drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
256
		drm.setEndDate(LocalDateTime.now().withDayOfMonth(16));
257
		LocalDateTime currentMonthdate = LocalDateTime.now().withDayOfMonth(1);
25587 tejbeer 258
 
259
		List<Refferal> preCurrMonthapproved = refferalRepository
260
				.selectByStatusAndDateRange(RefferalStatus.approved, drm).stream()
25496 tejbeer 261
				.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
25587 tejbeer 262
		preCurrMonthapproved.addAll(previousMonthapprovedRefferal);
25496 tejbeer 263
 
25587 tejbeer 264
		Map<String, Long> preApproved = preCurrMonthapproved.stream()
265
				.collect(Collectors.groupingBy(Refferal::getRefereeEmail, Collectors.counting()));
25496 tejbeer 266
 
267
		drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
268
		drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
25587 tejbeer 269
 
270
		LocalDateTime previousMonthdate = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
271
		List<Refferal> oldMonthapprovedRefferal = refferalRepository
272
				.selectByStatusAndDateRanges(RefferalStatus.approved, drm);
273
 
25496 tejbeer 274
		drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
275
		drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
276
 
25587 tejbeer 277
		List<Refferal> oldPreMonthapproved = refferalRepository.selectByStatusAndDateRange(RefferalStatus.approved, drm)
278
				.stream().filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
25496 tejbeer 279
 
25587 tejbeer 280
		oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
25496 tejbeer 281
 
25587 tejbeer 282
		Map<String, Long> oldApproved = oldPreMonthapproved.stream()
283
				.collect(Collectors.groupingBy(Refferal::getRefereeEmail, Collectors.counting()));
284
		LOGGER.info("preApproved" + preApproved);
285
 
286
		LOGGER.info("oldApproved" + oldApproved);
25496 tejbeer 287
		model.addAttribute("oldMonth", LocalDateTime.now().minusMonths(2).getMonth());
25587 tejbeer 288
		model.addAttribute("oldApproved", oldApproved);
25496 tejbeer 289
		model.addAttribute("previousMonth", LocalDateTime.now().minusMonths(1).getMonth());
25587 tejbeer 290
		model.addAttribute("preApproved", preApproved);
291
 
292
		return "refferal-approve";
25496 tejbeer 293
	}
294
 
295
	@RequestMapping(value = "/addMoneyToWallet", method = RequestMethod.POST)
296
	public String addMoneyToWallet(HttpServletRequest request, @RequestParam String refereeEmail,
297
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
298
			throws Exception {
299
 
300
		User user = userRepository.selectByEmailId(refereeEmail);
301
		if (user != null) {
302
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
303
			rfm.setAmount(amount);
304
			rfm.setCount(count);
25587 tejbeer 305
			rfm.setRefereeEmail(user.getEmailId());
25496 tejbeer 306
			rfm.setCreatedTimstamp(LocalDateTime.now());
307
			refferalMonthlyAmountRepository.persist(rfm);
308
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
309
					count + "refferal of" + month + "Month", amount);
310
 
311
			DateRangeModel drm = new DateRangeModel();
312
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
313
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
314
			List<Refferal> previousMonthapprovedRefferal = refferalRepository
25587 tejbeer 315
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
25496 tejbeer 316
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
317
			drm.setEndDate(LocalDateTime.now().withDayOfMonth(16));
318
			List<Refferal> previousAndcurrentMonthapprovedRefferal = refferalRepository
25587 tejbeer 319
					.selectByEmailIdAndStatusAndDateRange(user.getEmailId(), RefferalStatus.approved, drm);
25496 tejbeer 320
			LocalDateTime currentMonthdate = LocalDateTime.now().withDayOfMonth(1);
321
			List<Refferal> preCurrMonthapproved = previousAndcurrentMonthapprovedRefferal.stream()
322
					.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
323
			List<Refferal> approvedRefferals = new ArrayList<>(previousMonthapprovedRefferal);
324
			approvedRefferals.addAll(preCurrMonthapproved);
325
 
326
			for (Refferal refferl : approvedRefferals) {
327
				refferl.setStatus(RefferalStatus.transferred);
328
				refferl.setUpdatedTimestamp(LocalDateTime.now());
329
			}
330
 
331
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
332
		} else {
333
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
334
		}
335
		return "response";
336
	}
337
 
338
	@RequestMapping(value = "/addMoneyToWalletPreviousMonth", method = RequestMethod.POST)
339
	public String addMoneyToWalletPrevious(HttpServletRequest request, @RequestParam String refereeEmail,
340
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
341
			throws Exception {
342
 
343
		User user = userRepository.selectByEmailId(refereeEmail);
344
		if (user != null) {
345
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
346
			rfm.setAmount(amount);
347
			rfm.setCount(count);
25587 tejbeer 348
			rfm.setRefereeEmail(user.getEmailId());
25496 tejbeer 349
			rfm.setCreatedTimstamp(LocalDateTime.now());
350
			refferalMonthlyAmountRepository.persist(rfm);
351
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
352
					count + "refferal of" + month + "Month", amount);
353
 
354
			DateRangeModel drm = new DateRangeModel();
355
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
356
			drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
357
			List<Refferal> oldMonthapprovedRefferal = refferalRepository
25587 tejbeer 358
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
359
			LOGGER.info("oldMonthapprovedRefferal" + oldMonthapprovedRefferal);
360
 
25496 tejbeer 361
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
362
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
363
			List<Refferal> oldAndpreviousMonthapprovedRefferal = refferalRepository
25587 tejbeer 364
					.selectByEmailIdAndStatusAndDateRange(user.getEmailId(), RefferalStatus.approved, drm);
25496 tejbeer 365
			LocalDateTime previousMonthdate = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
366
			List<Refferal> oldPreMonthapproved = oldAndpreviousMonthapprovedRefferal.stream()
367
					.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
368
 
25587 tejbeer 369
			oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
25496 tejbeer 370
 
25587 tejbeer 371
			LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
372
			for (Refferal refferl : oldPreMonthapproved) {
25496 tejbeer 373
				refferl.setStatus(RefferalStatus.transferred);
374
				refferl.setUpdatedTimestamp(LocalDateTime.now());
375
			}
376
 
377
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
378
		} else {
379
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
380
		}
381
		return "response";
382
	}
383
 
384
	@RequestMapping(value = "/getTransferredRefferals", method = RequestMethod.GET)
385
	public String getTransferredRefferals(HttpServletRequest request,
386
			@RequestParam(name = "offset", defaultValue = "0") int offset,
387
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
388
			throws ProfitMandiBusinessException {
389
 
390
		List<Refferal> refferals = null;
391
		long size = 0;
392
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.transferred);
393
		LOGGER.info("refferals" + refferals);
394
		size = refferalRepository.selectCountByStatus(RefferalStatus.transferred);
395
		if (!refferals.isEmpty()) {
396
 
397
			model.addAttribute("refferals", refferals);
398
			model.addAttribute("start", offset + 1);
399
			model.addAttribute("size", size);
400
			model.addAttribute("url", "/getPaginatedTransferredRefferals");
401
 
402
			if (refferals.size() < limit) {
403
				model.addAttribute("end", offset + refferals.size());
404
			} else {
405
				model.addAttribute("end", offset + limit);
406
			}
407
 
408
		} else {
409
 
410
			model.addAttribute("refferals", refferals);
411
			model.addAttribute("size", size);
412
 
413
		}
414
 
415
		return "refferal";
416
	}
417
 
418
	@RequestMapping(value = "/getPaginatedTransferredRefferals", method = RequestMethod.GET)
419
	public String getPaginatedTransferredRefferals(HttpServletRequest request,
420
			@RequestParam(name = "offset", defaultValue = "0") int offset,
421
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
422
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
423
		List<Refferal> refferals = null;
424
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.transferred);
425
		LOGGER.info("refferals" + refferals);
426
		if (!refferals.isEmpty()) {
427
 
428
			model.addAttribute("refferals", refferals);
429
			model.addAttribute("url", "/getPaginatedTransferredRefferals");
430
 
431
		} else {
432
			model.addAttribute("refferals", refferals);
433
 
434
		}
435
 
436
		return "refferal-paginated";
437
	}
438
}