Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4370 anupam.sin 1
/**
2
 * 
3
 */
4
 
5
package in.shop2020.support.controllers;
6
 
7
import in.shop2020.model.v1.catalog.InventoryServiceException;
4408 anupam.sin 8
import in.shop2020.model.v1.catalog.Vendor;
4370 anupam.sin 9
import in.shop2020.support.utils.ReportsUtils;
10
import in.shop2020.thrift.clients.CatalogClient;
11
import in.shop2020.thrift.clients.WarehouseClient;
12
import in.shop2020.warehouse.Supplier;
13
import in.shop2020.warehouse.WarehouseServiceException;
14
 
15
import java.io.BufferedInputStream;
16
import java.io.File;
17
import java.io.FileInputStream;
18
import java.io.FileNotFoundException;
19
import java.io.FileOutputStream;
20
import java.io.IOException;
21
import java.io.InputStream;
22
import java.util.Calendar;
4408 anupam.sin 23
import java.util.List;
24
 
4370 anupam.sin 25
import javax.servlet.ServletOutputStream;
26
import javax.servlet.http.HttpServletRequest;
27
import javax.servlet.http.HttpServletResponse;
28
import javax.servlet.http.HttpSession;
29
 
30
import org.apache.struts2.convention.annotation.InterceptorRef;
31
import org.apache.struts2.convention.annotation.InterceptorRefs;
32
import org.apache.struts2.convention.annotation.Result;
33
import org.apache.struts2.convention.annotation.Results;
34
import org.apache.struts2.interceptor.ServletRequestAware;
35
import org.apache.struts2.interceptor.ServletResponseAware;
36
import org.apache.thrift.TException;
37
import org.apache.thrift.transport.TTransportException;
38
import org.slf4j.Logger;
39
import org.slf4j.LoggerFactory;
40
 
41
@InterceptorRefs({
42
    @InterceptorRef("defaultStack"),
43
    @InterceptorRef("login")
44
})
45
@Results({
46
    @Result(name = "index", location = "raisePO-index.vm"),
47
    @Result(name = "result", location = "raisePO-result.vm")
48
})
49
 
50
public class RaisePOController implements ServletResponseAware, ServletRequestAware {
51
 
52
    private static Logger log = LoggerFactory.getLogger(RaisePOController.class);
53
 
54
    private File purchaseOrderDetails;
55
    private String vendorId;
56
    private String result;
4408 anupam.sin 57
    private List<Vendor> vendors;
4370 anupam.sin 58
 
59
    private HttpServletResponse response;
60
 
61
    private HttpServletRequest request;
62
 
63
    private HttpSession session;
64
 
65
    @Override
66
    public void setServletRequest(HttpServletRequest req) {
67
        this.request = req;
68
        this.session = req.getSession();
69
    }
70
 
71
 
72
    public String index() {
73
        if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE), request.getServletPath()))    {
74
            return "authfail";
4408 anupam.sin 75
        }
76
        CatalogClient csc;
77
        try {
78
            csc = new CatalogClient();
79
            in.shop2020.model.v1.catalog.InventoryService.Client catalogClient= csc.getClient();
80
            setVendors(catalogClient.getAllVendors());
81
        } catch (TTransportException e) {
82
            e.printStackTrace();
83
            setResult(e.getMessage());
84
        } catch (TException e) {
85
            e.printStackTrace();
86
            setResult(e.getMessage());
87
        }
4370 anupam.sin 88
        return "index";
89
    }
4408 anupam.sin 90
 
4370 anupam.sin 91
    /* MAIN METHOD TO TEST THE CODE 
92
     * 
93
     * public static void main(String[] args) {
94
        RaisePOController rpc = new RaisePOController();
95
        rpc.setPurchaseOrderDetails(new File("/home/anupam/Desktop/po.xls"));
96
        rpc.setVendorId("3");
97
        rpc.create();
98
        System.out.println(rpc.getResult());
99
    }*/
100
 
101
    public String create() {
102
        try {
103
            /*
104
             * Save the uploaded file to disk
105
             * 
106
             */
107
            FileInputStream is = new FileInputStream(purchaseOrderDetails);
108
            String filename = "/tmp/po-" +  Calendar.getInstance().getTime().toString() + ".xls";
109
            File f = new File(filename);
110
            FileOutputStream fos = null;
111
            fos = new FileOutputStream(f);
112
            byte[] buf = new byte[4096];
113
            int bytesRead;
114
 
115
            while((bytesRead = is.read(buf)) != -1) {
116
                fos.write(buf, 0, bytesRead);
117
            }
118
            fos.close();
119
 
120
            int vendor = Integer.parseInt(vendorId);
4408 anupam.sin 121
            CatalogClient csc = new CatalogClient();
122
            in.shop2020.model.v1.catalog.InventoryService.Client catalogClient= csc.getClient();
123
            setVendors(catalogClient.getAllVendors());
124
            if (vendor < 1 || vendor > vendors.size()) {
4370 anupam.sin 125
                setResult("Select a valid Vendor");
126
                return "result";
127
            }
128
            /*
129
             * Try to create the purchase order for given vendor
130
             * 
131
             */
132
 
133
            Long purchaseOrderId = null;
134
            String output = catalogClient.processPurchaseOrder(filename, vendor);
135
 
136
            /*
137
             * If PO is generated then create the PDF receipt for it
138
             * 
139
             */
140
            if(output.contains("POId:")) {
141
                String [] arr = output.split(":");
142
                purchaseOrderId = Long.parseLong(arr[1]);
143
                WarehouseClient warehouseServiceClient = new WarehouseClient();
144
                in.shop2020.warehouse.WarehouseService.Client client = warehouseServiceClient.getClient();
145
                in.shop2020.warehouse.PurchaseOrder purchaseOrder = client.getPurchaseOrder(purchaseOrderId);
146
                Supplier supplier = client.getSupplier(purchaseOrder.getSupplierId());
147
                String pdfFilename = in.shop2020.support.services.PdfPoSheetGenerator.generatePdfSheet(purchaseOrder, supplier);
148
 
149
                /*
150
                 * Put pdf file in a buffer to send it in response 
151
                 * 
152
                 */
153
                File file = new File(pdfFilename);
154
                byte[] buffer = new byte[(int)file.length()];
155
                try {
156
                    InputStream input = null;
157
                    try {
158
                        int totalBytesRead = 0;
159
                        input = new BufferedInputStream(new FileInputStream(file));
160
                        while(totalBytesRead < buffer.length){
161
                            int bytesRemaining = buffer.length - totalBytesRead;
162
                            //input.read() returns -1, 0, or more :
163
                            int bytesRead1 = input.read(buffer, totalBytesRead, bytesRemaining); 
164
                            if (bytesRead1 > 0){
165
                                totalBytesRead = totalBytesRead + bytesRead1;
166
                            }
167
                        }
168
                        /*
169
                         the above style is a bit tricky: it places bytes into the 'buffer' array; 
170
                         'buffer' is an output parameter;
171
                         the while loop usually has a single iteration only.
172
                         */
173
                    }
174
                    finally {
175
                        input.close();
176
                    }
177
                }
178
                catch (FileNotFoundException ex) {
179
                    log.info("FILE NOT FOUND : " + pdfFilename, ex);
180
                    setResult(ex.getMessage());
181
                }
182
                catch (IOException ex) {
183
                    log.info("FILE NOT FOUND : " + pdfFilename);
184
                    setResult(ex.getMessage());
185
                }
4371 anupam.sin 186
                response.setHeader("Content-disposition", "attachment; filename=" + pdfFilename );
4370 anupam.sin 187
                /*
188
                 * Send the pdf file in response  
189
                 * 
190
                 */
191
                ServletOutputStream sos;
192
                sos = response.getOutputStream();
193
                sos.write(buffer);
194
                sos.flush();
195
            }
196
 
197
        } catch (TTransportException e) {
198
            e.printStackTrace();
199
            setResult(e.getMessage());
200
 
201
        } catch (NumberFormatException e) {
202
            e.printStackTrace();
203
            setResult(e.getMessage());
204
 
205
        } catch (TException e) {
206
            e.printStackTrace();
207
            setResult(e.getMessage());
208
 
209
        } catch (WarehouseServiceException e) {
210
            e.printStackTrace();
211
            setResult(e.getMessage());
212
 
213
        } catch (InventoryServiceException e) {
214
            setResult(e.getMessage());
215
 
216
        } catch(IOException e) {
217
            log.error("Error occured");
218
            setResult(e.getMessage());
219
        }
220
        return "result";
221
    }
222
 
223
    public File getPurchaseOrderDetails() {
224
        return purchaseOrderDetails;
225
    }
226
 
227
    public void setPurchaseOrderDetails(File purchaseOrderDetails) {
228
        this.purchaseOrderDetails = purchaseOrderDetails;
229
    }
230
 
231
    public String getVendorId() {
232
        return vendorId;
233
    }
234
 
235
    public void setVendorId(String vendorId) {
236
        this.vendorId = vendorId;
237
    }
238
 
239
    public void setResult(String result) {
240
        this.result = result;
241
    }
242
 
243
    public String getResult() {
244
        return result;
245
    }
246
 
247
    public void setServletResponse(HttpServletResponse response) {
248
        this.response = response;
249
    }
4408 anupam.sin 250
 
251
 
252
    public List<Vendor> getVendors() {
253
        return vendors;
254
    }
255
 
256
 
257
    public void setVendors(List<Vendor> vendors) {
258
        this.vendors = vendors;
259
    }
260
 
4370 anupam.sin 261
}