Subversion Repositories SmartDukaan

Rev

Rev 5766 | Rev 5814 | 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");
5775 rajveer 169
				if(reason == null || reason.isEmpty()){
170
					reason = request.getParameter("selectreason");
171
				}
5714 rajveer 172
				DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
5766 rajveer 173
				String returnReason = formatter.format(Calendar.getInstance().getTime()) + "|" + reason;
5714 rajveer 174
				HashMap<String, String> orderMap = new HashMap<String, String>();
175
				orderMap.put(order.getAirwaybill_no(), returnReason);
5766 rajveer 176
				client.markAsRTOrders(order.getLogistics_provider_id(), orderMap);
177
				setId("receive");
178
				return show();
5693 rajveer 179
			}else if(action.equals("markdelivered")){
180
				long orderId = Long.parseLong(orderIdString);
181
		    	String receiver = request.getParameter("receiver");
182
				String secretCode = request.getParameter("secretcode");
183
				Order order = client.getOrder(orderId);
184
				List<Attribute> attributes = client.getAllAttributesForOrderId(orderId);
185
				for(Attribute attribute: attributes){
186
					if(attribute.getName().equals("SECRET_CODE")){
187
						if(!attribute.getValue().equalsIgnoreCase(secretCode)){
188
							error = "Secret code does not match";
5678 rajveer 189
						}
190
					}
5693 rajveer 191
				}
192
				List<Attribute> newAttributes = new ArrayList<Attribute>();
193
				if(order.isCod()){
194
					double amount = Double.parseDouble(request.getParameter("amount"));
195
					if(order.getTotal_amount() != amount){
196
						error = "<br>Amount does not match";
197
					}
198
				}
199
				if(!error.equalsIgnoreCase("")){
200
					setId("deliver");
201
					return show();
202
				}else{
5678 rajveer 203
					if(order.isCod()){
5693 rajveer 204
						String paymentType =  request.getParameter("paymenttype");
205
						newAttributes.add(new Attribute("PAYMENT_MODE", paymentType));
206
						client.setOrderAttributes(orderId, newAttributes);
5678 rajveer 207
					}
5559 rajveer 208
				}
5693 rajveer 209
				client.markOrderAsDelivered(Long.parseLong(orderIdString), Calendar.getInstance().getTimeInMillis(), receiver);
210
			}else if(action.equals("markreturned")){
211
				String orderIdsString = request.getParameter("orderIds");
212
				long providerId = Long.parseLong(request.getParameter("providerID"));
213
				List<Long> orderIds = new ArrayList<Long>();
214
				for(String orderIdString1: orderIdsString.split(":")){
215
					orderIds.add(Long.parseLong(orderIdString1));
216
				}
5714 rajveer 217
				List<String> awbs = new ArrayList<String>();
218
				for(String awb: request.getParameter("awbs").split(":")){
219
					awbs.add(awb);
220
				}
221
				client.markOrdersAsReturnedFromStore(providerId, orderIds, awbs);
222
			}else if(action.equals("getreport")){
223
 
224
		        String startDateStr = request.getParameter("startDate");
225
		        String endDateStr = request.getParameter("endDate");
226
		        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
227
		        Date startDate = null, endDate = null;
228
		        try {
229
		            startDate = df.parse(startDateStr);
230
		            endDate = df.parse(endDateStr);
231
		            Calendar cal = Calendar.getInstance();
232
		            cal.setTime(endDate);
233
		            cal.add(Calendar.DATE, 1);
234
		            endDate.setTime(cal.getTimeInMillis());
235
		        } catch (ParseException pe) {
236
		            error = "Please enter start and end dates in format MM/dd/yyyy";
237
		        } 
238
		        if(!error.equalsIgnoreCase("")){
239
					setId("report");
240
					return show();
241
		        }
242
 
243
		        ByteArrayOutputStream baos = generateCollectionReport(startDate, endDate, storeId);
244
 
245
		        if (baos == null) {
246
		            error = "No output for given date range";
247
		        } else {
248
		            error = "Generating report...";
249
		        }
250
		        response.setContentType("application/vnd.ms-excel");
251
		        response.setHeader("Content-disposition", "inline; filename=collection-report.xls");
252
		        ServletOutputStream sos;
253
		        try {
254
		            sos = response.getOutputStream();
255
		            baos.writeTo(sos);
256
		            sos.flush();
257
		            error = "Report generated";
258
		        } catch (IOException e) {
259
		            error = "Failed to write to response.";
260
		            logger.error("Unable to stream the colection report", e);
261
		        }
262
		        if(!error.equalsIgnoreCase("")){
263
					setId("report");
264
					return show();
265
		        }
5559 rajveer 266
			}
5693 rajveer 267
			return "index";
268
		} catch (TTransportException e) {
269
			// TODO Auto-generated catch block
270
			e.printStackTrace();
271
		} catch (NumberFormatException e) {
272
			// TODO Auto-generated catch block
273
			e.printStackTrace();
274
		} catch (TransactionServiceException e) {
275
			// TODO Auto-generated catch block
276
			e.printStackTrace();
277
		} catch (TException e) {
278
			// TODO Auto-generated catch block
279
			e.printStackTrace();
280
		}
5559 rajveer 281
        return "index";
282
    }
283
 
284
 
5714 rajveer 285
    private ByteArrayOutputStream generateCollectionReport(Date startDate,	Date endDate, long storeId) throws TException {
286
    	List<Order> orders = client.getOrdersCollectionAtStore(storeId, startDate.getTime(), endDate.getTime(), false);
287
        ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
288
 
289
        Workbook wb = new HSSFWorkbook();
290
 
291
        DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
292
        Font font = wb.createFont();
293
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
294
        CellStyle style = wb.createCellStyle();
295
        style.setFont(font);
296
 
297
        DataFormat format = wb.createDataFormat();
298
        CellStyle styleAmount = wb.createCellStyle();
299
        styleAmount.setDataFormat(format.getFormat("#,##0.00"));
300
 
301
        Sheet collectionSheet = wb.createSheet("Collection");
302
        short collectionSerialNo = 0;
303
 
304
        Row headerRow = collectionSheet.createRow(collectionSerialNo++);
305
        headerRow.createCell(0).setCellValue("S.No");
306
        headerRow.createCell(1).setCellValue("Order Id");
307
        headerRow.createCell(2).setCellValue("Product");
308
        headerRow.createCell(3).setCellValue("Order Type");
309
        headerRow.createCell(4).setCellValue("Collection Date");
310
        headerRow.createCell(5).setCellValue("Order Amount");
311
        headerRow.createCell(6).setCellValue("Collected Amount");
312
        headerRow.createCell(7).setCellValue("Store Margin");
313
 
314
        for(Order order: orders){
315
        	Row contentRow = collectionSheet.createRow(collectionSerialNo++);
316
        	LineItem line = order.getLineitems().get(0);
317
        	String productName = line.getBrand() + " " + line.getModel_name() + " " + line.getModel_number() + " " + line.getColor();
318
        	productName = productName.replaceAll("null", "").replaceAll("  ", " ");
319
        	contentRow.createCell(0).setCellValue(collectionSerialNo-1);
320
        	contentRow.createCell(1).setCellValue(order.getId());
321
        	contentRow.createCell(2).setCellValue(productName);
322
        	contentRow.createCell(3).setCellValue(order.isCod() ? "COD" : "Prepaid");
323
        	contentRow.createCell(4).setCellValue(formatter.format(order.getDelivery_timestamp()));
324
        	contentRow.createCell(5).setCellValue(order.getTotal_amount());
325
        	contentRow.createCell(6).setCellValue(order.isCod() ? order.getTotal_amount() : 0.0);
326
        	contentRow.createCell(7).setCellValue(order.isCod() ? .01 * order.getTotal_amount() : .005 * order.getTotal_amount());
327
        }
328
 
329
        try {
330
            wb.write(baosXLS);
331
            baosXLS.close();
332
        } catch (IOException e) {
333
            logger.error("Error while streaming payment details report", e);
334
        }
335
		return baosXLS;
336
	}
337
 
338
	public List<Order> getReceivePendingOrders() throws TException{
5559 rajveer 339
    	Client client = (new TransactionClient()).getClient();
340
    	return client.getReceivePendingOrders(storeId);
341
    }
342
 
343
    public List<Order> getReceivedAtStoreOrders() throws TException{
344
    	Client client = (new TransactionClient()).getClient();
345
    	return client.getReceivedAtStoreOrders(storeId);
346
    }
5678 rajveer 347
 
5693 rajveer 348
    public String getSecretCode(long orderId) throws TException{
349
    	List<Attribute> attributes = client.getAllAttributesForOrderId(orderId);
5714 rajveer 350
    	String secretCode = "";
5693 rajveer 351
    	for(Attribute attribute: attributes){
5714 rajveer 352
    		if(attribute.getName().equals("SECRET_CODE") ){
353
    			secretCode = attribute.getValue();
5693 rajveer 354
    		}
355
    	}
5714 rajveer 356
    	return secretCode;
5693 rajveer 357
    }
358
 
5678 rajveer 359
	public void setId(String id) {
360
		this.id = id;
361
	}
362
 
363
	public String getId() {
364
		return id;
365
	}
366
 
367
	public void setError(String error) {
368
		this.error = error;
369
	}
370
 
371
	public String getError() {
372
		return error;
373
	}
374
 
375
	public long getStoreId(){
376
		return storeId;
377
	}
378
 
5766 rajveer 379
	public String getRedirectUrl(){
380
		return redirectUrl;
381
    }
382
 
383
	public  List<Provider> getAllProviders() throws TTransportException, LogisticsServiceException, TException{
384
		return (new LogisticsClient()).getClient().getAllProviders();
385
	}
5559 rajveer 386
}