Subversion Repositories SmartDukaan

Rev

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