Subversion Repositories SmartDukaan

Rev

Rev 5368 | Rev 5449 | 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
 
74
            response.setHeader("Content-disposition", "inline; filename="
75
                    + file.getName());
76
 
77
            ServletOutputStream sos = response.getOutputStream();
78
            sos.write(buffer);
79
            sos.flush();
80
        } catch (Exception e) {
81
        }
82
 
83
        return EDIT_NEW;
84
    }
85
 
86
    /**
87
     * @param orders
88
     * @return
89
     */
90
    private File createFile(List<Order> orders) {
91
        try {
5372 mandeep.dh 92
            File file = new File("Sale-" + startDate + "-to-" + endDate
5368 mandeep.dh 93
                    + ".xls");
94
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
95
                    file));
96
            bufferedWriter.write(StringUtils.join(new String[] { "Order Id",
97
                    "Customer Name", "Customer City", "Invoice Number",
98
                    "Billing Date", "Unit Price", "Quantity", "Net Amount",
99
                    "VAT", "Total Amount", "Brand", "Model Number", "Status" },
100
                    '\t'));
101
 
102
            for (Order order : orders) {
103
                if (order.getWarehouse_id() != 7) {
104
                    continue;
105
                }
106
 
107
                bufferedWriter.newLine();
108
                in.shop2020.model.v1.order.LineItem lineitem = order.getLineitems().get(0);
109
 
110
                double vatFactor = 5;
111
                if (lineitem.getUnit_price() >= 10000) {
112
                    vatFactor = 12.5;
113
                }
114
 
115
                bufferedWriter.write(StringUtils.join(
116
                        new String[] {
117
                                String.valueOf(order.getId()),
118
                                order.getCustomer_name(),
119
                                order.getCustomer_city(),
120
                                order.getInvoice_number(),
121
                                sdf.format(new Date(order
122
                                        .getBilling_timestamp())),
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
}