Subversion Repositories SmartDukaan

Rev

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