// Chromis POS - The New Face of Open Source POS // Copyright (c) (c) 2015-2016 // http://www.chromis.co.uk // // This file is part of Chromis POS // // Chromis POS is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Chromis POS is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Chromis POS. If not, see <http://www.gnu.org/licenses/>. package uk.chromis.pos.panels; import java.sql.Connection; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.table.AbstractTableModel; import uk.chromis.basic.BasicException; import uk.chromis.data.loader.DataRead; import uk.chromis.data.loader.Datas; import uk.chromis.data.loader.SerializableRead; import uk.chromis.data.loader.SerializerReadBasic; import uk.chromis.data.loader.SerializerReadClass; import uk.chromis.data.loader.SerializerWriteString; import uk.chromis.data.loader.Session; import uk.chromis.data.loader.StaticSentence; import uk.chromis.format.Formats; import uk.chromis.pos.forms.AppLocal; import uk.chromis.pos.forms.AppView; import uk.chromis.pos.forms.DataLogicSystem; import uk.chromis.pos.util.StringUtils; public class PaymentsModel { private String m_sHost; private int m_iSeq; private Date m_dDateStart; private Date m_dDateEnd; private Date rDate; private Integer m_iPayments; private Double m_dPaymentsTotal; private java.util.List<PaymentsLine> m_lpayments; private Integer m_iCategorySalesRows; private Double m_dCategorySalesTotalUnits; private Double m_dCategorySalesTotal; private java.util.List<CategorySalesLine> m_lcategorysales; private Integer m_iProductSalesRows; private Double m_dProductSalesTotalUnits; private Double m_dProductSalesTotal; private java.util.List<ProductSalesLine> m_lproductsales; private java.util.List<RemovedProductLines> m_lremovedlines; private final static String[] PAYMENTHEADERS = {"Label.Payment", "label.Money"}; private Integer m_iSales; private Double m_dSalesBase; private Double m_dSalesTaxes; private Double m_dSalesTaxNet; private java.util.List<SalesLine> m_lsales; private final static String[] SALEHEADERS = {"label.taxcategory", "label.totaltax", "label.totalnet"}; private DataLogicSystem dlSystem; private PaymentsModel() { } /** * * @return */ public static PaymentsModel emptyInstance() { PaymentsModel p = new PaymentsModel(); p.m_iPayments = 0; p.m_dPaymentsTotal = 0.0; p.m_lpayments = new ArrayList<>(); p.m_iCategorySalesRows = 0; p.m_dCategorySalesTotalUnits = 0.0; p.m_dCategorySalesTotal = 0.0; p.m_lcategorysales = new ArrayList<>(); p.m_iSales = null; p.m_dSalesBase = null; p.m_dSalesTaxes = null; p.m_dSalesTaxNet = null; p.m_iProductSalesRows = 0; p.m_dProductSalesTotalUnits = 0.0; p.m_dProductSalesTotal = 0.0; p.m_lproductsales = new ArrayList<>(); // end p.m_lremovedlines = new ArrayList<>(); p.m_lsales = new ArrayList<>(); return p; } /** * * @param app * @return * @throws BasicException */ public static PaymentsModel loadInstance(AppView app) throws BasicException { PaymentsModel p = new PaymentsModel(); // Propiedades globales p.m_sHost = app.getProperties().getHost(); p.m_iSeq = app.getActiveCashSequence(); p.m_dDateStart = app.getActiveCashDateStart(); p.m_dDateEnd = null; Object[] valcategorysales = (Object[]) new StaticSentence(app.getSession(), "SELECT COUNT(*), SUM(TICKETLINES.UNITS), SUM((TICKETLINES.PRICE + TICKETLINES.PRICE * TAXES.RATE ) * TICKETLINES.UNITS) " + "FROM TICKETLINES, TICKETS, RECEIPTS, TAXES " + "WHERE TICKETLINES.TICKET = TICKETS.ID AND TICKETS.ID = RECEIPTS.ID AND TICKETLINES.TAXID = TAXES.ID AND TICKETLINES.PRODUCT IS NOT NULL AND RECEIPTS.MONEY = ? " + "GROUP BY RECEIPTS.MONEY", SerializerWriteString.INSTANCE, new SerializerReadBasic(new Datas[]{Datas.INT, Datas.DOUBLE, Datas.DOUBLE})) .find(app.getActiveCashIndex()); if (valcategorysales == null) { p.m_iCategorySalesRows = 0; p.m_dCategorySalesTotalUnits = 0.0; p.m_dCategorySalesTotal = 0.0; } else { p.m_iCategorySalesRows = (Integer) valcategorysales[0]; p.m_dCategorySalesTotalUnits = (Double) valcategorysales[1]; p.m_dCategorySalesTotal = (Double) valcategorysales[2]; } List categorys = new StaticSentence(app.getSession(), "SELECT a.NAME, sum(c.UNITS), sum(c.UNITS * (c.PRICE + (c.PRICE * d.RATE))) " + "FROM CATEGORIES as a " + "LEFT JOIN PRODUCTS as b on a.id = b.CATEGORY " + "LEFT JOIN TICKETLINES as c on b.id = c.PRODUCT " + "LEFT JOIN TAXES as d on c.TAXID = d.ID " + "LEFT JOIN RECEIPTS as e on c.TICKET = e.ID " + "WHERE e.MONEY = ? " + "GROUP BY a.NAME", SerializerWriteString.INSTANCE, new SerializerReadClass(PaymentsModel.CategorySalesLine.class)) //new SerializerReadBasic(new Datas[] {Datas.STRING, Datas.DOUBLE})) .list(app.getActiveCashIndex()); if (categorys == null) { p.m_lcategorysales = new ArrayList(); } else { p.m_lcategorysales = categorys; } // Payments Object[] valtickets = (Object[]) new StaticSentence(app.getSession(), "SELECT COUNT(*), SUM(PAYMENTS.TOTAL) " + "FROM PAYMENTS, RECEIPTS " + "WHERE PAYMENTS.RECEIPT = RECEIPTS.ID AND RECEIPTS.MONEY = ?", SerializerWriteString.INSTANCE, new SerializerReadBasic(new Datas[]{Datas.INT, Datas.DOUBLE})) .find(app.getActiveCashIndex()); if (valtickets == null) { p.m_iPayments = 0; p.m_dPaymentsTotal = 0.0; } else { p.m_iPayments = (Integer) valtickets[0]; p.m_dPaymentsTotal = (Double) valtickets[1]; } List l = new StaticSentence(app.getSession(), "SELECT PAYMENTS.PAYMENT, SUM(PAYMENTS.TOTAL), PAYMENTS.NOTES " + "FROM PAYMENTS, RECEIPTS " + "WHERE PAYMENTS.RECEIPT = RECEIPTS.ID AND RECEIPTS.MONEY = ? " + "GROUP BY PAYMENTS.PAYMENT, PAYMENTS.NOTES", SerializerWriteString.INSTANCE, new SerializerReadClass(PaymentsModel.PaymentsLine.class)) //new SerializerReadBasic(new Datas[] {Datas.STRING, Datas.DOUBLE})) .list(app.getActiveCashIndex()); if (l == null) { p.m_lpayments = new ArrayList(); } else { p.m_lpayments = l; } // Sales Object[] recsales = (Object[]) new StaticSentence(app.getSession(), "SELECT COUNT(DISTINCT RECEIPTS.ID), SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) " + "FROM RECEIPTS, TICKETLINES WHERE RECEIPTS.ID = TICKETLINES.TICKET AND RECEIPTS.MONEY = ?", SerializerWriteString.INSTANCE, new SerializerReadBasic(new Datas[]{Datas.INT, Datas.DOUBLE})) .find(app.getActiveCashIndex()); if (recsales == null) { p.m_iSales = null; p.m_dSalesBase = null; } else { p.m_iSales = (Integer) recsales[0]; p.m_dSalesBase = (Double) recsales[1]; } // Taxes Object[] rectaxes = (Object[]) new StaticSentence(app.getSession(), "SELECT SUM(TAXLINES.AMOUNT), SUM(TAXLINES.BASE) " + "FROM RECEIPTS, TAXLINES WHERE RECEIPTS.ID = TAXLINES.RECEIPT AND RECEIPTS.MONEY = ?", SerializerWriteString.INSTANCE, new SerializerReadBasic(new Datas[]{Datas.DOUBLE, Datas.DOUBLE})) .find(app.getActiveCashIndex()); if (rectaxes == null) { p.m_dSalesTaxes = null; p.m_dSalesTaxNet = null; } else { p.m_dSalesTaxes = (Double) rectaxes[0]; p.m_dSalesTaxNet = (Double) rectaxes[1]; } /* List<SalesLine> asales = new StaticSentence(app.getSession(), "SELECT TAXCATEGORIES.NAME, SUM(TAXLINES.AMOUNT), SUM(TAXLINES.BASE), SUM(TAXLINES.BASE + TAXLINES.AMOUNT) " + "FROM RECEIPTS, TAXLINES, TAXES, TAXCATEGORIES WHERE RECEIPTS.ID = TAXLINES.RECEIPT AND TAXLINES.TAXID = TAXES.ID AND TAXES.CATEGORY = TAXCATEGORIES.ID " + "AND RECEIPTS.MONEY = ?" + "GROUP BY TAXCATEGORIES.NAME" , SerializerWriteString.INSTANCE , new SerializerReadClass(PaymentsModel.SalesLine.class)) .list(app.getActiveCashIndex()); if (asales == null) { p.m_lsales = new ArrayList<>(); } else { p.m_lsales = asales; } */ try { List<SalesLine> asales = new StaticSentence(app.getSession(), "SELECT TAXCATEGORIES.NAME, SUM(NEWTAXLINES.AMOUNT), SUM(NEWTAXLINES.BASE), SUM(NEWTAXLINES.BASE + NEWTAXLINES.AMOUNT) " + "FROM RECEIPTS, " + "(SELECT TAXLINES.ID,RECEIPT,TAXID,BASE,SUM(AMOUNT) as AMOUNT " // + " FROM TAXLINES,TAXES where TAXLINES.TAXID=TAXES.ID and PARENTID is not null GROUP BY RECEIPT " + " FROM TAXLINES,TAXES where TAXLINES.TAXID=TAXES.ID and PARENTID is not null GROUP BY RECEIPT, PARENTID " + " union " + " SELECT TAXLINES.ID, RECEIPT, TAXID, BASE, AMOUNT as AMOUNT " + " FROM TAXLINES,TAXES " + " where TAXLINES.TAXID=TAXES.ID and PARENTID is null) NEWTAXLINES, " + " TAXES, TAXCATEGORIES " + " WHERE RECEIPTS.ID = NEWTAXLINES.RECEIPT AND NEWTAXLINES.TAXID = TAXES.ID AND TAXES.CATEGORY = TAXCATEGORIES.ID" + " AND RECEIPTS.MONEY = ?" + " GROUP BY TAXCATEGORIES.NAME ", SerializerWriteString.INSTANCE, new SerializerReadClass(PaymentsModel.SalesLine.class)) .list(app.getActiveCashIndex()); if (asales == null) { p.m_lsales = new ArrayList<>(); } else { p.m_lsales = asales; } } catch (BasicException e) { List<SalesLine> asales = new StaticSentence(app.getSession(), "SELECT TAXCATEGORIES.NAME, SUM(TAXLINES.AMOUNT), SUM(TAXLINES.BASE), SUM(TAXLINES.BASE + TAXLINES.AMOUNT) " + "FROM RECEIPTS, TAXLINES, TAXES, TAXCATEGORIES WHERE RECEIPTS.ID = TAXLINES.RECEIPT AND TAXLINES.TAXID = TAXES.ID AND TAXES.CATEGORY = TAXCATEGORIES.ID " + "AND RECEIPTS.MONEY = ?" + "GROUP BY TAXCATEGORIES.NAME", SerializerWriteString.INSTANCE, new SerializerReadClass(PaymentsModel.SalesLine.class)) .list(app.getActiveCashIndex()); if (asales == null) { p.m_lsales = new ArrayList<>(); } else { p.m_lsales = asales; } } SimpleDateFormat ndf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String startDateFormatted = ndf.format(app.getActiveCashDateStart()); List removedLines = new StaticSentence(app.getSession(), "SELECT LINEREMOVED.NAME, LINEREMOVED.TICKETID, LINEREMOVED.PRODUCTNAME, SUM(LINEREMOVED.UNITS) AS TOTAL_UNITS " + "FROM LINEREMOVED " + "WHERE LINEREMOVED.REMOVEDDATE > ? " + "GROUP BY LINEREMOVED.NAME, LINEREMOVED.TICKETID, LINEREMOVED.PRODUCTNAME", SerializerWriteString.INSTANCE, new SerializerReadClass(PaymentsModel.RemovedProductLines.class)) //new SerializerReadBasic(new Datas[] {Datas.STRING, Datas.DOUBLE})) .list(startDateFormatted); if (removedLines == null) { p.m_lremovedlines = new ArrayList(); } else { p.m_lremovedlines = removedLines; } // Product Sales Object[] valproductsales = (Object[]) new StaticSentence(app.getSession(), "SELECT COUNT(*), SUM(TICKETLINES.UNITS), SUM((TICKETLINES.PRICE + TICKETLINES.PRICE * TAXES.RATE ) * TICKETLINES.UNITS) " + "FROM TICKETLINES, TICKETS, RECEIPTS, TAXES " + "WHERE TICKETLINES.TICKET = TICKETS.ID AND TICKETS.ID = RECEIPTS.ID AND TICKETLINES.TAXID = TAXES.ID AND TICKETLINES.PRODUCT IS NOT NULL AND RECEIPTS.MONEY = ? " + "GROUP BY RECEIPTS.MONEY", SerializerWriteString.INSTANCE, new SerializerReadBasic(new Datas[]{Datas.INT, Datas.DOUBLE, Datas.DOUBLE})) .find(app.getActiveCashIndex()); if (valproductsales == null) { p.m_iProductSalesRows = 0; p.m_dProductSalesTotalUnits = 0.0; p.m_dProductSalesTotal = 0.0; } else { p.m_iProductSalesRows = (Integer) valproductsales[0]; p.m_dProductSalesTotalUnits = (Double) valproductsales[1]; p.m_dProductSalesTotal = (Double) valproductsales[2]; } List products = new StaticSentence(app.getSession(), "SELECT PRODUCTS.NAME, SUM(TICKETLINES.UNITS), TICKETLINES.PRICE, TAXES.RATE " + "FROM TICKETLINES, TICKETS, RECEIPTS, PRODUCTS, TAXES " + "WHERE TICKETLINES.PRODUCT = PRODUCTS.ID AND TICKETLINES.TICKET = TICKETS.ID AND TICKETS.ID = RECEIPTS.ID AND TICKETLINES.TAXID = TAXES.ID AND RECEIPTS.MONEY = ? " + "GROUP BY PRODUCTS.NAME, TICKETLINES.PRICE, TAXES.RATE", SerializerWriteString.INSTANCE, new SerializerReadClass(PaymentsModel.ProductSalesLine.class)) //new SerializerReadBasic(new Datas[] {Datas.STRING, Datas.DOUBLE})) .list(app.getActiveCashIndex()); if (products == null) { p.m_lproductsales = new ArrayList(); } else { p.m_lproductsales = products; } return p; } /** * * @return */ public int getPayments() { return m_iPayments; } /** * * @return */ public double getTotal() { return m_dPaymentsTotal; } /** * * @return */ public String getHost() { return m_sHost; } /** * * @return */ public int getSequence() { return m_iSeq; } /** * * @return */ public Date getDateStart() { return m_dDateStart; } /** * * @param dValue */ public void setDateEnd(Date dValue) { m_dDateEnd = dValue; } /** * * @return */ public Date getDateEnd() { return m_dDateEnd; } /** * * @return */ public String getDateStartDerby() { SimpleDateFormat ndf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return ndf.format(m_dDateStart); } /** * * @return */ public String printHost() { // return m_sHost; return StringUtils.encodeXML(m_sHost); } /** * * @return */ public String printSequence() { return Formats.INT.formatValue(m_iSeq); } /** * * @return */ public String printDateStart() { return Formats.TIMESTAMP.formatValue(m_dDateStart); } /** * * @return */ public String printDateEnd() { return Formats.TIMESTAMP.formatValue(m_dDateEnd); } /** * * @return */ public String printPayments() { return Formats.INT.formatValue(m_iPayments); } /** * * @return */ public String printPaymentsTotal() { return Formats.CURRENCY.formatValue(m_dPaymentsTotal); } /** * * @return */ public List<PaymentsLine> getPaymentLines() { return m_lpayments; } /** * * @return */ public int getSales() { return m_iSales == null ? 0 : m_iSales; } /** * * @return */ public String printSales() { return Formats.INT.formatValue(m_iSales); } /** * * @return */ public String printSalesBase() { return Formats.CURRENCY.formatValue(m_dSalesBase); } /** * * @return */ public String printSalesTaxes() { return Formats.CURRENCY.formatValue(m_dSalesTaxes); } /** * * @return */ public String printSalesTotal() { return Formats.CURRENCY.formatValue((m_dSalesBase == null || m_dSalesTaxes == null) ? null : m_dSalesBase + m_dSalesTaxes); } /** * * @return */ public List<SalesLine> getSaleLines() { return m_lsales; } /** * * @return */ public double getCategorySalesRows() { return m_iCategorySalesRows; } /** * * @return */ public String printCategorySalesRows() { return Formats.INT.formatValue(m_iCategorySalesRows); } /** * * @return */ public double getCategorySalesTotalUnits() { return m_dCategorySalesTotalUnits; } /** * * @return */ public String printCategorySalesTotalUnits() { return Formats.DOUBLE.formatValue(m_dCategorySalesTotalUnits); } /** * * @return */ public double getCategorySalesTotal() { return m_dCategorySalesTotal; } /** * * @return */ public String printCategorySalesTotal() { return Formats.CURRENCY.formatValue(m_dCategorySalesTotal); } /** * * @return */ public List<CategorySalesLine> getCategorySalesLines() { return m_lcategorysales; } // end /** * * @return */ public double getProductSalesRows() { return m_iProductSalesRows; } /** * * @return */ public String printProductSalesRows() { return Formats.INT.formatValue(m_iProductSalesRows); } /** * * @return */ public double getProductSalesTotalUnits() { return m_dProductSalesTotalUnits; } /** * * @return */ public String printProductSalesTotalUnits() { return Formats.DOUBLE.formatValue(m_dProductSalesTotalUnits); } /** * * @return */ public double getProductSalesTotal() { return m_dProductSalesTotal; } /** * * @return */ public String printProductSalesTotal() { return Formats.CURRENCY.formatValue(m_dProductSalesTotal); } /** * * @return */ public List<ProductSalesLine> getProductSalesLines() { return m_lproductsales; } // end /** * * @return */ public List<RemovedProductLines> getRemovedProductLines() { return m_lremovedlines; } /** * * @return */ public AbstractTableModel getPaymentsModel() { return new AbstractTableModel() { @Override public String getColumnName(int column) { return AppLocal.getIntString(PAYMENTHEADERS[column]); } @Override public int getRowCount() { return m_lpayments.size(); } @Override public int getColumnCount() { return PAYMENTHEADERS.length; } @Override public Object getValueAt(int row, int column) { PaymentsLine l = m_lpayments.get(row); switch (column) { case 0: return l.getType(); case 1: return l.getValue(); default: return null; } } }; } /** * */ public static class CategorySalesLine implements SerializableRead { private String m_CategoryName; private Double m_CategoryUnits; private Double m_CategorySum; /** * * @param dr * @throws BasicException */ @Override public void readValues(DataRead dr) throws BasicException { m_CategoryName = dr.getString(1); m_CategoryUnits = dr.getDouble(2); m_CategorySum = dr.getDouble(3); } /** * * @return */ public String printCategoryName() { //return m_CategoryName; return StringUtils.encodeXML(m_CategoryName); } /** * * @return */ public String printCategoryUnits() { return Formats.DOUBLE.formatValue(m_CategoryUnits); } /** * * @return */ public Double getCategoryUnits() { return m_CategoryUnits; } /** * * @return */ public String printCategorySum() { return Formats.CURRENCY.formatValue(m_CategorySum); } /** * * @return */ public Double getCategorySum() { return m_CategorySum; } } /** * */ public static class RemovedProductLines implements SerializableRead { private String m_Name; private String m_TicketId; private String m_ProductName; private Double m_TotalUnits; /** * * @param dr * @throws BasicException */ @Override public void readValues(DataRead dr) throws BasicException { m_Name = dr.getString(1); m_TicketId = dr.getString(2); m_ProductName = dr.getString(3); m_TotalUnits = dr.getDouble(4); } /** * * @return */ public String printWorkerName() { return StringUtils.encodeXML(m_Name); } /** * * @return */ public String printTicketId() { return StringUtils.encodeXML(m_TicketId); } /** * * @return */ public String printProductName() { return StringUtils.encodeXML(m_ProductName); } /** * * @return */ public String printTotalUnits() { return Formats.DOUBLE.formatValue(m_TotalUnits); } } /** * */ public static class ProductSalesLine implements SerializableRead { private String m_ProductName; private Double m_ProductUnits; private Double m_ProductPrice; private Double m_TaxRate; private Double m_ProductPriceTax; private Double m_ProductPriceNet; /** * * @param dr * @throws BasicException */ @Override public void readValues(DataRead dr) throws BasicException { m_ProductName = dr.getString(1); m_ProductUnits = dr.getDouble(2); m_ProductPrice = dr.getDouble(3); m_TaxRate = dr.getDouble(4); m_ProductPriceTax = m_ProductPrice + m_ProductPrice * m_TaxRate; m_ProductPriceNet = m_ProductPrice * m_TaxRate; } /** * * @return */ public String printProductName() { return StringUtils.encodeXML(m_ProductName); } /** * * @return */ public String printProductUnits() { return Formats.DOUBLE.formatValue(m_ProductUnits); } /** * * @return */ public Double getProductUnits() { return m_ProductUnits; } /** * * @return */ public String printProductPrice() { return Formats.CURRENCY.formatValue(m_ProductPrice); } /** * * @return */ public Double getProductPrice() { return m_ProductPrice; } /** * * @return */ public String printTaxRate() { return Formats.PERCENT.formatValue(m_TaxRate); } /** * * @return */ public Double getTaxRate() { return m_TaxRate; } /** * * @return */ public String printProductPriceTax() { return Formats.CURRENCY.formatValue(m_ProductPriceTax); } /** * * @return */ public String printProductSubValue() { return Formats.CURRENCY.formatValue(m_ProductPriceTax * m_ProductUnits); } /** * @return */ public String printProductPriceNet() { return Formats.CURRENCY.formatValue(m_ProductPrice * m_ProductUnits); } } // end /** * */ public static class SalesLine implements SerializableRead { private String m_SalesTaxName; private Double m_SalesTaxes; private Double m_SalesTaxNet; private Double m_SalesTaxGross; /** * * @param dr * @throws BasicException */ @Override public void readValues(DataRead dr) throws BasicException { m_SalesTaxName = dr.getString(1); m_SalesTaxes = dr.getDouble(2); m_SalesTaxNet = dr.getDouble(3); m_SalesTaxGross = dr.getDouble(4); } /** * * @return */ public String printTaxName() { // return m_SalesTaxName; return StringUtils.encodeXML(m_SalesTaxName); } /** * * @return */ public String printTaxes() { return Formats.CURRENCY.formatValue(m_SalesTaxes); } /** * @return */ public String printTaxNet() { return Formats.CURRENCY.formatValue(m_SalesTaxNet); } /** * @return */ public String printTaxGross() { return Formats.CURRENCY.formatValue(m_SalesTaxes + m_SalesTaxNet); } /** * * @return */ public String getTaxName() { return m_SalesTaxName; } /** * * @return */ public Double getTaxes() { return m_SalesTaxes; } /** * @return */ public Double getTaxNet() { return m_SalesTaxNet; } /** * @return */ public Double getTaxGross() { return m_SalesTaxGross; } } /** * * @return */ public AbstractTableModel getSalesModel() { return new AbstractTableModel() { @Override public String getColumnName(int column) { return AppLocal.getIntString(SALEHEADERS[column]); } @Override public int getRowCount() { return m_lsales.size(); } @Override public int getColumnCount() { return SALEHEADERS.length; } @Override public Object getValueAt(int row, int column) { SalesLine l = m_lsales.get(row); switch (column) { case 0: return l.getTaxName(); case 1: return l.getTaxes(); case 2: return l.getTaxNet(); default: return null; } } }; } /** * */ public static class PaymentsLine implements SerializableRead { private String m_PaymentType; private Double m_PaymentValue; private String s_PaymentReason; /** * * @param dr * @throws BasicException */ @Override public void readValues(DataRead dr) throws BasicException { m_PaymentType = dr.getString(1); m_PaymentValue = dr.getDouble(2); s_PaymentReason = dr.getString(3) == null ? "" : dr.getString(3); } /** * * @return */ public String printType() { return AppLocal.getIntString("transpayment." + m_PaymentType); } /** * * @return */ public String getType() { return m_PaymentType; } /** * * @return */ public String printValue() { return Formats.CURRENCY.formatValue(m_PaymentValue); } /** * * @return */ public Double getValue() { return m_PaymentValue; } /** * * @return */ public String printReason() { return StringUtils.encodeXML(s_PaymentReason); } /** * * @return */ public String getReason() { return s_PaymentReason; } } }