Subversion Repositories SmartDukaan

Rev

Rev 34211 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 34211 Rev 36325
Line 28... Line 28...
28
import org.springframework.web.bind.annotation.RequestParam;
28
import org.springframework.web.bind.annotation.RequestParam;
29
 
29
 
30
import javax.mail.internet.InternetAddress;
30
import javax.mail.internet.InternetAddress;
31
import javax.mail.internet.MimeMessage;
31
import javax.mail.internet.MimeMessage;
32
import javax.servlet.http.HttpServletRequest;
32
import javax.servlet.http.HttpServletRequest;
-
 
33
import java.time.LocalDate;
33
import java.time.LocalDateTime;
34
import java.time.LocalDateTime;
34
import java.util.*;
35
import java.util.*;
35
import java.util.stream.Collectors;
36
import java.util.stream.Collectors;
36
 
37
 
37
@Controller
38
@Controller
Line 65... Line 66...
65
	@Autowired
66
	@Autowired
66
	JavaMailSender mailSender;
67
	JavaMailSender mailSender;
67
 
68
 
68
	private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
69
	private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
69
 
70
 
-
 
71
	// New tier policy: 1 → 3000, 2 → 4000, 3+ → 5000 (every successful referral that month earns that rate).
-
 
72
	// Referrals approved (or created, if approved ts missing) before TIER_POLICY_EFFECTIVE_DATE keep the flat ₹2,000.
-
 
73
	private static final int LEGACY_PER_REFERRAL_EARNING = 2000;
-
 
74
	private static final LocalDate TIER_POLICY_EFFECTIVE_DATE = LocalDate.of(2026, 1, 19);
-
 
75
 
-
 
76
	private static int tierRate(long count) {
-
 
77
		if (count <= 0) return 0;
-
 
78
		if (count == 1) return 3000;
-
 
79
		if (count == 2) return 4000;
-
 
80
		return 5000;
-
 
81
	}
-
 
82
 
-
 
83
	private static boolean isLegacy(Refferal r) {
-
 
84
		LocalDateTime when = r.getApprovedTimestamp() != null ? r.getApprovedTimestamp() : r.getCreatedTimestamp();
-
 
85
		return when != null && when.toLocalDate().isBefore(TIER_POLICY_EFFECTIVE_DATE);
-
 
86
	}
-
 
87
 
-
 
88
	private static long computeEarning(List<Refferal> referrals) {
-
 
89
		long legacyCount = referrals.stream().filter(RefferalController::isLegacy).count();
-
 
90
		long newCount = referrals.size() - legacyCount;
-
 
91
		return legacyCount * LEGACY_PER_REFERRAL_EARNING + newCount * tierRate(newCount);
-
 
92
	}
-
 
93
 
70
	@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
94
	@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
71
	public String getRefferalsRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
95
	public String getRefferalsRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
72
 
96
 
73
		List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.pending);
97
		List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.pending);
74
 
98
 
Line 360... Line 384...
360
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
384
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
361
			throws Exception {
385
			throws Exception {
362
 
386
 
363
		User user = userRepository.selectByEmailId(refereeEmail);
387
		User user = userRepository.selectByEmailId(refereeEmail);
364
		if (user != null) {
388
		if (user != null) {
365
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
-
 
366
			rfm.setAmount(amount);
-
 
367
			rfm.setCount(count);
-
 
368
			rfm.setRefereeEmail(user.getEmailId());
-
 
369
			rfm.setCreatedTimstamp(LocalDateTime.now());
-
 
370
			refferalMonthlyAmountRepository.persist(rfm);
-
 
371
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.REFERRAL_INCENTIVES,
-
 
372
					count + "referral of" + month + "Month", amount, LocalDateTime.now());
-
 
373
 
-
 
374
			DateRangeModel drm = new DateRangeModel();
389
			DateRangeModel drm = new DateRangeModel();
375
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
390
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
376
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
391
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
377
			List<Refferal> previousMonthapprovedRefferal = refferalRepository
392
			List<Refferal> previousMonthapprovedRefferal = refferalRepository
378
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
393
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
Line 389... Line 404...
389
			if (approvedRefferals.isEmpty()) {
404
			if (approvedRefferals.isEmpty()) {
390
				List<Refferal> pastApproved = refferalRepository.selectByStatusAndEmailId(RefferalStatus.approved,
405
				List<Refferal> pastApproved = refferalRepository.selectByStatusAndEmailId(RefferalStatus.approved,
391
						user.getEmailId());
406
						user.getEmailId());
392
				approvedRefferals.addAll(pastApproved);
407
				approvedRefferals.addAll(pastApproved);
393
			}
408
			}
-
 
409
 
-
 
410
			// Ignore the form-posted `amount`; recompute from the actual referrals being transferred so
-
 
411
			// admin can't (accidentally or otherwise) credit the wrong figure.
-
 
412
			int correctAmount = (int) computeEarning(approvedRefferals);
-
 
413
			int correctCount = approvedRefferals.size();
-
 
414
			LOGGER.info("addMoneyToWallet: form amount={}, form count={}, correct amount={}, correct count={}",
-
 
415
					amount, count, correctAmount, correctCount);
-
 
416
 
-
 
417
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
-
 
418
			rfm.setAmount(correctAmount);
-
 
419
			rfm.setCount(correctCount);
-
 
420
			rfm.setRefereeEmail(user.getEmailId());
-
 
421
			rfm.setCreatedTimstamp(LocalDateTime.now());
-
 
422
			refferalMonthlyAmountRepository.persist(rfm);
-
 
423
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.REFERRAL_INCENTIVES,
-
 
424
					correctCount + "referral of" + month + "Month", correctAmount, LocalDateTime.now());
-
 
425
 
394
			for (Refferal refferl : approvedRefferals) {
426
			for (Refferal refferl : approvedRefferals) {
395
				refferl.setStatus(RefferalStatus.transferred);
427
				refferl.setStatus(RefferalStatus.transferred);
396
				refferl.setUpdatedTimestamp(LocalDateTime.now());
428
				refferl.setUpdatedTimestamp(LocalDateTime.now());
397
			}
429
			}
398
 
430
 
Line 408... Line 440...
408
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
440
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
409
			throws Exception {
441
			throws Exception {
410
 
442
 
411
		User user = userRepository.selectByEmailId(refereeEmail);
443
		User user = userRepository.selectByEmailId(refereeEmail);
412
		if (user != null) {
444
		if (user != null) {
413
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
-
 
414
			rfm.setAmount(amount);
-
 
415
			rfm.setCount(count);
-
 
416
			rfm.setRefereeEmail(user.getEmailId());
-
 
417
			rfm.setCreatedTimstamp(LocalDateTime.now());
-
 
418
			refferalMonthlyAmountRepository.persist(rfm);
-
 
419
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
-
 
420
					count + "referral of" + month + "Month", amount, LocalDateTime.now());
-
 
421
 
-
 
422
			DateRangeModel drm = new DateRangeModel();
445
			DateRangeModel drm = new DateRangeModel();
423
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
446
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
424
			drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
447
			drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
425
			List<Refferal> oldMonthapprovedRefferal = refferalRepository
448
			List<Refferal> oldMonthapprovedRefferal = refferalRepository
426
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
449
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
Line 435... Line 458...
435
					.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
458
					.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
436
 
459
 
437
			oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
460
			oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
438
 
461
 
439
			LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
462
			LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
-
 
463
 
-
 
464
			int correctAmount = (int) computeEarning(oldPreMonthapproved);
-
 
465
			int correctCount = oldPreMonthapproved.size();
-
 
466
			LOGGER.info("addMoneyToWalletPreviousMonth: form amount={}, form count={}, correct amount={}, correct count={}",
-
 
467
					amount, count, correctAmount, correctCount);
-
 
468
 
-
 
469
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
-
 
470
			rfm.setAmount(correctAmount);
-
 
471
			rfm.setCount(correctCount);
-
 
472
			rfm.setRefereeEmail(user.getEmailId());
-
 
473
			rfm.setCreatedTimstamp(LocalDateTime.now());
-
 
474
			refferalMonthlyAmountRepository.persist(rfm);
-
 
475
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
-
 
476
					correctCount + "referral of" + month + "Month", correctAmount, LocalDateTime.now());
-
 
477
 
440
			for (Refferal refferl : oldPreMonthapproved) {
478
			for (Refferal refferl : oldPreMonthapproved) {
441
				refferl.setStatus(RefferalStatus.transferred);
479
				refferl.setStatus(RefferalStatus.transferred);
442
				refferl.setUpdatedTimestamp(LocalDateTime.now());
480
				refferl.setUpdatedTimestamp(LocalDateTime.now());
443
			}
481
			}
444
 
482