Subversion Repositories SmartDukaan

Rev

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

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