Subversion Repositories SmartDukaan

Rev

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