Subversion Repositories SmartDukaan

Rev

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