Subversion Repositories SmartDukaan

Rev

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