Subversion Repositories SmartDukaan

Rev

Rev 7096 | Rev 7169 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.recharge.controllers;


import in.shop2020.model.v1.order.RechargeOrderStatus;
import in.shop2020.model.v1.order.RechargeTransaction;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.warehouse.InventoryAvailability;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

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.CreationHelper;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
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.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sun.mail.iap.Response;



public class ReportController implements ServletRequestAware, ServletContextAware, ServletResponseAware {

    private static Logger logger = LoggerFactory.getLogger(ReportController.class);
    
    protected HttpServletRequest request;
    protected HttpSession session;
    protected HttpServletResponse response;
    private ServletContext context;
    private String startDate;
        private String endDate;
        private String status;
        private String dateselector;
        
        private TransactionClient tsc;
    private in.shop2020.model.v1.order.TransactionService.Client tClient;
    
    private final DateFormat formatter = new SimpleDateFormat("EEE, dd-MMM-yyyy hh:mm a");
    private final DateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
        
    private List<RechargeTransaction> txns = null;
    public ReportController(){
            try {
            tsc = new TransactionClient();
            tClient = tsc.getClient();
        } catch (Exception e) {
            logger.error("Error connecting to one of the user, order or payment service", e);
        }
        }
                
    
        public String index() throws Exception{
            String loginStatus = (String) request.getSession().getAttribute("LOGGED_IN");
        if(loginStatus == null || !loginStatus.equals("TRUE")){
            return "authfail";
        }
        txns = tClient.getRechargeTransactions(Long.parseLong((String) request.getSession().getAttribute("STORE_ID")));
        return "index";
        }
        
        public String create() throws Exception{
                long sDate = -1;
                long eDate = -1;
                RechargeOrderStatus st = null;
                String loginStatus = (String) request.getSession().getAttribute("LOGGED_IN");
                if(loginStatus == null || !loginStatus.equals("TRUE")){
                        return "authfail";
                }
                if(dateselector.equals("1")) {
                        sDate = new Date().getTime();
                        eDate = sDate;
                }else if (dateselector.equals("2")) {
                        sDate = new Date().getTime() - 86400*1000;
                        eDate = sDate;
                }else {
                        if(!(startDate.equals(""))) {
                                sDate = dateFormatter.parse(startDate).getTime();
                                startDate = dateFormatter.format(sDate);
                        }
                        if(!endDate.equals("")) {
                                eDate = dateFormatter.parse(endDate).getTime();
                                endDate = dateFormatter.format(sDate);
                        }
                }
                if(!status.equals("-1")){
                        st = RechargeOrderStatus.findByValue(Integer.parseInt("0"));
                }

                ByteArrayOutputStream baos = generateReport(tClient.getRechargeTrans(Long.parseLong((String) request.getSession().getAttribute("STORE_ID")), sDate, eDate, st));
        
                response.setContentType("application/vnd.ms-excel");
                String st1 = "ALL";
                if(st!=null){
                        st1 = st.name();
                }
                String fileName = st1 + "-recharge-report";
                if (!startDate.equals("")) {
                        fileName = fileName + "-" + startDate.replaceAll("\\\\", "") ;
                }
                if (!endDate.equals("")) {
                        fileName = fileName + "-" + endDate.replaceAll("\\\\", "") ;
                }
                fileName = fileName + ".xls";
                response.setHeader("Content-disposition", "inline; filename=" + fileName);
        ServletOutputStream sos;
        try {
            sos = response.getOutputStream();
            baos.writeTo(sos);
            sos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
                return "index";
        }
        
            
    private ByteArrayOutputStream generateReport(
                        List<RechargeTransaction> rechargeTrans) {
ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
                
            Workbook wb = new HSSFWorkbook();
            
            Sheet reportSheet = wb.createSheet("Recharge Report");
            
            Row reportSheetHeader = reportSheet.createRow((short)0);
            reportSheetHeader.createCell(0).setCellValue("Order ID");
            reportSheetHeader.createCell(1).setCellValue("Order Date");
            reportSheetHeader.createCell(2).setCellValue("Operator");
            reportSheetHeader.createCell(3).setCellValue("Device");
            reportSheetHeader.createCell(4).setCellValue("Status");
            reportSheetHeader.createCell(5).setCellValue("Amount");
            reportSheetHeader.createCell(6).setCellValue("Discount");
            
            int serialNo = 0;
            
            for(RechargeTransaction transaction : rechargeTrans) {
                serialNo++;
                Row contentRow = reportSheet.createRow((short)serialNo);
                contentRow.createCell(0).setCellValue(transaction.getId());
                contentRow.createCell(1).setCellValue(formatter.format(new Date(transaction.getTransactionTime())));
                contentRow.createCell(2).setCellValue(getOperatorName(transaction.getOperatorId()));
                contentRow.createCell(3).setCellValue(transaction.getDeviceNum());
                contentRow.createCell(4).setCellValue(transaction.getStatus().name());
                contentRow.createCell(5).setCellValue(transaction.getAmount());
                contentRow.createCell(6).setCellValue(transaction.getDiscount());
            }
            try {
                        wb.write(baosXLS);
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
            return baosXLS;
        }


        public String getDateTime(long milliseconds) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(milliseconds);
        return formatter.format(cal.getTime());
    }

    public List<RechargeTransaction> getTxns(){
        return txns;
    }
    
    @Override
    public void setServletRequest(HttpServletRequest req) {
        this.request = req;
        this.session = req.getSession();        
    }
    
    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }
    
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }

    public String getServletContextPath() {
        return context.getContextPath();
    }
    
    public String getOperatorName(long operatorId) {
        String operatorName = "";
        if (HomeController.getMobileProvidersMap().containsKey(operatorId)) {
            operatorName = HomeController.getMobileProvidersMap().get(operatorId);
        } else if(HomeController.getDthProvidersMap().containsKey(operatorId)) {
            operatorName = HomeController.getDthProvidersMap().get(operatorId);
        } else {
            operatorName = "N/A";
        }
        return operatorName;
    }
    
        public String getStartDate() {
                return startDate;
        }
        
        
        public void setStartDate(String startDate) {
                this.startDate = startDate;
        }

        public String getEndDate() {
                return endDate;
        }


        public void setEndDate(String endDate) {
                this.endDate = endDate;
        }
        
        public String getStatus() {
                return status;
        }


        public void setStatus(String status) {
                this.status = status;
        }


        public String getDateselector() {
                return dateselector;
        }


        public void setDateselector(String dateselector) {
                this.dateselector = dateselector;
        }
        
        

}