Subversion Repositories SmartDukaan

Rev

Rev 6365 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5368 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.inventory.controllers;
5
 
6
import in.shop2020.model.v1.order.Order;
7
import in.shop2020.model.v1.order.TransactionService.Client;
8
import in.shop2020.thrift.clients.TransactionClient;
9
 
10
import java.io.BufferedInputStream;
11
import java.io.BufferedWriter;
12
import java.io.File;
13
import java.io.FileInputStream;
14
import java.io.FileWriter;
15
import java.io.InputStream;
16
import java.text.SimpleDateFormat;
17
import java.util.Calendar;
18
import java.util.Date;
19
import java.util.List;
20
 
21
import javax.servlet.ServletOutputStream;
22
 
23
import org.apache.commons.lang.StringUtils;
24
 
25
/**
26
 * @author mandeep
27
 * 
28
 */
5372 mandeep.dh 29
public class SaleReportController extends BaseController {
5368 mandeep.dh 30
    private String startDate;
31
    private String endDate;
32
 
33
    private SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
34
 
35
    public Date getNextDay(Date date) {
36
        Calendar calendar = Calendar.getInstance();
37
        calendar.setTime(date);
38
        calendar.add(Calendar.DAY_OF_MONTH, 1);
39
        return calendar.getTime();
40
    }
41
 
42
    public String create() {
43
        try {
44
            Client transactionClient = new TransactionClient().getClient();
45
            List<Order> orders = transactionClient.getBilledOrdersForVendor(0,
46
                    sdf.parse(startDate).getTime(), getNextDay(sdf.parse(endDate))
47
                            .getTime());
48
 
49
            byte[] buffer = null;
50
            File file = createFile(orders);
51
            buffer = new byte[(int) file.length()];
52
            InputStream input = null;
53
            try {
54
                int totalBytesRead = 0;
55
                input = new BufferedInputStream(new FileInputStream(file));
56
                while (totalBytesRead < buffer.length) {
57
                    int bytesRemaining = buffer.length - totalBytesRead;
58
                    // input.read() returns -1, 0, or more :
59
                    int bytesRead = input.read(buffer, totalBytesRead,
60
                            bytesRemaining);
61
                    if (bytesRead > 0) {
62
                        totalBytesRead = totalBytesRead + bytesRead;
63
                    }
64
                }
65
                /*
66
                 * the above style is a bit tricky: it places bytes into the
67
                 * 'buffer' array; 'buffer' is an output parameter; the while
68
                 * loop usually has a single iteration only.
69
                 */
70
            } finally {
71
                input.close();
72
            }
73
 
5449 mandeep.dh 74
            response.setContentType("application/vnd.ms-excel");
5368 mandeep.dh 75
            response.setHeader("Content-disposition", "inline; filename="
76
                    + file.getName());
77
 
78
            ServletOutputStream sos = response.getOutputStream();
79
            sos.write(buffer);
80
            sos.flush();
81
        } catch (Exception e) {
82
        }
83
 
5711 mandeep.dh 84
        return INDEX;
5368 mandeep.dh 85
    }
86
 
87
    /**
88
     * @param orders
89
     * @return
90
     */
91
    private File createFile(List<Order> orders) {
92
        try {
6700 amar.kumar 93
        	String tmpDir = System.getProperty("java.io.tmpdir");
94
            File file = new File(tmpDir + "/Sale-" + startDate + "-to-" + endDate
5368 mandeep.dh 95
                    + ".xls");
96
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
97
                    file));
98
            bufferedWriter.write(StringUtils.join(new String[] { "Order Id",
99
                    "Customer Name", "Customer City", "Invoice Number",
6284 amit.gupta 100
                    "Billing Date", "Item Id", "Color", "Unit Price", "Quantity", "Net Amount",
5368 mandeep.dh 101
                    "VAT", "Total Amount", "Brand", "Model Number", "Status" },
102
                    '\t'));
103
 
104
            for (Order order : orders) {
105
                if (order.getWarehouse_id() != 7) {
106
                    continue;
107
                }
108
 
109
                bufferedWriter.newLine();
110
                in.shop2020.model.v1.order.LineItem lineitem = order.getLineitems().get(0);
111
 
6365 amit.gupta 112
                double vatFactor = lineitem.getVatRate();
5368 mandeep.dh 113
 
114
                bufferedWriter.write(StringUtils.join(
115
                        new String[] {
116
                                String.valueOf(order.getId()),
117
                                order.getCustomer_name(),
118
                                order.getCustomer_city(),
119
                                order.getInvoice_number(),
120
                                sdf.format(new Date(order
121
                                        .getBilling_timestamp())),
6284 amit.gupta 122
                                String.valueOf(lineitem.getItem_id()),
123
                                lineitem.getColor(),
5368 mandeep.dh 124
                                String.valueOf(lineitem.getUnit_price()),
125
                                String.valueOf(lineitem.getQuantity()),
126
                                String.valueOf(order.getTotal_amount() * 100
127
                                        / (100 + vatFactor)),
128
                                String.valueOf(order.getTotal_amount()
129
                                        * vatFactor / (100 + vatFactor)),
130
                                String.valueOf(order.getTotal_amount()),
131
                                lineitem.getBrand(),
132
                                lineitem.getModel_number(),
133
                                order.getStatusDescription() }, '\t'));
134
            }
135
 
136
            bufferedWriter.close();
137
            return file;
138
        } catch (Exception e) {
139
            return null;
140
        }
141
    }
142
 
143
    public String getStartDate() {
144
        return startDate;
145
    }
146
 
147
    public void setStartDate(String startDate) {
148
        this.startDate = startDate;
149
    }
150
 
151
    public String getEndDate() {
152
        return endDate;
153
    }
154
 
155
    public void setEndDate(String endDate) {
156
        this.endDate = endDate;
157
    }
158
}