Subversion Repositories SmartDukaan

Rev

Rev 6700 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.inventory.controllers;

import in.shop2020.model.v1.order.Order;
import in.shop2020.model.v1.order.TransactionService.Client;
import in.shop2020.thrift.clients.TransactionClient;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletOutputStream;

import org.apache.commons.lang.StringUtils;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @author mandeep
 * 
 */
public class SaleReportController extends BaseController {
    private String startDate;
    private String endDate;

    private SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

    public Date getNextDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }

    public String create() {
        try {
            Client transactionClient = new TransactionClient().getClient();
            List<Order> orders = transactionClient.getBilledOrdersForVendor(0,
                    sdf.parse(startDate).getTime(), getNextDay(sdf.parse(endDate))
                            .getTime());

            byte[] buffer = null;
            File file = createFile(orders);
            buffer = new byte[(int) file.length()];
            InputStream input = null;
            try {
                int totalBytesRead = 0;
                input = new BufferedInputStream(new FileInputStream(file));
                while (totalBytesRead < buffer.length) {
                    int bytesRemaining = buffer.length - totalBytesRead;
                    // input.read() returns -1, 0, or more :
                    int bytesRead = input.read(buffer, totalBytesRead,
                            bytesRemaining);
                    if (bytesRead > 0) {
                        totalBytesRead = totalBytesRead + bytesRead;
                    }
                }
                /*
                 * the above style is a bit tricky: it places bytes into the
                 * 'buffer' array; 'buffer' is an output parameter; the while
                 * loop usually has a single iteration only.
                 */
            } finally {
                input.close();
            }

            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "inline; filename="
                    + file.getName());

            ServletOutputStream sos = response.getOutputStream();
            sos.write(buffer);
            sos.flush();
        } catch (Exception e) {
        }

        return ActionSupport.NONE;
    }

    /**
     * @param orders
     * @return
     */
    private File createFile(List<Order> orders) {
        try {
                String tmpDir = System.getProperty("java.io.tmpdir");
            File file = new File(tmpDir + "/Sale-" + startDate + "-to-" + endDate
                    + ".xls");
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
                    file));
            bufferedWriter.write(StringUtils.join(new String[] { "Order Id",
                    "Customer Name", "Customer City", "Invoice Number",
                    "Billing Date", "Item Id", "Color", "Unit Price", "Quantity", "Net Amount",
                    "VAT", "Total Amount", "Brand", "Model Number", "Status" },
                    '\t'));

            for (Order order : orders) {
                if (order.getWarehouse_id() != 7) {
                    continue;
                }

                bufferedWriter.newLine();
                in.shop2020.model.v1.order.LineItem lineitem = order.getLineitems().get(0);

                double vatFactor = lineitem.getVatRate();

                bufferedWriter.write(StringUtils.join(
                        new String[] {
                                String.valueOf(order.getId()),
                                order.getCustomer_name(),
                                order.getCustomer_city(),
                                order.getInvoice_number(),
                                sdf.format(new Date(order
                                        .getBilling_timestamp())),
                                String.valueOf(lineitem.getItem_id()),
                                lineitem.getColor(),
                                String.valueOf(lineitem.getUnit_price()),
                                String.valueOf(lineitem.getQuantity()),
                                String.valueOf(order.getTotal_amount() * 100
                                        / (100 + vatFactor)),
                                String.valueOf(order.getTotal_amount()
                                        * vatFactor / (100 + vatFactor)),
                                String.valueOf(order.getTotal_amount()),
                                lineitem.getBrand(),
                                lineitem.getModel_number(),
                                order.getStatusDescription() }, '\t'));
            }

            bufferedWriter.close();
            return file;
        } catch (Exception e) {
            return null;
        }
    }

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }

    public String getEndDate() {
        return endDate;
    }

    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }
}