Subversion Repositories SmartDukaan

Rev

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