Subversion Repositories SmartDukaan

Rev

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