Subversion Repositories SmartDukaan

Rev

Rev 6284 | Rev 6700 | 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 {
5372 mandeep.dh 93
            File file = new File("Sale-" + startDate + "-to-" + endDate
5368 mandeep.dh 94
                    + ".xls");
95
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
96
                    file));
97
            bufferedWriter.write(StringUtils.join(new String[] { "Order Id",
98
                    "Customer Name", "Customer City", "Invoice Number",
6284 amit.gupta 99
                    "Billing Date", "Item Id", "Color", "Unit Price", "Quantity", "Net Amount",
5368 mandeep.dh 100
                    "VAT", "Total Amount", "Brand", "Model Number", "Status" },
101
                    '\t'));
102
 
103
            for (Order order : orders) {
104
                if (order.getWarehouse_id() != 7) {
105
                    continue;
106
                }
107
 
108
                bufferedWriter.newLine();
109
                in.shop2020.model.v1.order.LineItem lineitem = order.getLineitems().get(0);
110
 
6365 amit.gupta 111
                double vatFactor = lineitem.getVatRate();
5368 mandeep.dh 112
 
113
                bufferedWriter.write(StringUtils.join(
114
                        new String[] {
115
                                String.valueOf(order.getId()),
116
                                order.getCustomer_name(),
117
                                order.getCustomer_city(),
118
                                order.getInvoice_number(),
119
                                sdf.format(new Date(order
120
                                        .getBilling_timestamp())),
6284 amit.gupta 121
                                String.valueOf(lineitem.getItem_id()),
122
                                lineitem.getColor(),
5368 mandeep.dh 123
                                String.valueOf(lineitem.getUnit_price()),
124
                                String.valueOf(lineitem.getQuantity()),
125
                                String.valueOf(order.getTotal_amount() * 100
126
                                        / (100 + vatFactor)),
127
                                String.valueOf(order.getTotal_amount()
128
                                        * vatFactor / (100 + vatFactor)),
129
                                String.valueOf(order.getTotal_amount()),
130
                                lineitem.getBrand(),
131
                                lineitem.getModel_number(),
132
                                order.getStatusDescription() }, '\t'));
133
            }
134
 
135
            bufferedWriter.close();
136
            return file;
137
        } catch (Exception e) {
138
            return null;
139
        }
140
    }
141
 
142
    public String getStartDate() {
143
        return startDate;
144
    }
145
 
146
    public void setStartDate(String startDate) {
147
        this.startDate = startDate;
148
    }
149
 
150
    public String getEndDate() {
151
        return endDate;
152
    }
153
 
154
    public void setEndDate(String endDate) {
155
        this.endDate = endDate;
156
    }
157
}