Subversion Repositories SmartDukaan

Rev

Rev 2190 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1586 ankur.sing 1
package in.shop2020.support.controllers;
2
 
1631 ankur.sing 3
import in.shop2020.support.services.PaymentDetailsGenerator;
1941 ankur.sing 4
import in.shop2020.support.utils.ReportsUtils;
1586 ankur.sing 5
 
6
import java.io.ByteArrayOutputStream;
7
import java.io.IOException;
8
import java.text.DateFormat;
9
import java.text.ParseException;
10
import java.text.SimpleDateFormat;
11
import java.util.Calendar;
12
import java.util.Date;
13
 
1941 ankur.sing 14
import javax.servlet.ServletContext;
1586 ankur.sing 15
import javax.servlet.ServletOutputStream;
1941 ankur.sing 16
import javax.servlet.http.HttpServletRequest;
17
import javax.servlet.http.HttpServletResponse;
18
import javax.servlet.http.HttpSession;
1586 ankur.sing 19
 
1891 ankur.sing 20
import org.apache.struts2.convention.annotation.InterceptorRef;
21
import org.apache.struts2.convention.annotation.InterceptorRefs;
1941 ankur.sing 22
import org.apache.struts2.interceptor.ServletRequestAware;
23
import org.apache.struts2.interceptor.ServletResponseAware;
24
import org.apache.struts2.util.ServletContextAware;
3213 chandransh 25
import org.slf4j.Logger;
26
import org.slf4j.LoggerFactory;
1586 ankur.sing 27
 
28
 
1891 ankur.sing 29
@InterceptorRefs({
1941 ankur.sing 30
    @InterceptorRef("defaultStack"),
1891 ankur.sing 31
    @InterceptorRef("login")
32
})
1631 ankur.sing 33
 
1941 ankur.sing 34
public class PaymentDetailsController implements ServletRequestAware, ServletResponseAware, ServletContextAware {
1891 ankur.sing 35
 
3213 chandransh 36
    private static Logger logger = LoggerFactory.getLogger(PaymentDetailsController.class);
37
 
1941 ankur.sing 38
    private HttpServletRequest request;
39
    private HttpSession session;
40
    private HttpServletResponse response;
41
    private ServletContext context;
42
 
1677 ankur.sing 43
    private String errorMsg = "";
44
    private final String authsuccess = "authsuccess";
45
    public PaymentDetailsController() {
1631 ankur.sing 46
 
1677 ankur.sing 47
    }
1631 ankur.sing 48
 
1677 ankur.sing 49
    public String index() {
1941 ankur.sing 50
        if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {
1891 ankur.sing 51
            return "exception";
1677 ankur.sing 52
        }
1891 ankur.sing 53
        return authsuccess;
1677 ankur.sing 54
    }
1631 ankur.sing 55
 
1677 ankur.sing 56
    // Handles the POST request (Form Submission)
57
    public String create() {
58
        // Formatting Form input parameters
1941 ankur.sing 59
        /*String startDateStr = getServletRequest().getParameter("startDate");
1891 ankur.sing 60
        String endDateStr = getServletRequest().getParameter("endDate");
1941 ankur.sing 61
        String statusStr = getServletRequest().getParameter("status");*/
62
        String startDateStr = request.getParameter("startDate");
63
        String endDateStr = request.getParameter("endDate");
64
        String statusStr = request.getParameter("status");
1881 ankur.sing 65
        String filenameStr = "";
66
        int status = 1;
1677 ankur.sing 67
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
68
        Date startDate = null, endDate = null;
69
        try {
70
            startDate = df.parse(startDateStr);
71
            endDate = df.parse(endDateStr);
72
            Calendar cal = Calendar.getInstance();
73
            cal.setTime(endDate);
74
            cal.add(Calendar.DATE, 1);
75
            endDate.setTime(cal.getTimeInMillis());
1881 ankur.sing 76
            status = Integer.parseInt(statusStr);
1891 ankur.sing 77
            filenameStr = (status == 0 ? "success" : "failed-pending");
1677 ankur.sing 78
        } catch (ParseException pe) {
79
            errorMsg = "Please enter start and end dates in format MM/dd/yyyy";
80
            return authsuccess;
1881 ankur.sing 81
        } catch (NumberFormatException nfe) {
82
            errorMsg = "Please select payment status";
83
            return authsuccess;
1677 ankur.sing 84
        }
1631 ankur.sing 85
 
1677 ankur.sing 86
        PaymentDetailsGenerator paymentDetailGenerator = new PaymentDetailsGenerator();
1881 ankur.sing 87
        ByteArrayOutputStream baos = paymentDetailGenerator.generatePaymentDetailsReport(startDate, endDate, status);
1631 ankur.sing 88
 
1677 ankur.sing 89
        if (baos == null) {
90
            errorMsg = "No output for given date range";
91
            return authsuccess;
92
        } else {
1891 ankur.sing 93
            errorMsg = "Generating report...";
1677 ankur.sing 94
        }
1586 ankur.sing 95
 
1677 ankur.sing 96
        // Preparing XLS file for output
1941 ankur.sing 97
        response.setContentType("application/vnd.ms-excel");
98
        response.setHeader("Content-disposition", "inline; filename=payments-report-" + filenameStr + ".xls");
1677 ankur.sing 99
        ServletOutputStream sos;
100
        try {
1941 ankur.sing 101
            sos = response.getOutputStream();
1677 ankur.sing 102
            baos.writeTo(sos);
103
            sos.flush();
1891 ankur.sing 104
            errorMsg = "Report generated";
1677 ankur.sing 105
        } catch (IOException e) {
106
            errorMsg = "Failed to write to response.";
3213 chandransh 107
            logger.error("Unable to stream the payment details report", e);
1677 ankur.sing 108
        }
109
        return authsuccess;
110
    }
1586 ankur.sing 111
 
1677 ankur.sing 112
    public String getErrorMsg() {
113
        return errorMsg;
114
    }
1941 ankur.sing 115
 
116
    @Override
117
    public void setServletRequest(HttpServletRequest req) {
118
        this.request = req;
119
        this.session = req.getSession();        
120
    }
121
 
122
    @Override
123
    public void setServletResponse(HttpServletResponse res) {
124
        this.response = res;
125
    }
126
 
127
    @Override
128
    public void setServletContext(ServletContext context) {
129
        this.context = context;
130
    }
131
 
132
    public String getServletContextPath() {
133
        return context.getContextPath();
134
    }
1586 ankur.sing 135
}