Subversion Repositories SmartDukaan

Rev

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