Subversion Repositories SmartDukaan

Rev

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