Rev 23936 | Rev 23993 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.web.controller;import java.text.MessageFormat;import java.time.LocalDateTime;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.servlet.http.HttpServletRequest;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Controller;import org.springframework.transaction.annotation.Transactional;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;import com.spice.profitmandi.common.model.CustomRetailer;import com.spice.profitmandi.common.model.ProfitMandiConstants;import com.spice.profitmandi.common.util.StringUtils;import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;import com.spice.profitmandi.dao.entity.transaction.UserWallet;import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;import com.spice.profitmandi.dao.repository.catalog.AddWalletRequestRepository;import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;import com.spice.profitmandi.service.user.RetailerService;import com.spice.profitmandi.service.wallet.WalletService;import com.spice.profitmandi.web.model.LoginDetails;import com.spice.profitmandi.web.util.CookiesProcessor;import com.spice.profitmandi.web.util.MVCResponseSender;import in.shop2020.model.v1.order.WalletReferenceType;@Controller@Transactional(rollbackFor = Throwable.class)public class WalletController {@Autowiredprivate CookiesProcessor cookiesProcessor;@Autowiredprivate WalletService walletService;@Autowiredprivate UserWalletRepository userWalletRepository;@Autowiredprivate MVCResponseSender mvcResponseSender;@Autowiredprivate UserAccountRepository userAccountRepository;@AutowiredJavaMailSender mailSender;@Autowiredprivate RetailerService retailerService;@AutowiredAddWalletRequestRepository addWalletRequestRepository;private static final Logger LOGGER = LogManager.getLogger(WalletController.class);@RequestMapping(value = "/walletDetails", method = RequestMethod.GET)public String dashboard(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);UserWallet userWallet = null;try{userWallet = userWalletRepository.selectByRetailerId(fofoDetails.getFofoId());}catch(ProfitMandiBusinessException profitMandiBusinessException){LOGGER.error("UserWallet not found : ", profitMandiBusinessException);//return "error";}LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);List<UserWalletHistory> userWalletHistories = new ArrayList<>();try{userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(fofoDetails.getFofoId(), startDateTime, endDateTime, offset, limit);}catch(ProfitMandiBusinessException profitMandiBusinessException){LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);}long countItems = 0;try{countItems = walletService.getSizeByRetailerId(fofoDetails.getFofoId(), startDateTime, endDateTime);}catch(ProfitMandiBusinessException profitMandiBusinessException){LOGGER.error("UserWallet not found : ",profitMandiBusinessException);}model.addAttribute("userWallet", userWallet);model.addAttribute("walletHistories", userWalletHistories);model.addAttribute("start", offset + 1);model.addAttribute("size",countItems);model.addAttribute(ProfitMandiConstants.START_TIME, startTimeString);model.addAttribute(ProfitMandiConstants.END_TIME, endTimeString);if (userWalletHistories.size() < limit){model.addAttribute("end", offset + userWalletHistories.size());}else{model.addAttribute("end", offset + limit);}return "wallet-details";}@RequestMapping(value = "/getPaginatedWalletHistory")public String getSaleHistoryPaginated(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue="10") int limit, Model model) throws ProfitMandiBusinessException{LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);List<UserWalletHistory> userWalletHistories = new ArrayList<>();try{userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(loginDetails.getFofoId(), startDateTime, endDateTime, offset, limit);}catch(ProfitMandiBusinessException profitMandiBusinessException){LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);}model.addAttribute("walletHistories", userWalletHistories);return "wallet-history-paginated";}@RequestMapping(value = "/getAddWalletRequest", method = RequestMethod.GET)public String getAddwalletRequest(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)throws ProfitMandiBusinessException {List<AddWalletRequest> walletRequest = null;long size = 0;walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit,AddWalletRequestStatus.pending);LOGGER .info("walletRequest" + walletRequest);size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.pending);List<Integer> fofoIds=this.getFofoIdsFromWalletRequest(walletRequest);Map<Integer,CustomRetailer> fofoIdsAndRetailerName=retailerService.getFofoRetailers(fofoIds);model.addAttribute("fofoIdsAndRetailerName",fofoIdsAndRetailerName);model.addAttribute("walletRequest", walletRequest);model.addAttribute("rStatus","pending");model.addAttribute("start", offset + 1);model.addAttribute("size", size);model.addAttribute("url","/getPaginatedWalletRequest");if (walletRequest.size() < limit) {model.addAttribute("end", offset + walletRequest.size());} else {model.addAttribute("end", offset + limit);}return "add-wallet-request";}@RequestMapping(value = "/getPaginatedWalletRequest", method = RequestMethod.GET)public String getPaginatedWalletRequest(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)throws ProfitMandiBusinessException {LOGGER .info("requested offset=[{}], limit = [{}]", offset, limit);List<AddWalletRequest> walletRequest = null;walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit,AddWalletRequestStatus.pending);LOGGER.info("walletRequest" + walletRequest);List<Integer> fofoIds=this.getFofoIdsFromWalletRequest(walletRequest);Map<Integer,CustomRetailer> fofoIdsAndRetailerName=retailerService.getFofoRetailers(fofoIds);model.addAttribute("fofoIdsAndRetailerName",fofoIdsAndRetailerName);model.addAttribute("walletRequest", walletRequest);model.addAttribute("rStatus","pending");model.addAttribute("url","/getPaginatedWalletRequest");return "add-wallet-request-paginated";}@RequestMapping(value = "/getAddWalletApproved", method = RequestMethod.GET)public String getAddwalletRequestApproved(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)throws ProfitMandiBusinessException {List<AddWalletRequest> walletRequest = null;long size = 0;walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit,AddWalletRequestStatus.approved);size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.approved);LOGGER.info("walletRequest" + walletRequest);List<Integer> fofoIds=this.getFofoIdsFromWalletRequest(walletRequest);Map<Integer,CustomRetailer> fofoIdsAndRetailerName=retailerService.getFofoRetailers(fofoIds);model.addAttribute("fofoIdsAndRetailerName",fofoIdsAndRetailerName);model.addAttribute("walletRequest", walletRequest);model.addAttribute("start", offset + 1);model.addAttribute("size", size);model.addAttribute("url","/getPaginatedWalletApproved");if (walletRequest.size() < limit) {model.addAttribute("end", offset + walletRequest.size());} else {model.addAttribute("end", offset + limit);}return "add-wallet-request";}@RequestMapping(value = "/getPaginatedWalletApproved", method = RequestMethod.GET)public String getPaginatedWalletApproved(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)throws ProfitMandiBusinessException {LOGGER .info("requested offset=[{}], limit = [{}]", offset, limit);List<AddWalletRequest> walletRequest = null;walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);LOGGER.info("walletRequest" + walletRequest);List<Integer> fofoIds=this.getFofoIdsFromWalletRequest(walletRequest);Map<Integer,CustomRetailer> fofoIdsAndRetailerName=retailerService.getFofoRetailers(fofoIds);model.addAttribute("fofoIdsAndRetailerName",fofoIdsAndRetailerName);model.addAttribute("walletRequest", walletRequest);model.addAttribute("url","/getPaginatedWalletApproved");return "add-wallet-request-paginated";}@RequestMapping(value = "/getAddWalletRequestRejected", method = RequestMethod.GET)public String getAddwalletRequestRejected(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)throws ProfitMandiBusinessException {List<AddWalletRequest> walletRequest = null;long size = 0;walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit,AddWalletRequestStatus.rejected);size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.rejected);LOGGER.info("walletRequest" + walletRequest);List<Integer> fofoIds=this.getFofoIdsFromWalletRequest(walletRequest);Map<Integer,CustomRetailer> fofoIdsAndRetailerName=retailerService.getFofoRetailers(fofoIds);model.addAttribute("fofoIdsAndRetailerName",fofoIdsAndRetailerName);model.addAttribute("walletRequest", walletRequest);model.addAttribute("start", offset + 1);model.addAttribute("size", size);model.addAttribute("url","/getPaginatedWalletRequestRejected");if (walletRequest.size() < limit) {model.addAttribute("end", offset + walletRequest.size());} else {model.addAttribute("end", offset + limit);}return "add-wallet-request";}@RequestMapping(value = "/getPaginatedWalletRequestRejected", method = RequestMethod.GET)public String getPaginatedWalletRequestRejected(HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)throws ProfitMandiBusinessException {LOGGER .info("requested offset=[{}], limit = [{}]", offset, limit);List<AddWalletRequest> walletRequest = null;walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);LOGGER.info("walletRequest" + walletRequest);List<Integer> fofoIds=this.getFofoIdsFromWalletRequest(walletRequest);Map<Integer,CustomRetailer> fofoIdsAndRetailerName=retailerService.getFofoRetailers(fofoIds);model.addAttribute("fofoIdsAndRetailerName",fofoIdsAndRetailerName);model.addAttribute("walletRequest", walletRequest);model.addAttribute("url","/getPaginatedWalletRequestRejected");return "add-wallet-request-paginated";}@RequestMapping(value = "/addAmountToWallet", method = RequestMethod.PUT)public String addAmountToWallet(HttpServletRequest request,@RequestParam(name = "id", defaultValue = "0")int id,Model model)throws Exception {AddWalletRequest addWalletRequest= addWalletRequestRepository.selectById(id);walletService.addAmountToWallet(addWalletRequest.getRetailerId(), id,WalletReferenceType.ADVANCE_AMOUNT, "ntfs/rgfs",addWalletRequest.getAmount());addWalletRequest.setStatus(AddWalletRequestStatus.approved);addWalletRequest.setUpdateTimestamp(LocalDateTime.now());addWalletRequestRepository.persist(addWalletRequest);model.addAttribute("response", mvcResponseSender.createResponseString(true));CustomRetailer customRetailer=retailerService.getFofoRetailer(addWalletRequest.getRetailerId());String subject = "Request Approved for "+customRetailer.getBusinessName()+" of Rs."+ addWalletRequest.getAmount();String messageText = MessageFormat.format("User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",new Integer(addWalletRequest.getRetailerId()),customRetailer.getBusinessName(),customRetailer.getEmail(),customRetailer.getMobileNumber(),addWalletRequest.getTransaction_reference(),new Float(addWalletRequest.getAmount()));this.sendMailWithAttachments(subject, messageText);return "response";}@RequestMapping(value = "/addAmountToWalletRequestRejected", method = RequestMethod.PUT)public String addAmountToWalletRequestRejected(HttpServletRequest request,@RequestParam(name = "id", defaultValue = "0")int id,Model model)throws Exception {AddWalletRequest addWalletRequest= addWalletRequestRepository.selectById(id);addWalletRequest.setStatus(AddWalletRequestStatus.rejected);addWalletRequest.setUpdateTimestamp(LocalDateTime.now());addWalletRequestRepository.persist(addWalletRequest);model.addAttribute("response", mvcResponseSender.createResponseString(true));CustomRetailer customRetailer=retailerService.getFofoRetailer(addWalletRequest.getRetailerId());String subject = "Request Rejected for "+customRetailer.getBusinessName()+" of Rs."+ addWalletRequest.getAmount();String messageText = MessageFormat.format("User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",new Integer(addWalletRequest.getRetailerId()),customRetailer.getBusinessName(),customRetailer.getEmail(),customRetailer.getMobileNumber(),addWalletRequest.getTransaction_reference(),new Float(addWalletRequest.getAmount()));this.sendMailWithAttachments(subject, messageText);return "response";}private void sendMailWithAttachments(String subject, String messageText) throws Exception {MimeMessage message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);String[] email = {"adeel.yazdani@smartdukaan.com","kamini.sharma@smartdukaan.com","care@smartdukaan.com","mohinder.mutreja@smartdukaan.com"};helper.setSubject(subject);helper.setText(messageText);helper.setTo(email);InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "ProfitMandi Admin");helper.setFrom(senderAddress);mailSender.send(message);}private List<Integer> getFofoIdsFromWalletRequest(List<AddWalletRequest> walletRequest){List<Integer> fofoIds = new ArrayList<>();for(AddWalletRequest walletdetail :walletRequest ) {fofoIds.add(walletdetail.getRetailerId());}return fofoIds;}}