Blame | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;import in.shop2020.support.services.PaymentDetailsGenerator;import in.shop2020.support.utils.ReportsUtils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.servlet.ServletContext;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class PaymentReconciliationController implements ServletRequestAware, ServletResponseAware, ServletContextAware {private static Logger logger = LoggerFactory.getLogger(PaymentReconciliationController.class);private HttpServletRequest request;private HttpSession session;private HttpServletResponse response;private ServletContext context;private String errorMsg = "";private final String authsuccess = "authsuccess";public PaymentReconciliationController() {}public String index() {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {return "authfail";}return authsuccess;}// Handles the POST request (Form Submission)public String create() {// Formatting Form input parametersString startDateStr = request.getParameter("startDate");String endDateStr = request.getParameter("endDate");DateFormat df = new SimpleDateFormat("dd/MM/yyyy");Date startDate = null, endDate = null;try {startDate = df.parse(startDateStr);endDate = df.parse(endDateStr);Calendar cal = Calendar.getInstance();cal.setTime(endDate);cal.add(Calendar.DATE, 1);endDate.setTime(cal.getTimeInMillis());} catch (ParseException pe) {errorMsg = "Please enter start and end dates in format dd/MM/yyyy";return authsuccess;} catch (NumberFormatException nfe) {errorMsg = "Please select payment status";return authsuccess;}PaymentDetailsGenerator paymentDetailGenerator = new PaymentDetailsGenerator();ByteArrayOutputStream baos = paymentDetailGenerator.generatePaymentReconciliationReport(startDate, endDate);if (baos == null) {errorMsg = "No payments were captured in the given date range";return authsuccess;} else {errorMsg = "Generating report...";}// Preparing XLS file for outputDateFormat dateFormatForFile = new SimpleDateFormat("dd.MM.yyyy");response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "inline; filename=payments-reconciliation-" + dateFormatForFile.format(startDate) + "-" + dateFormatForFile.format(endDate) + ".xls");ServletOutputStream sos;try {sos = response.getOutputStream();baos.writeTo(sos);sos.flush();errorMsg = "Report generated";} catch (IOException e) {errorMsg = "Failed to write to response.";logger.error("Unable to stream the payment details report", e);}return authsuccess;}public String getErrorMsg() {return errorMsg;}@Overridepublic void setServletRequest(HttpServletRequest req) {this.request = req;this.session = req.getSession();}@Overridepublic void setServletResponse(HttpServletResponse res) {this.response = res;}@Overridepublic void setServletContext(ServletContext context) {this.context = context;}public String getServletContextPath() {return context.getContextPath();}}