Subversion Repositories SmartDukaan

Rev

Rev 5711 | 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 {
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
 
111
                double vatFactor = 5;
112
                if (lineitem.getUnit_price() >= 10000) {
113
                    vatFactor = 12.5;
114
                }
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
}