Subversion Repositories SmartDukaan

Rev

Rev 28538 | Rev 28555 | 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
 
28515 amit.gupta 3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.InputStream;
23985 tejbeer 6
import java.text.MessageFormat;
22551 ashik.ali 7
import java.time.LocalDateTime;
28515 amit.gupta 8
import java.time.ZoneId;
22551 ashik.ali 9
import java.util.ArrayList;
24511 amit.gupta 10
import java.util.Collections;
28515 amit.gupta 11
import java.util.Date;
12
import java.util.HashMap;
22551 ashik.ali 13
import java.util.List;
23936 tejbeer 14
import java.util.Map;
24876 tejbeer 15
import java.util.stream.Collectors;
22551 ashik.ali 16
 
23985 tejbeer 17
import javax.mail.internet.InternetAddress;
18
import javax.mail.internet.MimeMessage;
22551 ashik.ali 19
import javax.servlet.http.HttpServletRequest;
25506 amit.gupta 20
import javax.swing.SortOrder;
25250 amit.gupta 21
import javax.transaction.Transactional;
22551 ashik.ali 22
 
23985 tejbeer 23
import org.apache.logging.log4j.LogManager;
23568 govind 24
import org.apache.logging.log4j.Logger;
28515 amit.gupta 25
import org.apache.poi.ss.usermodel.Cell;
26
import org.apache.poi.ss.usermodel.CellStyle;
27
import org.apache.poi.ss.usermodel.CreationHelper;
28
import org.apache.poi.ss.usermodel.Sheet;
29
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
24876 tejbeer 30
import org.json.JSONObject;
22551 ashik.ali 31
import org.springframework.beans.factory.annotation.Autowired;
28515 amit.gupta 32
import org.springframework.core.io.InputStreamResource;
33
import org.springframework.http.HttpHeaders;
34
import org.springframework.http.HttpStatus;
35
import org.springframework.http.ResponseEntity;
23985 tejbeer 36
import org.springframework.mail.javamail.JavaMailSender;
37
import org.springframework.mail.javamail.MimeMessageHelper;
22551 ashik.ali 38
import org.springframework.stereotype.Controller;
39
import org.springframework.ui.Model;
27067 amit.gupta 40
import org.springframework.web.bind.annotation.PostMapping;
24089 tejbeer 41
import org.springframework.web.bind.annotation.RequestBody;
22551 ashik.ali 42
import org.springframework.web.bind.annotation.RequestMapping;
43
import org.springframework.web.bind.annotation.RequestMethod;
44
import org.springframework.web.bind.annotation.RequestParam;
27067 amit.gupta 45
import org.springframework.web.bind.annotation.RequestPart;
46
import org.springframework.web.multipart.MultipartFile;
22551 ashik.ali 47
 
48
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23936 tejbeer 49
import com.spice.profitmandi.common.model.CustomRetailer;
22551 ashik.ali 50
import com.spice.profitmandi.common.model.ProfitMandiConstants;
24089 tejbeer 51
import com.spice.profitmandi.common.model.UnsettledPaymentModel;
27067 amit.gupta 52
import com.spice.profitmandi.common.util.ExcelUtils;
22551 ashik.ali 53
import com.spice.profitmandi.common.util.StringUtils;
27067 amit.gupta 54
import com.spice.profitmandi.common.util.WalletHistoryModel;
23936 tejbeer 55
import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;
24876 tejbeer 56
import com.spice.profitmandi.dao.entity.transaction.ManualPaymentType;
24089 tejbeer 57
import com.spice.profitmandi.dao.entity.transaction.UnsettledPayment;
22551 ashik.ali 58
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
59
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
23936 tejbeer 60
import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;
24876 tejbeer 61
import com.spice.profitmandi.dao.enumuration.transaction.TransactionType;
28515 amit.gupta 62
import com.spice.profitmandi.dao.model.AccountStatementModel;
23936 tejbeer 63
import com.spice.profitmandi.dao.repository.catalog.AddWalletRequestRepository;
24876 tejbeer 64
import com.spice.profitmandi.dao.repository.catalog.ManualPaymentRequestRepository;
24089 tejbeer 65
import com.spice.profitmandi.dao.repository.catalog.UnsettledPaymentsRepository;
24876 tejbeer 66
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
67
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
23985 tejbeer 68
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24942 tejbeer 69
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
28515 amit.gupta 70
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
71
import com.spice.profitmandi.dao.repository.transaction.StatementDetailModel;
24876 tejbeer 72
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
22551 ashik.ali 73
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
24523 amit.gupta 74
import com.spice.profitmandi.service.authentication.RoleManager;
23936 tejbeer 75
import com.spice.profitmandi.service.user.RetailerService;
22551 ashik.ali 76
import com.spice.profitmandi.service.wallet.WalletService;
77
import com.spice.profitmandi.web.model.LoginDetails;
78
import com.spice.profitmandi.web.util.CookiesProcessor;
23936 tejbeer 79
import com.spice.profitmandi.web.util.MVCResponseSender;
22551 ashik.ali 80
 
23936 tejbeer 81
import in.shop2020.model.v1.order.WalletReferenceType;
82
 
22551 ashik.ali 83
@Controller
25251 amit.gupta 84
@Transactional(rollbackOn = Throwable.class)
22551 ashik.ali 85
public class WalletController {
86
 
28515 amit.gupta 87
	private static final int IDX_PERIOD = 1;
88
	private static final int OPENING_BALANCE = 2;
89
	private static final int ACTIVATION_SCHEME = 4;
90
	private static final int ADVANCE_AMOUNT = 5;
91
	private static final int AUTOMATED_ADVANCE = 6;
92
	private static final int BRAND_PAYOUT = 7;
93
	private static final int INVESTMENT_PAYOUT = 8;
94
	private static final int OTHERS = 9;
95
	private static final int PREBOOKING_ORDER = 10;
96
	private static final int PRICE_DROP = 11;
97
	private static final int PURCHASE = 12;
98
	private static final int PURCHASE_BILLED = 13;
99
	private static final int PURCHASE_PENDING_BILLING = 14;
100
	private static final int PURCHASE_CANCELLED = 15;
101
	private static final int RECHARGE = 16;
102
	private static final int REFUND = 17;
103
	private static final int SCHEME_IN = 18;
104
	private static final int SCHEME_OUT = 19;
105
	private static final Map<WalletReferenceType, Integer> walletReferenceMap = new HashMap<>();
106
	static {
107
		walletReferenceMap.put(WalletReferenceType.ACTIVATION_SCHEME, ACTIVATION_SCHEME);
108
		walletReferenceMap.put(WalletReferenceType.ADVANCE_AMOUNT, ADVANCE_AMOUNT);
109
		walletReferenceMap.put(WalletReferenceType.AUTOMATED_ADVANCE, AUTOMATED_ADVANCE);
110
		walletReferenceMap.put(WalletReferenceType.BRAND_PAYOUT, BRAND_PAYOUT);
111
		walletReferenceMap.put(WalletReferenceType.INVESTMENT_PAYOUT, INVESTMENT_PAYOUT);
112
		walletReferenceMap.put(WalletReferenceType.OTHERS, OTHERS);
113
		walletReferenceMap.put(WalletReferenceType.PREBOOKING_ORDER, PREBOOKING_ORDER);
114
		walletReferenceMap.put(WalletReferenceType.PRICE_DROP, PRICE_DROP);
115
		walletReferenceMap.put(WalletReferenceType.PURCHASE, PURCHASE);
116
		walletReferenceMap.put(WalletReferenceType.RECHARGE, RECHARGE);
117
		walletReferenceMap.put(WalletReferenceType.REFUND, REFUND);
118
		walletReferenceMap.put(WalletReferenceType.SCHEME_IN, SCHEME_IN);
119
		walletReferenceMap.put(WalletReferenceType.SCHEME_OUT, SCHEME_OUT);
120
 
121
	}
122
	private static final int GRAND_TOTAL = 20;
123
 
124
	private static final int CLOSING_BALANCE = 22;
125
	private static final int PENDING_GRN = 23;
126
	private static final int ACTIVATED_IMEIS = 24;
127
 
22551 ashik.ali 128
	@Autowired
22927 ashik.ali 129
	private CookiesProcessor cookiesProcessor;
23993 tejbeer 130
 
22551 ashik.ali 131
	@Autowired
22927 ashik.ali 132
	private WalletService walletService;
23993 tejbeer 133
 
22551 ashik.ali 134
	@Autowired
22927 ashik.ali 135
	private UserWalletRepository userWalletRepository;
23993 tejbeer 136
 
23936 tejbeer 137
	@Autowired
24876 tejbeer 138
	private UserWalletHistoryRepository userWalletHistoryRepository;
139
 
140
	@Autowired
23936 tejbeer 141
	private MVCResponseSender mvcResponseSender;
23993 tejbeer 142
 
23936 tejbeer 143
	@Autowired
23985 tejbeer 144
	private UserAccountRepository userAccountRepository;
145
 
146
	@Autowired
28515 amit.gupta 147
	private OrderRepository orderRepository;
148
 
149
	@Autowired
23985 tejbeer 150
	JavaMailSender mailSender;
23993 tejbeer 151
 
23985 tejbeer 152
	@Autowired
24089 tejbeer 153
	private UnsettledPaymentsRepository unsettledPaymentsRepository;
154
 
155
	@Autowired
23936 tejbeer 156
	private RetailerService retailerService;
24876 tejbeer 157
 
24523 amit.gupta 158
	@Autowired
159
	private RoleManager roleManager;
23936 tejbeer 160
 
161
	@Autowired
24876 tejbeer 162
	private FofoStoreRepository fofoStoreRepository;
163
 
164
	@Autowired
165
	private ManualPaymentRequestRepository manualPaymentRequestRepository;
166
 
167
	@Autowired
23936 tejbeer 168
	AddWalletRequestRepository addWalletRequestRepository;
24876 tejbeer 169
 
170
	@Autowired
171
	private RetailerRepository retailerRepository;
25018 tejbeer 172
 
24942 tejbeer 173
	@Autowired
174
	private UserRepository userRepository;
23568 govind 175
	private static final Logger LOGGER = LogManager.getLogger(WalletController.class);
28515 amit.gupta 176
 
27067 amit.gupta 177
	@PostMapping(value = "/wallet/upload")
27345 amit.gupta 178
	public String uploadWalletBulk(HttpServletRequest request, @RequestPart("file") MultipartFile file, Model model)
27067 amit.gupta 179
			throws Exception {
180
		List<WalletHistoryModel> walletHistoryModelList = ExcelUtils.parseWalletBulkCredit(file.getInputStream());
28515 amit.gupta 181
		for (WalletHistoryModel walletHistoryModel : walletHistoryModelList) {
182
			if (walletHistoryModel.getReference() == 0) {
183
				ManualPaymentType paymentType = manualPaymentRequestRepository
184
						.selectByReferenceType(walletHistoryModel.getWalletReferenceType());
27344 amit.gupta 185
				if (paymentType == null) {
186
					paymentType = new ManualPaymentType();
187
					paymentType.setReferenceType(walletHistoryModel.getWalletReferenceType());
188
				}
189
				paymentType.setCounter(paymentType.getCounter() + 1);
190
				manualPaymentRequestRepository.persist(paymentType);
191
				int reference = paymentType.getCounter();
28515 amit.gupta 192
				walletService.addAmountToWallet(walletHistoryModel.getFofoId(), reference,
193
						walletHistoryModel.getWalletReferenceType(), walletHistoryModel.getDescription(),
194
						(float) walletHistoryModel.getAmount(), walletHistoryModel.getBusinessDate());
195
			} else {
196
				walletService.addAmountToWallet(walletHistoryModel.getFofoId(), walletHistoryModel.getReference(),
197
						walletHistoryModel.getWalletReferenceType(), walletHistoryModel.getDescription(),
198
						(float) walletHistoryModel.getAmount(), walletHistoryModel.getBusinessDate());
27067 amit.gupta 199
			}
200
		}
23993 tejbeer 201
 
27067 amit.gupta 202
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
203
		return "response";
204
	}
205
 
22551 ashik.ali 206
	@RequestMapping(value = "/walletDetails", method = RequestMethod.GET)
23993 tejbeer 207
	public String dashboard(HttpServletRequest request,
208
			@RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString,
209
			@RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString,
210
			@RequestParam(name = "offset", defaultValue = "0") int offset,
211
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
212
			throws ProfitMandiBusinessException {
24876 tejbeer 213
		/*
214
		 * boolean underMaintainance = true; if(underMaintainance) { throw new
215
		 * ProfitMandiBusinessException("Wallet", "Wallet",
216
		 * "Wallet is under Maintenance"); }
217
		 */
22927 ashik.ali 218
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
24523 amit.gupta 219
		boolean isAdmin = roleManager.isAdmin(fofoDetails.getRoleIds());
25250 amit.gupta 220
		UserWallet userWallet = walletService.getUserWallet(fofoDetails.getFofoId());
23993 tejbeer 221
 
22551 ashik.ali 222
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
223
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
23993 tejbeer 224
 
22551 ashik.ali 225
		List<UserWalletHistory> userWalletHistories = new ArrayList<>();
23993 tejbeer 226
		try {
227
			userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(fofoDetails.getFofoId(),
228
					startDateTime, endDateTime, offset, limit);
229
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 230
			LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);
231
		}
23993 tejbeer 232
 
22551 ashik.ali 233
		long countItems = 0;
23993 tejbeer 234
		try {
22551 ashik.ali 235
			countItems = walletService.getSizeByRetailerId(fofoDetails.getFofoId(), startDateTime, endDateTime);
23993 tejbeer 236
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
237
			LOGGER.error("UserWallet not found : ", profitMandiBusinessException);
22551 ashik.ali 238
		}
239
		model.addAttribute("userWallet", userWallet);
240
		model.addAttribute("walletHistories", userWalletHistories);
241
		model.addAttribute("start", offset + 1);
23993 tejbeer 242
		model.addAttribute("size", countItems);
24523 amit.gupta 243
		model.addAttribute("isAdmin", isAdmin);
22551 ashik.ali 244
		model.addAttribute(ProfitMandiConstants.START_TIME, startTimeString);
245
		model.addAttribute(ProfitMandiConstants.END_TIME, endTimeString);
23993 tejbeer 246
		if (userWalletHistories.size() < limit) {
22551 ashik.ali 247
			model.addAttribute("end", offset + userWalletHistories.size());
23993 tejbeer 248
		} else {
22551 ashik.ali 249
			model.addAttribute("end", offset + limit);
250
		}
251
		return "wallet-details";
252
	}
23993 tejbeer 253
 
22551 ashik.ali 254
	@RequestMapping(value = "/getPaginatedWalletHistory")
23993 tejbeer 255
	public String getSaleHistoryPaginated(HttpServletRequest request,
256
			@RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString,
257
			@RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString,
258
			@RequestParam(name = "offset", defaultValue = "0") int offset,
259
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
260
			throws ProfitMandiBusinessException {
22927 ashik.ali 261
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23993 tejbeer 262
 
22551 ashik.ali 263
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
264
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
265
 
266
		List<UserWalletHistory> userWalletHistories = new ArrayList<>();
23993 tejbeer 267
		try {
268
			userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(loginDetails.getFofoId(),
269
					startDateTime, endDateTime, offset, limit);
270
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 271
			LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);
272
		}
23993 tejbeer 273
 
22551 ashik.ali 274
		model.addAttribute("walletHistories", userWalletHistories);
275
		return "wallet-history-paginated";
276
	}
23993 tejbeer 277
 
23936 tejbeer 278
	@RequestMapping(value = "/getAddWalletRequest", method = RequestMethod.GET)
279
	public String getAddwalletRequest(HttpServletRequest request,
280
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23993 tejbeer 281
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
23936 tejbeer 282
		List<AddWalletRequest> walletRequest = null;
283
		long size = 0;
23993 tejbeer 284
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.pending);
285
		LOGGER.info("walletRequest" + walletRequest);
23936 tejbeer 286
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.pending);
23993 tejbeer 287
		if (!walletRequest.isEmpty()) {
288
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
289
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 290
 
23993 tejbeer 291
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
292
			model.addAttribute("walletRequest", walletRequest);
293
			model.addAttribute("rStatus", "pending");
294
			model.addAttribute("start", offset + 1);
295
			model.addAttribute("size", size);
296
			model.addAttribute("url", "/getPaginatedWalletRequest");
297
 
298
			if (walletRequest.size() < limit) {
299
				model.addAttribute("end", offset + walletRequest.size());
300
			} else {
301
				model.addAttribute("end", offset + limit);
302
			}
303
 
23936 tejbeer 304
		} else {
23993 tejbeer 305
 
306
			model.addAttribute("walletRequest", walletRequest);
307
			model.addAttribute("size", size);
308
 
23936 tejbeer 309
		}
310
		return "add-wallet-request";
311
	}
312
 
313
	@RequestMapping(value = "/getPaginatedWalletRequest", method = RequestMethod.GET)
314
	public String getPaginatedWalletRequest(HttpServletRequest request,
315
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23993 tejbeer 316
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
317
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23936 tejbeer 318
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 319
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.pending);
23936 tejbeer 320
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 321
		if (!walletRequest.isEmpty()) {
322
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
323
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 324
 
23993 tejbeer 325
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
326
			model.addAttribute("walletRequest", walletRequest);
327
			model.addAttribute("rStatus", "pending");
328
			model.addAttribute("url", "/getPaginatedWalletRequest");
329
 
330
		} else {
331
			model.addAttribute("walletRequest", walletRequest);
332
 
333
		}
334
 
23936 tejbeer 335
		return "add-wallet-request-paginated";
336
	}
23993 tejbeer 337
 
23936 tejbeer 338
	@RequestMapping(value = "/getAddWalletApproved", method = RequestMethod.GET)
339
	public String getAddwalletRequestApproved(HttpServletRequest request,
340
			@RequestParam(name = "offset", defaultValue = "0") int offset,
341
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
342
			throws ProfitMandiBusinessException {
343
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 344
 
23936 tejbeer 345
		long size = 0;
23993 tejbeer 346
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);
23936 tejbeer 347
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.approved);
348
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 349
		if (!walletRequest.isEmpty()) {
350
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
351
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 352
 
23993 tejbeer 353
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
354
			model.addAttribute("walletRequest", walletRequest);
355
			model.addAttribute("start", offset + 1);
356
			model.addAttribute("size", size);
357
			model.addAttribute("url", "/getPaginatedWalletApproved");
358
 
359
			if (walletRequest.size() < limit) {
360
				model.addAttribute("end", offset + walletRequest.size());
361
			} else {
362
				model.addAttribute("end", offset + limit);
363
			}
23936 tejbeer 364
		} else {
23993 tejbeer 365
 
366
			model.addAttribute("walletRequest", walletRequest);
367
			model.addAttribute("size", size);
368
 
23936 tejbeer 369
		}
370
		return "add-wallet-request";
371
	}
372
 
373
	@RequestMapping(value = "/getPaginatedWalletApproved", method = RequestMethod.GET)
374
	public String getPaginatedWalletApproved(HttpServletRequest request,
375
			@RequestParam(name = "offset", defaultValue = "0") int offset,
376
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
377
			throws ProfitMandiBusinessException {
23993 tejbeer 378
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23936 tejbeer 379
		List<AddWalletRequest> walletRequest = null;
380
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);
381
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 382
		if (!walletRequest.isEmpty()) {
383
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
384
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 385
 
23993 tejbeer 386
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
387
			model.addAttribute("walletRequest", walletRequest);
388
			model.addAttribute("url", "/getPaginatedWalletApproved");
389
		} else {
390
			model.addAttribute("walletRequest", walletRequest);
391
 
392
		}
23936 tejbeer 393
		return "add-wallet-request-paginated";
394
	}
23993 tejbeer 395
 
23985 tejbeer 396
	@RequestMapping(value = "/getAddWalletRequestRejected", method = RequestMethod.GET)
397
	public String getAddwalletRequestRejected(HttpServletRequest request,
398
			@RequestParam(name = "offset", defaultValue = "0") int offset,
399
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
400
			throws ProfitMandiBusinessException {
401
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 402
 
23985 tejbeer 403
		long size = 0;
23993 tejbeer 404
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);
23985 tejbeer 405
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.rejected);
406
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 407
		if (!walletRequest.isEmpty()) {
408
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
409
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23985 tejbeer 410
 
23993 tejbeer 411
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
412
			model.addAttribute("walletRequest", walletRequest);
413
			model.addAttribute("start", offset + 1);
414
			model.addAttribute("size", size);
415
			model.addAttribute("url", "/getPaginatedWalletRequestRejected");
416
 
417
			if (walletRequest.size() < limit) {
418
				model.addAttribute("end", offset + walletRequest.size());
419
			} else {
420
				model.addAttribute("end", offset + limit);
421
			}
23985 tejbeer 422
		} else {
23993 tejbeer 423
			model.addAttribute("walletRequest", walletRequest);
424
			model.addAttribute("size", size);
23985 tejbeer 425
		}
426
 
427
		return "add-wallet-request";
428
	}
23993 tejbeer 429
 
23985 tejbeer 430
	@RequestMapping(value = "/getPaginatedWalletRequestRejected", method = RequestMethod.GET)
431
	public String getPaginatedWalletRequestRejected(HttpServletRequest request,
432
			@RequestParam(name = "offset", defaultValue = "0") int offset,
433
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
434
			throws ProfitMandiBusinessException {
23993 tejbeer 435
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23985 tejbeer 436
		List<AddWalletRequest> walletRequest = null;
437
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);
438
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 439
		if (!walletRequest.isEmpty()) {
440
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
441
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23985 tejbeer 442
 
23993 tejbeer 443
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
444
			model.addAttribute("walletRequest", walletRequest);
445
			model.addAttribute("url", "/getPaginatedWalletRequestRejected");
446
		} else {
447
			model.addAttribute("walletRequest", walletRequest);
448
 
449
		}
450
 
23985 tejbeer 451
		return "add-wallet-request-paginated";
452
	}
23993 tejbeer 453
 
23936 tejbeer 454
	@RequestMapping(value = "/addAmountToWallet", method = RequestMethod.PUT)
23993 tejbeer 455
	public String addAmountToWallet(HttpServletRequest request, @RequestParam(name = "id", defaultValue = "0") int id,
24089 tejbeer 456
			@RequestParam(name = "walletRequestid", defaultValue = "0") int walletRequestid, Model model)
457
			throws Exception {
23993 tejbeer 458
 
24089 tejbeer 459
		AddWalletRequest addWalletRequest = addWalletRequestRepository.selectById(walletRequestid);
23993 tejbeer 460
		if (addWalletRequest.getStatus().equals(AddWalletRequestStatus.pending)) {
24089 tejbeer 461
			walletService.addAmountToWallet(addWalletRequest.getRetailerId(), walletRequestid,
28515 amit.gupta 462
					WalletReferenceType.ADVANCE_AMOUNT, "ntfs/rgfs", addWalletRequest.getAmount(),
463
					addWalletRequest.getCreateTimestamp());
23993 tejbeer 464
			addWalletRequest.setStatus(AddWalletRequestStatus.approved);
465
			addWalletRequest.setUpdateTimestamp(LocalDateTime.now());
466
			addWalletRequestRepository.persist(addWalletRequest);
24089 tejbeer 467
			unsettledPaymentsRepository.deleteById(id);
23993 tejbeer 468
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
469
			CustomRetailer customRetailer = retailerService.getFofoRetailer(addWalletRequest.getRetailerId());
470
			String subject = "Request Approved for " + customRetailer.getBusinessName() + " of Rs."
471
					+ addWalletRequest.getAmount();
472
			String messageText = MessageFormat.format(
473
					"User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",
474
					new Integer(addWalletRequest.getRetailerId()), customRetailer.getBusinessName(),
475
					customRetailer.getEmail(), customRetailer.getMobileNumber(),
476
					addWalletRequest.getTransaction_reference(), new Float(addWalletRequest.getAmount()));
477
 
478
			this.sendMailWithAttachments(subject, messageText);
479
			return "response";
480
		} else {
481
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
482
			return "response";
483
		}
23936 tejbeer 484
	}
23993 tejbeer 485
 
23985 tejbeer 486
	@RequestMapping(value = "/addAmountToWalletRequestRejected", method = RequestMethod.PUT)
23993 tejbeer 487
	public String addAmountToWalletRequestRejected(HttpServletRequest request,
488
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
489
 
490
		AddWalletRequest addWalletRequest = addWalletRequestRepository.selectById(id);
491
		if (addWalletRequest.getStatus().equals(AddWalletRequestStatus.pending)) {
492
			addWalletRequest.setStatus(AddWalletRequestStatus.rejected);
493
			addWalletRequest.setUpdateTimestamp(LocalDateTime.now());
494
			addWalletRequestRepository.persist(addWalletRequest);
495
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
496
			CustomRetailer customRetailer = retailerService.getFofoRetailer(addWalletRequest.getRetailerId());
497
			String subject = "Request Rejected for " + customRetailer.getBusinessName() + " of Rs."
498
					+ addWalletRequest.getAmount();
499
			String messageText = MessageFormat.format(
500
					"User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",
501
					new Integer(addWalletRequest.getRetailerId()), customRetailer.getBusinessName(),
502
					customRetailer.getEmail(), customRetailer.getMobileNumber(),
503
					addWalletRequest.getTransaction_reference(), new Float(addWalletRequest.getAmount()));
504
 
505
			this.sendMailWithAttachments(subject, messageText);
506
			return "response";
507
		} else {
508
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
509
			return "response";
510
		}
23985 tejbeer 511
	}
23993 tejbeer 512
 
23985 tejbeer 513
	private void sendMailWithAttachments(String subject, String messageText) throws Exception {
514
		MimeMessage message = mailSender.createMimeMessage();
515
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
24089 tejbeer 516
		String[] email = { "neerajgupta2021@gmail.com", "adeel.yazdani@smartdukaan.com",
517
				"kamini.sharma@smartdukaan.com", "care@smartdukaan.com", "mohinder.mutreja@smartdukaan.com" };
23985 tejbeer 518
		helper.setSubject(subject);
519
		helper.setText(messageText);
520
		helper.setTo(email);
26041 amit.gupta 521
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smartdukaan Alerts");
23985 tejbeer 522
		helper.setFrom(senderAddress);
523
		mailSender.send(message);
524
 
525
	}
23993 tejbeer 526
 
527
	private List<Integer> getFofoIdsFromWalletRequest(List<AddWalletRequest> walletRequest) {
23936 tejbeer 528
		List<Integer> fofoIds = new ArrayList<>();
23993 tejbeer 529
		for (AddWalletRequest walletdetail : walletRequest) {
23936 tejbeer 530
			fofoIds.add(walletdetail.getRetailerId());
531
		}
532
		return fofoIds;
23993 tejbeer 533
	}
23936 tejbeer 534
 
24089 tejbeer 535
	@RequestMapping(value = "/getcreateUnsettledPayments", method = RequestMethod.GET)
536
	public String getcreateUnsettledPayment(HttpServletRequest request,
537
			@RequestParam(name = "offset", defaultValue = "0") int offset,
538
			@RequestParam(name = "limit", defaultValue = "15") int limit, Model model) throws Exception {
539
		List<UnsettledPayment> up = null;
540
 
541
		long size = 0;
542
		up = unsettledPaymentsRepository.selectAllById(offset, limit);
543
 
544
		size = unsettledPaymentsRepository.selectAllCount();
545
		if (!up.isEmpty()) {
546
			model.addAttribute("unsettledPayment", up);
547
			model.addAttribute("start", offset + 1);
548
			model.addAttribute("size", size);
549
			model.addAttribute("url", "/getPaginatedUnsettledPayments");
550
 
551
			if (up.size() < limit) {
552
				model.addAttribute("end", offset + up.size());
553
			} else {
554
				model.addAttribute("end", offset + limit);
555
			}
556
		} else {
557
			model.addAttribute("unsettledPayment", up);
558
			model.addAttribute("size", size);
559
		}
560
 
561
		LOGGER.info("unsettledPaymentList" + up);
562
		return "unsettled-payments";
563
	}
564
 
565
	@RequestMapping(value = "/getUnsettledPaymentsByAmount", method = RequestMethod.GET)
566
	public String getUnsettledPaymentByAmount(HttpServletRequest request,
567
			@RequestParam(name = "amount", defaultValue = "0") float amount,
568
			@RequestParam(name = "offset", defaultValue = "0") int offset,
569
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
570
		List<UnsettledPayment> up = null;
571
 
572
		long size = 0;
573
		up = unsettledPaymentsRepository.selectAllByAmount(amount, offset, limit);
574
 
575
		size = unsettledPaymentsRepository.selectAllCount();
576
		if (!up.isEmpty()) {
577
			model.addAttribute("unsettledPayment", up);
578
			model.addAttribute("start", offset + 1);
579
			model.addAttribute("size", size);
580
			model.addAttribute("url", "/getPaginatedUnsettledPayments");
581
 
582
			if (up.size() < limit) {
583
				model.addAttribute("end", offset + up.size());
584
			} else {
585
				model.addAttribute("end", offset + limit);
586
			}
587
			return "unsettle-payment-modal";
588
		} else {
589
			model.addAttribute("unsettledPayment", up);
590
			model.addAttribute("size", size);
591
		}
592
 
593
		return "unsettle-payment-modal";
594
	}
595
 
596
	@RequestMapping(value = "/createUnsettledPaymentsEntries", method = RequestMethod.POST)
597
	public String createUnsettledPaymentsEntries(HttpServletRequest request,
598
			@RequestBody UnsettledPaymentModel unsettledPaymentModel, Model model) throws Exception {
599
 
600
		UnsettledPayment up = new UnsettledPayment();
601
		up.setTransaction_reference(unsettledPaymentModel.getTransactionReference());
602
		up.setAmount(unsettledPaymentModel.getAmount());
603
		up.setDescription(unsettledPaymentModel.getDescription());
604
		up.setReference_date(unsettledPaymentModel.getReferenceDate());
605
		LOGGER.info("uppaynments" + up);
606
		unsettledPaymentsRepository.persist(up);
607
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
608
		return "response";
609
	}
610
 
611
	@RequestMapping(value = "/removeUnsettledPaymentsEntries", method = RequestMethod.DELETE)
612
	public String removeUnsettledPaymentsEntries(HttpServletRequest request,
613
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
614
 
615
		unsettledPaymentsRepository.deleteById(id);
616
 
617
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
618
		return "response";
619
	}
620
 
24509 amit.gupta 621
	@RequestMapping(value = "/wallet/statement", method = RequestMethod.GET)
24523 amit.gupta 622
	public String getWalletStatement(HttpServletRequest request, @RequestParam LocalDateTime startDate,
24876 tejbeer 623
			@RequestParam LocalDateTime endDate, Model model, @RequestParam(defaultValue = "0") int fofoId)
624
			throws Exception {
24523 amit.gupta 625
		boolean isAdmin = roleManager.isAdmin(cookiesProcessor.getCookiesObject(request).getRoleIds());
24876 tejbeer 626
		if (fofoId > 0) {
627
			if (!isAdmin) {
24523 amit.gupta 628
				throw new ProfitMandiBusinessException("Unauthorised access", "PartnerId", "Permission Denied");
629
			}
630
		} else {
631
			fofoId = cookiesProcessor.getCookiesObject(request).getFofoId();
632
		}
633
		float openingBalance = walletService.getOpeningTill(fofoId, startDate);
634
		float closingBalance = walletService.getOpeningTill(fofoId, endDate);
24876 tejbeer 635
		List<UserWalletHistory> uwhList = walletService.getPaginatedUserWalletHistoryByRetailerId(fofoId, startDate,
636
				endDate, 0, 0);
24511 amit.gupta 637
		Collections.reverse(uwhList);
24509 amit.gupta 638
		model.addAttribute("opening", openingBalance);
639
		model.addAttribute("closing", closingBalance);
640
		model.addAttribute("history", uwhList);
641
		model.addAttribute("startDate", startDate);
642
		model.addAttribute("endDate", endDate);
643
		return "walletStatement";
644
	}
645
 
28515 amit.gupta 646
	@RequestMapping(value = "/account/statement", method = RequestMethod.GET)
647
	public ResponseEntity<?> getAccountStatement(HttpServletRequest request, @RequestParam LocalDateTime startDate,
648
			@RequestParam LocalDateTime endDate, Model model, @RequestParam(defaultValue = "0") int fofoId)
649
			throws Exception {
650
		boolean isAdmin = roleManager.isAdmin(cookiesProcessor.getCookiesObject(request).getRoleIds());
651
		if (fofoId > 0) {
652
			if (!isAdmin) {
653
				throw new ProfitMandiBusinessException("Unauthorised access", "PartnerId", "Permission Denied");
654
			}
655
		} else {
656
			fofoId = cookiesProcessor.getCookiesObject(request).getFofoId();
657
		}
658
		float openingBalance = walletService.getOpeningTillExcludingPurchase(fofoId, startDate);
659
		float closingBalance = walletService.getOpeningTillExcludingPurchase(fofoId, endDate);
28538 amit.gupta 660
		UserWallet uw = walletService.getUserWallet(fofoId);
661
		List<UserWalletHistory> history = userWalletHistoryRepository.selectPaginatedByWalletId(uw.getId(), startDate, endDate, 0, 0);
662
		history = history.stream().filter(x -> !x.getReferenceType().equals(WalletReferenceType.PURCHASE))
28515 amit.gupta 663
				.collect(Collectors.toList());
664
		InputStream is = getClass().getClassLoader().getResourceAsStream("account-statement.xlsx");
665
		String partnerName = retailerService.getAllFofoRetailerIdNameMap().get(fofoId);
666
		List<StatementDetailModel> details = orderRepository.selectDetailsBetween(fofoId, startDate, endDate);
667
		float openingAmount = orderRepository.selectOpeningAmount(fofoId, startDate);
668
		float closingAmount = orderRepository.selectOpeningAmount(fofoId, endDate);
669
		LOGGER.info("Opening - {}, Closing - {}", openingAmount, closingAmount);
670
		ByteArrayOutputStream byteArrayOutputStream = this.populateData(is, openingBalance - openingAmount,
28538 amit.gupta 671
				closingBalance - closingAmount, partnerName, history, startDate, endDate, details);
28515 amit.gupta 672
 
673
		final HttpHeaders headers = new HttpHeaders();
674
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
675
		headers.set("Content-disposition",
676
				"inline; filename=account-statement." + StringUtils.toHyphenatedString(startDate.toLocalDate()) + "-"
677
						+ StringUtils.toHyphenatedString(endDate.toLocalDate()) + ".xlsx");
678
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
679
 
680
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
681
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
682
 
683
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
684
 
685
	}
686
 
687
	private ByteArrayOutputStream populateData(InputStream is, float openingBalance, float closingBalance,
28538 amit.gupta 688
			String partnerName, List<UserWalletHistory> history, LocalDateTime startDate,
28515 amit.gupta 689
			LocalDateTime endDate, List<StatementDetailModel> invoiceDetails) throws Exception {
690
		XSSFWorkbook workbook = new XSSFWorkbook(is);
691
		CreationHelper creationHelper = workbook.getCreationHelper();
692
		CellStyle style2 = workbook.createCellStyle();
693
		style2.setDataFormat(creationHelper.createDataFormat().getFormat(
694
				"mm/dd/yyyy hh:mm:ss"));
695
 
696
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
697
		Sheet sheet = workbook.getSheetAt(0);
698
		sheet.getRow(0).getCell(0).setCellValue(partnerName);
699
		sheet.getRow(1).getCell(1)
700
				.setCellValue(new Date(startDate.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()));
701
		sheet.getRow(1).getCell(2)
702
				.setCellValue(new Date(endDate.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()));
703
		sheet.getRow(2).getCell(2).setCellValue(openingBalance);
704
		long grandTotalDebit = 0l;
705
		long grandTotalCredit = 0l;
706
		int row = 4;
28538 amit.gupta 707
		for (UserWalletHistory walletEntry : history) {
28540 amit.gupta 708
			Cell dateCell = sheet.getRow(row).createCell(0);
709
			dateCell.setCellValue(new Date(walletEntry.getTimestamp().atZone( ZoneId.systemDefault()).toInstant().toEpochMilli()));
710
			dateCell.setCellStyle(style2);
711
			sheet.createRow(row).createCell(1).setCellValue(walletEntry.getReferenceType().toString());
28538 amit.gupta 712
			if(walletEntry.getAmount() > 0) {
28540 amit.gupta 713
				sheet.getRow(row).createCell(2).setCellValue(0);
714
				sheet.getRow(row).createCell(3).setCellValue(walletEntry.getAmount());
28538 amit.gupta 715
				grandTotalCredit += walletEntry.getAmount();
716
			} else {
28540 amit.gupta 717
				sheet.getRow(row).createCell(2).setCellValue(walletEntry.getAmount());
718
				sheet.getRow(row).createCell(3).setCellValue(0);
28538 amit.gupta 719
				grandTotalDebit += walletEntry.getAmount();
720
			}
28540 amit.gupta 721
			sheet.getRow(row).createCell(4).setCellValue(walletEntry.getDescription());
722
			sheet.getRow(row).createCell(5).setCellValue(walletEntry.getReference());
28515 amit.gupta 723
			row++;
724
		}
725
		for (StatementDetailModel statementDetailModel : invoiceDetails) {
28540 amit.gupta 726
			Cell dateCell = sheet.getRow(row).createCell(3);
727
			dateCell.setCellValue(statementDetailModel.getOnDate());
728
			dateCell.setCellStyle(style2);
729
			sheet.createRow(row).createCell(1).setCellValue("BILLING");
28515 amit.gupta 730
			if (statementDetailModel.getAmount() > 0) {
28540 amit.gupta 731
				sheet.getRow(row).createCell(2).setCellValue(statementDetailModel.getAmount());
732
				sheet.getRow(row).createCell(3).setCellValue(0);
28515 amit.gupta 733
				grandTotalDebit += statementDetailModel.getAmount(); 
734
			} else {
28540 amit.gupta 735
				sheet.getRow(row).createCell(2).setCellValue(0);
736
				sheet.getRow(row).createCell(3).setCellValue(-statementDetailModel.getAmount());
28515 amit.gupta 737
				grandTotalCredit += -statementDetailModel.getAmount(); 
738
			}
739
 
28538 amit.gupta 740
			sheet.getRow(row).createCell(4).setCellValue(statementDetailModel.getReferenceType());
741
			sheet.getRow(row).createCell(5).setCellValue(statementDetailModel.getInvoiceNumber());
28515 amit.gupta 742
 
743
 
744
			row += 1;
745
		}
746
		sheet.createRow(row).createCell(0).setCellValue("Grand Total");
747
		sheet.getRow(row).createCell(1).setCellValue(grandTotalDebit);
748
		sheet.getRow(row).createCell(2).setCellValue(grandTotalCredit);
749
		row += 2;
750
		sheet.createRow(row).createCell(0).setCellValue("Closing Balance");
751
		sheet.getRow(row).createCell(2).setCellValue(closingBalance);
752
		row++;
753
		/*
754
		 * sheet.createRow(row).createCell(0).setCellValue("Pending Grns");
755
		 * sheet.getRow(row).createCell(2).setCellValue(closingBalance); row++;
756
		 */
757
		try {
758
			workbook.write(bos);
759
		} finally {
760
			workbook.close();
761
			bos.close();
762
		}
763
 
764
		return bos;
765
	}
766
 
24876 tejbeer 767
	@RequestMapping(value = "/manualPayment", method = RequestMethod.GET)
768
	public String ManualPayment(HttpServletRequest request, Model model) throws Exception {
769
 
770
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
771
				.collect(Collectors.toList());
772
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
773
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
774
		model.addAttribute("customRetailers", customRetailers);
775
 
776
		model.addAttribute("referenceTypes", WalletReferenceType.referenceType);
777
		model.addAttribute("transactionTypes", TransactionType.values());
778
		return "wallet-edit";
779
 
780
	}
781
 
782
	@RequestMapping(value = "/getWalletHistory", method = RequestMethod.GET)
783
	public String getWalletHistory(HttpServletRequest request,
784
			@RequestParam(name = "reference", defaultValue = "0") int reference,
785
			@RequestParam WalletReferenceType referenceType, Model model) throws Exception {
786
 
787
		LOGGER.info("type" + referenceType);
788
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
789
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
25018 tejbeer 790
 
791
		if (userWalletHistory.isEmpty()) {
792
			throw new ProfitMandiBusinessException("RefrenceId", reference, "Reference Id not found");
793
		}
794
 
795
		UserWallet userWallet = userWalletRepository.selectById(userWalletHistory.get(0).getWalletId());
796
 
797
		LOGGER.info("userWallet" + userWallet);
798
		CustomRetailer customretailer = retailerService.getFofoRetailer(userWallet.getUserId());
799
 
800
		model.addAttribute("userWallet", userWallet);
801
		model.addAttribute("customretailer", customretailer);
802
 
24876 tejbeer 803
		model.addAttribute("wallethistory", userWalletHistory);
804
 
805
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
806
		return "wallet-history";
807
 
808
	}
809
 
24905 amit.gupta 810
	@RequestMapping(value = "/getWalletHistoryByPartner", method = RequestMethod.GET)
25018 tejbeer 811
	public String getWalletHistoryByPartner(HttpServletRequest request, int fofoId,
812
			@RequestParam(name = "referenceType", required = false) WalletReferenceType referenceType,
813
			@RequestParam(name = "offset", required = false, defaultValue = "0") int offset,
814
			@RequestParam(name = "limit", required = false, defaultValue = "30") int limit, Model model)
815
			throws Exception {
816
 
24905 amit.gupta 817
		UserWallet userWallet = userWalletRepository.selectByRetailerId(fofoId);
26485 amit.gupta 818
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository.selectPaginatedByWalletIdReferenceType(
819
				userWallet.getId(), referenceType, SortOrder.DESCENDING, offset, limit);
25018 tejbeer 820
 
821
		CustomRetailer customretailer = retailerService.getFofoRetailer(fofoId);
822
 
823
		model.addAttribute("userWallet", userWallet);
824
		model.addAttribute("customretailer", customretailer);
24905 amit.gupta 825
		model.addAttribute("wallethistory", userWalletHistory);
25018 tejbeer 826
 
24905 amit.gupta 827
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
828
		return "wallet-history";
25018 tejbeer 829
 
24905 amit.gupta 830
	}
831
 
24876 tejbeer 832
	@RequestMapping(value = "/getPartnerName", method = RequestMethod.GET)
833
	public String getPartnerName(HttpServletRequest request,
834
			@RequestParam(name = "reference", defaultValue = "0") int reference,
835
			@RequestParam WalletReferenceType referenceType, Model model) throws Exception {
836
 
837
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
838
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
24905 amit.gupta 839
		if (userWalletHistory.isEmpty()) {
24876 tejbeer 840
			throw new ProfitMandiBusinessException("RefrenceId", reference, "Reference Id not found");
841
		}
842
		UserWallet userWallet = userWalletRepository.selectById(userWalletHistory.get(0).getWalletId());
24905 amit.gupta 843
 
24876 tejbeer 844
		CustomRetailer retailer = retailerService.getFofoRetailer(userWallet.getUserId());
24905 amit.gupta 845
 
24876 tejbeer 846
		model.addAttribute("response", mvcResponseSender.createResponseString(retailer));
24905 amit.gupta 847
 
24876 tejbeer 848
		return "response";
849
 
850
	}
851
 
852
	@RequestMapping(value = "/walletUpdate", method = RequestMethod.POST)
853
	public String walletUpdate(HttpServletRequest request,
28515 amit.gupta 854
			@RequestParam(name = "reference", defaultValue = "0") int reference, @RequestParam int referenceTypeValue,
855
			@RequestParam TransactionType transactiontype, @RequestParam int amount, @RequestParam String description,
856
			@RequestParam int retailerId, Model model, @RequestParam LocalDateTime businessTimestamp) throws Exception {
26517 amit.gupta 857
		WalletReferenceType referenceType = WalletReferenceType.findByValue(referenceTypeValue);
28515 amit.gupta 858
		if (reference == 0 && referenceType.getValue() >= WalletReferenceType.INCENTIVES.getValue()) {
25018 tejbeer 859
			LOGGER.error("referenceType: " + referenceType);
24876 tejbeer 860
			ManualPaymentType paymentType = manualPaymentRequestRepository.selectByReferenceType(referenceType);
861
 
862
			if (paymentType == null) {
863
				paymentType = new ManualPaymentType();
27067 amit.gupta 864
				paymentType.setReferenceType(referenceType);
24876 tejbeer 865
			}
26485 amit.gupta 866
			paymentType.setCounter(paymentType.getCounter() + 1);
24876 tejbeer 867
			manualPaymentRequestRepository.persist(paymentType);
26485 amit.gupta 868
			reference = paymentType.getCounter();
28515 amit.gupta 869
 
870
		} else if (reference == 0) {
26485 amit.gupta 871
			throw new ProfitMandiBusinessException("RefrenceId", reference,
872
					"System specific reference type cant be used manually");
873
		}
28515 amit.gupta 874
 
26485 amit.gupta 875
		List<UserWalletHistory> userWalletHistoryList = userWalletHistoryRepository
876
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
877
		UserWallet userWallet = userWalletRepository.selectByRetailerId(retailerId);
878
		int walletId = userWallet.getId();
879
		int walletAmount = walletService.getWalletAmount(retailerId);
24876 tejbeer 880
 
26485 amit.gupta 881
		int returnReference = 0;
882
		UserWalletHistory newUserWalletHistory = new UserWalletHistory();
24876 tejbeer 883
 
26485 amit.gupta 884
		if (!userWalletHistoryList.isEmpty()) {
28515 amit.gupta 885
			long validRetailerEntries = userWalletHistoryList.stream().filter(x -> x.getWalletId() == walletId).count();
886
			if (validRetailerEntries == 0) {
26485 amit.gupta 887
				throw new ProfitMandiBusinessException("RefrenceId", reference,
888
						"Reference Id assign to Other  partner");
24876 tejbeer 889
			}
24942 tejbeer 890
		}
28515 amit.gupta 891
 
26485 amit.gupta 892
		if (TransactionType.DEBIT.equals(transactiontype)) {
893
			amount = -amount;
894
		}
28515 amit.gupta 895
 
26485 amit.gupta 896
		userWallet.setAmount(walletAmount + amount);
897
		newUserWalletHistory.setAmount(amount);
898
		newUserWalletHistory.setBusinessTimestamp(businessTimestamp);
899
		newUserWalletHistory.setDescription(description);
900
		newUserWalletHistory.setReference(reference);
901
		newUserWalletHistory.setWalletId(userWallet.getId());
902
		newUserWalletHistory.setReferenceType(referenceType);
903
		newUserWalletHistory.setTimestamp(LocalDateTime.now());
904
		userWalletHistoryRepository.persist(newUserWalletHistory);
905
 
26488 amit.gupta 906
		model.addAttribute("response", mvcResponseSender.createResponseString(reference));
24876 tejbeer 907
		return "response";
908
 
909
	}
25018 tejbeer 910
 
24951 tejbeer 911
	@RequestMapping(value = "/addMoney", method = RequestMethod.POST)
25018 tejbeer 912
	public String addMoney(HttpServletRequest request, @RequestParam float amount,
913
			@RequestParam String transactionReference, @RequestParam LocalDateTime referenceTime,
914
			@RequestParam String bankName, @RequestParam int fofoId, Model model) throws Exception {
915
 
24951 tejbeer 916
		AddWalletRequest addWalletRequest = new AddWalletRequest();
917
		addWalletRequest.setRetailerId(fofoId);
918
		addWalletRequest.setAmount(amount);
919
		addWalletRequest.setTransaction_reference(transactionReference);
920
		addWalletRequest.setCreateTimestamp(LocalDateTime.now());
921
		addWalletRequest.setBank_name(bankName);
922
		addWalletRequest.setReference_date(referenceTime.toLocalDate());
923
		addWalletRequest.setStatus(AddWalletRequestStatus.pending);
25018 tejbeer 924
 
925
		LOGGER.info("info" + addWalletRequest);
926
 
24951 tejbeer 927
		addWalletRequestRepository.persist(addWalletRequest);
928
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
929
		return "response";
930
	}
22551 ashik.ali 931
}