Subversion Repositories SmartDukaan

Rev

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