Subversion Repositories SmartDukaan

Rev

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