Subversion Repositories SmartDukaan

Rev

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