Rev 3449 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;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 in.shop2020.logistics.LogisticsServiceException;import in.shop2020.logistics.Provider;import in.shop2020.support.services.CourierReconciliationGenerator;import in.shop2020.support.utils.ReportsUtils;import in.shop2020.thrift.clients.LogisticsClient;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.convention.annotation.InterceptorRef;import org.apache.struts2.convention.annotation.InterceptorRefs;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import org.apache.thrift.TException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@InterceptorRefs({@InterceptorRef("defaultStack"),@InterceptorRef("login")})@Results({@Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})})public class CourierReconciliationController implements ServletRequestAware, ServletResponseAware, ServletContextAware{private static Logger logger = LoggerFactory.getLogger(CourierReconciliationController.class);private HttpServletRequest request;private HttpSession session;private HttpServletResponse response;private ServletContext context;private String errorMsg = "";public String index() {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {return "authfail";}return "index";}public String create() {// Formatting Form input parametersString startDateStr = request.getParameter("startDate");String endDateStr = request.getParameter("endDate");String providerIdStr = request.getParameter("providerId");String payModeStr = request.getParameter("payMode");int providerId = 1;boolean payMode = false;DateFormat df = new SimpleDateFormat("MM/dd/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());providerId = Integer.parseInt(providerIdStr);payMode = Boolean.parseBoolean(payModeStr);} catch (ParseException pe) {errorMsg = "Please enter start and end dates in format MM/dd/yyyy";return "index";} catch (NumberFormatException nfe) {errorMsg = "Please select a provider and a payment mode";return "index";}Provider provider = null;try {LogisticsClient lsc = new LogisticsClient();in.shop2020.logistics.LogisticsService.Client logisticsClient = lsc.getClient();provider = logisticsClient.getProvider(providerId);} catch (TException e) {logger.error("Error getting information from one of the Thrift Services: ", e);return "index";} catch (LogisticsServiceException e) {logger.error("Error getting provider info from the logistics service: ", e);return "index";}CourierReconciliationGenerator crGenerator = new CourierReconciliationGenerator();ByteArrayOutputStream baos = crGenerator.generateCourierReconciliationReport(startDate, endDate, providerId, payMode);if (baos == null) {errorMsg = "No output for given date range";return "index";}// Preparing XLS file for outputresponse.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "inline; filename=" + provider.getName() + (payMode ? "-cod" : "-prepaid") + "-courier-reconciliation-" + startDateStr + "-" + endDateStr + ".xls");ServletOutputStream sos;try {sos = response.getOutputStream();baos.writeTo(sos);sos.flush();} catch (IOException e) {errorMsg = "Failed to write to response.";logger.error("Unable to stream the payment details report", e);}return "index";}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();}}