Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
5717 rajveer 1
package in.shop2020.support.controllers;
2
 
3
import in.shop2020.logistics.PickupStore;
4
import in.shop2020.model.v1.order.LineItem;
5
import in.shop2020.model.v1.order.Order;
6
import in.shop2020.model.v1.order.TransactionService.Client;
7
import in.shop2020.support.utils.ReportsUtils;
8
import in.shop2020.thrift.clients.LogisticsClient;
9
import in.shop2020.thrift.clients.TransactionClient;
10
 
11
import java.io.ByteArrayOutputStream;
12
import java.io.IOException;
13
import java.text.DateFormat;
14
import java.text.ParseException;
15
import java.text.SimpleDateFormat;
16
import java.util.Calendar;
17
import java.util.Date;
18
import java.util.List;
19
 
20
import javax.servlet.ServletContext;
21
import javax.servlet.ServletOutputStream;
22
import javax.servlet.http.HttpServletRequest;
23
import javax.servlet.http.HttpServletResponse;
24
import javax.servlet.http.HttpSession;
25
 
26
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
27
import org.apache.poi.ss.usermodel.CellStyle;
28
import org.apache.poi.ss.usermodel.DataFormat;
29
import org.apache.poi.ss.usermodel.Font;
30
import org.apache.poi.ss.usermodel.Row;
31
import org.apache.poi.ss.usermodel.Sheet;
32
import org.apache.poi.ss.usermodel.Workbook;
33
import org.apache.struts2.convention.annotation.InterceptorRef;
34
import org.apache.struts2.convention.annotation.InterceptorRefs;
35
import org.apache.struts2.convention.annotation.Result;
36
import org.apache.struts2.convention.annotation.Results;
37
import org.apache.struts2.interceptor.ServletRequestAware;
38
import org.apache.struts2.interceptor.ServletResponseAware;
39
import org.apache.struts2.util.ServletContextAware;
40
import org.apache.thrift.TException;
41
import org.slf4j.Logger;
42
import org.slf4j.LoggerFactory;
43
 
44
 
45
@InterceptorRefs({
46
    @InterceptorRef("defaultStack"),
47
    @InterceptorRef("login")
48
})
49
@Results({
50
    @Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})
51
})
52
public class StoreCollectionController implements ServletRequestAware, ServletResponseAware, ServletContextAware {
53
 
54
    private static Logger logger = LoggerFactory.getLogger(StoreCollectionController.class);
55
 
56
    private HttpServletRequest request;
57
    private HttpSession session;
58
    private HttpServletResponse response;
59
    private ServletContext context;
60
 
61
    private String error = "";
62
 
63
    private Client client;
64
 
5730 rajveer 65
    private List<PickupStore> stores;
66
 
67
    public StoreCollectionController() throws TException{
5717 rajveer 68
    	client = (new TransactionClient()).getClient();
5730 rajveer 69
    	stores = (new LogisticsClient()).getClient().getAllPickupStores();
5717 rajveer 70
    }
71
    public String index() {
72
        if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {
73
            return "authfail";
74
        }
75
        return "index";
76
    }
77
 
78
    // Handles the POST request (Form Submission)
79
    public String create() throws TException {
80
    	String storeIdString = request.getParameter("storeId");
81
    	String startDateStr = request.getParameter("startDate");
82
        String endDateStr = request.getParameter("endDate");
83
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
84
        Date startDate = null, endDate = null;
85
        long storeId = 0;
86
        try {
87
        	storeId = Long.parseLong(storeIdString);
88
            startDate = df.parse(startDateStr);
89
            endDate = df.parse(endDateStr);
90
            Calendar cal = Calendar.getInstance();
91
            cal.setTime(endDate);
92
            cal.add(Calendar.DATE, 1);
93
            endDate.setTime(cal.getTimeInMillis());
94
        } catch (ParseException pe) {
95
            error = "Please enter start and end dates in format MM/dd/yyyy";
96
        } 
97
 
98
        ByteArrayOutputStream baos = generateCollectionReport(startDate, endDate, storeId);
99
 
100
        if (baos == null) {
101
            error = "No output for given date range";
102
        } else {
103
            error = "Generating report...";
104
        }
105
        response.setContentType("application/vnd.ms-excel");
106
        response.setHeader("Content-disposition", "inline; filename=collection-report.xls");
107
        ServletOutputStream sos;
108
        try {
109
            sos = response.getOutputStream();
110
            baos.writeTo(sos);
111
            sos.flush();
112
            error = "Report generated";
113
        } catch (IOException e) {
114
            error = "Failed to write to response.";
115
            logger.error("Unable to stream the colection report", e);
116
        }
117
        return "index";
118
    }
119
 
120
 
121
    private ByteArrayOutputStream generateCollectionReport(Date startDate,	Date endDate, long storeId) throws TException {
122
    	List<Order> orders = client.getOrdersCollectionAtStore(storeId, startDate.getTime(), endDate.getTime(), true);
123
        ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
124
 
125
        Workbook wb = new HSSFWorkbook();
126
 
127
        DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
128
        Font font = wb.createFont();
129
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
130
        CellStyle style = wb.createCellStyle();
131
        style.setFont(font);
132
 
133
        DataFormat format = wb.createDataFormat();
134
        CellStyle styleAmount = wb.createCellStyle();
135
        styleAmount.setDataFormat(format.getFormat("#,##0.00"));
136
 
137
        Sheet collectionSheet = wb.createSheet("Collection");
138
        short collectionSerialNo = 0;
139
 
140
        Row headerRow = collectionSheet.createRow(collectionSerialNo++);
141
        headerRow.createCell(0).setCellValue("S.No");
5730 rajveer 142
        headerRow.createCell(1).setCellValue("Store Id");
143
        headerRow.createCell(2).setCellValue("Order Id");
144
        headerRow.createCell(3).setCellValue("Product");
145
        headerRow.createCell(4).setCellValue("Order Type");
146
        headerRow.createCell(5).setCellValue("Collection Date");
147
        headerRow.createCell(6).setCellValue("Order Amount");
148
        headerRow.createCell(7).setCellValue("Collected Amount");
5717 rajveer 149
        //headerRow.createCell(7).setCellValue("Store Margin");
150
 
151
        for(Order order: orders){
152
        	Row contentRow = collectionSheet.createRow(collectionSerialNo++);
153
        	LineItem line = order.getLineitems().get(0);
154
        	String productName = line.getBrand() + " " + line.getModel_name() + " " + line.getModel_number() + " " + line.getColor();
155
        	productName = productName.replaceAll("null", "").replaceAll("  ", " ");
156
        	contentRow.createCell(0).setCellValue(collectionSerialNo-1);
5730 rajveer 157
        	contentRow.createCell(1).setCellValue(getHotspotId(order.getPickupStoreId()));
158
        	contentRow.createCell(2).setCellValue(order.getId());
159
        	contentRow.createCell(3).setCellValue(productName);
160
        	contentRow.createCell(4).setCellValue(order.isCod() ? "COD" : "Prepaid");
161
        	contentRow.createCell(5).setCellValue(formatter.format(order.getDelivery_timestamp()));
162
        	contentRow.createCell(6).setCellValue(order.getTotal_amount());
163
        	contentRow.createCell(7).setCellValue(order.isCod() ? order.getTotal_amount() : 0.0);
5717 rajveer 164
        	//contentRow.createCell(7).setCellValue(order.isCod() ? .01 * order.getTotal_amount() : .005 * order.getTotal_amount());
165
        }
166
 
167
        try {
168
            wb.write(baosXLS);
169
            baosXLS.close();
170
        } catch (IOException e) {
171
            logger.error("Error while streaming payment details report", e);
172
        }
173
		return baosXLS;
174
	}
175
 
5730 rajveer 176
    private String getHotspotId(long storeId){
177
    	for(PickupStore store: stores){
178
    		if(store.getId() == storeId){
179
    			return store.getHotspotId();
180
    		}
181
    	}
182
    	return "";
183
    }
5717 rajveer 184
 
185
    public String getErrorMsg() {
186
        return error;
187
    }
188
 
189
    @Override
190
    public void setServletRequest(HttpServletRequest req) {
191
        this.request = req;
192
        this.session = req.getSession();        
193
    }
194
 
195
    @Override
196
    public void setServletResponse(HttpServletResponse res) {
197
        this.response = res;
198
    }
199
 
200
    @Override
201
    public void setServletContext(ServletContext context) {
202
        this.context = context;
203
    }
204
 
205
    public String getServletContextPath() {
206
        return context.getContextPath();
207
    }
208
 
5730 rajveer 209
    public List<PickupStore> getAllStores(){
210
    	return stores;
5717 rajveer 211
    }
212
}