Subversion Repositories SmartDukaan

Rev

Rev 25496 | Rev 25587 | 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;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.stream.Collectors;
8
 
9
import javax.servlet.http.HttpServletRequest;
10
 
11
import org.apache.logging.log4j.LogManager;
12
import org.apache.logging.log4j.Logger;
13
import org.json.JSONObject;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.stereotype.Controller;
16
import org.springframework.transaction.annotation.Transactional;
17
import org.springframework.ui.Model;
18
import org.springframework.web.bind.annotation.RequestMapping;
19
import org.springframework.web.bind.annotation.RequestMethod;
20
import org.springframework.web.bind.annotation.RequestParam;
21
 
22
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23
import com.spice.profitmandi.common.model.CustomRetailer;
24
import com.spice.profitmandi.dao.entity.user.Refferal;
25
import com.spice.profitmandi.dao.entity.user.RefferalMonthlyAmount;
26
import com.spice.profitmandi.dao.entity.user.User;
27
import com.spice.profitmandi.dao.enumuration.dtr.RefferalStatus;
28
import com.spice.profitmandi.dao.model.DateRangeModel;
29
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
30
import com.spice.profitmandi.dao.repository.dtr.RefferalMonthlyAmountRepository;
31
import com.spice.profitmandi.dao.repository.dtr.RefferalRepository;
32
import com.spice.profitmandi.dao.repository.user.UserRepository;
33
import com.spice.profitmandi.service.user.RetailerService;
34
import com.spice.profitmandi.service.wallet.WalletService;
35
import com.spice.profitmandi.web.util.MVCResponseSender;
36
 
37
import in.shop2020.model.v1.order.WalletReferenceType;
38
 
39
@Controller
40
@Transactional(rollbackFor = Throwable.class)
41
public class RefferalController {
42
 
43
	@Autowired
44
	private RefferalRepository refferalRepository;
45
 
46
	@Autowired
47
	private MVCResponseSender mvcResponseSender;
48
 
49
	@Autowired
50
	private FofoStoreRepository fofoStoreRepository;
51
 
52
	@Autowired
53
	private RetailerService retailerService;
54
 
55
	@Autowired
56
	private WalletService walletService;
57
 
58
	@Autowired
59
	private RefferalMonthlyAmountRepository refferalMonthlyAmountRepository;
60
 
61
	@Autowired
62
	private UserRepository userRepository;
63
 
64
	private static final Logger LOGGER = LogManager.getLogger(RefferalRepository.class);
65
 
66
	@RequestMapping(value = "/getRefferalsRequest", method = RequestMethod.GET)
67
	public String getRefferalsRequest(HttpServletRequest request,
68
			@RequestParam(name = "offset", defaultValue = "0") int offset,
69
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
70
			throws ProfitMandiBusinessException {
71
 
72
		List<Refferal> refferals = null;
73
		long size = 0;
74
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.pending);
75
		LOGGER.info("refferals" + refferals);
76
		size = refferalRepository.selectCountByStatus(RefferalStatus.pending);
77
		if (!refferals.isEmpty()) {
78
 
79
			model.addAttribute("refferals", refferals);
80
			model.addAttribute("start", offset + 1);
81
			model.addAttribute("rStatus", "pending");
82
 
83
			model.addAttribute("size", size);
84
			model.addAttribute("url", "/getPaginatedRefferalsRequest");
85
 
86
			if (refferals.size() < limit) {
87
				model.addAttribute("end", offset + refferals.size());
88
			} else {
89
				model.addAttribute("end", offset + limit);
90
			}
91
 
92
		} else {
93
 
94
			model.addAttribute("refferals", refferals);
95
			model.addAttribute("size", size);
96
 
97
		}
98
 
99
		return "refferal";
100
	}
101
 
102
	@RequestMapping(value = "/getPaginatedRefferalsRequest", method = RequestMethod.GET)
103
	public String getPaginatedRefferalsRequest(HttpServletRequest request,
104
			@RequestParam(name = "offset", defaultValue = "0") int offset,
105
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
106
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
107
		List<Refferal> refferals = null;
108
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.pending);
109
		LOGGER.info("refferals" + refferals);
110
		if (!refferals.isEmpty()) {
111
 
112
			model.addAttribute("refferals", refferals);
113
			model.addAttribute("rStatus", "pending");
114
			model.addAttribute("url", "/getPaginatedRefferalsRequest");
115
 
116
		} else {
117
			model.addAttribute("refferals", refferals);
118
 
119
		}
120
 
121
		return "refferal-paginated";
122
	}
123
 
124
	@RequestMapping(value = "/approveRefferal", method = RequestMethod.PUT)
125
	public String approveRefferal(HttpServletRequest request,
126
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, Model model) throws Exception {
127
 
128
		Refferal refferal = refferalRepository.selectById(refferalId);
129
 
130
		if (refferal.getStatus().equals(RefferalStatus.pending)) {
131
			refferal.setStatus(RefferalStatus.approved);
132
			refferal.setUpdatedTimestamp(LocalDateTime.now());
133
			refferal.setApprovedTimestamp(LocalDateTime.now());
134
			refferalRepository.persist(refferal);
135
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
136
 
137
		} else {
138
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
139
 
140
		}
141
 
142
		return "response";
143
	}
144
 
145
	@RequestMapping(value = "/rejectRefferal", method = RequestMethod.PUT)
146
	public String rejectRefferal(HttpServletRequest request,
147
			@RequestParam(name = "refferalId", defaultValue = "0") int refferalId, Model model) throws Exception {
148
 
149
		Refferal refferal = refferalRepository.selectById(refferalId);
150
 
151
		if (refferal.getStatus().equals(RefferalStatus.pending)) {
152
			refferal.setStatus(RefferalStatus.rejected);
153
			refferal.setUpdatedTimestamp(LocalDateTime.now());
154
			refferalRepository.persist(refferal);
155
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
156
 
157
		} else {
158
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
159
 
160
		}
161
 
162
		return "response";
163
	}
164
 
165
	@RequestMapping(value = "/approvedRefferals", method = RequestMethod.GET)
166
	public String approvedRefferals(HttpServletRequest request, Model model) throws Exception {
167
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
168
				.collect(Collectors.toList());
169
 
170
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailerUserId(fofoIds);
171
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
172
		model.addAttribute("customRetailers", customRetailers);
173
 
174
		return "refferal-approve";
175
	}
176
 
177
	@RequestMapping(value = "/getApprovedRefferals", method = RequestMethod.GET)
178
	public String getApprovedRefferals(HttpServletRequest request, @RequestParam String refereeEmail, Model model)
179
			throws Exception {
180
		DateRangeModel drm = new DateRangeModel();
181
		drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
182
		drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
183
		List<Refferal> previousMonthapprovedRefferal = refferalRepository
184
				.selectByEmailIdAndStatusAndDateRanges(refereeEmail, RefferalStatus.approved, drm);
185
		drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
186
		drm.setEndDate(LocalDateTime.now().withDayOfMonth(16));
187
		List<Refferal> previousAndcurrentMonthapprovedRefferal = refferalRepository
188
				.selectByEmailIdAndStatusAndDateRange(refereeEmail, RefferalStatus.approved, drm);
189
		LocalDateTime currentMonthdate = LocalDateTime.now().withDayOfMonth(1);
190
		List<Refferal> preCurrMonthapproved = previousAndcurrentMonthapprovedRefferal.stream()
191
				.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
192
 
193
		long approvedRefferalCount = previousMonthapprovedRefferal.size() + preCurrMonthapproved.size();
194
		List<Refferal> approvedRefferals = new ArrayList<>(previousMonthapprovedRefferal);
195
		approvedRefferals.addAll(preCurrMonthapproved);
196
		long refferalAmount = 0;
197
		if (approvedRefferalCount <= 4) {
198
			refferalAmount = approvedRefferalCount * 5000;
199
		} else if (approvedRefferalCount >= 5 && approvedRefferalCount <= 9) {
200
			refferalAmount = approvedRefferalCount * 10000;
201
		} else if (approvedRefferalCount > 10) {
202
			refferalAmount = approvedRefferalCount * 200000;
203
		}
204
 
205
		drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
206
		drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
207
		List<Refferal> oldMonthapprovedRefferal = refferalRepository.selectByEmailIdAndStatusAndDateRanges(refereeEmail,
208
				RefferalStatus.approved, drm);
209
		drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
210
		drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
211
		List<Refferal> oldAndpreviousMonthapprovedRefferal = refferalRepository
212
				.selectByEmailIdAndStatusAndDateRange(refereeEmail, RefferalStatus.approved, drm);
213
		LocalDateTime previousMonthdate = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
214
		List<Refferal> oldPreMonthapproved = oldAndpreviousMonthapprovedRefferal.stream()
215
				.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
216
 
217
		long oldMonthapprovedRefferalCount = oldMonthapprovedRefferal.size() + oldPreMonthapproved.size();
218
		List<Refferal> oldMonthapprovedRefferals = new ArrayList<>(oldMonthapprovedRefferal);
219
		oldMonthapprovedRefferals.addAll(oldPreMonthapproved);
220
 
221
		long oldRefferalAmount = 0;
222
		if (oldMonthapprovedRefferalCount <= 4) {
223
			oldRefferalAmount = oldMonthapprovedRefferalCount * 5000;
224
		} else if (oldMonthapprovedRefferalCount >= 5 && oldMonthapprovedRefferalCount <= 9) {
225
			oldRefferalAmount = oldMonthapprovedRefferalCount * 10000;
226
		} else if (oldMonthapprovedRefferalCount > 10) {
227
			oldRefferalAmount = oldMonthapprovedRefferalCount * 200000;
228
		}
229
 
230
		model.addAttribute("oldMonth", LocalDateTime.now().minusMonths(2).getMonth());
231
		model.addAttribute("oldMonthapprovedRefferals", oldMonthapprovedRefferals);
232
		model.addAttribute("oldMonthapprovedRefferalCount", oldMonthapprovedRefferalCount);
233
		model.addAttribute("oldRefferalAmount", oldRefferalAmount);
234
		model.addAttribute("previousMonth", LocalDateTime.now().minusMonths(1).getMonth());
235
		model.addAttribute("approvedRefferals", approvedRefferals);
236
		model.addAttribute("approvedRefferalCount", approvedRefferalCount);
237
		model.addAttribute("refferalAmount", refferalAmount);
238
		return "refferal-approve-info";
239
	}
240
 
241
	@RequestMapping(value = "/addMoneyToWallet", method = RequestMethod.POST)
242
	public String addMoneyToWallet(HttpServletRequest request, @RequestParam String refereeEmail,
243
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
244
			throws Exception {
245
 
246
		User user = userRepository.selectByEmailId(refereeEmail);
247
		if (user != null) {
248
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
249
			rfm.setAmount(amount);
250
			rfm.setCount(count);
251
			rfm.setRefereeEmail(refereeEmail);
252
			rfm.setCreatedTimstamp(LocalDateTime.now());
253
			refferalMonthlyAmountRepository.persist(rfm);
254
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
255
					count + "refferal of" + month + "Month", amount);
256
 
257
			DateRangeModel drm = new DateRangeModel();
258
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(1));
259
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
260
			List<Refferal> previousMonthapprovedRefferal = refferalRepository
261
					.selectByEmailIdAndStatusAndDateRanges(refereeEmail, RefferalStatus.approved, drm);
262
			drm.setStartDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
263
			drm.setEndDate(LocalDateTime.now().withDayOfMonth(16));
264
			List<Refferal> previousAndcurrentMonthapprovedRefferal = refferalRepository
265
					.selectByEmailIdAndStatusAndDateRange(refereeEmail, RefferalStatus.approved, drm);
266
			LocalDateTime currentMonthdate = LocalDateTime.now().withDayOfMonth(1);
267
			List<Refferal> preCurrMonthapproved = previousAndcurrentMonthapprovedRefferal.stream()
268
					.filter(x -> x.getCreatedTimestamp().isBefore(currentMonthdate)).collect(Collectors.toList());
269
			List<Refferal> approvedRefferals = new ArrayList<>(previousMonthapprovedRefferal);
270
			approvedRefferals.addAll(preCurrMonthapproved);
271
 
272
			for (Refferal refferl : approvedRefferals) {
273
				refferl.setStatus(RefferalStatus.transferred);
274
				refferl.setUpdatedTimestamp(LocalDateTime.now());
275
			}
276
 
277
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
278
		} else {
279
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
280
		}
281
		return "response";
282
	}
283
 
284
	@RequestMapping(value = "/addMoneyToWalletPreviousMonth", method = RequestMethod.POST)
285
	public String addMoneyToWalletPrevious(HttpServletRequest request, @RequestParam String refereeEmail,
286
			@RequestParam int count, @RequestParam int amount, @RequestParam String month, Model model)
287
			throws Exception {
288
 
289
		User user = userRepository.selectByEmailId(refereeEmail);
290
		if (user != null) {
291
			RefferalMonthlyAmount rfm = new RefferalMonthlyAmount();
292
			rfm.setAmount(amount);
293
			rfm.setCount(count);
294
			rfm.setRefereeEmail(refereeEmail);
295
			rfm.setCreatedTimstamp(LocalDateTime.now());
296
			refferalMonthlyAmountRepository.persist(rfm);
297
			walletService.addAmountToWallet(user.getId(), rfm.getId(), WalletReferenceType.CASHBACK,
298
					count + "refferal of" + month + "Month", amount);
299
 
300
			DateRangeModel drm = new DateRangeModel();
301
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(1));
302
			drm.setEndDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
303
			List<Refferal> oldMonthapprovedRefferal = refferalRepository
304
					.selectByEmailIdAndStatusAndDateRanges(refereeEmail, RefferalStatus.approved, drm);
305
			drm.setStartDate(LocalDateTime.now().minusMonths(2).withDayOfMonth(16));
306
			drm.setEndDate(LocalDateTime.now().minusMonths(1).withDayOfMonth(16));
307
			List<Refferal> oldAndpreviousMonthapprovedRefferal = refferalRepository
308
					.selectByEmailIdAndStatusAndDateRange(refereeEmail, RefferalStatus.approved, drm);
309
			LocalDateTime previousMonthdate = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
310
			List<Refferal> oldPreMonthapproved = oldAndpreviousMonthapprovedRefferal.stream()
311
					.filter(x -> x.getCreatedTimestamp().isBefore(previousMonthdate)).collect(Collectors.toList());
312
 
313
			List<Refferal> oldMonthapprovedRefferals = new ArrayList<>(oldMonthapprovedRefferal);
314
			oldMonthapprovedRefferals.addAll(oldPreMonthapproved);
315
 
316
			for (Refferal refferl : oldMonthapprovedRefferals) {
317
				refferl.setStatus(RefferalStatus.transferred);
318
				refferl.setUpdatedTimestamp(LocalDateTime.now());
319
			}
320
 
321
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
322
		} else {
323
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
324
		}
325
		return "response";
326
	}
327
 
328
	@RequestMapping(value = "/getTransferredRefferals", method = RequestMethod.GET)
329
	public String getTransferredRefferals(HttpServletRequest request,
330
			@RequestParam(name = "offset", defaultValue = "0") int offset,
331
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
332
			throws ProfitMandiBusinessException {
333
 
334
		List<Refferal> refferals = null;
335
		long size = 0;
336
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.transferred);
337
		LOGGER.info("refferals" + refferals);
338
		size = refferalRepository.selectCountByStatus(RefferalStatus.transferred);
339
		if (!refferals.isEmpty()) {
340
 
341
			model.addAttribute("refferals", refferals);
342
			model.addAttribute("start", offset + 1);
343
			model.addAttribute("size", size);
344
			model.addAttribute("url", "/getPaginatedTransferredRefferals");
345
 
346
			if (refferals.size() < limit) {
347
				model.addAttribute("end", offset + refferals.size());
348
			} else {
349
				model.addAttribute("end", offset + limit);
350
			}
351
 
352
		} else {
353
 
354
			model.addAttribute("refferals", refferals);
355
			model.addAttribute("size", size);
356
 
357
		}
358
 
359
		return "refferal";
360
	}
361
 
362
	@RequestMapping(value = "/getPaginatedTransferredRefferals", method = RequestMethod.GET)
363
	public String getPaginatedTransferredRefferals(HttpServletRequest request,
364
			@RequestParam(name = "offset", defaultValue = "0") int offset,
365
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
366
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
367
		List<Refferal> refferals = null;
368
		refferals = refferalRepository.selectAllRefferalByStatus(offset, limit, RefferalStatus.transferred);
369
		LOGGER.info("refferals" + refferals);
370
		if (!refferals.isEmpty()) {
371
 
372
			model.addAttribute("refferals", refferals);
373
			model.addAttribute("url", "/getPaginatedTransferredRefferals");
374
 
375
		} else {
376
			model.addAttribute("refferals", refferals);
377
 
378
		}
379
 
380
		return "refferal-paginated";
381
	}
382
}