Subversion Repositories SmartDukaan

Rev

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