Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
5559 rajveer 1
package in.shop2020.support.controllers;
2
 
3
 
4
 
5678 rajveer 5
import in.shop2020.model.v1.order.Attribute;
5714 rajveer 6
import in.shop2020.model.v1.order.LineItem;
5559 rajveer 7
import in.shop2020.model.v1.order.Order;
8
import in.shop2020.model.v1.order.TransactionService.Client;
9
import in.shop2020.model.v1.order.TransactionServiceException;
10
import in.shop2020.thrift.clients.TransactionClient;
11
 
5714 rajveer 12
import java.io.ByteArrayOutputStream;
13
import java.io.IOException;
14
import java.text.DateFormat;
15
import java.text.ParseException;
16
import java.text.SimpleDateFormat;
5678 rajveer 17
import java.util.ArrayList;
5559 rajveer 18
import java.util.Calendar;
5714 rajveer 19
import java.util.Date;
20
import java.util.HashMap;
5559 rajveer 21
import java.util.List;
22
 
23
import javax.servlet.ServletContext;
5714 rajveer 24
import javax.servlet.ServletOutputStream;
5559 rajveer 25
import javax.servlet.http.HttpServletRequest;
26
import javax.servlet.http.HttpServletResponse;
27
 
5714 rajveer 28
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
29
import org.apache.poi.ss.usermodel.CellStyle;
30
import org.apache.poi.ss.usermodel.DataFormat;
31
import org.apache.poi.ss.usermodel.Font;
32
import org.apache.poi.ss.usermodel.Row;
33
import org.apache.poi.ss.usermodel.Sheet;
34
import org.apache.poi.ss.usermodel.Workbook;
5559 rajveer 35
import org.apache.struts2.interceptor.ServletRequestAware;
36
import org.apache.struts2.interceptor.ServletResponseAware;
37
import org.apache.struts2.util.ServletContextAware;
38
import org.apache.thrift.TException;
39
import org.apache.thrift.transport.TTransportException;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
42
 
43
public class PickupStoreController implements ServletResponseAware, ServletRequestAware, ServletContextAware {
44
 
45
    private static Logger logger = LoggerFactory.getLogger(PickupStoreController.class);
46
 
47
    private HttpServletRequest request;
48
    private HttpServletResponse response;
49
    private ServletContext context;
50
    private String storeIdString;
51
    private long storeId;
5678 rajveer 52
    private String id;
53
    private String error = "";
5693 rajveer 54
    private Client client;
5559 rajveer 55
 
5693 rajveer 56
    public PickupStoreController() throws TTransportException{
57
    	client = (new TransactionClient()).getClient();
58
    }
59
 
5559 rajveer 60
    @Override
61
    public void setServletRequest(HttpServletRequest req) {
62
        this.request = req;
63
    }
64
 
65
    public HttpServletRequest getServletRequest() {
66
        return request;
67
    }
68
 
69
    @Override
70
    public void setServletResponse(HttpServletResponse res) {
71
        this.response = res;
72
    }
73
 
74
    public HttpServletResponse getServletResponse() {
75
        return response;
76
    }
77
 
78
    @Override
79
    public void setServletContext(ServletContext context) {
80
        this.context = context;
81
    }
82
 
83
    public String getServletContextPath() {
84
        return context.getContextPath();
85
    }
86
 
87
    public String index(){
88
    	storeIdString = (String) request.getSession().getAttribute("STORE_ID");
89
    	if(storeIdString == null){
90
    		storeIdString = request.getParameter("storeid");
91
    		if(storeIdString == null){
92
    			return "authfail";
93
    		}else{
94
    			request.getSession().setAttribute("STORE_ID", storeIdString);
95
    		}
96
    	}
97
    	storeId = Long.parseLong(storeIdString);
98
    	return "index";
99
    }
5678 rajveer 100
 
101
    public String show(){
102
    	storeIdString = (String) request.getSession().getAttribute("STORE_ID");
103
    	if(storeIdString == null){
104
    		storeIdString = request.getParameter("storeid");
105
    		if(storeIdString == null){
106
    			return "authfail";
107
    		}else{
108
    			request.getSession().setAttribute("STORE_ID", storeIdString);
109
    		}
110
    	}
111
    	storeId = Long.parseLong(storeIdString);
112
    	return "show";
113
    }
5559 rajveer 114
 
115
    // Handles the POST request (Form Submission)
116
    public String create() {
117
    	storeIdString = (String) request.getSession().getAttribute("STORE_ID");
118
    	if(storeIdString == null){
119
    		return "authfail";
120
    	}
121
    	storeId = Long.parseLong(storeIdString);
122
    	String orderIdString = request.getParameter("orderid");
123
    	String action = request.getParameter("action");
5693 rajveer 124
		try {
125
			Client client = (new TransactionClient()).getClient();
126
			if(action.equals("markreceived")){
127
				long orderId = Long.parseLong(orderIdString);
128
				client.markOrderAsReceivedAtStore(orderId, Calendar.getInstance().getTimeInMillis());	
5714 rajveer 129
			}else if(action.equals("markrejected")){
130
				long orderId = Long.parseLong(orderIdString);
131
				Order order = client.getOrder(orderId);
132
				DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
133
				String returnReason = formatter.format(Calendar.getInstance().getTime()) + "|Returned from store.";
134
				HashMap<String, String> orderMap = new HashMap<String, String>();
135
				orderMap.put(order.getAirwaybill_no(), returnReason);
136
				client.markAsRTOrders(order.getLogistics_provider_id(), orderMap);	
5693 rajveer 137
			}else if(action.equals("markdelivered")){
138
				long orderId = Long.parseLong(orderIdString);
139
		    	String receiver = request.getParameter("receiver");
140
				String secretCode = request.getParameter("secretcode");
141
				Order order = client.getOrder(orderId);
142
				List<Attribute> attributes = client.getAllAttributesForOrderId(orderId);
143
				for(Attribute attribute: attributes){
144
					if(attribute.getName().equals("SECRET_CODE")){
145
						if(!attribute.getValue().equalsIgnoreCase(secretCode)){
146
							error = "Secret code does not match";
5678 rajveer 147
						}
148
					}
5693 rajveer 149
				}
150
				List<Attribute> newAttributes = new ArrayList<Attribute>();
151
				if(order.isCod()){
152
					double amount = Double.parseDouble(request.getParameter("amount"));
153
					if(order.getTotal_amount() != amount){
154
						error = "<br>Amount does not match";
155
					}
156
				}
157
				if(!error.equalsIgnoreCase("")){
158
					setId("deliver");
159
					return show();
160
				}else{
5678 rajveer 161
					if(order.isCod()){
5693 rajveer 162
						String paymentType =  request.getParameter("paymenttype");
163
						newAttributes.add(new Attribute("PAYMENT_MODE", paymentType));
164
						client.setOrderAttributes(orderId, newAttributes);
5678 rajveer 165
					}
5559 rajveer 166
				}
5693 rajveer 167
				client.markOrderAsDelivered(Long.parseLong(orderIdString), Calendar.getInstance().getTimeInMillis(), receiver);
168
			}else if(action.equals("markreturned")){
169
				String orderIdsString = request.getParameter("orderIds");
170
				long providerId = Long.parseLong(request.getParameter("providerID"));
171
				List<Long> orderIds = new ArrayList<Long>();
172
				for(String orderIdString1: orderIdsString.split(":")){
173
					orderIds.add(Long.parseLong(orderIdString1));
174
				}
5714 rajveer 175
				List<String> awbs = new ArrayList<String>();
176
				for(String awb: request.getParameter("awbs").split(":")){
177
					awbs.add(awb);
178
				}
179
				client.markOrdersAsReturnedFromStore(providerId, orderIds, awbs);
180
			}else if(action.equals("getreport")){
181
 
182
		        String startDateStr = request.getParameter("startDate");
183
		        String endDateStr = request.getParameter("endDate");
184
		        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
185
		        Date startDate = null, endDate = null;
186
		        try {
187
		            startDate = df.parse(startDateStr);
188
		            endDate = df.parse(endDateStr);
189
		            Calendar cal = Calendar.getInstance();
190
		            cal.setTime(endDate);
191
		            cal.add(Calendar.DATE, 1);
192
		            endDate.setTime(cal.getTimeInMillis());
193
		        } catch (ParseException pe) {
194
		            error = "Please enter start and end dates in format MM/dd/yyyy";
195
		        } 
196
		        if(!error.equalsIgnoreCase("")){
197
					setId("report");
198
					return show();
199
		        }
200
 
201
		        ByteArrayOutputStream baos = generateCollectionReport(startDate, endDate, storeId);
202
 
203
		        if (baos == null) {
204
		            error = "No output for given date range";
205
		        } else {
206
		            error = "Generating report...";
207
		        }
208
		        response.setContentType("application/vnd.ms-excel");
209
		        response.setHeader("Content-disposition", "inline; filename=collection-report.xls");
210
		        ServletOutputStream sos;
211
		        try {
212
		            sos = response.getOutputStream();
213
		            baos.writeTo(sos);
214
		            sos.flush();
215
		            error = "Report generated";
216
		        } catch (IOException e) {
217
		            error = "Failed to write to response.";
218
		            logger.error("Unable to stream the colection report", e);
219
		        }
220
		        if(!error.equalsIgnoreCase("")){
221
					setId("report");
222
					return show();
223
		        }
5559 rajveer 224
			}
5693 rajveer 225
			return "index";
226
		} catch (TTransportException e) {
227
			// TODO Auto-generated catch block
228
			e.printStackTrace();
229
		} catch (NumberFormatException e) {
230
			// TODO Auto-generated catch block
231
			e.printStackTrace();
232
		} catch (TransactionServiceException e) {
233
			// TODO Auto-generated catch block
234
			e.printStackTrace();
235
		} catch (TException e) {
236
			// TODO Auto-generated catch block
237
			e.printStackTrace();
238
		}
5559 rajveer 239
        return "index";
240
    }
241
 
242
 
5714 rajveer 243
    private ByteArrayOutputStream generateCollectionReport(Date startDate,	Date endDate, long storeId) throws TException {
244
    	List<Order> orders = client.getOrdersCollectionAtStore(storeId, startDate.getTime(), endDate.getTime(), false);
245
        ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
246
 
247
        Workbook wb = new HSSFWorkbook();
248
 
249
        DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
250
        Font font = wb.createFont();
251
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
252
        CellStyle style = wb.createCellStyle();
253
        style.setFont(font);
254
 
255
        DataFormat format = wb.createDataFormat();
256
        CellStyle styleAmount = wb.createCellStyle();
257
        styleAmount.setDataFormat(format.getFormat("#,##0.00"));
258
 
259
        Sheet collectionSheet = wb.createSheet("Collection");
260
        short collectionSerialNo = 0;
261
 
262
        Row headerRow = collectionSheet.createRow(collectionSerialNo++);
263
        headerRow.createCell(0).setCellValue("S.No");
264
        headerRow.createCell(1).setCellValue("Order Id");
265
        headerRow.createCell(2).setCellValue("Product");
266
        headerRow.createCell(3).setCellValue("Order Type");
267
        headerRow.createCell(4).setCellValue("Collection Date");
268
        headerRow.createCell(5).setCellValue("Order Amount");
269
        headerRow.createCell(6).setCellValue("Collected Amount");
270
        headerRow.createCell(7).setCellValue("Store Margin");
271
 
272
        for(Order order: orders){
273
        	Row contentRow = collectionSheet.createRow(collectionSerialNo++);
274
        	LineItem line = order.getLineitems().get(0);
275
        	String productName = line.getBrand() + " " + line.getModel_name() + " " + line.getModel_number() + " " + line.getColor();
276
        	productName = productName.replaceAll("null", "").replaceAll("  ", " ");
277
        	contentRow.createCell(0).setCellValue(collectionSerialNo-1);
278
        	contentRow.createCell(1).setCellValue(order.getId());
279
        	contentRow.createCell(2).setCellValue(productName);
280
        	contentRow.createCell(3).setCellValue(order.isCod() ? "COD" : "Prepaid");
281
        	contentRow.createCell(4).setCellValue(formatter.format(order.getDelivery_timestamp()));
282
        	contentRow.createCell(5).setCellValue(order.getTotal_amount());
283
        	contentRow.createCell(6).setCellValue(order.isCod() ? order.getTotal_amount() : 0.0);
284
        	contentRow.createCell(7).setCellValue(order.isCod() ? .01 * order.getTotal_amount() : .005 * order.getTotal_amount());
285
        }
286
 
287
        try {
288
            wb.write(baosXLS);
289
            baosXLS.close();
290
        } catch (IOException e) {
291
            logger.error("Error while streaming payment details report", e);
292
        }
293
		return baosXLS;
294
	}
295
 
296
	public List<Order> getReceivePendingOrders() throws TException{
5559 rajveer 297
    	Client client = (new TransactionClient()).getClient();
298
    	return client.getReceivePendingOrders(storeId);
299
    }
300
 
301
    public List<Order> getReceivedAtStoreOrders() throws TException{
302
    	Client client = (new TransactionClient()).getClient();
303
    	return client.getReceivedAtStoreOrders(storeId);
304
    }
5678 rajveer 305
 
5693 rajveer 306
    public String getSecretCode(long orderId) throws TException{
307
    	List<Attribute> attributes = client.getAllAttributesForOrderId(orderId);
5714 rajveer 308
    	String secretCode = "";
5693 rajveer 309
    	for(Attribute attribute: attributes){
5714 rajveer 310
    		if(attribute.getName().equals("SECRET_CODE") ){
311
    			secretCode = attribute.getValue();
5693 rajveer 312
    		}
313
    	}
5714 rajveer 314
    	return secretCode;
5693 rajveer 315
    }
316
 
5678 rajveer 317
	public void setId(String id) {
318
		this.id = id;
319
	}
320
 
321
	public String getId() {
322
		return id;
323
	}
324
 
325
	public void setError(String error) {
326
		this.error = error;
327
	}
328
 
329
	public String getError() {
330
		return error;
331
	}
332
 
333
	public long getStoreId(){
334
		return storeId;
335
	}
336
 
5559 rajveer 337
}