Subversion Repositories SmartDukaan

Rev

Rev 26498 | Rev 27067 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
22551 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
23985 tejbeer 3
import java.text.MessageFormat;
22551 ashik.ali 4
import java.time.LocalDateTime;
5
import java.util.ArrayList;
24511 amit.gupta 6
import java.util.Collections;
22551 ashik.ali 7
import java.util.List;
23936 tejbeer 8
import java.util.Map;
24876 tejbeer 9
import java.util.stream.Collectors;
22551 ashik.ali 10
 
23985 tejbeer 11
import javax.mail.internet.InternetAddress;
12
import javax.mail.internet.MimeMessage;
22551 ashik.ali 13
import javax.servlet.http.HttpServletRequest;
25506 amit.gupta 14
import javax.swing.SortOrder;
25250 amit.gupta 15
import javax.transaction.Transactional;
22551 ashik.ali 16
 
23985 tejbeer 17
import org.apache.logging.log4j.LogManager;
23568 govind 18
import org.apache.logging.log4j.Logger;
24876 tejbeer 19
import org.json.JSONObject;
22551 ashik.ali 20
import org.springframework.beans.factory.annotation.Autowired;
23985 tejbeer 21
import org.springframework.mail.javamail.JavaMailSender;
22
import org.springframework.mail.javamail.MimeMessageHelper;
22551 ashik.ali 23
import org.springframework.stereotype.Controller;
24
import org.springframework.ui.Model;
24089 tejbeer 25
import org.springframework.web.bind.annotation.RequestBody;
22551 ashik.ali 26
import org.springframework.web.bind.annotation.RequestMapping;
27
import org.springframework.web.bind.annotation.RequestMethod;
28
import org.springframework.web.bind.annotation.RequestParam;
29
 
30
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23936 tejbeer 31
import com.spice.profitmandi.common.model.CustomRetailer;
22551 ashik.ali 32
import com.spice.profitmandi.common.model.ProfitMandiConstants;
24089 tejbeer 33
import com.spice.profitmandi.common.model.UnsettledPaymentModel;
22551 ashik.ali 34
import com.spice.profitmandi.common.util.StringUtils;
23936 tejbeer 35
import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;
24876 tejbeer 36
import com.spice.profitmandi.dao.entity.transaction.ManualPaymentType;
24089 tejbeer 37
import com.spice.profitmandi.dao.entity.transaction.UnsettledPayment;
22551 ashik.ali 38
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
39
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
23936 tejbeer 40
import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;
24876 tejbeer 41
import com.spice.profitmandi.dao.enumuration.transaction.TransactionType;
23936 tejbeer 42
import com.spice.profitmandi.dao.repository.catalog.AddWalletRequestRepository;
24876 tejbeer 43
import com.spice.profitmandi.dao.repository.catalog.ManualPaymentRequestRepository;
24089 tejbeer 44
import com.spice.profitmandi.dao.repository.catalog.UnsettledPaymentsRepository;
24876 tejbeer 45
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
46
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
23985 tejbeer 47
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24942 tejbeer 48
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
24876 tejbeer 49
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
22551 ashik.ali 50
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
24523 amit.gupta 51
import com.spice.profitmandi.service.authentication.RoleManager;
23936 tejbeer 52
import com.spice.profitmandi.service.user.RetailerService;
22551 ashik.ali 53
import com.spice.profitmandi.service.wallet.WalletService;
54
import com.spice.profitmandi.web.model.LoginDetails;
55
import com.spice.profitmandi.web.util.CookiesProcessor;
23936 tejbeer 56
import com.spice.profitmandi.web.util.MVCResponseSender;
22551 ashik.ali 57
 
23936 tejbeer 58
import in.shop2020.model.v1.order.WalletReferenceType;
59
 
22551 ashik.ali 60
@Controller
25251 amit.gupta 61
@Transactional(rollbackOn = Throwable.class)
22551 ashik.ali 62
public class WalletController {
63
 
64
	@Autowired
22927 ashik.ali 65
	private CookiesProcessor cookiesProcessor;
23993 tejbeer 66
 
22551 ashik.ali 67
	@Autowired
22927 ashik.ali 68
	private WalletService walletService;
23993 tejbeer 69
 
22551 ashik.ali 70
	@Autowired
22927 ashik.ali 71
	private UserWalletRepository userWalletRepository;
23993 tejbeer 72
 
23936 tejbeer 73
	@Autowired
24876 tejbeer 74
	private UserWalletHistoryRepository userWalletHistoryRepository;
75
 
76
	@Autowired
23936 tejbeer 77
	private MVCResponseSender mvcResponseSender;
23993 tejbeer 78
 
23936 tejbeer 79
	@Autowired
23985 tejbeer 80
	private UserAccountRepository userAccountRepository;
81
 
82
	@Autowired
83
	JavaMailSender mailSender;
23993 tejbeer 84
 
23985 tejbeer 85
	@Autowired
24089 tejbeer 86
	private UnsettledPaymentsRepository unsettledPaymentsRepository;
87
 
88
	@Autowired
23936 tejbeer 89
	private RetailerService retailerService;
24876 tejbeer 90
 
24523 amit.gupta 91
	@Autowired
92
	private RoleManager roleManager;
23936 tejbeer 93
 
94
	@Autowired
24876 tejbeer 95
	private FofoStoreRepository fofoStoreRepository;
96
 
97
	@Autowired
98
	private ManualPaymentRequestRepository manualPaymentRequestRepository;
99
 
100
	@Autowired
23936 tejbeer 101
	AddWalletRequestRepository addWalletRequestRepository;
24876 tejbeer 102
 
103
	@Autowired
104
	private RetailerRepository retailerRepository;
25018 tejbeer 105
 
24942 tejbeer 106
	@Autowired
107
	private UserRepository userRepository;
23568 govind 108
	private static final Logger LOGGER = LogManager.getLogger(WalletController.class);
23993 tejbeer 109
 
22551 ashik.ali 110
	@RequestMapping(value = "/walletDetails", method = RequestMethod.GET)
23993 tejbeer 111
	public String dashboard(HttpServletRequest request,
112
			@RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString,
113
			@RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString,
114
			@RequestParam(name = "offset", defaultValue = "0") int offset,
115
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
116
			throws ProfitMandiBusinessException {
24876 tejbeer 117
		/*
118
		 * boolean underMaintainance = true; if(underMaintainance) { throw new
119
		 * ProfitMandiBusinessException("Wallet", "Wallet",
120
		 * "Wallet is under Maintenance"); }
121
		 */
22927 ashik.ali 122
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
24523 amit.gupta 123
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
25250 amit.gupta 124
		UserWallet userWallet = walletService.getUserWallet(fofoDetails.getFofoId());
23993 tejbeer 125
 
22551 ashik.ali 126
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
127
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
23993 tejbeer 128
 
22551 ashik.ali 129
		List<UserWalletHistory> userWalletHistories = new ArrayList<>();
23993 tejbeer 130
		try {
131
			userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(fofoDetails.getFofoId(),
132
					startDateTime, endDateTime, offset, limit);
133
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 134
			LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);
135
		}
23993 tejbeer 136
 
22551 ashik.ali 137
		long countItems = 0;
23993 tejbeer 138
		try {
22551 ashik.ali 139
			countItems = walletService.getSizeByRetailerId(fofoDetails.getFofoId(), startDateTime, endDateTime);
23993 tejbeer 140
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
141
			LOGGER.error("UserWallet not found : ", profitMandiBusinessException);
22551 ashik.ali 142
		}
143
		model.addAttribute("userWallet", userWallet);
144
		model.addAttribute("walletHistories", userWalletHistories);
145
		model.addAttribute("start", offset + 1);
23993 tejbeer 146
		model.addAttribute("size", countItems);
24523 amit.gupta 147
		model.addAttribute("isAdmin", isAdmin);
22551 ashik.ali 148
		model.addAttribute(ProfitMandiConstants.START_TIME, startTimeString);
149
		model.addAttribute(ProfitMandiConstants.END_TIME, endTimeString);
23993 tejbeer 150
		if (userWalletHistories.size() < limit) {
22551 ashik.ali 151
			model.addAttribute("end", offset + userWalletHistories.size());
23993 tejbeer 152
		} else {
22551 ashik.ali 153
			model.addAttribute("end", offset + limit);
154
		}
155
		return "wallet-details";
156
	}
23993 tejbeer 157
 
22551 ashik.ali 158
	@RequestMapping(value = "/getPaginatedWalletHistory")
23993 tejbeer 159
	public String getSaleHistoryPaginated(HttpServletRequest request,
160
			@RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString,
161
			@RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString,
162
			@RequestParam(name = "offset", defaultValue = "0") int offset,
163
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
164
			throws ProfitMandiBusinessException {
22927 ashik.ali 165
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23993 tejbeer 166
 
22551 ashik.ali 167
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
168
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
169
 
170
		List<UserWalletHistory> userWalletHistories = new ArrayList<>();
23993 tejbeer 171
		try {
172
			userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(loginDetails.getFofoId(),
173
					startDateTime, endDateTime, offset, limit);
174
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 175
			LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);
176
		}
23993 tejbeer 177
 
22551 ashik.ali 178
		model.addAttribute("walletHistories", userWalletHistories);
179
		return "wallet-history-paginated";
180
	}
23993 tejbeer 181
 
23936 tejbeer 182
	@RequestMapping(value = "/getAddWalletRequest", method = RequestMethod.GET)
183
	public String getAddwalletRequest(HttpServletRequest request,
184
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23993 tejbeer 185
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
23936 tejbeer 186
		List<AddWalletRequest> walletRequest = null;
187
		long size = 0;
23993 tejbeer 188
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.pending);
189
		LOGGER.info("walletRequest" + walletRequest);
23936 tejbeer 190
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.pending);
23993 tejbeer 191
		if (!walletRequest.isEmpty()) {
192
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
193
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 194
 
23993 tejbeer 195
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
196
			model.addAttribute("walletRequest", walletRequest);
197
			model.addAttribute("rStatus", "pending");
198
			model.addAttribute("start", offset + 1);
199
			model.addAttribute("size", size);
200
			model.addAttribute("url", "/getPaginatedWalletRequest");
201
 
202
			if (walletRequest.size() < limit) {
203
				model.addAttribute("end", offset + walletRequest.size());
204
			} else {
205
				model.addAttribute("end", offset + limit);
206
			}
207
 
23936 tejbeer 208
		} else {
23993 tejbeer 209
 
210
			model.addAttribute("walletRequest", walletRequest);
211
			model.addAttribute("size", size);
212
 
23936 tejbeer 213
		}
214
		return "add-wallet-request";
215
	}
216
 
217
	@RequestMapping(value = "/getPaginatedWalletRequest", method = RequestMethod.GET)
218
	public String getPaginatedWalletRequest(HttpServletRequest request,
219
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23993 tejbeer 220
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
221
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23936 tejbeer 222
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 223
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.pending);
23936 tejbeer 224
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 225
		if (!walletRequest.isEmpty()) {
226
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
227
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 228
 
23993 tejbeer 229
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
230
			model.addAttribute("walletRequest", walletRequest);
231
			model.addAttribute("rStatus", "pending");
232
			model.addAttribute("url", "/getPaginatedWalletRequest");
233
 
234
		} else {
235
			model.addAttribute("walletRequest", walletRequest);
236
 
237
		}
238
 
23936 tejbeer 239
		return "add-wallet-request-paginated";
240
	}
23993 tejbeer 241
 
23936 tejbeer 242
	@RequestMapping(value = "/getAddWalletApproved", method = RequestMethod.GET)
243
	public String getAddwalletRequestApproved(HttpServletRequest request,
244
			@RequestParam(name = "offset", defaultValue = "0") int offset,
245
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
246
			throws ProfitMandiBusinessException {
247
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 248
 
23936 tejbeer 249
		long size = 0;
23993 tejbeer 250
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);
23936 tejbeer 251
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.approved);
252
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 253
		if (!walletRequest.isEmpty()) {
254
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
255
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 256
 
23993 tejbeer 257
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
258
			model.addAttribute("walletRequest", walletRequest);
259
			model.addAttribute("start", offset + 1);
260
			model.addAttribute("size", size);
261
			model.addAttribute("url", "/getPaginatedWalletApproved");
262
 
263
			if (walletRequest.size() < limit) {
264
				model.addAttribute("end", offset + walletRequest.size());
265
			} else {
266
				model.addAttribute("end", offset + limit);
267
			}
23936 tejbeer 268
		} else {
23993 tejbeer 269
 
270
			model.addAttribute("walletRequest", walletRequest);
271
			model.addAttribute("size", size);
272
 
23936 tejbeer 273
		}
274
		return "add-wallet-request";
275
	}
276
 
277
	@RequestMapping(value = "/getPaginatedWalletApproved", method = RequestMethod.GET)
278
	public String getPaginatedWalletApproved(HttpServletRequest request,
279
			@RequestParam(name = "offset", defaultValue = "0") int offset,
280
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
281
			throws ProfitMandiBusinessException {
23993 tejbeer 282
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23936 tejbeer 283
		List<AddWalletRequest> walletRequest = null;
284
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);
285
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 286
		if (!walletRequest.isEmpty()) {
287
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
288
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 289
 
23993 tejbeer 290
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
291
			model.addAttribute("walletRequest", walletRequest);
292
			model.addAttribute("url", "/getPaginatedWalletApproved");
293
		} else {
294
			model.addAttribute("walletRequest", walletRequest);
295
 
296
		}
23936 tejbeer 297
		return "add-wallet-request-paginated";
298
	}
23993 tejbeer 299
 
23985 tejbeer 300
	@RequestMapping(value = "/getAddWalletRequestRejected", method = RequestMethod.GET)
301
	public String getAddwalletRequestRejected(HttpServletRequest request,
302
			@RequestParam(name = "offset", defaultValue = "0") int offset,
303
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
304
			throws ProfitMandiBusinessException {
305
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 306
 
23985 tejbeer 307
		long size = 0;
23993 tejbeer 308
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);
23985 tejbeer 309
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.rejected);
310
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 311
		if (!walletRequest.isEmpty()) {
312
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
313
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23985 tejbeer 314
 
23993 tejbeer 315
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
316
			model.addAttribute("walletRequest", walletRequest);
317
			model.addAttribute("start", offset + 1);
318
			model.addAttribute("size", size);
319
			model.addAttribute("url", "/getPaginatedWalletRequestRejected");
320
 
321
			if (walletRequest.size() < limit) {
322
				model.addAttribute("end", offset + walletRequest.size());
323
			} else {
324
				model.addAttribute("end", offset + limit);
325
			}
23985 tejbeer 326
		} else {
23993 tejbeer 327
			model.addAttribute("walletRequest", walletRequest);
328
			model.addAttribute("size", size);
23985 tejbeer 329
		}
330
 
331
		return "add-wallet-request";
332
	}
23993 tejbeer 333
 
23985 tejbeer 334
	@RequestMapping(value = "/getPaginatedWalletRequestRejected", method = RequestMethod.GET)
335
	public String getPaginatedWalletRequestRejected(HttpServletRequest request,
336
			@RequestParam(name = "offset", defaultValue = "0") int offset,
337
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
338
			throws ProfitMandiBusinessException {
23993 tejbeer 339
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23985 tejbeer 340
		List<AddWalletRequest> walletRequest = null;
341
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);
342
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 343
		if (!walletRequest.isEmpty()) {
344
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
345
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23985 tejbeer 346
 
23993 tejbeer 347
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
348
			model.addAttribute("walletRequest", walletRequest);
349
			model.addAttribute("url", "/getPaginatedWalletRequestRejected");
350
		} else {
351
			model.addAttribute("walletRequest", walletRequest);
352
 
353
		}
354
 
23985 tejbeer 355
		return "add-wallet-request-paginated";
356
	}
23993 tejbeer 357
 
23936 tejbeer 358
	@RequestMapping(value = "/addAmountToWallet", method = RequestMethod.PUT)
23993 tejbeer 359
	public String addAmountToWallet(HttpServletRequest request, @RequestParam(name = "id", defaultValue = "0") int id,
24089 tejbeer 360
			@RequestParam(name = "walletRequestid", defaultValue = "0") int walletRequestid, Model model)
361
			throws Exception {
23993 tejbeer 362
 
24089 tejbeer 363
		AddWalletRequest addWalletRequest = addWalletRequestRepository.selectById(walletRequestid);
23993 tejbeer 364
		if (addWalletRequest.getStatus().equals(AddWalletRequestStatus.pending)) {
24089 tejbeer 365
			walletService.addAmountToWallet(addWalletRequest.getRetailerId(), walletRequestid,
26498 amit.gupta 366
					WalletReferenceType.ADVANCE_AMOUNT, "ntfs/rgfs", addWalletRequest.getAmount(), addWalletRequest.getCreateTimestamp());
23993 tejbeer 367
			addWalletRequest.setStatus(AddWalletRequestStatus.approved);
368
			addWalletRequest.setUpdateTimestamp(LocalDateTime.now());
369
			addWalletRequestRepository.persist(addWalletRequest);
24089 tejbeer 370
			unsettledPaymentsRepository.deleteById(id);
23993 tejbeer 371
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
372
			CustomRetailer customRetailer = retailerService.getFofoRetailer(addWalletRequest.getRetailerId());
373
			String subject = "Request Approved for " + customRetailer.getBusinessName() + " of Rs."
374
					+ addWalletRequest.getAmount();
375
			String messageText = MessageFormat.format(
376
					"User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",
377
					new Integer(addWalletRequest.getRetailerId()), customRetailer.getBusinessName(),
378
					customRetailer.getEmail(), customRetailer.getMobileNumber(),
379
					addWalletRequest.getTransaction_reference(), new Float(addWalletRequest.getAmount()));
380
 
381
			this.sendMailWithAttachments(subject, messageText);
382
			return "response";
383
		} else {
384
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
385
			return "response";
386
		}
23936 tejbeer 387
	}
23993 tejbeer 388
 
23985 tejbeer 389
	@RequestMapping(value = "/addAmountToWalletRequestRejected", method = RequestMethod.PUT)
23993 tejbeer 390
	public String addAmountToWalletRequestRejected(HttpServletRequest request,
391
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
392
 
393
		AddWalletRequest addWalletRequest = addWalletRequestRepository.selectById(id);
394
		if (addWalletRequest.getStatus().equals(AddWalletRequestStatus.pending)) {
395
			addWalletRequest.setStatus(AddWalletRequestStatus.rejected);
396
			addWalletRequest.setUpdateTimestamp(LocalDateTime.now());
397
			addWalletRequestRepository.persist(addWalletRequest);
398
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
399
			CustomRetailer customRetailer = retailerService.getFofoRetailer(addWalletRequest.getRetailerId());
400
			String subject = "Request Rejected for " + customRetailer.getBusinessName() + " of Rs."
401
					+ addWalletRequest.getAmount();
402
			String messageText = MessageFormat.format(
403
					"User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",
404
					new Integer(addWalletRequest.getRetailerId()), customRetailer.getBusinessName(),
405
					customRetailer.getEmail(), customRetailer.getMobileNumber(),
406
					addWalletRequest.getTransaction_reference(), new Float(addWalletRequest.getAmount()));
407
 
408
			this.sendMailWithAttachments(subject, messageText);
409
			return "response";
410
		} else {
411
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
412
			return "response";
413
		}
23985 tejbeer 414
	}
23993 tejbeer 415
 
23985 tejbeer 416
	private void sendMailWithAttachments(String subject, String messageText) throws Exception {
417
		MimeMessage message = mailSender.createMimeMessage();
418
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
24089 tejbeer 419
		String[] email = { "neerajgupta2021@gmail.com", "adeel.yazdani@smartdukaan.com",
420
				"kamini.sharma@smartdukaan.com", "care@smartdukaan.com", "mohinder.mutreja@smartdukaan.com" };
23985 tejbeer 421
		helper.setSubject(subject);
422
		helper.setText(messageText);
423
		helper.setTo(email);
26041 amit.gupta 424
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smartdukaan Alerts");
23985 tejbeer 425
		helper.setFrom(senderAddress);
426
		mailSender.send(message);
427
 
428
	}
23993 tejbeer 429
 
430
	private List<Integer> getFofoIdsFromWalletRequest(List<AddWalletRequest> walletRequest) {
23936 tejbeer 431
		List<Integer> fofoIds = new ArrayList<>();
23993 tejbeer 432
		for (AddWalletRequest walletdetail : walletRequest) {
23936 tejbeer 433
			fofoIds.add(walletdetail.getRetailerId());
434
		}
435
		return fofoIds;
23993 tejbeer 436
	}
23936 tejbeer 437
 
24089 tejbeer 438
	@RequestMapping(value = "/getcreateUnsettledPayments", method = RequestMethod.GET)
439
	public String getcreateUnsettledPayment(HttpServletRequest request,
440
			@RequestParam(name = "offset", defaultValue = "0") int offset,
441
			@RequestParam(name = "limit", defaultValue = "15") int limit, Model model) throws Exception {
442
		List<UnsettledPayment> up = null;
443
 
444
		long size = 0;
445
		up = unsettledPaymentsRepository.selectAllById(offset, limit);
446
 
447
		size = unsettledPaymentsRepository.selectAllCount();
448
		if (!up.isEmpty()) {
449
			model.addAttribute("unsettledPayment", up);
450
			model.addAttribute("start", offset + 1);
451
			model.addAttribute("size", size);
452
			model.addAttribute("url", "/getPaginatedUnsettledPayments");
453
 
454
			if (up.size() < limit) {
455
				model.addAttribute("end", offset + up.size());
456
			} else {
457
				model.addAttribute("end", offset + limit);
458
			}
459
		} else {
460
			model.addAttribute("unsettledPayment", up);
461
			model.addAttribute("size", size);
462
		}
463
 
464
		LOGGER.info("unsettledPaymentList" + up);
465
		return "unsettled-payments";
466
	}
467
 
468
	@RequestMapping(value = "/getUnsettledPaymentsByAmount", method = RequestMethod.GET)
469
	public String getUnsettledPaymentByAmount(HttpServletRequest request,
470
			@RequestParam(name = "amount", defaultValue = "0") float amount,
471
			@RequestParam(name = "offset", defaultValue = "0") int offset,
472
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
473
		List<UnsettledPayment> up = null;
474
 
475
		long size = 0;
476
		up = unsettledPaymentsRepository.selectAllByAmount(amount, offset, limit);
477
 
478
		size = unsettledPaymentsRepository.selectAllCount();
479
		if (!up.isEmpty()) {
480
			model.addAttribute("unsettledPayment", up);
481
			model.addAttribute("start", offset + 1);
482
			model.addAttribute("size", size);
483
			model.addAttribute("url", "/getPaginatedUnsettledPayments");
484
 
485
			if (up.size() < limit) {
486
				model.addAttribute("end", offset + up.size());
487
			} else {
488
				model.addAttribute("end", offset + limit);
489
			}
490
			return "unsettle-payment-modal";
491
		} else {
492
			model.addAttribute("unsettledPayment", up);
493
			model.addAttribute("size", size);
494
		}
495
 
496
		return "unsettle-payment-modal";
497
	}
498
 
499
	@RequestMapping(value = "/createUnsettledPaymentsEntries", method = RequestMethod.POST)
500
	public String createUnsettledPaymentsEntries(HttpServletRequest request,
501
			@RequestBody UnsettledPaymentModel unsettledPaymentModel, Model model) throws Exception {
502
 
503
		UnsettledPayment up = new UnsettledPayment();
504
		up.setTransaction_reference(unsettledPaymentModel.getTransactionReference());
505
		up.setAmount(unsettledPaymentModel.getAmount());
506
		up.setDescription(unsettledPaymentModel.getDescription());
507
		up.setReference_date(unsettledPaymentModel.getReferenceDate());
508
		LOGGER.info("uppaynments" + up);
509
		unsettledPaymentsRepository.persist(up);
510
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
511
		return "response";
512
	}
513
 
514
	@RequestMapping(value = "/removeUnsettledPaymentsEntries", method = RequestMethod.DELETE)
515
	public String removeUnsettledPaymentsEntries(HttpServletRequest request,
516
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
517
 
518
		unsettledPaymentsRepository.deleteById(id);
519
 
520
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
521
		return "response";
522
	}
523
 
24509 amit.gupta 524
	@RequestMapping(value = "/wallet/statement", method = RequestMethod.GET)
24523 amit.gupta 525
	public String getWalletStatement(HttpServletRequest request, @RequestParam LocalDateTime startDate,
24876 tejbeer 526
			@RequestParam LocalDateTime endDate, Model model, @RequestParam(defaultValue = "0") int fofoId)
527
			throws Exception {
24523 amit.gupta 528
		boolean isAdmin = roleManager.isAdmin(cookiesProcessor.getCookiesObject(request).getRoleIds());
24876 tejbeer 529
		if (fofoId > 0) {
530
			if (!isAdmin) {
24523 amit.gupta 531
				throw new ProfitMandiBusinessException("Unauthorised access", "PartnerId", "Permission Denied");
532
			}
533
		} else {
534
			fofoId = cookiesProcessor.getCookiesObject(request).getFofoId();
535
		}
536
		float openingBalance = walletService.getOpeningTill(fofoId, startDate);
537
		float closingBalance = walletService.getOpeningTill(fofoId, endDate);
24876 tejbeer 538
		List<UserWalletHistory> uwhList = walletService.getPaginatedUserWalletHistoryByRetailerId(fofoId, startDate,
539
				endDate, 0, 0);
24511 amit.gupta 540
		Collections.reverse(uwhList);
24509 amit.gupta 541
		model.addAttribute("opening", openingBalance);
542
		model.addAttribute("closing", closingBalance);
543
		model.addAttribute("history", uwhList);
544
		model.addAttribute("startDate", startDate);
545
		model.addAttribute("endDate", endDate);
546
		return "walletStatement";
547
	}
548
 
24876 tejbeer 549
	@RequestMapping(value = "/manualPayment", method = RequestMethod.GET)
550
	public String ManualPayment(HttpServletRequest request, Model model) throws Exception {
551
 
552
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
553
				.collect(Collectors.toList());
554
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
555
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
556
		model.addAttribute("customRetailers", customRetailers);
557
 
558
		model.addAttribute("referenceTypes", WalletReferenceType.referenceType);
559
		model.addAttribute("transactionTypes", TransactionType.values());
560
		return "wallet-edit";
561
 
562
	}
563
 
564
	@RequestMapping(value = "/getWalletHistory", method = RequestMethod.GET)
565
	public String getWalletHistory(HttpServletRequest request,
566
			@RequestParam(name = "reference", defaultValue = "0") int reference,
567
			@RequestParam WalletReferenceType referenceType, Model model) throws Exception {
568
 
569
		LOGGER.info("type" + referenceType);
570
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
571
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
25018 tejbeer 572
 
573
		if (userWalletHistory.isEmpty()) {
574
			throw new ProfitMandiBusinessException("RefrenceId", reference, "Reference Id not found");
575
		}
576
 
577
		UserWallet userWallet = userWalletRepository.selectById(userWalletHistory.get(0).getWalletId());
578
 
579
		LOGGER.info("userWallet" + userWallet);
580
		CustomRetailer customretailer = retailerService.getFofoRetailer(userWallet.getUserId());
581
 
582
		model.addAttribute("userWallet", userWallet);
583
		model.addAttribute("customretailer", customretailer);
584
 
24876 tejbeer 585
		model.addAttribute("wallethistory", userWalletHistory);
586
 
587
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
588
		return "wallet-history";
589
 
590
	}
591
 
24905 amit.gupta 592
	@RequestMapping(value = "/getWalletHistoryByPartner", method = RequestMethod.GET)
25018 tejbeer 593
	public String getWalletHistoryByPartner(HttpServletRequest request, int fofoId,
594
			@RequestParam(name = "referenceType", required = false) WalletReferenceType referenceType,
595
			@RequestParam(name = "offset", required = false, defaultValue = "0") int offset,
596
			@RequestParam(name = "limit", required = false, defaultValue = "30") int limit, Model model)
597
			throws Exception {
598
 
24905 amit.gupta 599
		UserWallet userWallet = userWalletRepository.selectByRetailerId(fofoId);
26485 amit.gupta 600
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository.selectPaginatedByWalletIdReferenceType(
601
				userWallet.getId(), referenceType, SortOrder.DESCENDING, offset, limit);
25018 tejbeer 602
 
603
		CustomRetailer customretailer = retailerService.getFofoRetailer(fofoId);
604
 
605
		model.addAttribute("userWallet", userWallet);
606
		model.addAttribute("customretailer", customretailer);
24905 amit.gupta 607
		model.addAttribute("wallethistory", userWalletHistory);
25018 tejbeer 608
 
24905 amit.gupta 609
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
610
		return "wallet-history";
25018 tejbeer 611
 
24905 amit.gupta 612
	}
613
 
24876 tejbeer 614
	@RequestMapping(value = "/getPartnerName", method = RequestMethod.GET)
615
	public String getPartnerName(HttpServletRequest request,
616
			@RequestParam(name = "reference", defaultValue = "0") int reference,
617
			@RequestParam WalletReferenceType referenceType, Model model) throws Exception {
618
 
619
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
620
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
24905 amit.gupta 621
		if (userWalletHistory.isEmpty()) {
24876 tejbeer 622
			throw new ProfitMandiBusinessException("RefrenceId", reference, "Reference Id not found");
623
		}
624
		UserWallet userWallet = userWalletRepository.selectById(userWalletHistory.get(0).getWalletId());
24905 amit.gupta 625
 
24876 tejbeer 626
		CustomRetailer retailer = retailerService.getFofoRetailer(userWallet.getUserId());
24905 amit.gupta 627
 
24876 tejbeer 628
		model.addAttribute("response", mvcResponseSender.createResponseString(retailer));
24905 amit.gupta 629
 
24876 tejbeer 630
		return "response";
631
 
632
	}
633
 
634
	@RequestMapping(value = "/walletUpdate", method = RequestMethod.POST)
635
	public String walletUpdate(HttpServletRequest request,
636
			@RequestParam(name = "reference", defaultValue = "0") int reference,
26517 amit.gupta 637
			@RequestParam int referenceTypeValue, @RequestParam TransactionType transactiontype,
26485 amit.gupta 638
			@RequestParam int amount, @RequestParam String description, @RequestParam int retailerId, Model model,
639
			@RequestParam LocalDateTime businessTimestamp)
24876 tejbeer 640
			throws Exception {
26517 amit.gupta 641
		WalletReferenceType referenceType = WalletReferenceType.findByValue(referenceTypeValue);
26485 amit.gupta 642
		if (reference==0 && referenceType.getValue()>= WalletReferenceType.INCENTIVES.getValue()) {
25018 tejbeer 643
			LOGGER.error("referenceType: " + referenceType);
24876 tejbeer 644
			ManualPaymentType paymentType = manualPaymentRequestRepository.selectByReferenceType(referenceType);
645
 
646
			if (paymentType == null) {
647
				paymentType = new ManualPaymentType();
648
			}
649
			paymentType.setReferenceType(referenceType);
26485 amit.gupta 650
			paymentType.setCounter(paymentType.getCounter() + 1);
24876 tejbeer 651
			manualPaymentRequestRepository.persist(paymentType);
26485 amit.gupta 652
			reference = paymentType.getCounter();
653
 
654
		} else if(reference==0){
655
			throw new ProfitMandiBusinessException("RefrenceId", reference,
656
					"System specific reference type cant be used manually");
657
		}
658
 
659
		List<UserWalletHistory> userWalletHistoryList = userWalletHistoryRepository
660
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
661
		UserWallet userWallet = userWalletRepository.selectByRetailerId(retailerId);
662
		int walletId = userWallet.getId();
663
		int walletAmount = walletService.getWalletAmount(retailerId);
24876 tejbeer 664
 
26485 amit.gupta 665
		int returnReference = 0;
666
		UserWalletHistory newUserWalletHistory = new UserWalletHistory();
24876 tejbeer 667
 
26485 amit.gupta 668
		if (!userWalletHistoryList.isEmpty()) {
669
			long validRetailerEntries = userWalletHistoryList.stream()
670
					.filter(x-> x.getWalletId() == walletId)
671
					.count();
672
			if(validRetailerEntries == 0) {
673
				throw new ProfitMandiBusinessException("RefrenceId", reference,
674
						"Reference Id assign to Other  partner");
24876 tejbeer 675
			}
24942 tejbeer 676
		}
26485 amit.gupta 677
 
678
		if (TransactionType.DEBIT.equals(transactiontype)) {
679
			amount = -amount;
680
		}
681
 
682
		userWallet.setAmount(walletAmount + amount);
683
		newUserWalletHistory.setAmount(amount);
684
		newUserWalletHistory.setBusinessTimestamp(businessTimestamp);
685
		newUserWalletHistory.setDescription(description);
686
		newUserWalletHistory.setReference(reference);
687
		newUserWalletHistory.setWalletId(userWallet.getId());
688
		newUserWalletHistory.setReferenceType(referenceType);
689
		newUserWalletHistory.setTimestamp(LocalDateTime.now());
690
		userWalletHistoryRepository.persist(newUserWalletHistory);
691
 
26488 amit.gupta 692
		model.addAttribute("response", mvcResponseSender.createResponseString(reference));
24876 tejbeer 693
		return "response";
694
 
695
	}
25018 tejbeer 696
 
24951 tejbeer 697
	@RequestMapping(value = "/addMoney", method = RequestMethod.POST)
25018 tejbeer 698
	public String addMoney(HttpServletRequest request, @RequestParam float amount,
699
			@RequestParam String transactionReference, @RequestParam LocalDateTime referenceTime,
700
			@RequestParam String bankName, @RequestParam int fofoId, Model model) throws Exception {
701
 
24951 tejbeer 702
		AddWalletRequest addWalletRequest = new AddWalletRequest();
703
		addWalletRequest.setRetailerId(fofoId);
704
		addWalletRequest.setAmount(amount);
705
		addWalletRequest.setTransaction_reference(transactionReference);
706
		addWalletRequest.setCreateTimestamp(LocalDateTime.now());
707
		addWalletRequest.setBank_name(bankName);
708
		addWalletRequest.setReference_date(referenceTime.toLocalDate());
709
		addWalletRequest.setStatus(AddWalletRequestStatus.pending);
25018 tejbeer 710
 
711
		LOGGER.info("info" + addWalletRequest);
712
 
24951 tejbeer 713
		addWalletRequestRepository.persist(addWalletRequest);
714
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
715
		return "response";
716
	}
22551 ashik.ali 717
}