Subversion Repositories SmartDukaan

Rev

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