Subversion Repositories SmartDukaan

Rev

Rev 36401 | 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 com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29891 tejbeer 4
import com.spice.profitmandi.common.model.CustomRetailer;
25496 tejbeer 5
import com.spice.profitmandi.dao.entity.user.Refferal;
6
import com.spice.profitmandi.dao.entity.user.RefferalMonthlyAmount;
7
import com.spice.profitmandi.dao.entity.user.User;
8
import com.spice.profitmandi.dao.enumuration.dtr.RefferalStatus;
9
import com.spice.profitmandi.dao.model.DateRangeModel;
10
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
11
import com.spice.profitmandi.dao.repository.dtr.RefferalMonthlyAmountRepository;
12
import com.spice.profitmandi.dao.repository.dtr.RefferalRepository;
13
import com.spice.profitmandi.dao.repository.user.UserRepository;
14
import com.spice.profitmandi.service.user.RetailerService;
15
import com.spice.profitmandi.service.wallet.WalletService;
16
import com.spice.profitmandi.web.util.MVCResponseSender;
17
import in.shop2020.model.v1.order.WalletReferenceType;
31238 amit.gupta 18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.log4j.Logger;
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.mail.javamail.JavaMailSender;
22
import org.springframework.mail.javamail.MimeMessageHelper;
23
import org.springframework.stereotype.Controller;
24
import org.springframework.transaction.annotation.Transactional;
25
import org.springframework.ui.Model;
26
import org.springframework.web.bind.annotation.RequestMapping;
27
import org.springframework.web.bind.annotation.RequestMethod;
28
import org.springframework.web.bind.annotation.RequestParam;
25496 tejbeer 29
 
31238 amit.gupta 30
import javax.mail.internet.InternetAddress;
31
import javax.mail.internet.MimeMessage;
32
import javax.servlet.http.HttpServletRequest;
36325 aman 33
import java.time.LocalDate;
31238 amit.gupta 34
import java.time.LocalDateTime;
35
import java.util.*;
36
import java.util.stream.Collectors;
37
 
25496 tejbeer 38
@Controller
39
@Transactional(rollbackFor = Throwable.class)
40
public class RefferalController {
41
 
42
	@Autowired
43
	private RefferalRepository refferalRepository;
44
 
45
	@Autowired
46
	private MVCResponseSender mvcResponseSender;
47
 
48
	@Autowired
49
	private FofoStoreRepository fofoStoreRepository;
50
 
51
	@Autowired
52
	private RetailerService retailerService;
53
 
54
	@Autowired
55
	private WalletService walletService;
56
 
57
	@Autowired
58
	private RefferalMonthlyAmountRepository refferalMonthlyAmountRepository;
59
 
60
	@Autowired
61
	private UserRepository userRepository;
62
 
26766 tejbeer 63
	@Autowired
29891 tejbeer 64
	private com.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;
65
 
66
	@Autowired
36401 amit 67
	JavaMailSender gmailRelaySender;
26766 tejbeer 68
 
25496 tejbeer 69
	private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
70
 
36325 aman 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
 
25496 tejbeer 94
	@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
29891 tejbeer 95
	public String getRefferalsRequest(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
25496 tejbeer 96
 
29891 tejbeer 97
		List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.pending);
98
 
99
		Map<String, CustomRetailer> customerRetailerMap = new HashMap<>();
100
 
25496 tejbeer 101
		if (!refferals.isEmpty()) {
102
 
29891 tejbeer 103
			Set<String> emails = refferals.stream().map(x -> x.getRefereeEmail()).collect(Collectors.toSet());
25496 tejbeer 104
 
29891 tejbeer 105
			List<User> users = userUserRepository.selectByEmailIds(emails);
25496 tejbeer 106
 
29891 tejbeer 107
			List<Integer> fofoIds = users.stream().map(x -> x.getId()).collect(Collectors.toList());
25496 tejbeer 108
 
30426 tejbeer 109
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25496 tejbeer 110
 
30426 tejbeer 111
			Map<Integer, CustomRetailer> customRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x))
112
					.filter(x -> x != null).collect(Collectors.toList()).stream()
113
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
114
 
29891 tejbeer 115
			customerRetailerMap = customRetailers.entrySet().stream()
116
					.collect(Collectors.toMap(x -> x.getValue().getEmail(), x -> x.getValue()));
25496 tejbeer 117
 
118
		}
29891 tejbeer 119
		model.addAttribute("customerRetailerMap", customerRetailerMap);
25496 tejbeer 120
 
29891 tejbeer 121
		model.addAttribute("rStatus", "pending");
122
 
123
		model.addAttribute("refferals", refferals);
124
 
25496 tejbeer 125
		return "refferal";
126
	}
127
 
29891 tejbeer 128
	@RequestMapping(value = "/getValidateRefferals", method = RequestMethod.GET)
129
	public String getValidateRefferals(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
25496 tejbeer 130
 
29891 tejbeer 131
		List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.validate);
25496 tejbeer 132
 
29891 tejbeer 133
		Map<String, CustomRetailer> customerRetailerMap = new HashMap<>();
25496 tejbeer 134
 
25587 tejbeer 135
		if (!refferals.isEmpty()) {
136
 
29891 tejbeer 137
			Set<String> emails = refferals.stream().map(x -> x.getRefereeEmail()).collect(Collectors.toSet());
25587 tejbeer 138
 
29891 tejbeer 139
			List<User> users = userUserRepository.selectByEmailIds(emails);
25587 tejbeer 140
 
29891 tejbeer 141
			List<Integer> fofoIds = users.stream().map(x -> x.getId()).collect(Collectors.toList());
25587 tejbeer 142
 
30426 tejbeer 143
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25587 tejbeer 144
 
30426 tejbeer 145
			Map<Integer, CustomRetailer> customRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x))
146
					.filter(x -> x != null).collect(Collectors.toList()).stream()
147
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
148
 
29891 tejbeer 149
			customerRetailerMap = customRetailers.entrySet().stream()
150
					.collect(Collectors.toMap(x -> x.getValue().getEmail(), x -> x.getValue()));
25587 tejbeer 151
 
152
		}
29891 tejbeer 153
		model.addAttribute("customerRetailerMap", customerRetailerMap);
25587 tejbeer 154
 
29891 tejbeer 155
		model.addAttribute("refferals", refferals);
156
		model.addAttribute("rStatus", "validate");
157
 
25587 tejbeer 158
		return "refferal";
159
	}
160
 
161
	@RequestMapping(value = "/validateRefferal", method = RequestMethod.PUT)
162
	public String validateRefferal(HttpServletRequest request,
163
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, Model model) throws Exception {
164
 
165
		Refferal refferal = refferalRepository.selectById(refferalId);
166
 
167
		if (refferal.getStatus().equals(RefferalStatus.pending)) {
168
			refferal.setStatus(RefferalStatus.validate);
169
			refferal.setUpdatedTimestamp(LocalDateTime.now());
170
			refferalRepository.persist(refferal);
31238 amit.gupta 171
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25587 tejbeer 172
 
26792 tejbeer 173
			String subject = "Referral Approval Request for " + refferal.getRefereeEmail();
174
 
175
			String messageText = this.getMessageForReferral(refferal);
36401 amit 176
			MimeMessage message = gmailRelaySender.createMimeMessage();
26792 tejbeer 177
			MimeMessageHelper helper = new MimeMessageHelper(message, true);
37630 amit 178
			String[] email = { "tarun.verma@smartdukaan.com", "vikas.jangra@smartdukaan.com" };
26792 tejbeer 179
			helper.setSubject(subject);
180
			helper.setText(messageText, true);
181
			helper.setTo(email);
182
			InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smartdukaan Alerts");
183
			helper.setFrom(senderAddress);
36401 amit 184
			gmailRelaySender.send(message);
26792 tejbeer 185
 
25587 tejbeer 186
		} else {
31238 amit.gupta 187
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
25587 tejbeer 188
 
189
		}
190
 
191
		return "response";
192
	}
193
 
26792 tejbeer 194
	private String getMessageForReferral(Refferal referral) {
195
 
196
		StringBuilder sb = new StringBuilder();
197
		sb.append("<html><body><p>Alert</p><p> Referral Requests:-</p>"
198
				+ "<br/><table style='border:1px solid black ;padding: 5px';>");
199
		sb.append("<tbody>\n" + "	    				<tr>\n"
200
				+ "	    					<th style='border:1px solid black;padding: 5px'>RefereeName</th>\n"
201
				+ "	    					<th style='border:1px solid black;padding: 5px'>Referee Email</th>\n"
202
				+ "	    					<th style='border:1px solid black;padding: 5px'>Referral Name</th>\n"
203
				+ "	    					<th style='border:1px solid black;padding: 5px'>Refferal Mobile</th>\n"
204
				+ "	    					<th style='border:1px solid black;padding: 5px'>city</th>\n"
205
				+ "	    					<th style='border:1px solid black;padding: 5px'>state</th>\n"
206
				+ "	    				</tr>");
207
 
208
		sb.append("<tr>");
209
		sb.append("<td style='border:1px solid black;padding: 5px'>" + referral.getRefereeName() + "</td>");
210
 
211
		sb.append("<td style='border:1px solid black;padding: 5px'>" + referral.getRefereeEmail() + "</td>");
212
		sb.append("<td style='border:1px solid black;padding: 5px'>" + referral.getFirstName() + "</td>");
213
		sb.append("<td style='border:1px solid black;padding: 5px'>" + referral.getMobile() + "</td>");
214
		sb.append("<td style='border:1px solid black;padding: 5px'>" + referral.getCity() + "</td>");
215
		sb.append("<td style='border:1px solid black;padding: 5px'>" + referral.getState() + "</td>");
216
 
217
		sb.append("</tr>");
218
 
219
		sb.append("</tbody></table></body></html>");
220
 
221
		return sb.toString();
222
	}
223
 
25496 tejbeer 224
	@RequestMapping(value = "/approveRefferal", method = RequestMethod.PUT)
225
	public String approveRefferal(HttpServletRequest request,
226
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, Model model) throws Exception {
227
 
228
		Refferal refferal = refferalRepository.selectById(refferalId);
229
 
25587 tejbeer 230
		if (refferal.getStatus().equals(RefferalStatus.validate)) {
25496 tejbeer 231
			refferal.setStatus(RefferalStatus.approved);
232
			refferal.setUpdatedTimestamp(LocalDateTime.now());
233
			refferal.setApprovedTimestamp(LocalDateTime.now());
234
			refferalRepository.persist(refferal);
26766 tejbeer 235
 
26792 tejbeer 236
			String subject = "Referral Request Approved for " + refferal.getRefereeEmail();
237
			String messageText = this.getMessageForReferral(refferal);
26766 tejbeer 238
 
239
			this.sendMailWithAttachments(subject, messageText);
31238 amit.gupta 240
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25496 tejbeer 241
 
242
		} else {
31238 amit.gupta 243
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
25496 tejbeer 244
 
245
		}
246
 
247
		return "response";
248
	}
249
 
26766 tejbeer 250
	private void sendMailWithAttachments(String subject, String messageText) throws Exception {
36401 amit 251
		MimeMessage message = gmailRelaySender.createMimeMessage();
26766 tejbeer 252
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
26792 tejbeer 253
		String[] email = { "neeraj.gupta@smartdukaan.com" };
26766 tejbeer 254
		helper.setSubject(subject);
26792 tejbeer 255
		helper.setText(messageText, true);
26766 tejbeer 256
		helper.setTo(email);
257
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smartdukaan Alerts");
258
		helper.setFrom(senderAddress);
36401 amit 259
		gmailRelaySender.send(message);
26766 tejbeer 260
 
261
	}
262
 
25496 tejbeer 263
	@RequestMapping(value = "/rejectRefferal", method = RequestMethod.PUT)
264
	public String rejectRefferal(HttpServletRequest request,
25645 tejbeer 265
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, @RequestParam String rejectionReason,
266
			Model model) throws Exception {
25496 tejbeer 267
		Refferal refferal = refferalRepository.selectById(refferalId);
268
 
29890 tejbeer 269
		if (refferal.getStatus().equals(RefferalStatus.pending)
270
				|| refferal.getStatus().equals(RefferalStatus.validate)) {
25496 tejbeer 271
			refferal.setStatus(RefferalStatus.rejected);
25645 tejbeer 272
			refferal.setRejectedReason(rejectionReason);
25496 tejbeer 273
			refferal.setUpdatedTimestamp(LocalDateTime.now());
274
			refferalRepository.persist(refferal);
31238 amit.gupta 275
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25496 tejbeer 276
 
277
		} else {
31238 amit.gupta 278
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
25496 tejbeer 279
 
280
		}
281
 
282
		return "response";
283
	}
284
 
285
	@RequestMapping(value = "/approvedRefferals", method = RequestMethod.GET)
286
	public String approvedRefferals(HttpServletRequest request, Model model) throws Exception {
26766 tejbeer 287
 
26792 tejbeer 288
		Map<String, Long> pastApprovedCountMap = null;
29986 tejbeer 289
		List<Refferal> pastrefferal = new ArrayList<>();
26792 tejbeer 290
 
25496 tejbeer 291
		DateRangeModel drm = new DateRangeModel();
292
		drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
293
		drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
25587 tejbeer 294
 
25496 tejbeer 295
		List<Refferal> previousMonthapprovedRefferal = refferalRepository
25587 tejbeer 296
				.selectByStatusAndDateRanges(RefferalStatus.approved, drm);
297
 
25496 tejbeer 298
		drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
299
		drm.setEndDate(LocalDateTime.now().withDayOfMonth(16));
300
		LocalDateTime currentMonthdate = LocalDateTime.now().withDayOfMonth(1);
25587 tejbeer 301
 
302
		List<Refferal> preCurrMonthapproved = refferalRepository
303
				.selectByStatusAndDateRange(RefferalStatus.approved, drm).stream()
25496 tejbeer 304
				.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
25587 tejbeer 305
		preCurrMonthapproved.addAll(previousMonthapprovedRefferal);
25496 tejbeer 306
 
26792 tejbeer 307
		LOGGER.info("preCurrMonthapproved" + preCurrMonthapproved);
308
 
25587 tejbeer 309
		Map<String, Long> preApproved = preCurrMonthapproved.stream()
310
				.collect(Collectors.groupingBy(Refferal::getRefereeEmail, Collectors.counting()));
25496 tejbeer 311
 
312
		drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
313
		drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
25587 tejbeer 314
 
315
		LocalDateTime previousMonthdate = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
316
		List<Refferal> oldMonthapprovedRefferal = refferalRepository
317
				.selectByStatusAndDateRanges(RefferalStatus.approved, drm);
318
 
25496 tejbeer 319
		drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
320
		drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
321
 
25587 tejbeer 322
		List<Refferal> oldPreMonthapproved = refferalRepository.selectByStatusAndDateRange(RefferalStatus.approved, drm)
323
				.stream().filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
25496 tejbeer 324
 
25587 tejbeer 325
		oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
26792 tejbeer 326
		LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
25496 tejbeer 327
 
25587 tejbeer 328
		Map<String, Long> oldApproved = oldPreMonthapproved.stream()
329
				.collect(Collectors.groupingBy(Refferal::getRefereeEmail, Collectors.counting()));
330
		LOGGER.info("preApproved" + preApproved);
331
 
26766 tejbeer 332
		if (preApproved.isEmpty() && oldApproved.isEmpty()) {
26792 tejbeer 333
 
334
			pastrefferal = refferalRepository.selectByStatus(RefferalStatus.approved);
335
			pastApprovedCountMap = pastrefferal.stream()
26766 tejbeer 336
					.collect(Collectors.groupingBy(Refferal::getRefereeEmail, Collectors.counting()));
337
		}
338
 
29891 tejbeer 339
		List<Refferal> referalslist = new ArrayList<>();
340
		referalslist.addAll(oldPreMonthapproved);
341
		referalslist.addAll(pastrefferal);
342
		referalslist.addAll(preCurrMonthapproved);
343
 
344
		Map<String, CustomRetailer> customerRetailerMap = new HashMap<>();
345
 
346
		if (!referalslist.isEmpty()) {
347
 
348
			Set<String> emails = referalslist.stream().map(x -> x.getRefereeEmail()).collect(Collectors.toSet());
349
 
350
			List<User> users = userUserRepository.selectByEmailIds(emails);
351
 
352
			List<Integer> fofoIds = users.stream().map(x -> x.getId()).collect(Collectors.toList());
353
 
30426 tejbeer 354
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
29891 tejbeer 355
 
30426 tejbeer 356
			Map<Integer, CustomRetailer> customRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x))
357
					.filter(x -> x != null).collect(Collectors.toList()).stream()
358
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
359
 
29891 tejbeer 360
			customerRetailerMap = customRetailers.entrySet().stream()
361
					.collect(Collectors.toMap(x -> x.getValue().getEmail(), x -> x.getValue()));
362
 
363
		}
364
		model.addAttribute("customerRetailerMap", customerRetailerMap);
365
 
26792 tejbeer 366
		LOGGER.info("refferal" + pastrefferal);
25587 tejbeer 367
		LOGGER.info("oldApproved" + oldApproved);
26792 tejbeer 368
		LOGGER.info("pastApproved" + pastApprovedCountMap);
25496 tejbeer 369
		model.addAttribute("oldMonth", LocalDateTime.now().minusMonths(2).getMonth());
25587 tejbeer 370
		model.addAttribute("oldApproved", oldApproved);
26792 tejbeer 371
		model.addAttribute("oldPreMonthapproved", oldPreMonthapproved);
25496 tejbeer 372
		model.addAttribute("previousMonth", LocalDateTime.now().minusMonths(1).getMonth());
26792 tejbeer 373
		model.addAttribute("pastApproved", pastApprovedCountMap);
374
		model.addAttribute("pastrefferal", pastrefferal);
25587 tejbeer 375
		model.addAttribute("preApproved", preApproved);
26792 tejbeer 376
		model.addAttribute("preCurrMonthapproved", preCurrMonthapproved);
25587 tejbeer 377
 
378
		return "refferal-approve";
25496 tejbeer 379
	}
380
 
381
	@RequestMapping(value = "/addMoneyToWallet", method = RequestMethod.POST)
382
	public String addMoneyToWallet(HttpServletRequest request, @RequestParam String refereeEmail,
383
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
384
			throws Exception {
385
 
386
		User user = userRepository.selectByEmailId(refereeEmail);
387
		if (user != null) {
388
			DateRangeModel drm = new DateRangeModel();
389
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
390
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
391
			List<Refferal> previousMonthapprovedRefferal = refferalRepository
25587 tejbeer 392
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
25496 tejbeer 393
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
394
			drm.setEndDate(LocalDateTime.now().withDayOfMonth(16));
395
			List<Refferal> previousAndcurrentMonthapprovedRefferal = refferalRepository
25587 tejbeer 396
					.selectByEmailIdAndStatusAndDateRange(user.getEmailId(), RefferalStatus.approved, drm);
25496 tejbeer 397
			LocalDateTime currentMonthdate = LocalDateTime.now().withDayOfMonth(1);
398
			List<Refferal> preCurrMonthapproved = previousAndcurrentMonthapprovedRefferal.stream()
399
					.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
400
			List<Refferal> approvedRefferals = new ArrayList<>(previousMonthapprovedRefferal);
401
			approvedRefferals.addAll(preCurrMonthapproved);
402
 
26766 tejbeer 403
			if (approvedRefferals.isEmpty()) {
404
				List<Refferal> pastApproved = refferalRepository.selectByStatusAndEmailId(RefferalStatus.approved,
405
						user.getEmailId());
406
				approvedRefferals.addAll(pastApproved);
407
			}
36325 aman 408
 
409
			// Ignore the form-posted `amount`; recompute from the actual referrals being transferred so
410
			// admin can't (accidentally or otherwise) credit the wrong figure.
411
			int correctAmount = (int) computeEarning(approvedRefferals);
412
			int correctCount = approvedRefferals.size();
413
			LOGGER.info("addMoneyToWallet: form amount={}, form count={}, correct amount={}, correct count={}",
414
					amount, count, correctAmount, correctCount);
415
 
416
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
417
			rfm.setAmount(correctAmount);
418
			rfm.setCount(correctCount);
419
			rfm.setRefereeEmail(user.getEmailId());
420
			rfm.setCreatedTimstamp(LocalDateTime.now());
421
			refferalMonthlyAmountRepository.persist(rfm);
422
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.REFERRAL_INCENTIVES,
423
					correctCount + "referral of" + month + "Month", correctAmount, LocalDateTime.now());
424
 
25496 tejbeer 425
			for (Refferal refferl : approvedRefferals) {
426
				refferl.setStatus(RefferalStatus.transferred);
427
				refferl.setUpdatedTimestamp(LocalDateTime.now());
428
			}
429
 
31238 amit.gupta 430
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25496 tejbeer 431
		} else {
31238 amit.gupta 432
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
25496 tejbeer 433
		}
434
		return "response";
435
	}
436
 
437
	@RequestMapping(value = "/addMoneyToWalletPreviousMonth", method = RequestMethod.POST)
438
	public String addMoneyToWalletPrevious(HttpServletRequest request, @RequestParam String refereeEmail,
439
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
440
			throws Exception {
441
 
442
		User user = userRepository.selectByEmailId(refereeEmail);
443
		if (user != null) {
444
			DateRangeModel drm = new DateRangeModel();
445
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
446
			drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
447
			List<Refferal> oldMonthapprovedRefferal = refferalRepository
25587 tejbeer 448
					.selectByEmailIdAndStatusAndDateRanges(user.getEmailId(), RefferalStatus.approved, drm);
449
			LOGGER.info("oldMonthapprovedRefferal" + oldMonthapprovedRefferal);
450
 
25496 tejbeer 451
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
452
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
453
			List<Refferal> oldAndpreviousMonthapprovedRefferal = refferalRepository
25587 tejbeer 454
					.selectByEmailIdAndStatusAndDateRange(user.getEmailId(), RefferalStatus.approved, drm);
25496 tejbeer 455
			LocalDateTime previousMonthdate = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
456
			List<Refferal> oldPreMonthapproved = oldAndpreviousMonthapprovedRefferal.stream()
457
					.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
458
 
25587 tejbeer 459
			oldPreMonthapproved.addAll(oldMonthapprovedRefferal);
25496 tejbeer 460
 
25587 tejbeer 461
			LOGGER.info("oldPreMonthapproved" + oldPreMonthapproved);
36325 aman 462
 
463
			int correctAmount = (int) computeEarning(oldPreMonthapproved);
464
			int correctCount = oldPreMonthapproved.size();
465
			LOGGER.info("addMoneyToWalletPreviousMonth: form amount={}, form count={}, correct amount={}, correct count={}",
466
					amount, count, correctAmount, correctCount);
467
 
468
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
469
			rfm.setAmount(correctAmount);
470
			rfm.setCount(correctCount);
471
			rfm.setRefereeEmail(user.getEmailId());
472
			rfm.setCreatedTimstamp(LocalDateTime.now());
473
			refferalMonthlyAmountRepository.persist(rfm);
474
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
475
					correctCount + "referral of" + month + "Month", correctAmount, LocalDateTime.now());
476
 
25587 tejbeer 477
			for (Refferal refferl : oldPreMonthapproved) {
25496 tejbeer 478
				refferl.setStatus(RefferalStatus.transferred);
479
				refferl.setUpdatedTimestamp(LocalDateTime.now());
480
			}
481
 
31238 amit.gupta 482
			model.addAttribute("response1", mvcResponseSender.createResponseString(true));
25496 tejbeer 483
		} else {
31238 amit.gupta 484
			model.addAttribute("response1", mvcResponseSender.createResponseString(false));
25496 tejbeer 485
		}
486
		return "response";
487
	}
488
 
489
	@RequestMapping(value = "/getTransferredRefferals", method = RequestMethod.GET)
29891 tejbeer 490
	public String getTransferredRefferals(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
25496 tejbeer 491
 
29891 tejbeer 492
		List<Refferal> refferals = refferalRepository.selectByStatus(RefferalStatus.transferred);
493
		Map<String, CustomRetailer> customerRetailerMap = new HashMap<>();
494
 
25496 tejbeer 495
		if (!refferals.isEmpty()) {
496
 
29891 tejbeer 497
			Set<String> emails = refferals.stream().map(x -> x.getRefereeEmail()).collect(Collectors.toSet());
25496 tejbeer 498
 
29891 tejbeer 499
			List<User> users = userUserRepository.selectByEmailIds(emails);
25496 tejbeer 500
 
29891 tejbeer 501
			List<Integer> fofoIds = users.stream().map(x -> x.getId()).collect(Collectors.toList());
25496 tejbeer 502
 
30426 tejbeer 503
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
25496 tejbeer 504
 
30426 tejbeer 505
			Map<Integer, CustomRetailer> customRetailers = fofoIds.stream().map(x -> customRetailerMap.get(x))
506
					.filter(x -> x != null).collect(Collectors.toList()).stream()
507
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
508
 
29891 tejbeer 509
			customerRetailerMap = customRetailers.entrySet().stream()
510
					.collect(Collectors.toMap(x -> x.getValue().getEmail(), x -> x.getValue()));
511
 
25496 tejbeer 512
		}
29891 tejbeer 513
		model.addAttribute("customerRetailerMap", customerRetailerMap);
25496 tejbeer 514
 
29891 tejbeer 515
		model.addAttribute("refferals", refferals);
516
 
25496 tejbeer 517
		return "refferal";
518
	}
519
 
520
	@RequestMapping(value = "/getPaginatedTransferredRefferals", method = RequestMethod.GET)
521
	public String getPaginatedTransferredRefferals(HttpServletRequest request,
522
			@RequestParam(name = "offset", defaultValue = "0") int offset,
523
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
524
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
525
		List<Refferal> refferals = null;
526
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.transferred);
527
		LOGGER.info("refferals" + refferals);
528
		if (!refferals.isEmpty()) {
529
 
530
			model.addAttribute("refferals", refferals);
531
			model.addAttribute("url", "/getPaginatedTransferredRefferals");
532
 
533
		} else {
534
			model.addAttribute("refferals", refferals);
535
 
536
		}
537
 
538
		return "refferal-paginated";
539
	}
540
}