Subversion Repositories SmartDukaan

Rev

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