Subversion Repositories SmartDukaan

Rev

Rev 27345 | Rev 28538 | 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);
660
		List<AccountStatementModel> accountModels = userWalletRepository.getStatement(fofoId, startDate, endDate)
661
				.stream().filter(x -> !x.getWalletReferenceType().equals(WalletReferenceType.PURCHASE))
662
				.collect(Collectors.toList());
663
		Map<WalletReferenceType, AccountStatementModel> accountModelsMap = accountModels.stream()
664
				.collect(Collectors.toMap(AccountStatementModel::getWalletReferenceType, x -> x));
665
		InputStream is = getClass().getClassLoader().getResourceAsStream("account-statement.xlsx");
666
		String partnerName = retailerService.getAllFofoRetailerIdNameMap().get(fofoId);
667
		List<StatementDetailModel> details = orderRepository.selectDetailsBetween(fofoId, startDate, endDate);
668
		float openingAmount = orderRepository.selectOpeningAmount(fofoId, startDate);
669
		float closingAmount = orderRepository.selectOpeningAmount(fofoId, endDate);
670
		LOGGER.info("Opening - {}, Closing - {}", openingAmount, closingAmount);
671
		ByteArrayOutputStream byteArrayOutputStream = this.populateData(is, openingBalance - openingAmount,
672
				closingBalance - closingAmount, partnerName, accountModelsMap, startDate, endDate, details);
673
 
674
		final HttpHeaders headers = new HttpHeaders();
675
		headers.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
676
		headers.set("Content-disposition",
677
				"inline; filename=account-statement." + StringUtils.toHyphenatedString(startDate.toLocalDate()) + "-"
678
						+ StringUtils.toHyphenatedString(endDate.toLocalDate()) + ".xlsx");
679
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
680
 
681
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
682
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
683
 
684
		return new ResponseEntity<InputStreamResource>(inputStreamResource, headers, HttpStatus.OK);
685
 
686
	}
687
 
688
	private ByteArrayOutputStream populateData(InputStream is, float openingBalance, float closingBalance,
689
			String partnerName, Map<WalletReferenceType, AccountStatementModel> accountModels, LocalDateTime startDate,
690
			LocalDateTime endDate, List<StatementDetailModel> invoiceDetails) throws Exception {
691
		XSSFWorkbook workbook = new XSSFWorkbook(is);
692
		CreationHelper creationHelper = workbook.getCreationHelper();
693
		CellStyle style2 = workbook.createCellStyle();
694
		style2.setDataFormat(creationHelper.createDataFormat().getFormat(
695
				"mm/dd/yyyy hh:mm:ss"));
696
 
697
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
698
		Sheet sheet = workbook.getSheetAt(0);
699
		sheet.getRow(0).getCell(0).setCellValue(partnerName);
700
		sheet.getRow(1).getCell(1)
701
				.setCellValue(new Date(startDate.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()));
702
		sheet.getRow(1).getCell(2)
703
				.setCellValue(new Date(endDate.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()));
704
		sheet.getRow(2).getCell(2).setCellValue(openingBalance);
705
		long grandTotalDebit = 0l;
706
		long grandTotalCredit = 0l;
707
		int row = 4;
708
		for (Map.Entry<WalletReferenceType, AccountStatementModel> walletRow : accountModels.entrySet()) {
709
			sheet.createRow(row).createCell(0).setCellValue(walletRow.getKey().toString());
710
			sheet.getRow(row).createCell(1).setCellValue(walletRow.getValue().getDebit());
711
			sheet.getRow(row).createCell(2).setCellValue(walletRow.getValue().getCredit());
712
			grandTotalDebit += walletRow.getValue().getDebit();
713
			grandTotalCredit += walletRow.getValue().getCredit();
714
			row++;
715
		}
716
		for (StatementDetailModel statementDetailModel : invoiceDetails) {
717
			sheet.createRow(row).createCell(0).setCellValue(statementDetailModel.getInvoiceNumber());
718
			if (statementDetailModel.getAmount() > 0) {
719
				sheet.getRow(row).createCell(1).setCellValue(statementDetailModel.getAmount());
720
				sheet.getRow(row).createCell(2).setCellValue(0);
721
				grandTotalDebit += statementDetailModel.getAmount(); 
722
			} else {
723
				sheet.getRow(row).createCell(1).setCellValue(0);
724
				sheet.getRow(row).createCell(2).setCellValue(-statementDetailModel.getAmount());
725
				grandTotalCredit += -statementDetailModel.getAmount(); 
726
			}
727
			Cell dateCell = sheet.getRow(row).createCell(3);
728
			dateCell.setCellValue(statementDetailModel.getOnDate());
729
			dateCell.setCellStyle(style2);
730
 
731
 
732
 
733
			row += 1;
734
		}
735
		sheet.createRow(row).createCell(0).setCellValue("Grand Total");
736
		sheet.getRow(row).createCell(1).setCellValue(grandTotalDebit);
737
		sheet.getRow(row).createCell(2).setCellValue(grandTotalCredit);
738
		row += 2;
739
		sheet.createRow(row).createCell(0).setCellValue("Closing Balance");
740
		sheet.getRow(row).createCell(2).setCellValue(closingBalance);
741
		row++;
742
		/*
743
		 * sheet.createRow(row).createCell(0).setCellValue("Pending Grns");
744
		 * sheet.getRow(row).createCell(2).setCellValue(closingBalance); row++;
745
		 */
746
		try {
747
			workbook.write(bos);
748
		} finally {
749
			workbook.close();
750
			bos.close();
751
		}
752
 
753
		return bos;
754
	}
755
 
24876 tejbeer 756
	@RequestMapping(value = "/manualPayment", method = RequestMethod.GET)
757
	public String ManualPayment(HttpServletRequest request, Model model) throws Exception {
758
 
759
		List<Integer> fofoIds = fofoStoreRepository.selectAll().stream().map(x -> x.getId())
760
				.collect(Collectors.toList());
761
		Map<Integer, CustomRetailer> customRetailersMap = retailerService.getFofoRetailers(fofoIds);
762
		String customRetailers = JSONObject.valueToString(customRetailersMap.values());
763
		model.addAttribute("customRetailers", customRetailers);
764
 
765
		model.addAttribute("referenceTypes", WalletReferenceType.referenceType);
766
		model.addAttribute("transactionTypes", TransactionType.values());
767
		return "wallet-edit";
768
 
769
	}
770
 
771
	@RequestMapping(value = "/getWalletHistory", method = RequestMethod.GET)
772
	public String getWalletHistory(HttpServletRequest request,
773
			@RequestParam(name = "reference", defaultValue = "0") int reference,
774
			@RequestParam WalletReferenceType referenceType, Model model) throws Exception {
775
 
776
		LOGGER.info("type" + referenceType);
777
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
778
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
25018 tejbeer 779
 
780
		if (userWalletHistory.isEmpty()) {
781
			throw new ProfitMandiBusinessException("RefrenceId", reference, "Reference Id not found");
782
		}
783
 
784
		UserWallet userWallet = userWalletRepository.selectById(userWalletHistory.get(0).getWalletId());
785
 
786
		LOGGER.info("userWallet" + userWallet);
787
		CustomRetailer customretailer = retailerService.getFofoRetailer(userWallet.getUserId());
788
 
789
		model.addAttribute("userWallet", userWallet);
790
		model.addAttribute("customretailer", customretailer);
791
 
24876 tejbeer 792
		model.addAttribute("wallethistory", userWalletHistory);
793
 
794
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
795
		return "wallet-history";
796
 
797
	}
798
 
24905 amit.gupta 799
	@RequestMapping(value = "/getWalletHistoryByPartner", method = RequestMethod.GET)
25018 tejbeer 800
	public String getWalletHistoryByPartner(HttpServletRequest request, int fofoId,
801
			@RequestParam(name = "referenceType", required = false) WalletReferenceType referenceType,
802
			@RequestParam(name = "offset", required = false, defaultValue = "0") int offset,
803
			@RequestParam(name = "limit", required = false, defaultValue = "30") int limit, Model model)
804
			throws Exception {
805
 
24905 amit.gupta 806
		UserWallet userWallet = userWalletRepository.selectByRetailerId(fofoId);
26485 amit.gupta 807
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository.selectPaginatedByWalletIdReferenceType(
808
				userWallet.getId(), referenceType, SortOrder.DESCENDING, offset, limit);
25018 tejbeer 809
 
810
		CustomRetailer customretailer = retailerService.getFofoRetailer(fofoId);
811
 
812
		model.addAttribute("userWallet", userWallet);
813
		model.addAttribute("customretailer", customretailer);
24905 amit.gupta 814
		model.addAttribute("wallethistory", userWalletHistory);
25018 tejbeer 815
 
24905 amit.gupta 816
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
817
		return "wallet-history";
25018 tejbeer 818
 
24905 amit.gupta 819
	}
820
 
24876 tejbeer 821
	@RequestMapping(value = "/getPartnerName", method = RequestMethod.GET)
822
	public String getPartnerName(HttpServletRequest request,
823
			@RequestParam(name = "reference", defaultValue = "0") int reference,
824
			@RequestParam WalletReferenceType referenceType, Model model) throws Exception {
825
 
826
		List<UserWalletHistory> userWalletHistory = userWalletHistoryRepository
827
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
24905 amit.gupta 828
		if (userWalletHistory.isEmpty()) {
24876 tejbeer 829
			throw new ProfitMandiBusinessException("RefrenceId", reference, "Reference Id not found");
830
		}
831
		UserWallet userWallet = userWalletRepository.selectById(userWalletHistory.get(0).getWalletId());
24905 amit.gupta 832
 
24876 tejbeer 833
		CustomRetailer retailer = retailerService.getFofoRetailer(userWallet.getUserId());
24905 amit.gupta 834
 
24876 tejbeer 835
		model.addAttribute("response", mvcResponseSender.createResponseString(retailer));
24905 amit.gupta 836
 
24876 tejbeer 837
		return "response";
838
 
839
	}
840
 
841
	@RequestMapping(value = "/walletUpdate", method = RequestMethod.POST)
842
	public String walletUpdate(HttpServletRequest request,
28515 amit.gupta 843
			@RequestParam(name = "reference", defaultValue = "0") int reference, @RequestParam int referenceTypeValue,
844
			@RequestParam TransactionType transactiontype, @RequestParam int amount, @RequestParam String description,
845
			@RequestParam int retailerId, Model model, @RequestParam LocalDateTime businessTimestamp) throws Exception {
26517 amit.gupta 846
		WalletReferenceType referenceType = WalletReferenceType.findByValue(referenceTypeValue);
28515 amit.gupta 847
		if (reference == 0 && referenceType.getValue() >= WalletReferenceType.INCENTIVES.getValue()) {
25018 tejbeer 848
			LOGGER.error("referenceType: " + referenceType);
24876 tejbeer 849
			ManualPaymentType paymentType = manualPaymentRequestRepository.selectByReferenceType(referenceType);
850
 
851
			if (paymentType == null) {
852
				paymentType = new ManualPaymentType();
27067 amit.gupta 853
				paymentType.setReferenceType(referenceType);
24876 tejbeer 854
			}
26485 amit.gupta 855
			paymentType.setCounter(paymentType.getCounter() + 1);
24876 tejbeer 856
			manualPaymentRequestRepository.persist(paymentType);
26485 amit.gupta 857
			reference = paymentType.getCounter();
28515 amit.gupta 858
 
859
		} else if (reference == 0) {
26485 amit.gupta 860
			throw new ProfitMandiBusinessException("RefrenceId", reference,
861
					"System specific reference type cant be used manually");
862
		}
28515 amit.gupta 863
 
26485 amit.gupta 864
		List<UserWalletHistory> userWalletHistoryList = userWalletHistoryRepository
865
				.selectAllByreferenceIdandreferenceType(reference, referenceType);
866
		UserWallet userWallet = userWalletRepository.selectByRetailerId(retailerId);
867
		int walletId = userWallet.getId();
868
		int walletAmount = walletService.getWalletAmount(retailerId);
24876 tejbeer 869
 
26485 amit.gupta 870
		int returnReference = 0;
871
		UserWalletHistory newUserWalletHistory = new UserWalletHistory();
24876 tejbeer 872
 
26485 amit.gupta 873
		if (!userWalletHistoryList.isEmpty()) {
28515 amit.gupta 874
			long validRetailerEntries = userWalletHistoryList.stream().filter(x -> x.getWalletId() == walletId).count();
875
			if (validRetailerEntries == 0) {
26485 amit.gupta 876
				throw new ProfitMandiBusinessException("RefrenceId", reference,
877
						"Reference Id assign to Other  partner");
24876 tejbeer 878
			}
24942 tejbeer 879
		}
28515 amit.gupta 880
 
26485 amit.gupta 881
		if (TransactionType.DEBIT.equals(transactiontype)) {
882
			amount = -amount;
883
		}
28515 amit.gupta 884
 
26485 amit.gupta 885
		userWallet.setAmount(walletAmount + amount);
886
		newUserWalletHistory.setAmount(amount);
887
		newUserWalletHistory.setBusinessTimestamp(businessTimestamp);
888
		newUserWalletHistory.setDescription(description);
889
		newUserWalletHistory.setReference(reference);
890
		newUserWalletHistory.setWalletId(userWallet.getId());
891
		newUserWalletHistory.setReferenceType(referenceType);
892
		newUserWalletHistory.setTimestamp(LocalDateTime.now());
893
		userWalletHistoryRepository.persist(newUserWalletHistory);
894
 
26488 amit.gupta 895
		model.addAttribute("response", mvcResponseSender.createResponseString(reference));
24876 tejbeer 896
		return "response";
897
 
898
	}
25018 tejbeer 899
 
24951 tejbeer 900
	@RequestMapping(value = "/addMoney", method = RequestMethod.POST)
25018 tejbeer 901
	public String addMoney(HttpServletRequest request, @RequestParam float amount,
902
			@RequestParam String transactionReference, @RequestParam LocalDateTime referenceTime,
903
			@RequestParam String bankName, @RequestParam int fofoId, Model model) throws Exception {
904
 
24951 tejbeer 905
		AddWalletRequest addWalletRequest = new AddWalletRequest();
906
		addWalletRequest.setRetailerId(fofoId);
907
		addWalletRequest.setAmount(amount);
908
		addWalletRequest.setTransaction_reference(transactionReference);
909
		addWalletRequest.setCreateTimestamp(LocalDateTime.now());
910
		addWalletRequest.setBank_name(bankName);
911
		addWalletRequest.setReference_date(referenceTime.toLocalDate());
912
		addWalletRequest.setStatus(AddWalletRequestStatus.pending);
25018 tejbeer 913
 
914
		LOGGER.info("info" + addWalletRequest);
915
 
24951 tejbeer 916
		addWalletRequestRepository.persist(addWalletRequest);
917
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
918
		return "response";
919
	}
22551 ashik.ali 920
}