Subversion Repositories SmartDukaan

Rev

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