Rev 5730 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;import in.shop2020.logistics.PickupStore;import in.shop2020.model.v1.order.LineItem;import in.shop2020.model.v1.order.Order;import in.shop2020.model.v1.order.TransactionService.Client;import in.shop2020.support.utils.ReportsUtils;import in.shop2020.thrift.clients.LogisticsClient;import in.shop2020.thrift.clients.TransactionClient;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 java.util.List;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.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.DataFormat;import org.apache.poi.ss.usermodel.Font;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;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 StoreCollectionController implements ServletRequestAware, ServletResponseAware, ServletContextAware {private static Logger logger = LoggerFactory.getLogger(StoreCollectionController.class);private HttpServletRequest request;private HttpSession session;private HttpServletResponse response;private ServletContext context;private String error = "";private Client client;private List<PickupStore> stores;public StoreCollectionController() throws TException{client = (new TransactionClient()).getClient();stores = (new LogisticsClient()).getClient().getAllPickupStores();}public String index() {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {return "authfail";}return "index";}// Handles the POST request (Form Submission)public String create() throws TException {String storeIdString = request.getParameter("storeId");String startDateStr = request.getParameter("startDate");String endDateStr = request.getParameter("endDate");DateFormat df = new SimpleDateFormat("dd/MM/yyyy");Date startDate = null, endDate = null;long storeId = 0;try {storeId = Long.parseLong(storeIdString);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) {error = "Please enter start and end dates in format MM/dd/yyyy";}ByteArrayOutputStream baos = generateCollectionReport(startDate, endDate, storeId);if (baos == null) {error = "No output for given date range";} else {error = "Generating report...";}response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "inline; filename=collection-report.xls");ServletOutputStream sos;try {sos = response.getOutputStream();baos.writeTo(sos);sos.flush();error = "Report generated";} catch (IOException e) {error = "Failed to write to response.";logger.error("Unable to stream the colection report", e);}return "index";}private ByteArrayOutputStream generateCollectionReport(Date startDate, Date endDate, long storeId) throws TException {List<Order> orders = client.getOrdersCollectionAtStore(storeId, startDate.getTime(), endDate.getTime(), true);ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();Workbook wb = new HSSFWorkbook();DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");Font font = wb.createFont();font.setBoldweight(Font.BOLDWEIGHT_BOLD);CellStyle style = wb.createCellStyle();style.setFont(font);DataFormat format = wb.createDataFormat();CellStyle styleAmount = wb.createCellStyle();styleAmount.setDataFormat(format.getFormat("#,##0.00"));Sheet collectionSheet = wb.createSheet("Collection");short collectionSerialNo = 0;Row headerRow = collectionSheet.createRow(collectionSerialNo++);headerRow.createCell(0).setCellValue("S.No");headerRow.createCell(1).setCellValue("Store Id");headerRow.createCell(2).setCellValue("Order Id");headerRow.createCell(3).setCellValue("Product");headerRow.createCell(4).setCellValue("Order Type");headerRow.createCell(5).setCellValue("Collection Date");headerRow.createCell(6).setCellValue("Order Amount");headerRow.createCell(7).setCellValue("Collected Amount");//headerRow.createCell(7).setCellValue("Store Margin");for(Order order: orders){Row contentRow = collectionSheet.createRow(collectionSerialNo++);LineItem line = order.getLineitems().get(0);String productName = line.getBrand() + " " + line.getModel_name() + " " + line.getModel_number() + " " + line.getColor();productName = productName.replaceAll("null", "").replaceAll(" ", " ");contentRow.createCell(0).setCellValue(collectionSerialNo-1);contentRow.createCell(1).setCellValue(getHotspotId(order.getPickupStoreId()));contentRow.createCell(2).setCellValue(order.getId());contentRow.createCell(3).setCellValue(productName);contentRow.createCell(4).setCellValue(order.isCod() ? "COD" : "Prepaid");contentRow.createCell(5).setCellValue(formatter.format(order.getDelivery_timestamp()));contentRow.createCell(6).setCellValue(order.getTotal_amount()-order.getGvAmount());contentRow.createCell(7).setCellValue(order.isCod() ? order.getTotal_amount() : 0.0);//contentRow.createCell(7).setCellValue(order.isCod() ? .01 * order.getTotal_amount() : .005 * order.getTotal_amount());}try {wb.write(baosXLS);baosXLS.close();} catch (IOException e) {logger.error("Error while streaming payment details report", e);}return baosXLS;}private String getHotspotId(long storeId){for(PickupStore store: stores){if(store.getId() == storeId){return store.getHotspotId();}}return "";}public String getErrorMsg() {return error;}@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();}public List<PickupStore> getAllStores(){return stores;}}