Subversion Repositories SmartDukaan

Rev

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