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;}}