diff --git a/client/src/org/compiere/apps/form/Merge.java b/client/src/org/compiere/apps/form/Merge.java new file mode 100644 index 0000000000..7587272fca --- /dev/null +++ b/client/src/org/compiere/apps/form/Merge.java @@ -0,0 +1,287 @@ +/****************************************************************************** + * Copyright (C) 2009 Low Heng Sin * + * Copyright (C) 2009 Idalica Corporation * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.compiere.apps.form; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.logging.Level; + +import org.compiere.model.MBPartner; +import org.compiere.model.MInvoice; +import org.compiere.model.MPayment; +import org.compiere.model.X_M_Cost; +import org.compiere.util.CLogger; +import org.compiere.util.DB; +import org.compiere.util.Env; +import org.compiere.util.Trx; + +public class Merge +{ + private static final long serialVersionUID = 149783846292562740L; + /** Window No */ + public int m_WindowNo = 0; + /** Total Count */ + public int m_totalCount = 0; + /** Error Log */ + public StringBuffer m_errorLog = new StringBuffer(); + /** Connection */ + //private Connection m_con = null; + private Trx m_trx = null; + /** Logger */ + public static CLogger log = CLogger.getCLogger(Merge.class); + + public static String AD_ORG_ID = "AD_Org_ID"; + public static String C_BPARTNER_ID = "C_BPartner_ID"; + public static String AD_USER_ID = "AD_User_ID"; + public static String M_PRODUCT_ID = "M_Product_ID"; + + /** Tables to delete (not update) for AD_Org */ + public static String[] s_delete_Org = new String[] + {"AD_OrgInfo", "AD_Role_OrgAccess"}; + /** Tables to delete (not update) for AD_User */ + public static String[] s_delete_User = new String[] + {"AD_User_Roles"}; + /** Tables to delete (not update) for C_BPartner */ + public static String[] s_delete_BPartner = new String[] + {"C_BP_Employee_Acct", "C_BP_Vendor_Acct", "C_BP_Customer_Acct", + "T_Aging"}; + /** Tables to delete (not update) for M_Product */ + public static String[] s_delete_Product = new String[] + {"M_Product_PO", "M_Replenish", "T_Replenish", + "M_ProductPrice", "M_Product_Costing", + "M_Cost", // teo_sarca [ 1704554 ] + "M_Product_Trl", "M_Product_Acct"}; // M_Storage + + public String[] m_columnName = null; + public String[] m_deleteTables = null; + + public void updateDeleteTable(String columnName) + { + // ** Update ** + if (columnName.equals(AD_ORG_ID)) + m_deleteTables = s_delete_Org; + else if (columnName.equals(AD_USER_ID)) + m_deleteTables = s_delete_User; + else if (columnName.equals(C_BPARTNER_ID)) + m_deleteTables = s_delete_BPartner; + else if (columnName.equals(M_PRODUCT_ID)) + m_deleteTables = s_delete_Product; + } + + + /** + * Merge. + * @param ColumnName column + * @param from_ID from + * @param to_ID to + * @return true if merged + */ + public boolean merge (String ColumnName, int from_ID, int to_ID) + { + String TableName = ColumnName.substring(0, ColumnName.length()-3); + log.config(ColumnName + + " - From=" + from_ID + ",To=" + to_ID); + + boolean success = true; + m_totalCount = 0; + m_errorLog = new StringBuffer(); + String sql = "SELECT t.TableName, c.ColumnName " + + "FROM AD_Table t" + + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) " + + "WHERE t.IsView='N'" + + " AND t.TableName NOT IN ('C_TaxDeclarationAcct')" + + " AND (" + + "(c.ColumnName=? AND c.IsKey='N' AND c.ColumnSQL IS NULL)" // #1 - direct + + " OR " + + "c.AD_Reference_Value_ID IN " // Table Reference + + "(SELECT rt.AD_Reference_ID FROM AD_Ref_Table rt" + + " INNER JOIN AD_Column cc ON (rt.AD_Table_ID=cc.AD_Table_ID AND rt.AD_Key=cc.AD_Column_ID) " + + "WHERE cc.IsKey='Y' AND cc.ColumnName=?)" // #2 + + ") " + + "ORDER BY t.LoadSeq DESC"; + PreparedStatement pstmt = null; + + try + { + + m_trx = Trx.get(Trx.createTrxName("merge"), true); + // + pstmt = DB.prepareStatement(sql, Trx.createTrxName()); + pstmt.setString(1, ColumnName); + pstmt.setString(2, ColumnName); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) + { + String tName = rs.getString(1); + String cName = rs.getString(2); + if (!TableName.equals(tName)) // to be sure - sql should prevent it + { + int count = mergeTable (tName, cName, from_ID, to_ID); + if (count < 0) + success = false; + else + m_totalCount += count; + } + } + rs.close(); + pstmt.close(); + pstmt = null; + // + log.config("Success=" + success + + " - " + ColumnName + " - From=" + from_ID + ",To=" + to_ID); + if (success) + { + sql = "DELETE " + TableName + " WHERE " + ColumnName + "=" + from_ID; + + + + + if ( DB.executeUpdate(sql, m_trx.getTrxName()) < 0 ) + { + m_errorLog.append(Env.NL).append("DELETE ").append(TableName) + .append(" - "); + success = false; + log.config(m_errorLog.toString()); + m_trx.rollback(); + return false; + } + + } + // + if (success) + m_trx.commit(); + else + m_trx.rollback(); + + m_trx.close(); + + } + catch (Exception ex) + { + log.log(Level.SEVERE, ColumnName, ex); + } + // Cleanup + try + { + if (pstmt != null) + pstmt.close(); + + } + catch (Exception ex) + { + } + pstmt = null; + return success; + } // merge + + + /** + * Merge Table + * @param TableName table + * @param ColumnName column + * @param from_ID from + * @param to_ID to + * @return -1 for error or number of changes + */ + public int mergeTable (String TableName, String ColumnName, int from_ID, int to_ID) + { + log.fine(TableName + "." + ColumnName + " - From=" + from_ID + ",To=" + to_ID); + String sql = "UPDATE " + TableName + + " SET " + ColumnName + "=" + to_ID + + " WHERE " + ColumnName + "=" + from_ID; + boolean delete = false; + for (int i = 0; i < m_deleteTables.length; i++) + { + if (m_deleteTables[i].equals(TableName)) + { + delete = true; + sql = "DELETE " + TableName + " WHERE " + ColumnName + "=" + from_ID; + } + } + // Delete newly created MCost records - teo_sarca [ 1704554 ] + if (delete && X_M_Cost.Table_Name.equals(TableName) && M_PRODUCT_ID.equals(ColumnName)) + { + sql += " AND " + X_M_Cost.COLUMNNAME_CurrentCostPrice + "=0" + + " AND " + X_M_Cost.COLUMNNAME_CurrentQty + "=0" + + " AND " + X_M_Cost.COLUMNNAME_CumulatedAmt + "=0" + + " AND " + X_M_Cost.COLUMNNAME_CumulatedQty + "=0"; + } + + int count = DB.executeUpdate(sql, m_trx.getTrxName()); + + + if ( count < 0 ) + { + + count = -1; + m_errorLog.append(Env.NL) + .append(delete ? "DELETE " : "UPDATE ") + .append(TableName).append(" - ") + .append(" - ").append(sql); + log.config(m_errorLog.toString()); + m_trx.rollback(); + + } + log.fine(count + + (delete ? " -Delete- " : " -Update- ") + TableName); + + + return count; + } // mergeTable + + /** + * Post Merge + * @param ColumnName column name + * @param to_ID ID + */ + public void postMerge (String ColumnName, int to_ID) + { + if (ColumnName.equals(AD_ORG_ID)) + { + + } + else if (ColumnName.equals(AD_USER_ID)) + { + + } + else if (ColumnName.equals(C_BPARTNER_ID)) + { + MBPartner bp = new MBPartner (Env.getCtx(), to_ID, null); + if (bp.get_ID() != 0) + { + MPayment[] payments = MPayment.getOfBPartner(Env.getCtx(), bp.getC_BPartner_ID(), null); + for (int i = 0; i < payments.length; i++) + { + MPayment payment = payments[i]; + if (payment.testAllocation()) + payment.save(); + } + MInvoice[] invoices = MInvoice.getOfBPartner(Env.getCtx(), bp.getC_BPartner_ID(), null); + for (int i = 0; i < invoices.length; i++) + { + MInvoice invoice = invoices[i]; + if (invoice.testAllocation()) + invoice.save(); + } + bp.setTotalOpenBalance(); + bp.setActualLifeTimeValue(); + bp.save(); + } + } + else if (ColumnName.equals(M_PRODUCT_ID)) + { + + } + } // postMerge +} diff --git a/client/src/org/compiere/apps/form/PayPrint.java b/client/src/org/compiere/apps/form/PayPrint.java new file mode 100644 index 0000000000..d9cabbbcc4 --- /dev/null +++ b/client/src/org/compiere/apps/form/PayPrint.java @@ -0,0 +1,228 @@ +/****************************************************************************** + * Copyright (C) 2009 Low Heng Sin * + * Copyright (C) 2009 Idalica Corporation * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.compiere.apps.form; + +import java.math.BigDecimal; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.logging.Level; + +import org.compiere.model.MLookupFactory; +import org.compiere.model.MLookupInfo; +import org.compiere.model.MPaySelectionCheck; +import org.compiere.model.MPaymentBatch; +import org.compiere.util.CLogger; +import org.compiere.util.DB; +import org.compiere.util.Env; +import org.compiere.util.KeyNamePair; +import org.compiere.util.Language; +import org.compiere.util.ValueNamePair; + +public class PayPrint { + + /** Window No */ + public int m_WindowNo = 0; + /** Used Bank Account */ + public int m_C_BankAccount_ID = -1; + + /** Payment Information */ + public MPaySelectionCheck[] m_checks = null; + /** Payment Batch */ + public MPaymentBatch m_batch = null; + /** Logger */ + public static CLogger log = CLogger.getCLogger(PayPrint.class); + + public ArrayList getPaySelectionData() + { + ArrayList data = new ArrayList(); + + log.config(""); + int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); + + // Load PaySelect + String sql = "SELECT C_PaySelection_ID, Name || ' - ' || TotalAmt FROM C_PaySelection " + + "WHERE AD_Client_ID=? AND Processed='Y' AND IsActive='Y'" + + "ORDER BY PayDate DESC"; + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, AD_Client_ID); + ResultSet rs = pstmt.executeQuery(); + // + while (rs.next()) + { + KeyNamePair pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); + data.add(pp); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + return data; + } + + public String bank; + public String currency; + public BigDecimal balance; + + /** + * PaySelect changed - load Bank + */ + public void loadPaySelectInfo(int C_PaySelection_ID) + { + // load Banks from PaySelectLine + m_C_BankAccount_ID = -1; + String sql = "SELECT ps.C_BankAccount_ID, b.Name || ' ' || ba.AccountNo," // 1..2 + + " c.ISO_Code, CurrentBalance " // 3..4 + + "FROM C_PaySelection ps" + + " INNER JOIN C_BankAccount ba ON (ps.C_BankAccount_ID=ba.C_BankAccount_ID)" + + " INNER JOIN C_Bank b ON (ba.C_Bank_ID=b.C_Bank_ID)" + + " INNER JOIN C_Currency c ON (ba.C_Currency_ID=c.C_Currency_ID) " + + "WHERE ps.C_PaySelection_ID=? AND ps.Processed='Y' AND ba.IsActive='Y'"; + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, C_PaySelection_ID); + ResultSet rs = pstmt.executeQuery(); + if (rs.next()) + { + m_C_BankAccount_ID = rs.getInt(1); + bank = rs.getString(2); + currency = rs.getString(3); + balance = rs.getBigDecimal(4); + } + else + { + m_C_BankAccount_ID = -1; + bank = ""; + currency = ""; + balance = Env.ZERO; + log.log(Level.SEVERE, "No active BankAccount for C_PaySelection_ID=" + C_PaySelection_ID); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + } // loadPaySelectInfo + + /** + * Bank changed - load PaymentRule + */ + public ArrayList loadPaymentRule(int C_PaySelection_ID) + { + ArrayList data = new ArrayList(); + + // load PaymentRule for Bank + int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule"); + Language language = Language.getLanguage(Env.getAD_Language(Env.getCtx())); + MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID); + String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY")) + + " AND " + info.KeyColumn + + " IN (SELECT PaymentRule FROM C_PaySelectionCheck WHERE C_PaySelection_ID=?) " + + info.Query.substring(info.Query.indexOf(" ORDER BY")); + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, C_PaySelection_ID); + ResultSet rs = pstmt.executeQuery(); + // + while (rs.next()) + { + ValueNamePair pp = new ValueNamePair(rs.getString(2), rs.getString(3)); + data.add(pp); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + if (data.size() == 0) + log.config("PaySel=" + C_PaySelection_ID + ", BAcct=" + m_C_BankAccount_ID + " - " + sql); + + return data; + } // loadPaymentRule + + public String noPayments; + public Integer documentNo; + + + /** + * PaymentRule changed - load DocumentNo, NoPayments, + * enable/disable EFT, Print + */ + public String loadPaymentRuleInfo(int C_PaySelection_ID, String PaymentRule) + { + String msg = null; + + String sql = "SELECT COUNT(*) " + + "FROM C_PaySelectionCheck " + + "WHERE C_PaySelection_ID=?"; + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, C_PaySelection_ID); + ResultSet rs = pstmt.executeQuery(); + // + if (rs.next()) + noPayments = String.valueOf(rs.getInt(1)); + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + // DocumentNo + sql = "SELECT CurrentNext " + + "FROM C_BankAccountDoc " + + "WHERE C_BankAccount_ID=? AND PaymentRule=? AND IsActive='Y'"; + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, m_C_BankAccount_ID); + pstmt.setString(2, PaymentRule); + ResultSet rs = pstmt.executeQuery(); + // + if (rs.next()) + documentNo = new Integer(rs.getInt(1)); + else + { + log.log(Level.SEVERE, "VPayPrint.loadPaymentRuleInfo - No active BankAccountDoc for C_BankAccount_ID=" + + m_C_BankAccount_ID + " AND PaymentRule=" + PaymentRule); + msg = "VPayPrintNoDoc"; + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + return msg; + } // loadPaymentRuleInfo +} diff --git a/client/src/org/compiere/apps/form/PaySelect.java b/client/src/org/compiere/apps/form/PaySelect.java new file mode 100644 index 0000000000..bd10c35458 --- /dev/null +++ b/client/src/org/compiere/apps/form/PaySelect.java @@ -0,0 +1,474 @@ +/****************************************************************************** + * Copyright (C) 2009 Low Heng Sin * + * Copyright (C) 2009 Idalica Corporation * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.compiere.apps.form; + +import java.math.BigDecimal; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Properties; +import java.util.logging.Level; + +import org.compiere.minigrid.ColumnInfo; +import org.compiere.minigrid.IDColumn; +import org.compiere.minigrid.IMiniTable; +import org.compiere.model.MLookupFactory; +import org.compiere.model.MLookupInfo; +import org.compiere.model.MPaySelection; +import org.compiere.model.MPaySelectionLine; +import org.compiere.model.MRole; +import org.compiere.model.X_C_Order; +import org.compiere.process.ProcessInfo; +import org.compiere.util.CLogger; +import org.compiere.util.DB; +import org.compiere.util.DisplayType; +import org.compiere.util.Env; +import org.compiere.util.KeyNamePair; +import org.compiere.util.Language; +import org.compiere.util.Msg; +import org.compiere.util.Trx; +import org.compiere.util.ValueNamePair; + +public class PaySelect +{ + /** @todo withholding */ + + /** + * + */ + private static final long serialVersionUID = 2872767371244295934L; + + /** Window No */ + public int m_WindowNo = 0; + + /** Format */ + public DecimalFormat m_format = DisplayType.getNumberFormat(DisplayType.Amount); + /** Bank Balance */ + private BigDecimal m_bankBalance = new BigDecimal(0.0); + /** SQL for Query */ + private String m_sql; + /** Number of selected rows */ + public int m_noSelected = 0; + /** Client ID */ + private int m_AD_Client_ID = 0; + /**/ + public boolean m_isLocked = false; + /** Payment Selection */ + public MPaySelection m_ps = null; + /** Logger */ + public static CLogger log = CLogger.getCLogger(PaySelect.class); + + public ArrayList getBankAccountData() + { + ArrayList data = new ArrayList(); + // + m_AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); + // Bank Account Info + String sql = MRole.getDefault().addAccessSQL( + "SELECT ba.C_BankAccount_ID," // 1 + + "b.Name || ' ' || ba.AccountNo AS Name," // 2 + + "ba.C_Currency_ID, c.ISO_Code," // 3..4 + + "ba.CurrentBalance " // 5 + + "FROM C_Bank b, C_BankAccount ba, C_Currency c " + + "WHERE b.C_Bank_ID=ba.C_Bank_ID" + + " AND ba.C_Currency_ID=c.C_Currency_ID " + + " AND EXISTS (SELECT * FROM C_BankAccountDoc d WHERE d.C_BankAccount_ID=ba.C_BankAccount_ID) " + + "ORDER BY 2", + "b", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RW); + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) + { + boolean transfers = false; + BankInfo bi = new BankInfo (rs.getInt(1), rs.getInt(3), + rs.getString(2), rs.getString(4), + rs.getBigDecimal(5), transfers); + data.add(bi); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + return data; + } + + public ArrayList getBPartnerData() + { + ArrayList data = new ArrayList(); + + // Optional BusinessPartner with unpaid AP Invoices + KeyNamePair pp = new KeyNamePair(0, ""); + data.add(pp); + + String sql = MRole.getDefault().addAccessSQL( + "SELECT bp.C_BPartner_ID, bp.Name FROM C_BPartner bp", "bp", + MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO) + + " AND EXISTS (SELECT * FROM C_Invoice i WHERE bp.C_BPartner_ID=i.C_BPartner_ID" + // X_C_Order.PAYMENTRULE_DirectDebit + + " AND (i.IsSOTrx='N' OR (i.IsSOTrx='Y' AND i.PaymentRule='D'))" + + " AND i.IsPaid<>'Y') " + + "ORDER BY 2"; + + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) + { + pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); + data.add(pp); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + return data; + } + + public ArrayList getDocTypeData() + { + ArrayList data = new ArrayList(); + String sql = null; + /**Document type**/ + try + { + sql = MRole.getDefault().addAccessSQL( + "SELECT doc.c_doctype_id,doc.name FROM c_doctype doc WHERE doc.ad_client_id = ? AND doc.docbasetype in ('API','APC') ORDER BY 2", "doc", + MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO); + + KeyNamePair dt = new KeyNamePair(0, ""); + data.add(dt); + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, m_AD_Client_ID); // Client + ResultSet rs = pstmt.executeQuery(); + + while (rs.next()) + { + dt = new KeyNamePair(rs.getInt(1), rs.getString(2)); + data.add(dt); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + + return data; + } + + public void prepareTable(IMiniTable miniTable) + { + Properties ctx = Env.getCtx(); + /** prepare MiniTable + * + SELECT i.C_Invoice_ID, i.DateInvoiced+p.NetDays AS DateDue, + bp.Name, i.DocumentNo, c.ISO_Code, i.GrandTotal, + paymentTermDiscount(i.GrandTotal, i.C_PaymentTerm_ID, i.DateInvoiced, SysDate) AS Discount, + SysDate-paymentTermDueDays(i.C_PaymentTerm_ID,i.DateInvoiced) AS DiscountDate, + i.GrandTotal-paymentTermDiscount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate) AS DueAmount, + currencyConvert(i.GrandTotal-paymentTermDiscount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate,null), + i.C_Currency_ID,xx100,SysDate) AS PayAmt + FROM C_Invoice i, C_BPartner bp, C_Currency c, C_PaymentTerm p + WHERE i.IsSOTrx='N' + AND i.C_BPartner_ID=bp.C_BPartner_ID + AND i.C_Currency_ID=c.C_Currency_ID + AND i.C_PaymentTerm_ID=p.C_PaymentTerm_ID + AND i.DocStatus IN ('CO','CL') + ORDER BY 2,3 + */ + + m_sql = miniTable.prepareTable(new ColumnInfo[] { + // 0..4 + new ColumnInfo(" ", "i.C_Invoice_ID", IDColumn.class, false, false, null), + new ColumnInfo(Msg.translate(ctx, "DueDate"), "paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) AS DateDue", Timestamp.class, true, true, null), + new ColumnInfo(Msg.translate(ctx, "C_BPartner_ID"), "bp.Name", KeyNamePair.class, true, false, "i.C_BPartner_ID"), + new ColumnInfo(Msg.translate(ctx, "DocumentNo"), "i.DocumentNo", String.class), + new ColumnInfo(Msg.translate(ctx, "C_Currency_ID"), "c.ISO_Code", KeyNamePair.class, true, false, "i.C_Currency_ID"), + // 5..9 + new ColumnInfo(Msg.translate(ctx, "GrandTotal"), "i.GrandTotal", BigDecimal.class), + new ColumnInfo(Msg.translate(ctx, "DiscountAmt"), "paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?)", BigDecimal.class), + new ColumnInfo(Msg.getMsg(ctx, "DiscountDate"), "SysDate-paymentTermDueDays(i.C_PaymentTerm_ID,i.DateInvoiced,SysDate)", Timestamp.class), + new ColumnInfo(Msg.getMsg(ctx, "AmountDue"), "currencyConvert(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID),i.C_Currency_ID, ?,?,i.C_ConversionType_ID, i.AD_Client_ID,i.AD_Org_ID)", BigDecimal.class), + new ColumnInfo(Msg.getMsg(ctx, "AmountPay"), "currencyConvert(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID)-paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?),i.C_Currency_ID, ?,?,i.C_ConversionType_ID, i.AD_Client_ID,i.AD_Org_ID)", BigDecimal.class) + }, + // FROM + "C_Invoice_v i" + + " INNER JOIN C_BPartner bp ON (i.C_BPartner_ID=bp.C_BPartner_ID)" + + " INNER JOIN C_Currency c ON (i.C_Currency_ID=c.C_Currency_ID)" + + " INNER JOIN C_PaymentTerm p ON (i.C_PaymentTerm_ID=p.C_PaymentTerm_ID)", + // WHERE + "i.IsSOTrx=? AND IsPaid='N'" + // Different Payment Selection + + " AND NOT EXISTS (SELECT * FROM C_PaySelectionLine psl" + + " WHERE i.C_Invoice_ID=psl.C_Invoice_ID AND psl.C_PaySelectionCheck_ID IS NOT NULL" + + " AND psl.C_PaySelectionCheck_ID NOT IN " + + " (SELECT psc.C_PaySelectionCheck_ID FROM C_PaySelectionCheck psc, C_Payment p" + + " WHERE psc.C_PaySelectionCheck_ID = psl.C_PaySelectionCheck_ID" + + " AND psc.C_Payment_ID = p.C_Payment_ID" + + " AND p.DocStatus IN ('RE','VO')))" + + " AND i.DocStatus IN ('CO','CL')" + + " AND i.AD_Client_ID=?", // additional where & order in loadTableInfo() + true, "i"); + } // dynInit + + /** + * Load Bank Info - Load Info from Bank Account and valid Documents (PaymentRule) + */ + public ArrayList getPaymentRuleData(BankInfo bi) + { + if (bi == null) + return null; + m_bankBalance = bi.Balance; + + ArrayList data = new ArrayList(); + + int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule"); + Language language = Env.getLanguage(Env.getCtx()); + MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID); + String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY")) + + " AND " + info.KeyColumn + + " IN (SELECT PaymentRule FROM C_BankAccountDoc WHERE C_BankAccount_ID=?) " + + info.Query.substring(info.Query.indexOf(" ORDER BY")); + try + { + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, bi.C_BankAccount_ID); + ResultSet rs = pstmt.executeQuery(); + ValueNamePair vp = null; + while (rs.next()) + { + vp = new ValueNamePair(rs.getString(2), rs.getString(3)); // returns also not active + data.add(vp); + } + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + return data; + } + + /** + * Query and create TableInfo + */ + public void loadTableInfo(BankInfo bi, Timestamp payDate, ValueNamePair paymentRule, boolean onlyDue, + KeyNamePair bpartner, KeyNamePair docType, IMiniTable miniTable) + { + log.config(""); + // not yet initialized + if (m_sql == null) + return; + + String sql = m_sql; + // Parameters + String isSOTrx = "N"; + if (paymentRule != null && X_C_Order.PAYMENTRULE_DirectDebit.equals(paymentRule.getValue())) + { + isSOTrx = "Y"; + sql += " AND i.PaymentRule='" + X_C_Order.PAYMENTRULE_DirectDebit + "'"; + } + // + if (onlyDue) + sql += " AND paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) <= ?"; + // + KeyNamePair pp = bpartner; + int C_BPartner_ID = pp.getKey(); + if (C_BPartner_ID != 0) + sql += " AND i.C_BPartner_ID=?"; + //Document Type + KeyNamePair dt = docType; + int c_doctype_id = dt.getKey(); + if (c_doctype_id != 0) + sql += " AND i.c_doctype_id =?"; + sql += " ORDER BY 2,3"; + + log.finest(sql + " - C_Currency_ID=" + bi.C_Currency_ID + ", C_BPartner_ID=" + C_BPartner_ID + ", C_doctype_id=" + c_doctype_id ); + // Get Open Invoices + try + { + int index = 1; + PreparedStatement pstmt = DB.prepareStatement(sql, null); + pstmt.setTimestamp(index++, payDate); // DiscountAmt + pstmt.setInt(index++, bi.C_Currency_ID); // DueAmt + pstmt.setTimestamp(index++, payDate); + pstmt.setTimestamp(index++, payDate); // PayAmt + pstmt.setInt(index++, bi.C_Currency_ID); + pstmt.setTimestamp(index++, payDate); + pstmt.setString(index++, isSOTrx); // IsSOTrx + pstmt.setInt(index++, m_AD_Client_ID); // Client + if (onlyDue) + pstmt.setTimestamp(index++, payDate); + if (C_BPartner_ID != 0) + pstmt.setInt(index++, C_BPartner_ID); + if (c_doctype_id != 0) //Document type + pstmt.setInt(index++, c_doctype_id ); + // + ResultSet rs = pstmt.executeQuery(); + miniTable.loadTable(rs); + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, sql, e); + } + } // loadTableInfo + + /** + * Calculate selected rows. + * - add up selected rows + */ + public String calculateSelection(IMiniTable miniTable) + { + m_noSelected = 0; + BigDecimal invoiceAmt = new BigDecimal(0.0); + + int rows = miniTable.getRowCount(); + for (int i = 0; i < rows; i++) + { + IDColumn id = (IDColumn)miniTable.getValueAt(i, 0); + if (id.isSelected()) + { + BigDecimal amt = (BigDecimal)miniTable.getValueAt(i, 9); + if (amt != null) + invoiceAmt = invoiceAmt.add(amt); + m_noSelected++; + } + } + + // Information + BigDecimal remaining = m_bankBalance.subtract(invoiceAmt); + StringBuffer info = new StringBuffer(); + info.append(m_noSelected).append(" ").append(Msg.getMsg(Env.getCtx(), "Selected")).append(" - "); + info.append(m_format.format(invoiceAmt)).append(", "); + info.append(Msg.getMsg(Env.getCtx(), "Remaining")).append(" ").append(m_format.format(remaining)); + return info.toString(); + } // calculateSelection + + public Trx trx = null; + + /** + * Generate PaySelection + */ + public String generatePaySelect(IMiniTable miniTable, ValueNamePair paymentRule, Timestamp payDate, BankInfo bi) + { + log.info(""); + // String trxName Trx.createTrxName("PaySelect"); + // Trx trx = Trx.get(trxName, true); trx needs to be committed too + String trxName = null; + trx = null; + + String PaymentRule = paymentRule.getValue(); + + // Create Header + m_ps = new MPaySelection(Env.getCtx(), 0, trxName); + m_ps.setName (Msg.getMsg(Env.getCtx(), "VPaySelect") + + " - " + paymentRule.getName() + + " - " + payDate); + m_ps.setPayDate (payDate); + m_ps.setC_BankAccount_ID(bi.C_BankAccount_ID); + m_ps.setIsApproved(true); + if (!m_ps.save()) + { + m_ps = null; + return Msg.translate(Env.getCtx(), "C_PaySelection_ID"); + } + log.config(m_ps.toString()); + + // Create Lines + int rows = miniTable.getRowCount(); + int line = 0; + for (int i = 0; i < rows; i++) + { + IDColumn id = (IDColumn)miniTable.getValueAt(i, 0); + if (id.isSelected()) + { + line += 10; + MPaySelectionLine psl = new MPaySelectionLine (m_ps, line, PaymentRule); + int C_Invoice_ID = id.getRecord_ID().intValue(); + BigDecimal OpenAmt = (BigDecimal)miniTable.getValueAt(i, 8); + BigDecimal PayAmt = (BigDecimal)miniTable.getValueAt(i, 9); + boolean isSOTrx = false; + // + psl.setInvoice(C_Invoice_ID, isSOTrx, + OpenAmt, PayAmt, OpenAmt.subtract(PayAmt)); + if (!psl.save(trxName)) + { + return Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID"); + } + log.fine("C_Invoice_ID=" + C_Invoice_ID + ", PayAmt=" + PayAmt); + } + } // for all rows in table + + return null; + } // generatePaySelect + + /************************************************************************** + * Bank Account Info + */ + public class BankInfo + { + /** + * BankInfo + * @param newC_BankAccount_ID + * @param newC_Currency_ID + * @param newName + * @param newCurrency + * @param newBalance + * @param newTransfers + */ + public BankInfo (int newC_BankAccount_ID, int newC_Currency_ID, + String newName, String newCurrency, BigDecimal newBalance, boolean newTransfers) + { + C_BankAccount_ID = newC_BankAccount_ID; + C_Currency_ID = newC_Currency_ID; + Name = newName; + Currency = newCurrency; + Balance = newBalance; + } + int C_BankAccount_ID; + int C_Currency_ID; + String Name; + public String Currency; + public BigDecimal Balance; + boolean Transfers; + + /** + * to String + * @return info + */ + public String toString() + { + return Name; + } + } // BankInfo + +} // VPaySelect diff --git a/client/src/org/compiere/apps/form/TreeMaintenance.java b/client/src/org/compiere/apps/form/TreeMaintenance.java new file mode 100644 index 0000000000..3854593989 --- /dev/null +++ b/client/src/org/compiere/apps/form/TreeMaintenance.java @@ -0,0 +1,205 @@ +/****************************************************************************** + * Copyright (C) 2009 Low Heng Sin * + * Copyright (C) 2009 Idalica Corporation * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.compiere.apps.form; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.logging.Level; + +import org.compiere.model.MRole; +import org.compiere.model.MTree; +import org.compiere.model.MTree_Node; +import org.compiere.model.MTree_NodeBP; +import org.compiere.model.MTree_NodeMM; +import org.compiere.model.MTree_NodePR; +import org.compiere.util.CLogger; +import org.compiere.util.DB; +import org.compiere.util.KeyNamePair; + +public class TreeMaintenance { + + /** Window No */ + public int m_WindowNo = 0; + /** Active Tree */ + public MTree m_tree; + /** Logger */ + public static CLogger log = CLogger.getCLogger(TreeMaintenance.class); + + public KeyNamePair[] getTreeData() + { + return DB.getKeyNamePairs(MRole.getDefault().addAccessSQL( + "SELECT AD_Tree_ID, Name FROM AD_Tree WHERE TreeType NOT IN ('BB','PC') ORDER BY 2", + "AD_Tree", MRole.SQL_NOTQUALIFIED, MRole.SQL_RW), false); + } + + public ArrayList getTreeItemData() + { + ArrayList data = new ArrayList(); + + String fromClause = m_tree.getSourceTableName(false); // fully qualified + String columnNameX = m_tree.getSourceTableName(true); + String actionColor = m_tree.getActionColorName(); + + String sql = "SELECT t." + columnNameX + + "_ID,t.Name,t.Description,t.IsSummary," + + actionColor + + " FROM " + fromClause + // + " WHERE t.IsActive='Y'" // R/O + + " ORDER BY 2"; + sql = MRole.getDefault().addAccessSQL(sql, + "t", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO); + log.config(sql); + // + PreparedStatement pstmt = null; + ResultSet rs = null; + try + { + pstmt = DB.prepareStatement (sql, null); + rs = pstmt.executeQuery (); + while (rs.next ()) + { + ListItem item = new ListItem(rs.getInt(1), rs.getString(2), + rs.getString(3), "Y".equals(rs.getString(4)), rs.getString(5)); + data.add(item); + } + } + catch (Exception e) + { + log.log(Level.SEVERE, sql, e); + } + finally + { + DB.close(rs, pstmt); + rs = null; pstmt = null; + } + + return data; + } + + /** + * Action: Add Node to Tree + * @param item item + */ + public void addNode(ListItem item) + { + if (item != null) + { + // May cause Error if in tree + if (m_tree.isProduct()) + { + MTree_NodePR node = new MTree_NodePR (m_tree, item.id); + node.save(); + } + else if (m_tree.isBPartner()) + { + MTree_NodeBP node = new MTree_NodeBP (m_tree, item.id); + node.save(); + } + else if (m_tree.isMenu()) + { + MTree_NodeMM node = new MTree_NodeMM (m_tree, item.id); + node.save(); + } + else + { + MTree_Node node = new MTree_Node (m_tree, item.id); + node.save(); + } + } + } // action_treeAdd + + /** + * Action: Delete Node from Tree + * @param item item + */ + public void deleteNode(ListItem item) + { + if (item != null) + { + if (m_tree.isProduct()) + { + MTree_NodePR node = MTree_NodePR.get (m_tree, item.id); + if (node != null) + node.delete(true); + } + else if (m_tree.isBPartner()) + { + MTree_NodeBP node = MTree_NodeBP.get (m_tree, item.id); + if (node != null) + node.delete(true); + } + else if (m_tree.isMenu()) + { + MTree_NodeMM node = MTree_NodeMM.get (m_tree, item.id); + if (node != null) + node.delete(true); + } + else + { + MTree_Node node = MTree_Node.get (m_tree, item.id); + if (node != null) + node.delete(true); + } + } + } // action_treeDelete + + /************************************************************************** + * Tree Maintenance List Item + */ + public class ListItem + { + /** + * ListItem + * @param ID + * @param Name + * @param Description + * @param summary + * @param ImageIndicator + */ + public ListItem (int ID, String Name, String Description, + boolean summary, String ImageIndicator) + { + id = ID; + name = Name; + description = Description; + isSummary = summary; + imageIndicator = ImageIndicator; + } // ListItem + + /** ID */ + public int id; + /** Name */ + public String name; + /** Description */ + public String description; + /** Summary */ + public boolean isSummary; + /** Indicator */ + public String imageIndicator; // Menu - Action + + /** + * To String + * @return String Representation + */ + public String toString () + { + String retValue = name; + if (description != null && description.length() > 0) + retValue += " (" + description + ")"; + return retValue; + } // toString + + } // ListItem +} diff --git a/client/src/org/compiere/apps/form/TrxMaterial.java b/client/src/org/compiere/apps/form/TrxMaterial.java new file mode 100644 index 0000000000..f0b57bbb3c --- /dev/null +++ b/client/src/org/compiere/apps/form/TrxMaterial.java @@ -0,0 +1,195 @@ +/****************************************************************************** + * Copyright (C) 2009 Low Heng Sin * + * Copyright (C) 2009 Idalica Corporation * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.compiere.apps.form; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.logging.Level; + +import org.compiere.apps.AEnv; +import org.compiere.apps.IStatusBar; +import org.compiere.model.GridTab; +import org.compiere.model.GridWindow; +import org.compiere.model.GridWindowVO; +import org.compiere.model.MQuery; +import org.compiere.util.CLogger; +import org.compiere.util.DB; +import org.compiere.util.Env; +import org.compiere.util.Msg; + +public class TrxMaterial { + + /** Window No */ + public int m_WindowNo = 0; + /** MWindow */ + public GridWindow m_mWindow = null; + /** MTab pointer */ + public GridTab m_mTab = null; + + public MQuery m_staticQuery = null; + /** Logger */ + public static CLogger log = CLogger.getCLogger(TrxMaterial.class); + + /** + * Dynamic Layout (Grid). + * Based on AD_Window: Material Transactions + */ + public void dynInit(IStatusBar statusBar) + { + m_staticQuery = new MQuery(); + m_staticQuery.addRestriction("AD_Client_ID", MQuery.EQUAL, Env.getAD_Client_ID(Env.getCtx())); + int AD_Window_ID = 223; // Hardcoded + GridWindowVO wVO = AEnv.getMWindowVO (m_WindowNo, AD_Window_ID, 0); + if (wVO == null) + return; + m_mWindow = new GridWindow (wVO); + m_mTab = m_mWindow.getTab(0); + m_mWindow.initTab(0); + // + m_mTab.setQuery(MQuery.getEqualQuery("1", "2")); + m_mTab.query(false); + statusBar.setStatusLine(" ", false); + statusBar.setStatusDB(" "); + } // dynInit + + /************************************************************************** + * Refresh - Create Query and refresh grid + */ + public void refresh(Object organization, Object locator, Object product, Object movementType, + Timestamp movementDateFrom, Timestamp movementDateTo, IStatusBar statusBar) + { + /** + * Create Where Clause + */ + MQuery query = m_staticQuery.deepCopy(); + // Organization + if (organization != null && organization.toString().length() > 0) + query.addRestriction("AD_Org_ID", MQuery.EQUAL, organization); + // Locator + if (locator != null && locator.toString().length() > 0) + query.addRestriction("M_Locator_ID", MQuery.EQUAL, locator); + // Product + if (product != null && product.toString().length() > 0) + query.addRestriction("M_Product_ID", MQuery.EQUAL, product); + // MovementType + if (movementType != null && movementType.toString().length() > 0) + query.addRestriction("MovementType", MQuery.EQUAL, movementType); + // DateFrom + if (movementDateFrom != null) + query.addRestriction("TRUNC(MovementDate)", MQuery.GREATER_EQUAL, movementDateFrom); + // DateTO + if (movementDateTo != null) + query.addRestriction("TRUNC(MovementDate)", MQuery.LESS_EQUAL, movementDateTo); + log.info( "VTrxMaterial.refresh query=" + query.toString()); + + /** + * Refresh/Requery + */ + statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "StartSearch"), false); + // + m_mTab.setQuery(query); + m_mTab.query(false); + // + int no = m_mTab.getRowCount(); + statusBar.setStatusLine(" ", false); + statusBar.setStatusDB(Integer.toString(no)); + } // refresh + + public int AD_Window_ID; + public MQuery query; + + /** + * Zoom + */ + public void zoom() + { + log.info(""); + // + AD_Window_ID = 0; + String ColumnName = null; + String SQL = null; + // + int lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_InOutLine_ID"); + if (lineID != 0) + { + log.fine("M_InOutLine_ID=" + lineID); + if (Env.getContext(Env.getCtx(), m_WindowNo, "MovementType").startsWith("C")) + AD_Window_ID = 169; // Customer + else + AD_Window_ID = 184; // Vendor + ColumnName = "M_InOut_ID"; + SQL = "SELECT M_InOut_ID FROM M_InOutLine WHERE M_InOutLine_ID=?"; + } + else + { + lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_InventoryLine_ID"); + if (lineID != 0) + { + log.fine("M_InventoryLine_ID=" + lineID); + AD_Window_ID = 168; + ColumnName = "M_Inventory_ID"; + SQL = "SELECT M_Inventory_ID FROM M_InventoryLine WHERE M_InventoryLine_ID=?"; + } + else + { + lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_MovementLine_ID"); + if (lineID != 0) + { + log.fine("M_MovementLine_ID=" + lineID); + AD_Window_ID = 170; + ColumnName = "M_Movement_ID"; + SQL = "SELECT M_Movement_ID FROM M_MovementLine WHERE M_MovementLine_ID=?"; + } + else + { + lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_ProductionLine_ID"); + if (lineID != 0) + { + log.fine("M_ProductionLine_ID=" + lineID); + AD_Window_ID = 191; + ColumnName = "M_Production_ID"; + SQL = "SELECT M_Production_ID FROM M_ProductionLine WHERE M_ProductionLine_ID=?"; + } + else + log.fine("Not found WindowNo=" + m_WindowNo); + } + } + } + if (AD_Window_ID == 0) + return; + + // Get Parent ID + int parentID = 0; + try + { + PreparedStatement pstmt = DB.prepareStatement(SQL, null); + pstmt.setInt(1, lineID); + ResultSet rs = pstmt.executeQuery(); + if (rs.next()) + parentID = rs.getInt(1); + rs.close(); + pstmt.close(); + } + catch (SQLException e) + { + log.log(Level.SEVERE, SQL, e); + } + query = MQuery.getEqualQuery(ColumnName, parentID); + log.config("AD_Window_ID=" + AD_Window_ID + " - " + query); + if (parentID == 0) + log.log(Level.SEVERE, "No ParentValue - " + SQL + " - " + lineID); + } // zoom +} diff --git a/client/src/org/compiere/apps/form/VMerge.java b/client/src/org/compiere/apps/form/VMerge.java index 55664d0ebd..97ba9981cf 100644 --- a/client/src/org/compiere/apps/form/VMerge.java +++ b/client/src/org/compiere/apps/form/VMerge.java @@ -22,26 +22,17 @@ import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.util.logging.Level; import org.compiere.apps.ADialog; import org.compiere.apps.ConfirmPanel; import org.compiere.grid.ed.VLookup; -import org.compiere.model.MBPartner; -import org.compiere.model.MInvoice; import org.compiere.model.MLookupFactory; -import org.compiere.model.MPayment; -import org.compiere.model.X_M_Cost; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; -import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; -import org.compiere.util.Trx; /** * Merge Dialog. @@ -50,55 +41,21 @@ import org.compiere.util.Trx; * @author Jorg Janke * @version $Id: VMerge.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $ */ -public class VMerge extends CPanel - implements FormPanel, ActionListener +public class VMerge extends Merge implements FormPanel, ActionListener { /** * */ private static final long serialVersionUID = 149783846292562740L; - /** Window No */ - private int m_WindowNo = 0; + + private CPanel panel = new CPanel(); + /** FormFrame */ private FormFrame m_frame; - /** Total Count */ - private int m_totalCount = 0; - /** Error Log */ - private StringBuffer m_errorLog = new StringBuffer(); - /** Connection */ - //private Connection m_con = null; - private Trx m_trx = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(VMerge.class); - static private String AD_ORG_ID = "AD_Org_ID"; - static private String C_BPARTNER_ID = "C_BPartner_ID"; - static private String AD_USER_ID = "AD_User_ID"; - static private String M_PRODUCT_ID = "M_Product_ID"; - - /** Tables to delete (not update) for AD_Org */ - static private String[] s_delete_Org = new String[] - {"AD_OrgInfo", "AD_Role_OrgAccess"}; - /** Tables to delete (not update) for AD_User */ - static private String[] s_delete_User = new String[] - {"AD_User_Roles"}; - /** Tables to delete (not update) for C_BPartner */ - static private String[] s_delete_BPartner = new String[] - {"C_BP_Employee_Acct", "C_BP_Vendor_Acct", "C_BP_Customer_Acct", - "T_Aging"}; - /** Tables to delete (not update) for M_Product */ - static private String[] s_delete_Product = new String[] - {"M_Product_PO", "M_Replenish", "T_Replenish", - "M_ProductPrice", "M_Product_Costing", - "M_Cost", // teo_sarca [ 1704554 ] - "M_Product_Trl", "M_Product_Acct"}; // M_Storage - - private String[] m_columnName = null; private CLabel[] m_label = null; private VLookup[] m_from = null; private VLookup[] m_to = null; - private String[] m_deleteTables = null; - private BorderLayout mainLayout = new BorderLayout(); private CPanel CenterPanel = new CPanel(); @@ -121,7 +78,7 @@ public class VMerge extends CPanel { preInit(); jbInit (); - frame.getContentPane().add(this, BorderLayout.CENTER); + frame.getContentPane().add(panel, BorderLayout.CENTER); // frame.getContentPane().add(statusBar, BorderLayout.SOUTH); } catch (Exception ex) @@ -133,14 +90,14 @@ public class VMerge extends CPanel /** * Pre Init */ - private void preInit() + public void preInit() { int count = 4; // ** Update ** m_columnName = new String[count]; m_label = new CLabel[count]; m_from = new VLookup[count]; m_to = new VLookup[count]; - + // ** Update ** preInit (0, 2163, DisplayType.TableDir, AD_ORG_ID); // C_Order.AD_Org_ID preInit (1, 2762, DisplayType.Search, C_BPARTNER_ID); // C_Order.C_BPartner_ID @@ -172,11 +129,11 @@ public class VMerge extends CPanel */ void jbInit () throws Exception { - this.setLayout (mainLayout); + panel.setLayout (mainLayout); mainLayout.setHgap (5); mainLayout.setVgap (5); // - this.add (confirmPanel, BorderLayout.SOUTH); + panel.add (confirmPanel, BorderLayout.SOUTH); confirmPanel.addActionListener(this); // centerLayout.setHgap (5); @@ -185,7 +142,7 @@ public class VMerge extends CPanel centerLayout.setRows (m_label.length+1); // CenterPanel.setLayout (centerLayout); - this.add (CenterPanel, BorderLayout.CENTER); + panel.add (CenterPanel, BorderLayout.CENTER); CenterPanel.add (new CLabel(), null); CenterPanel.add (mergeFromLabel, null); CenterPanel.add (mergeToLabel, null); @@ -227,12 +184,13 @@ public class VMerge extends CPanel dispose(); return; } - // + String columnName = null; String from_Info = null; String to_Info = null; int from_ID = 0; int to_ID = 0; + // get first merge pair for (int i = 0; (i < m_columnName.length && from_ID == 0 && to_ID == 0); i++) { @@ -262,247 +220,31 @@ public class VMerge extends CPanel String msg = Msg.getMsg(Env.getCtx(), "MergeFrom") + " = " + from_Info + "\n" + Msg.getMsg(Env.getCtx(), "MergeTo") + " = " + to_Info; - if (!ADialog.ask(m_WindowNo, this, "MergeQuestion", msg)) + if (!ADialog.ask(m_WindowNo, panel, "MergeQuestion", msg)) return; - // ** Update ** - if (columnName.equals(AD_ORG_ID)) - m_deleteTables = s_delete_Org; - else if (columnName.equals(AD_USER_ID)) - m_deleteTables = s_delete_User; - else if (columnName.equals(C_BPARTNER_ID)) - m_deleteTables = s_delete_BPartner; - else if (columnName.equals(M_PRODUCT_ID)) - m_deleteTables = s_delete_Product; + updateDeleteTable(columnName); - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); confirmPanel.getOKButton().setEnabled(false); // boolean success = merge (columnName, from_ID, to_ID); postMerge(columnName, to_ID); // confirmPanel.getOKButton().setEnabled(true); - setCursor(Cursor.getDefaultCursor()); + panel.setCursor(Cursor.getDefaultCursor()); // if (success) { - ADialog.info (m_WindowNo, this, "MergeSuccess", + ADialog.info (m_WindowNo, panel, "MergeSuccess", msg + " #" + m_totalCount); } else { - ADialog.error(m_WindowNo, this, "MergeError", + ADialog.error(m_WindowNo, panel, "MergeError", m_errorLog.toString()); return; } dispose(); } // actionPerformed - - - /** - * Merge. - * @param ColumnName column - * @param from_ID from - * @param to_ID to - * @return true if merged - */ - private boolean merge (String ColumnName, int from_ID, int to_ID) - { - String TableName = ColumnName.substring(0, ColumnName.length()-3); - log.config(ColumnName - + " - From=" + from_ID + ",To=" + to_ID); - - boolean success = true; - m_totalCount = 0; - m_errorLog = new StringBuffer(); - String sql = "SELECT t.TableName, c.ColumnName " - + "FROM AD_Table t" - + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) " - + "WHERE t.IsView='N'" - + " AND t.TableName NOT IN ('C_TaxDeclarationAcct')" - + " AND (" - + "(c.ColumnName=? AND c.IsKey='N' AND c.ColumnSQL IS NULL)" // #1 - direct - + " OR " - + "c.AD_Reference_Value_ID IN " // Table Reference - + "(SELECT rt.AD_Reference_ID FROM AD_Ref_Table rt" - + " INNER JOIN AD_Column cc ON (rt.AD_Table_ID=cc.AD_Table_ID AND rt.AD_Key=cc.AD_Column_ID) " - + "WHERE cc.IsKey='Y' AND cc.ColumnName=?)" // #2 - + ") " - + "ORDER BY t.LoadSeq DESC"; - PreparedStatement pstmt = null; - - try - { - - m_trx = Trx.get(Trx.createTrxName("merge"), true); - // - pstmt = DB.prepareStatement(sql, Trx.createTrxName()); - pstmt.setString(1, ColumnName); - pstmt.setString(2, ColumnName); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - String tName = rs.getString(1); - String cName = rs.getString(2); - if (!TableName.equals(tName)) // to be sure - sql should prevent it - { - int count = mergeTable (tName, cName, from_ID, to_ID); - if (count < 0) - success = false; - else - m_totalCount += count; - } - } - rs.close(); - pstmt.close(); - pstmt = null; - // - log.config("Success=" + success - + " - " + ColumnName + " - From=" + from_ID + ",To=" + to_ID); - if (success) - { - sql = "DELETE " + TableName + " WHERE " + ColumnName + "=" + from_ID; - - - - - if ( DB.executeUpdate(sql, m_trx.getTrxName()) < 0 ) - { - m_errorLog.append(Env.NL).append("DELETE ").append(TableName) - .append(" - "); - success = false; - log.config(m_errorLog.toString()); - m_trx.rollback(); - return false; - } - - } - // - if (success) - m_trx.commit(); - else - m_trx.rollback(); - - m_trx.close(); - - } - catch (Exception ex) - { - log.log(Level.SEVERE, ColumnName, ex); - } - // Cleanup - try - { - if (pstmt != null) - pstmt.close(); - - } - catch (Exception ex) - { - } - pstmt = null; - return success; - } // merge - - - /** - * Merge Table - * @param TableName table - * @param ColumnName column - * @param from_ID from - * @param to_ID to - * @return -1 for error or number of changes - */ - private int mergeTable (String TableName, String ColumnName, int from_ID, int to_ID) - { - log.fine(TableName + "." + ColumnName + " - From=" + from_ID + ",To=" + to_ID); - String sql = "UPDATE " + TableName - + " SET " + ColumnName + "=" + to_ID - + " WHERE " + ColumnName + "=" + from_ID; - boolean delete = false; - for (int i = 0; i < m_deleteTables.length; i++) - { - if (m_deleteTables[i].equals(TableName)) - { - delete = true; - sql = "DELETE " + TableName + " WHERE " + ColumnName + "=" + from_ID; - } - } - // Delete newly created MCost records - teo_sarca [ 1704554 ] - if (delete && X_M_Cost.Table_Name.equals(TableName) && M_PRODUCT_ID.equals(ColumnName)) - { - sql += " AND " + X_M_Cost.COLUMNNAME_CurrentCostPrice + "=0" - + " AND " + X_M_Cost.COLUMNNAME_CurrentQty + "=0" - + " AND " + X_M_Cost.COLUMNNAME_CumulatedAmt + "=0" - + " AND " + X_M_Cost.COLUMNNAME_CumulatedQty + "=0"; - } - - int count = DB.executeUpdate(sql, m_trx.getTrxName()); - - - if ( count < 0 ) - { - - count = -1; - m_errorLog.append(Env.NL) - .append(delete ? "DELETE " : "UPDATE ") - .append(TableName).append(" - ") - .append(" - ").append(sql); - log.config(m_errorLog.toString()); - m_trx.rollback(); - - } - log.fine(count - + (delete ? " -Delete- " : " -Update- ") + TableName); - - - return count; - } // mergeTable - - /** - * Post Merge - * @param ColumnName column name - * @param to_ID ID - */ - private void postMerge (String ColumnName, int to_ID) - { - if (ColumnName.equals(AD_ORG_ID)) - { - - } - else if (ColumnName.equals(AD_USER_ID)) - { - - } - else if (ColumnName.equals(C_BPARTNER_ID)) - { - MBPartner bp = new MBPartner (Env.getCtx(), to_ID, null); - if (bp.get_ID() != 0) - { - MPayment[] payments = MPayment.getOfBPartner(Env.getCtx(), bp.getC_BPartner_ID(), null); - for (int i = 0; i < payments.length; i++) - { - MPayment payment = payments[i]; - if (payment.testAllocation()) - payment.save(); - } - MInvoice[] invoices = MInvoice.getOfBPartner(Env.getCtx(), bp.getC_BPartner_ID(), null); - for (int i = 0; i < invoices.length; i++) - { - MInvoice invoice = invoices[i]; - if (invoice.testAllocation()) - invoice.save(); - } - bp.setTotalOpenBalance(); - bp.setActualLifeTimeValue(); - bp.save(); - } - } - else if (ColumnName.equals(M_PRODUCT_ID)) - { - - } - } // postMerge - - } // VMerge diff --git a/client/src/org/compiere/apps/form/VPayPrint.java b/client/src/org/compiere/apps/form/VPayPrint.java index 424bc0e4e7..11ed5beeac 100644 --- a/client/src/org/compiere/apps/form/VPayPrint.java +++ b/client/src/org/compiere/apps/form/VPayPrint.java @@ -24,9 +24,7 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.util.ArrayList; import java.util.logging.Level; import javax.swing.JButton; @@ -35,8 +33,6 @@ import javax.swing.JFileChooser; import org.compiere.apps.ADialog; import org.compiere.apps.ConfirmPanel; import org.compiere.grid.ed.VNumber; -import org.compiere.model.MLookupFactory; -import org.compiere.model.MLookupInfo; import org.compiere.model.MPaySelectionCheck; import org.compiere.model.MPaymentBatch; import org.compiere.plaf.CompiereColor; @@ -45,13 +41,11 @@ import org.compiere.print.ReportEngine; import org.compiere.swing.CComboBox; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; -import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Ini; import org.compiere.util.KeyNamePair; -import org.compiere.util.Language; import org.compiere.util.Msg; import org.compiere.util.ValueNamePair; @@ -61,13 +55,14 @@ import org.compiere.util.ValueNamePair; * @author Jorg Janke * @version $Id: VPayPrint.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $ */ -public class VPayPrint extends CPanel - implements FormPanel, ActionListener +public class VPayPrint extends PayPrint implements FormPanel, ActionListener { /** * */ private static final long serialVersionUID = -6359854263967310497L; + + private CPanel panel = new CPanel(); /** * Initialize Panel @@ -92,19 +87,9 @@ public class VPayPrint extends CPanel } } // init - /** Window No */ - private int m_WindowNo = 0; + /** FormFrame */ private FormFrame m_frame; - /** Used Bank Account */ - private int m_C_BankAccount_ID = -1; - - /** Payment Information */ - private MPaySelectionCheck[] m_checks = null; - /** Payment Batch */ - private MPaymentBatch m_batch = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(VPayPrint.class); // Static Variables private CPanel centerPanel = new CPanel(); @@ -136,7 +121,7 @@ public class VPayPrint extends CPanel */ private void jbInit() throws Exception { - CompiereColor.setBackground(this); + CompiereColor.setBackground(panel); // southPanel.setLayout(southLayout); southLayout.setAlignment(FlowLayout.RIGHT); @@ -207,33 +192,17 @@ public class VPayPrint extends CPanel */ private void dynInit() { - log.config(""); - int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); - - // Load PaySelect - String sql = "SELECT C_PaySelection_ID, Name || ' - ' || TotalAmt FROM C_PaySelection " - + "WHERE AD_Client_ID=? AND Processed='Y' AND IsActive='Y'" - + "ORDER BY PayDate DESC"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, AD_Client_ID); - ResultSet rs = pstmt.executeQuery(); - // - while (rs.next()) - { - KeyNamePair pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); - fPaySelect.addItem(pp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + ArrayList data = getPaySelectionData(); + for(KeyNamePair pp : data) + fPaySelect.addItem(pp); + if (fPaySelect.getItemCount() == 0) - ADialog.info(m_WindowNo, this, "VPayPrintNoRecords"); + ADialog.info(m_WindowNo, panel, "VPayPrintNoRecords"); + else + { + fPaySelect.setSelectedIndex(0); + loadPaySelectInfo(); + } } // dynInit /** @@ -297,44 +266,14 @@ public class VPayPrint extends CPanel log.info( "VPayPrint.loadPaySelectInfo"); if (fPaySelect.getSelectedIndex() == -1) return; - - // load Banks from PaySelectLine + int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey(); - m_C_BankAccount_ID = -1; - String sql = "SELECT ps.C_BankAccount_ID, b.Name || ' ' || ba.AccountNo," // 1..2 - + " c.ISO_Code, CurrentBalance " // 3..4 - + "FROM C_PaySelection ps" - + " INNER JOIN C_BankAccount ba ON (ps.C_BankAccount_ID=ba.C_BankAccount_ID)" - + " INNER JOIN C_Bank b ON (ba.C_Bank_ID=b.C_Bank_ID)" - + " INNER JOIN C_Currency c ON (ba.C_Currency_ID=c.C_Currency_ID) " - + "WHERE ps.C_PaySelection_ID=? AND ps.Processed='Y' AND ba.IsActive='Y'"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, C_PaySelection_ID); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - { - m_C_BankAccount_ID = rs.getInt(1); - fBank.setText(rs.getString(2)); - fCurrency.setText(rs.getString(3)); - fBalance.setValue(rs.getBigDecimal(4)); - } - else - { - m_C_BankAccount_ID = -1; - fBank.setText(""); - fCurrency.setText(""); - fBalance.setValue(Env.ZERO); - log.log(Level.SEVERE, "No active BankAccount for C_PaySelection_ID=" + C_PaySelection_ID); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + loadPaySelectInfo(C_PaySelection_ID); + + fBank.setText(bank); + fCurrency.setText(currency); + fBalance.setValue(balance); + loadPaymentRule(); } // loadPaySelectInfo @@ -346,37 +285,17 @@ public class VPayPrint extends CPanel log.info(""); if (m_C_BankAccount_ID == -1) return; - - // load PaymentRule for Bank - int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey(); + fPaymentRule.removeAllItems(); - int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule"); - Language language = Language.getLanguage(Env.getAD_Language(Env.getCtx())); - MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID); - String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY")) - + " AND " + info.KeyColumn - + " IN (SELECT PaymentRule FROM C_PaySelectionCheck WHERE C_PaySelection_ID=?) " - + info.Query.substring(info.Query.indexOf(" ORDER BY")); - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, C_PaySelection_ID); - ResultSet rs = pstmt.executeQuery(); - // - while (rs.next()) - { - ValueNamePair pp = new ValueNamePair(rs.getString(2), rs.getString(3)); - fPaymentRule.addItem(pp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } - if (fPaymentRule.getItemCount() == 0) - log.config("PaySel=" + C_PaySelection_ID + ", BAcct=" + m_C_BankAccount_ID + " - " + sql); + + int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey(); + ArrayList data = loadPaymentRule(C_PaySelection_ID); + for(ValueNamePair pp : data) + fPaymentRule.addItem(pp); + + if (fPaymentRule.getItemCount() > 0) + fPaymentRule.setSelectedIndex(0); + loadPaymentRuleInfo(); } // loadPaymentRule @@ -393,54 +312,20 @@ public class VPayPrint extends CPanel log.info("PaymentRule=" + PaymentRule); fNoPayments.setText(" "); - + int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey(); - String sql = "SELECT COUNT(*) " - + "FROM C_PaySelectionCheck " - + "WHERE C_PaySelection_ID=?"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, C_PaySelection_ID); - ResultSet rs = pstmt.executeQuery(); - // - if (rs.next()) - fNoPayments.setText(String.valueOf(rs.getInt(1))); - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + String msg = loadPaymentRuleInfo(C_PaySelection_ID, PaymentRule); + + if(noPayments != null) + fNoPayments.setText(noPayments); + bProcess.setEnabled(PaymentRule.equals("T")); - - // DocumentNo - sql = "SELECT CurrentNext " - + "FROM C_BankAccountDoc " - + "WHERE C_BankAccount_ID=? AND PaymentRule=? AND IsActive='Y'"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, m_C_BankAccount_ID); - pstmt.setString(2, PaymentRule); - ResultSet rs = pstmt.executeQuery(); - // - if (rs.next()) - fDocumentNo.setValue(new Integer(rs.getInt(1))); - else - { - log.log(Level.SEVERE, "VPayPrint.loadPaymentRuleInfo - No active BankAccountDoc for C_BankAccount_ID=" - + m_C_BankAccount_ID + " AND PaymentRule=" + PaymentRule); - ADialog.error(m_WindowNo, this, "VPayPrintNoDoc"); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + + if(documentNo != null) + fDocumentNo.setValue(documentNo); + + if(msg != null && msg.length() > 0) + ADialog.error(m_WindowNo, panel, msg); } // loadPaymentRuleInfo @@ -460,16 +345,16 @@ public class VPayPrint extends CPanel fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setMultiSelectionEnabled(false); fc.setSelectedFile(new java.io.File("paymentExport.txt")); - if (fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) + if (fc.showSaveDialog(panel) != JFileChooser.APPROVE_OPTION) return; // Create File int no = MPaySelectionCheck.exportToFile(m_checks, fc.getSelectedFile()); - ADialog.info(m_WindowNo, this, "Saved", + ADialog.info(m_WindowNo, panel, "Saved", fc.getSelectedFile().getAbsolutePath() + "\n" + Msg.getMsg(Env.getCtx(), "NoOfLines") + "=" + no); - if (ADialog.ask(m_WindowNo, this, "VPayPrintSuccess?")) + if (ADialog.ask(m_WindowNo, panel, "VPayPrintSuccess?")) { // int lastDocumentNo = MPaySelectionCheck.confirmPrint (m_checks, m_batch); @@ -500,7 +385,7 @@ public class VPayPrint extends CPanel if (!getChecks(PaymentRule)) return; - this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); boolean somethingPrinted = false; boolean directPrint = !Ini.isPropertyBool(Ini.P_PRINTPREVIEW); @@ -509,13 +394,13 @@ public class VPayPrint extends CPanel { MPaySelectionCheck check = m_checks[i]; // ReportCtrl will check BankAccountDoc for PrintFormat - boolean ok = ReportCtl.startDocumentPrint(ReportEngine.CHECK, check.get_ID(), null, Env.getWindowNo(this), directPrint); + boolean ok = ReportCtl.startDocumentPrint(ReportEngine.CHECK, check.get_ID(), null, Env.getWindowNo(panel), directPrint); if (!somethingPrinted && ok) somethingPrinted = true; } // Confirm Print and Update BankAccountDoc - if (somethingPrinted && ADialog.ask(m_WindowNo, this, "VPayPrintSuccess?")) + if (somethingPrinted && ADialog.ask(m_WindowNo, panel, "VPayPrintSuccess?")) { int lastDocumentNo = MPaySelectionCheck.confirmPrint (m_checks, m_batch); if (lastDocumentNo != 0) @@ -528,16 +413,16 @@ public class VPayPrint extends CPanel } } // confirm - if (ADialog.ask(m_WindowNo, this, "VPayPrintPrintRemittance")) + if (ADialog.ask(m_WindowNo, panel, "VPayPrintPrintRemittance")) { for (int i = 0; i < m_checks.length; i++) { MPaySelectionCheck check = m_checks[i]; - ReportCtl.startDocumentPrint(ReportEngine.REMITTANCE, check.get_ID(), null, Env.getWindowNo(this), directPrint); + ReportCtl.startDocumentPrint(ReportEngine.REMITTANCE, check.get_ID(), null, Env.getWindowNo(panel), directPrint); } } // remittance - this.setCursor(Cursor.getDefaultCursor()); + panel.setCursor(Cursor.getDefaultCursor()); dispose(); } // cmd_print @@ -553,7 +438,7 @@ public class VPayPrint extends CPanel if (fPaySelect.getSelectedIndex() == -1 || m_C_BankAccount_ID == -1 || fPaymentRule.getSelectedIndex() == -1 || fDocumentNo.getValue() == null) { - ADialog.error(m_WindowNo, this, "VPayPrintNoRecords", + ADialog.error(m_WindowNo, panel, "VPayPrintNoRecords", "(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + "=0)"); return false; } @@ -564,16 +449,16 @@ public class VPayPrint extends CPanel log.config("C_PaySelection_ID=" + C_PaySelection_ID + ", PaymentRule=" + PaymentRule + ", DocumentNo=" + startDocumentNo); // - this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); // get Slecetions m_checks = MPaySelectionCheck.get(C_PaySelection_ID, PaymentRule, startDocumentNo, null); - this.setCursor(Cursor.getDefaultCursor()); + panel.setCursor(Cursor.getDefaultCursor()); // if (m_checks == null || m_checks.length == 0) { - ADialog.error(m_WindowNo, this, "VPayPrintNoRecords", + ADialog.error(m_WindowNo, panel, "VPayPrintNoRecords", "(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + " #0"); return false; } diff --git a/client/src/org/compiere/apps/form/VPaySelect.java b/client/src/org/compiere/apps/form/VPaySelect.java index 19ba761d0d..1f7fbf96d6 100644 --- a/client/src/org/compiere/apps/form/VPaySelect.java +++ b/client/src/org/compiere/apps/form/VPaySelect.java @@ -25,13 +25,8 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.math.BigDecimal; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Timestamp; -import java.text.DecimalFormat; -import java.util.Properties; +import java.util.ArrayList; import java.util.logging.Level; import javax.swing.JButton; @@ -43,33 +38,23 @@ import javax.swing.event.TableModelListener; import org.compiere.apps.ADialog; import org.compiere.apps.AEnv; import org.compiere.apps.ConfirmPanel; +import org.compiere.apps.IProcessParameter; import org.compiere.apps.ProcessCtl; +import org.compiere.apps.ProcessParameter; +import org.compiere.apps.ProcessParameterPanel; import org.compiere.grid.ed.VCheckBox; import org.compiere.grid.ed.VComboBox; import org.compiere.grid.ed.VDate; -import org.compiere.minigrid.ColumnInfo; -import org.compiere.minigrid.IDColumn; import org.compiere.minigrid.MiniTable; -import org.compiere.model.MLookupFactory; -import org.compiere.model.MLookupInfo; -import org.compiere.model.MPaySelection; -import org.compiere.model.MPaySelectionLine; -import org.compiere.model.MRole; -import org.compiere.model.X_C_Order; import org.compiere.model.X_C_PaySelection; import org.compiere.plaf.CompiereColor; import org.compiere.process.ProcessInfo; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; import org.compiere.util.ASyncProcess; -import org.compiere.util.CLogger; -import org.compiere.util.DB; -import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; -import org.compiere.util.Language; import org.compiere.util.Msg; -import org.compiere.util.Trx; import org.compiere.util.ValueNamePair; /** @@ -81,8 +66,7 @@ import org.compiere.util.ValueNamePair; * @author Jorg Janke * @version $Id: VPaySelect.java,v 1.2 2008/07/11 08:20:12 cruiz Exp $ */ -public class VPaySelect extends CPanel - implements FormPanel, ActionListener, TableModelListener, ASyncProcess +public class VPaySelect extends PaySelect implements FormPanel, ActionListener, TableModelListener, ASyncProcess { /** @todo withholding */ @@ -90,6 +74,8 @@ public class VPaySelect extends CPanel * */ private static final long serialVersionUID = 2872767371244295934L; + + private CPanel panel = new CPanel(); /** * Initialize Panel @@ -113,29 +99,10 @@ public class VPaySelect extends CPanel log.log(Level.SEVERE, "", e); } } // init - - /** Window No */ - private int m_WindowNo = 0; + /** FormFrame */ private FormFrame m_frame; - /** Format */ - private DecimalFormat m_format = DisplayType.getNumberFormat(DisplayType.Amount); - /** Bank Balance */ - private BigDecimal m_bankBalance = new BigDecimal(0.0); - /** SQL for Query */ - private String m_sql; - /** Number of selected rows */ - private int m_noSelected = 0; - /** Client ID */ - private int m_AD_Client_ID = 0; - /**/ - private boolean m_isLocked = false; - /** Payment Selection */ - private MPaySelection m_ps = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(VPaySelect.class); - // private CPanel mainPanel = new CPanel(); private BorderLayout mainLayout = new BorderLayout(); @@ -171,7 +138,7 @@ public class VPaySelect extends CPanel */ private void jbInit() throws Exception { - CompiereColor.setBackground(this); + CompiereColor.setBackground(panel); // mainPanel.setLayout(mainLayout); parameterPanel.setLayout(parameterLayout); @@ -254,157 +221,30 @@ public class VPaySelect extends CPanel */ private void dynInit() { - Properties ctx = Env.getCtx(); - // - m_AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); - // Bank Account Info - String sql = MRole.getDefault().addAccessSQL( - "SELECT ba.C_BankAccount_ID," // 1 - + "b.Name || ' ' || ba.AccountNo AS Name," // 2 - + "ba.C_Currency_ID, c.ISO_Code," // 3..4 - + "ba.CurrentBalance " // 5 - + "FROM C_Bank b, C_BankAccount ba, C_Currency c " - + "WHERE b.C_Bank_ID=ba.C_Bank_ID" - + " AND ba.C_Currency_ID=c.C_Currency_ID " - + " AND EXISTS (SELECT * FROM C_BankAccountDoc d WHERE d.C_BankAccount_ID=ba.C_BankAccount_ID) " - + "ORDER BY 2", - "b", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RW); - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - boolean transfers = false; - BankInfo bi = new BankInfo (rs.getInt(1), rs.getInt(3), - rs.getString(2), rs.getString(4), - rs.getBigDecimal(5), transfers); - fieldBankAccount.addItem(bi); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + ArrayList bankAccountData = getBankAccountData(); + for(BankInfo bi : bankAccountData) + fieldBankAccount.addItem(bi); + if (fieldBankAccount.getItemCount() == 0) - ADialog.error(m_WindowNo, this, "VPaySelectNoBank"); + ADialog.error(m_WindowNo, panel, "VPaySelectNoBank"); else fieldBankAccount.setSelectedIndex(0); - - // Optional BusinessPartner with unpaid AP Invoices - KeyNamePair pp = new KeyNamePair(0, ""); - fieldBPartner.addItem(pp); - sql = MRole.getDefault().addAccessSQL( - "SELECT bp.C_BPartner_ID, bp.Name FROM C_BPartner bp", "bp", - MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO) - + " AND EXISTS (SELECT * FROM C_Invoice i WHERE bp.C_BPartner_ID=i.C_BPartner_ID" - // X_C_Order.PAYMENTRULE_DirectDebit - + " AND (i.IsSOTrx='N' OR (i.IsSOTrx='Y' AND i.PaymentRule='D'))" - + " AND i.IsPaid<>'Y') " - + "ORDER BY 2"; - - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); - fieldBPartner.addItem(pp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + + ArrayList bpartnerData = getBPartnerData(); + for(KeyNamePair pp : bpartnerData) + fieldBPartner.addItem(pp); fieldBPartner.setSelectedIndex(0); - - /**Document type**/ - try - { - sql = MRole.getDefault().addAccessSQL( - "SELECT doc.c_doctype_id,doc.name FROM c_doctype doc WHERE doc.ad_client_id = ? AND doc.docbasetype in ('API','APC') ORDER BY 2", "doc", - MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO); - - KeyNamePair dt = new KeyNamePair(0, ""); - fieldDtype.addItem(dt); - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, m_AD_Client_ID); // Client - ResultSet rs = pstmt.executeQuery(); - - while (rs.next()) - { - dt = new KeyNamePair(rs.getInt(1), rs.getString(2)); - fieldDtype.addItem(dt); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } - - /** prepare MiniTable - * - SELECT i.C_Invoice_ID, i.DateInvoiced+p.NetDays AS DateDue, - bp.Name, i.DocumentNo, c.ISO_Code, i.GrandTotal, - paymentTermDiscount(i.GrandTotal, i.C_PaymentTerm_ID, i.DateInvoiced, SysDate) AS Discount, - SysDate-paymentTermDueDays(i.C_PaymentTerm_ID,i.DateInvoiced) AS DiscountDate, - i.GrandTotal-paymentTermDiscount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate) AS DueAmount, - currencyConvert(i.GrandTotal-paymentTermDiscount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate,null), - i.C_Currency_ID,xx100,SysDate) AS PayAmt - FROM C_Invoice i, C_BPartner bp, C_Currency c, C_PaymentTerm p - WHERE i.IsSOTrx='N' - AND i.C_BPartner_ID=bp.C_BPartner_ID - AND i.C_Currency_ID=c.C_Currency_ID - AND i.C_PaymentTerm_ID=p.C_PaymentTerm_ID - AND i.DocStatus IN ('CO','CL') - ORDER BY 2,3 - */ - - m_sql = miniTable.prepareTable(new ColumnInfo[] { - // 0..4 - new ColumnInfo(" ", "i.C_Invoice_ID", IDColumn.class, false, false, null), - new ColumnInfo(Msg.translate(ctx, "DueDate"), "paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) AS DateDue", Timestamp.class, true, true, null), - new ColumnInfo(Msg.translate(ctx, "C_BPartner_ID"), "bp.Name", KeyNamePair.class, true, false, "i.C_BPartner_ID"), - new ColumnInfo(Msg.translate(ctx, "DocumentNo"), "i.DocumentNo", String.class), - new ColumnInfo(Msg.translate(ctx, "C_Currency_ID"), "c.ISO_Code", KeyNamePair.class, true, false, "i.C_Currency_ID"), - // 5..9 - new ColumnInfo(Msg.translate(ctx, "GrandTotal"), "i.GrandTotal", BigDecimal.class), - new ColumnInfo(Msg.translate(ctx, "DiscountAmt"), "paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?)", BigDecimal.class), - new ColumnInfo(Msg.getMsg(ctx, "DiscountDate"), "SysDate-paymentTermDueDays(i.C_PaymentTerm_ID,i.DateInvoiced,SysDate)", Timestamp.class), - new ColumnInfo(Msg.getMsg(ctx, "AmountDue"), "currencyConvert(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID),i.C_Currency_ID, ?,?,i.C_ConversionType_ID, i.AD_Client_ID,i.AD_Org_ID)", BigDecimal.class), - new ColumnInfo(Msg.getMsg(ctx, "AmountPay"), "currencyConvert(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID)-paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?),i.C_Currency_ID, ?,?,i.C_ConversionType_ID, i.AD_Client_ID,i.AD_Org_ID)", BigDecimal.class) - }, - // FROM - "C_Invoice_v i" - + " INNER JOIN C_BPartner bp ON (i.C_BPartner_ID=bp.C_BPartner_ID)" - + " INNER JOIN C_Currency c ON (i.C_Currency_ID=c.C_Currency_ID)" - + " INNER JOIN C_PaymentTerm p ON (i.C_PaymentTerm_ID=p.C_PaymentTerm_ID)", - // WHERE - "i.IsSOTrx=? AND IsPaid='N'" - // Different Payment Selection - + " AND NOT EXISTS (SELECT * FROM C_PaySelectionLine psl" - + " WHERE i.C_Invoice_ID=psl.C_Invoice_ID AND psl.C_PaySelectionCheck_ID IS NOT NULL" - + " AND psl.C_PaySelectionCheck_ID NOT IN " - + " (SELECT psc.C_PaySelectionCheck_ID FROM C_PaySelectionCheck psc, C_Payment p" - + " WHERE psc.C_PaySelectionCheck_ID = psl.C_PaySelectionCheck_ID" - + " AND psc.C_Payment_ID = p.C_Payment_ID" - + " AND p.DocStatus IN ('RE','VO')))" - + " AND i.DocStatus IN ('CO','CL')" - + " AND i.AD_Client_ID=?", // additional where & order in loadTableInfo() - true, "i"); - // + + ArrayList docTypeData = getDocTypeData(); + for(KeyNamePair pp : docTypeData) + fieldDtype.addItem(pp); + + prepareTable(miniTable); + miniTable.getModel().addTableModelListener(this); // fieldPayDate.setMandatory(true); fieldPayDate.setValue(new Timestamp(System.currentTimeMillis())); - } // dynInit /** @@ -417,37 +257,14 @@ public class VPaySelect extends CPanel return; labelCurrency.setText(bi.Currency); labelBalance.setText(m_format.format(bi.Balance)); - m_bankBalance = bi.Balance; // PaymentRule fieldPaymentRule.removeAllItems(); - int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule"); - Language language = Env.getLanguage(Env.getCtx()); - MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID); - String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY")) - + " AND " + info.KeyColumn - + " IN (SELECT PaymentRule FROM C_BankAccountDoc WHERE C_BankAccount_ID=?) " - + info.Query.substring(info.Query.indexOf(" ORDER BY")); - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, bi.C_BankAccount_ID); - ResultSet rs = pstmt.executeQuery(); - ValueNamePair vp = null; - while (rs.next()) - { - vp = new ValueNamePair(rs.getString(2), rs.getString(3)); // returns also not active - fieldPaymentRule.addItem(vp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + + ArrayList paymentRuleData = getPaymentRuleData(bi); + for(ValueNamePair vp : paymentRuleData) + fieldPaymentRule.addItem(vp); fieldPaymentRule.setSelectedIndex(0); - } // loadBankInfo /** @@ -455,70 +272,18 @@ public class VPaySelect extends CPanel */ private void loadTableInfo() { - log.config(""); - // not yet initialized - if (m_sql == null) - return; - - String sql = m_sql; - // Parameters Timestamp payDate = (Timestamp)fieldPayDate.getValue(); miniTable.setColorCompare(payDate); log.config("PayDate=" + payDate); + BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem(); - // - String isSOTrx = "N"; - ValueNamePair vp = (ValueNamePair)fieldPaymentRule.getSelectedItem(); - if (vp != null && X_C_Order.PAYMENTRULE_DirectDebit.equals(vp.getValue())) - { - isSOTrx = "Y"; - sql += " AND i.PaymentRule='" + X_C_Order.PAYMENTRULE_DirectDebit + "'"; - } - // - if (onlyDue.isSelected()) - sql += " AND paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) <= ?"; - // - KeyNamePair pp = (KeyNamePair)fieldBPartner.getSelectedItem(); - int C_BPartner_ID = pp.getKey(); - if (C_BPartner_ID != 0) - sql += " AND i.C_BPartner_ID=?"; - //Document Type - KeyNamePair dt = (KeyNamePair)fieldDtype.getSelectedItem(); - int c_doctype_id = dt.getKey(); - if (c_doctype_id != 0) - sql += " AND i.c_doctype_id =?"; - sql += " ORDER BY 2,3"; + + ValueNamePair paymentRule = (ValueNamePair)fieldPaymentRule.getSelectedItem(); + KeyNamePair bpartner = (KeyNamePair)fieldBPartner.getSelectedItem(); + KeyNamePair docType = (KeyNamePair)fieldDtype.getSelectedItem(); - log.finest(sql + " - C_Currency_ID=" + bi.C_Currency_ID + ", C_BPartner_ID=" + C_BPartner_ID + ", C_doctype_id=" + c_doctype_id ); - // Get Open Invoices - try - { - int index = 1; - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setTimestamp(index++, payDate); // DiscountAmt - pstmt.setInt(index++, bi.C_Currency_ID); // DueAmt - pstmt.setTimestamp(index++, payDate); - pstmt.setTimestamp(index++, payDate); // PayAmt - pstmt.setInt(index++, bi.C_Currency_ID); - pstmt.setTimestamp(index++, payDate); - pstmt.setString(index++, isSOTrx); // IsSOTrx - pstmt.setInt(index++, m_AD_Client_ID); // Client - if (onlyDue.isSelected()) - pstmt.setTimestamp(index++, payDate); - if (C_BPartner_ID != 0) - pstmt.setInt(index++, C_BPartner_ID); - if (c_doctype_id != 0) //Document type - pstmt.setInt(index++, c_doctype_id ); - // - ResultSet rs = pstmt.executeQuery(); - miniTable.loadTable(rs); - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + loadTableInfo(bi, payDate, paymentRule, onlyDue.isSelected(), bpartner, docType, miniTable); + calculateSelection(); } // loadTableInfo @@ -575,29 +340,7 @@ public class VPaySelect extends CPanel */ public void calculateSelection() { - m_noSelected = 0; - BigDecimal invoiceAmt = new BigDecimal(0.0); - - int rows = miniTable.getRowCount(); - for (int i = 0; i < rows; i++) - { - IDColumn id = (IDColumn)miniTable.getModel().getValueAt(i, 0); - if (id.isSelected()) - { - BigDecimal amt = (BigDecimal)miniTable.getModel().getValueAt(i, 9); - if (amt != null) - invoiceAmt = invoiceAmt.add(amt); - m_noSelected++; - } - } - - // Information - BigDecimal remaining = m_bankBalance.subtract(invoiceAmt); - StringBuffer info = new StringBuffer(); - info.append(m_noSelected).append(" ").append(Msg.getMsg(Env.getCtx(), "Selected")).append(" - "); - info.append(m_format.format(invoiceAmt)).append(", "); - info.append(Msg.getMsg(Env.getCtx(), "Remaining")).append(" ").append(m_format.format(remaining)); - dataStatus.setText(info.toString()); + dataStatus.setText(calculateSelection(miniTable)); // bGenerate.setEnabled(m_noSelected != 0); } // calculateSelection @@ -607,12 +350,6 @@ public class VPaySelect extends CPanel */ private void generatePaySelect() { - log.info(""); - // String trxName Trx.createTrxName("PaySelect"); - // Trx trx = Trx.get(trxName, true); trx needs to be committed too - String trxName = null; - Trx trx = null; - // miniTable.stopEditor(true); if (miniTable.getRowCount() == 0) return; @@ -621,65 +358,29 @@ public class VPaySelect extends CPanel if (m_noSelected == 0) return; - String PaymentRule = ((ValueNamePair)fieldPaymentRule.getSelectedItem()).getValue(); - - // Create Header - m_ps = new MPaySelection(Env.getCtx(), 0, trxName); - m_ps.setName (Msg.getMsg(Env.getCtx(), "VPaySelect") - + " - " + ((ValueNamePair)fieldPaymentRule.getSelectedItem()).getName() - + " - " + fieldPayDate.getTimestamp()); - m_ps.setPayDate (fieldPayDate.getTimestamp()); - BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem(); - m_ps.setC_BankAccount_ID(bi.C_BankAccount_ID); - m_ps.setIsApproved(true); - if (!m_ps.save()) + String msg = generatePaySelect(miniTable, (ValueNamePair) fieldPaymentRule.getSelectedItem(), + fieldPayDate.getTimestamp(), (BankInfo)fieldBankAccount.getSelectedItem()); + + if(msg != null && msg.length() > 0) { - ADialog.error(m_WindowNo, this, "SaveError", Msg.translate(Env.getCtx(), "C_PaySelection_ID")); - m_ps = null; + ADialog.error(m_WindowNo, panel, "SaveError", msg); return; } - log.config(m_ps.toString()); - - // Create Lines - int rows = miniTable.getRowCount(); - int line = 0; - for (int i = 0; i < rows; i++) - { - IDColumn id = (IDColumn)miniTable.getModel().getValueAt(i, 0); - if (id.isSelected()) - { - line += 10; - MPaySelectionLine psl = new MPaySelectionLine (m_ps, line, PaymentRule); - int C_Invoice_ID = id.getRecord_ID().intValue(); - BigDecimal OpenAmt = (BigDecimal)miniTable.getModel().getValueAt(i, 8); - BigDecimal PayAmt = (BigDecimal)miniTable.getModel().getValueAt(i, 9); - boolean isSOTrx = false; - // - psl.setInvoice(C_Invoice_ID, isSOTrx, - OpenAmt, PayAmt, OpenAmt.subtract(PayAmt)); - if (!psl.save(trxName)) - { - ADialog.error(m_WindowNo, this, "SaveError", Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID")); - return; - } - log.fine("C_Invoice_ID=" + C_Invoice_ID + ", PayAmt=" + PayAmt); - } - } // for all rows in table - // Ask to Post it - if (!ADialog.ask(m_WindowNo, this, "VPaySelectGenerate?", "(" + m_ps.getName() + ")")) + if (!ADialog.ask(m_WindowNo, panel, "VPaySelectGenerate?", "(" + m_ps.getName() + ")")) return; - + // Prepare Process int AD_Proces_ID = 155; // C_PaySelection_CreatePayment ProcessInfo pi = new ProcessInfo (m_frame.getTitle(), AD_Proces_ID, X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID()); pi.setAD_User_ID (Env.getAD_User_ID(Env.getCtx())); pi.setAD_Client_ID(Env.getAD_Client_ID(Env.getCtx())); - + + ProcessParameterPanel pp = new ProcessParameterPanel(m_WindowNo, pi); // Execute Process - ProcessCtl.process(this, m_WindowNo, pi, trx); + ProcessCtl.process(this, m_WindowNo, (IProcessParameter) pp, pi, trx); // ProcessCtl worker = new ProcessCtl(this, pi, trx); // worker.start(); // complete tasks in unlockUI } // generatePaySelect @@ -691,7 +392,7 @@ public class VPaySelect extends CPanel */ public void lockUI (ProcessInfo pi) { - this.setEnabled(false); + panel.setEnabled(false); m_isLocked = true; } // lockUI @@ -705,7 +406,7 @@ public class VPaySelect extends CPanel // this.setEnabled(true); // m_isLocked = false; // Ask to Print it // Window is disposed - if (!ADialog.ask(0, this, "VPaySelectPrint?", "(" + pi.getSummary() + ")")) + if (!ADialog.ask(0, panel, "VPaySelectPrint?", "(" + pi.getSummary() + ")")) return; // Start PayPrint @@ -720,7 +421,7 @@ public class VPaySelect extends CPanel } // ff.pack(); - this.setVisible(false); + panel.setVisible(false); AEnv.addToWindowManager(ff); AEnv.showCenterScreen(ff); this.dispose(); @@ -744,46 +445,4 @@ public class VPaySelect extends CPanel { log.config("-"); } // executeASync - - - /************************************************************************** - * Bank Account Info - */ - public class BankInfo - { - /** - * BankInfo - * @param newC_BankAccount_ID - * @param newC_Currency_ID - * @param newName - * @param newCurrency - * @param newBalance - * @param newTransfers - */ - public BankInfo (int newC_BankAccount_ID, int newC_Currency_ID, - String newName, String newCurrency, BigDecimal newBalance, boolean newTransfers) - { - C_BankAccount_ID = newC_BankAccount_ID; - C_Currency_ID = newC_Currency_ID; - Name = newName; - Currency = newCurrency; - Balance = newBalance; - } - int C_BankAccount_ID; - int C_Currency_ID; - String Name; - String Currency; - BigDecimal Balance; - boolean Transfers; - - /** - * to String - * @return info - */ - public String toString() - { - return Name; - } - } // BankInfo - } // VPaySelect diff --git a/client/src/org/compiere/apps/form/VTreeMaintenance.java b/client/src/org/compiere/apps/form/VTreeMaintenance.java index 5f39a723c3..a072493f26 100644 --- a/client/src/org/compiere/apps/form/VTreeMaintenance.java +++ b/client/src/org/compiere/apps/form/VTreeMaintenance.java @@ -22,8 +22,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.sql.PreparedStatement; -import java.sql.ResultSet; +import java.util.ArrayList; import java.util.logging.Level; import javax.swing.DefaultListModel; @@ -36,20 +35,13 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.compiere.grid.tree.VTreePanel; -import org.compiere.model.MRole; import org.compiere.model.MTree; import org.compiere.model.MTreeNode; -import org.compiere.model.MTree_Node; -import org.compiere.model.MTree_NodeBP; -import org.compiere.model.MTree_NodeMM; -import org.compiere.model.MTree_NodePR; import org.compiere.swing.CButton; import org.compiere.swing.CCheckBox; import org.compiere.swing.CComboBox; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; -import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; import org.compiere.util.Msg; @@ -60,22 +52,18 @@ import org.compiere.util.Msg; * @author Jorg Janke * @version $Id: VTreeMaintenance.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ */ -public class VTreeMaintenance extends CPanel +public class VTreeMaintenance extends TreeMaintenance implements FormPanel, ActionListener, ListSelectionListener, PropertyChangeListener { /** * */ private static final long serialVersionUID = 3679450924195670486L; - /** Window No */ - private int m_WindowNo = 0; - /** FormFrame */ - private FormFrame m_frame; - /** Active Tree */ - private MTree m_tree; - /** Logger */ - private static CLogger log = CLogger.getCLogger(VTreeMaintenance.class); + private CPanel panel = new CPanel(); + + /** FormFrame */ + private FormFrame m_frame; private BorderLayout mainLayout = new BorderLayout (); private CPanel northPanel = new CPanel (); @@ -108,7 +96,7 @@ public class VTreeMaintenance extends CPanel { preInit(); jbInit (); - frame.getContentPane().add(this, BorderLayout.CENTER); + frame.getContentPane().add(panel, BorderLayout.CENTER); // frame.getContentPane().add(statusBar, BorderLayout.SOUTH); action_loadTree(); } @@ -123,10 +111,7 @@ public class VTreeMaintenance extends CPanel */ private void preInit() { - KeyNamePair[] trees = DB.getKeyNamePairs(MRole.getDefault().addAccessSQL( - "SELECT AD_Tree_ID, Name FROM AD_Tree WHERE TreeType NOT IN ('BB','PC') ORDER BY 2", - "AD_Tree", MRole.SQL_NOTQUALIFIED, MRole.SQL_RW), false); - treeField = new CComboBox(trees); + treeField = new CComboBox(getTreeData()); treeField.addActionListener(this); // centerTree = new VTreePanel (m_WindowNo, false, true); @@ -139,7 +124,7 @@ public class VTreeMaintenance extends CPanel */ private void jbInit () throws Exception { - this.setLayout (mainLayout); + panel.setLayout (mainLayout); treeLabel.setText (Msg.translate(Env.getCtx(), "AD_Tree_ID")); cbAllNodes.setEnabled (false); cbAllNodes.setText (Msg.translate(Env.getCtx(), "IsAllNodes")); @@ -155,7 +140,7 @@ public class VTreeMaintenance extends CPanel northPanel.setLayout (northLayout); northLayout.setAlignment (FlowLayout.LEFT); // - this.add (northPanel, BorderLayout.NORTH); + panel.add (northPanel, BorderLayout.NORTH); northPanel.add (treeLabel, null); northPanel.add (treeField, null); northPanel.add (cbAllNodes, null); @@ -165,7 +150,7 @@ public class VTreeMaintenance extends CPanel northPanel.add (bDelete, null); northPanel.add (bDeleteAll, null); // - this.add (splitPane, BorderLayout.CENTER); + panel.add (splitPane, BorderLayout.CENTER); splitPane.add (centerTree, JSplitPane.LEFT); splitPane.add (new JScrollPane(centerList), JSplitPane.RIGHT); centerList.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); @@ -221,43 +206,13 @@ public class VTreeMaintenance extends CPanel bDelete.setEnabled(!m_tree.isAllNodes()); bDeleteAll.setEnabled(!m_tree.isAllNodes()); // - String fromClause = m_tree.getSourceTableName(false); // fully qualified - String columnNameX = m_tree.getSourceTableName(true); - String actionColor = m_tree.getActionColorName(); + // List DefaultListModel model = new DefaultListModel(); - String sql = "SELECT t." + columnNameX - + "_ID,t.Name,t.Description,t.IsSummary," - + actionColor - + " FROM " + fromClause - // + " WHERE t.IsActive='Y'" // R/O - + " ORDER BY 2"; - sql = MRole.getDefault().addAccessSQL(sql, - "t", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO); - log.config(sql); - // - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement (sql, null); - rs = pstmt.executeQuery (); - while (rs.next ()) - { - ListItem item = new ListItem(rs.getInt(1), rs.getString(2), - rs.getString(3), "Y".equals(rs.getString(4)), rs.getString(5)); - model.addElement(item); - } - } - catch (Exception e) - { - log.log(Level.SEVERE, sql, e); - } - finally - { - DB.close(rs, pstmt); - rs = null; pstmt = null; - } + ArrayList items = getTreeItemData(); + for(ListItem item : items) + model.addElement(item); + // List log.config("#" + model.getSize()); centerList.setModel(model); @@ -319,27 +274,9 @@ public class VTreeMaintenance extends CPanel { centerTree.nodeChanged(true, item.id, item.name, item.description, item.isSummary, item.imageIndicator); + // May cause Error if in tree - if (m_tree.isProduct()) - { - MTree_NodePR node = new MTree_NodePR (m_tree, item.id); - node.save(); - } - else if (m_tree.isBPartner()) - { - MTree_NodeBP node = new MTree_NodeBP (m_tree, item.id); - node.save(); - } - else if (m_tree.isMenu()) - { - MTree_NodeMM node = new MTree_NodeMM (m_tree, item.id); - node.save(); - } - else - { - MTree_Node node = new MTree_Node (m_tree, item.id); - node.save(); - } + addNode(item); } } // action_treeAdd @@ -354,31 +291,8 @@ public class VTreeMaintenance extends CPanel { centerTree.nodeChanged(false, item.id, item.name, item.description, item.isSummary, item.imageIndicator); - // - if (m_tree.isProduct()) - { - MTree_NodePR node = MTree_NodePR.get (m_tree, item.id); - if (node != null) - node.delete(true); - } - else if (m_tree.isBPartner()) - { - MTree_NodeBP node = MTree_NodeBP.get (m_tree, item.id); - if (node != null) - node.delete(true); - } - else if (m_tree.isMenu()) - { - MTree_NodeMM node = MTree_NodeMM.get (m_tree, item.id); - if (node != null) - node.delete(true); - } - else - { - MTree_Node node = MTree_Node.get (m_tree, item.id); - if (node != null) - node.delete(true); - } + + deleteNode(item); } } // action_treeDelete @@ -413,54 +327,6 @@ public class VTreeMaintenance extends CPanel ListItem item = (ListItem)model.getElementAt(index); action_treeDelete(item); } - } // action_treeDeleteAll - - /************************************************************************** - * Tree Maintenance List Item - */ - class ListItem - { - /** - * ListItem - * @param ID - * @param Name - * @param Description - * @param summary - * @param ImageIndicator - */ - public ListItem (int ID, String Name, String Description, - boolean summary, String ImageIndicator) - { - id = ID; - name = Name; - description = Description; - isSummary = summary; - imageIndicator = ImageIndicator; - } // ListItem - - /** ID */ - public int id; - /** Name */ - public String name; - /** Description */ - public String description; - /** Summary */ - public boolean isSummary; - /** Indicator */ - public String imageIndicator; // Menu - Action - - /** - * To String - * @return String Representation - */ - public String toString () - { - String retValue = name; - if (description != null && description.length() > 0) - retValue += " (" + description + ")"; - return retValue; - } // toString - - } // ListItem + } // action_treeDeleteAll } // VTreeMaintenance diff --git a/client/src/org/compiere/apps/form/VTrxMaterial.java b/client/src/org/compiere/apps/form/VTrxMaterial.java index c23312863a..f3b0336aaf 100644 --- a/client/src/org/compiere/apps/form/VTrxMaterial.java +++ b/client/src/org/compiere/apps/form/VTrxMaterial.java @@ -25,9 +25,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.VetoableChangeListener; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Timestamp; import java.util.Properties; import java.util.logging.Level; @@ -42,17 +39,11 @@ import org.compiere.grid.GridController; import org.compiere.grid.ed.VDate; import org.compiere.grid.ed.VLocator; import org.compiere.grid.ed.VLookup; -import org.compiere.model.GridTab; -import org.compiere.model.GridWindow; -import org.compiere.model.GridWindowVO; import org.compiere.model.MLocatorLookup; import org.compiere.model.MLookup; import org.compiere.model.MLookupFactory; -import org.compiere.model.MQuery; import org.compiere.plaf.CompiereColor; import org.compiere.swing.CPanel; -import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -63,28 +54,21 @@ import org.compiere.util.Msg; * @author Jorg Janke * @version $Id: VTrxMaterial.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ */ -public class VTrxMaterial extends CPanel +public class VTrxMaterial extends TrxMaterial implements FormPanel, ActionListener, VetoableChangeListener { /** * */ private static final long serialVersionUID = 7435309844451490697L; - /** Window No */ - private int m_WindowNo = 0; + + private CPanel panel = new CPanel(); + /** FormFrame */ private FormFrame m_frame; + /** Grid Controller */ + private GridController m_gridController; - /** GridController */ - private GridController m_gridController = null; - /** MWindow */ - private GridWindow m_mWindow = null; - /** MTab pointer */ - private GridTab m_mTab = null; - - private MQuery m_staticQuery = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(VTrxMaterial.class); // private CPanel mainPanel = new CPanel(); private BorderLayout mainLayout = new BorderLayout(); @@ -139,7 +123,7 @@ public class VTrxMaterial extends CPanel */ void jbInit() throws Exception { - CompiereColor.setBackground(this); + CompiereColor.setBackground(panel); mainPanel.setLayout(mainLayout); mainLayout.setVgap(10); parameterPanel.setLayout(parameterLayout); @@ -220,24 +204,10 @@ public class VTrxMaterial extends CPanel */ private void dynInit() { - m_staticQuery = new MQuery(); - m_staticQuery.addRestriction("AD_Client_ID", MQuery.EQUAL, Env.getAD_Client_ID(Env.getCtx())); - int AD_Window_ID = 223; // Hardcoded - GridWindowVO wVO = AEnv.getMWindowVO (m_WindowNo, AD_Window_ID, 0); - if (wVO == null) - return; - m_mWindow = new GridWindow (wVO); - m_mTab = m_mWindow.getTab(0); - m_mWindow.initTab(0); - // + super.dynInit(statusBar); m_gridController = new GridController(); m_gridController.initGrid(m_mTab, true, m_WindowNo, null, null); mainPanel.add(m_gridController, BorderLayout.CENTER); - // - m_mTab.setQuery(MQuery.getEqualQuery("1", "2")); - m_mTab.query(false); - statusBar.setStatusLine(" ", false); - statusBar.setStatusDB(" "); } // dynInit @@ -300,144 +270,37 @@ public class VTrxMaterial extends CPanel */ private void refresh() { - /** - * Create Where Clause - */ - MQuery query = m_staticQuery.deepCopy(); - // Organization - Object value = orgField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("AD_Org_ID", MQuery.EQUAL, value); - // Locator - value = locatorField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("M_Locator_ID", MQuery.EQUAL, value); - // Product - value = productField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("M_Product_ID", MQuery.EQUAL, value); - // MovementType - value = mtypeField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("MovementType", MQuery.EQUAL, value); - // DateFrom - Timestamp ts = (Timestamp)dateFField.getValue(); - if (ts != null) - query.addRestriction("TRUNC(MovementDate)", MQuery.GREATER_EQUAL, ts); - // DateTO - ts = (Timestamp)dateTField.getValue(); - if (ts != null) - query.addRestriction("TRUNC(MovementDate)", MQuery.LESS_EQUAL, ts); - log.info( "VTrxMaterial.refresh query=" + query.toString()); - - /** - * Refresh/Requery - */ - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "StartSearch"), false); - // - m_mTab.setQuery(query); - m_mTab.query(false); - // - setCursor(Cursor.getDefaultCursor()); - int no = m_mTab.getRowCount(); - statusBar.setStatusLine(" ", false); - statusBar.setStatusDB(Integer.toString(no)); + Object organization = orgField.getValue(); + Object locator = locatorField.getValue(); + Object product = productField.getValue(); + Object movementType = mtypeField.getValue(); + Timestamp movementDateFrom = (Timestamp)dateFField.getValue(); + Timestamp movementDateTo = (Timestamp)dateTField.getValue(); + + panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + refresh(organization, locator, product, movementType, movementDateFrom, movementDateTo, statusBar); + panel.setCursor(Cursor.getDefaultCursor()); } // refresh /** * Zoom */ - private void zoom() + public void zoom() { - log.info(""); - // - int AD_Window_ID = 0; - String ColumnName = null; - String SQL = null; - // - int lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_InOutLine_ID"); - if (lineID != 0) - { - log.fine("M_InOutLine_ID=" + lineID); - if (Env.getContext(Env.getCtx(), m_WindowNo, "MovementType").startsWith("C")) - AD_Window_ID = 169; // Customer - else - AD_Window_ID = 184; // Vendor - ColumnName = "M_InOut_ID"; - SQL = "SELECT M_InOut_ID FROM M_InOutLine WHERE M_InOutLine_ID=?"; - } - else - { - lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_InventoryLine_ID"); - if (lineID != 0) - { - log.fine("M_InventoryLine_ID=" + lineID); - AD_Window_ID = 168; - ColumnName = "M_Inventory_ID"; - SQL = "SELECT M_Inventory_ID FROM M_InventoryLine WHERE M_InventoryLine_ID=?"; - } - else - { - lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_MovementLine_ID"); - if (lineID != 0) - { - log.fine("M_MovementLine_ID=" + lineID); - AD_Window_ID = 170; - ColumnName = "M_Movement_ID"; - SQL = "SELECT M_Movement_ID FROM M_MovementLine WHERE M_MovementLine_ID=?"; - } - else - { - lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_ProductionLine_ID"); - if (lineID != 0) - { - log.fine("M_ProductionLine_ID=" + lineID); - AD_Window_ID = 191; - ColumnName = "M_Production_ID"; - SQL = "SELECT M_Production_ID FROM M_ProductionLine WHERE M_ProductionLine_ID=?"; - } - else - log.fine("Not found WindowNo=" + m_WindowNo); - } - } - } - if (AD_Window_ID == 0) - return; - - // Get Parent ID - int parentID = 0; - try - { - PreparedStatement pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, lineID); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - parentID = rs.getInt(1); - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, SQL, e); - } - MQuery query = MQuery.getEqualQuery(ColumnName, parentID); - log.config("AD_Window_ID=" + AD_Window_ID + " - " + query); - if (parentID == 0) - log.log(Level.SEVERE, "No ParentValue - " + SQL + " - " + lineID); + super.zoom(); // Zoom - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); AWindow frame = new AWindow(); if (!frame.initWindow(AD_Window_ID, query)) { - setCursor(Cursor.getDefaultCursor()); + panel.setCursor(Cursor.getDefaultCursor()); return; } AEnv.addToWindowManager(frame); AEnv.showCenterScreen(frame); frame = null; - setCursor(Cursor.getDefaultCursor()); + panel.setCursor(Cursor.getDefaultCursor()); } // zoom } // VTrxMaterial diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java index 1695c5bf85..89627c7387 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WMerge.java @@ -16,8 +16,6 @@ *****************************************************************************/ package org.adempiere.webui.apps.form; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.util.logging.Level; import org.adempiere.webui.component.ConfirmPanel; @@ -31,20 +29,16 @@ import org.adempiere.webui.editor.WEditor; import org.adempiere.webui.editor.WSearchEditor; import org.adempiere.webui.editor.WTableDirEditor; import org.adempiere.webui.panel.ADForm; +import org.adempiere.webui.panel.CustomForm; +import org.adempiere.webui.panel.ICustomForm; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.window.FDialog; +import org.compiere.apps.form.Merge; import org.compiere.model.Lookup; -import org.compiere.model.MBPartner; -import org.compiere.model.MInvoice; import org.compiere.model.MLookupFactory; -import org.compiere.model.MPayment; -import org.compiere.model.X_M_Cost; -import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; -import org.compiere.util.Trx; import org.zkoss.zk.au.out.AuEcho; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.DesktopUnavailableException; @@ -63,50 +57,18 @@ import org.zkoss.zkex.zul.South; * @author Jorg Janke * @version $Id: VMerge.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $ */ -public class WMerge extends ADForm - implements EventListener +public class WMerge extends Merge implements ICustomForm, EventListener { /** * */ private static final long serialVersionUID = 5797395051958101596L; - private int m_totalCount = 0; - /** Error Log */ - private StringBuffer m_errorLog = new StringBuffer(); - /** Connection */ - //private Connection m_con = null; - private Trx m_trx = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(WMerge.class); + + private CustomForm form = new CustomForm(); - static private String AD_ORG_ID = "AD_Org_ID"; - static private String C_BPARTNER_ID = "C_BPartner_ID"; - static private String AD_USER_ID = "AD_User_ID"; - static private String M_PRODUCT_ID = "M_Product_ID"; - - /** Tables to delete (not update) for AD_Org */ - static private String[] s_delete_Org = new String[] - {"AD_OrgInfo"}; - /** Tables to delete (not update) for AD_User */ - static private String[] s_delete_User = new String[] - {"AD_User_Roles"}; - /** Tables to delete (not update) for C_BPartner */ - static private String[] s_delete_BPartner = new String[] - {"C_BP_Employee_Acct", "C_BP_Vendor_Acct", "C_BP_Customer_Acct", - "T_Aging"}; - /** Tables to delete (not update) for M_Product */ - static private String[] s_delete_Product = new String[] - {"M_Product_PO", "M_Replenish", "T_Replenish", - "M_ProductPrice", "M_Product_Costing", - "M_Cost", // teo_sarca [ 1704554 ] - "M_Product_Trl", "M_Product_Acct"}; // M_Storage - - private String[] m_columnName = null; private Label[] m_label = null; private WEditor[] m_from = null; private WEditor[] m_to = null; - private String[] m_deleteTables = null; - private Borderlayout mainLayout = new Borderlayout(); private Panel CenterPanel = new Panel(); @@ -120,7 +82,7 @@ public class WMerge extends ADForm /** * Initialize Panel */ - protected void initForm() + public WMerge() { log.info( "VMerge.init - WinNo=" + m_WindowNo); try @@ -184,7 +146,7 @@ public class WMerge extends ADForm */ void jbInit () throws Exception { - this.appendChild (mainLayout); + form.appendChild (mainLayout); mainLayout.setHeight("100%"); mainLayout.setWidth("100%"); // @@ -275,25 +237,17 @@ public class WMerge extends ADForm m_msg = Msg.getMsg(Env.getCtx(), "MergeFrom") + " = " + from_Info + "\n" + Msg.getMsg(Env.getCtx(), "MergeTo") + " = " + to_Info; - if (!FDialog.ask(m_WindowNo, this, "MergeQuestion", m_msg)) + if (!FDialog.ask(m_WindowNo, form, "MergeQuestion", m_msg)) return; - - // ** Update ** - if (columnName.equals(AD_ORG_ID)) - m_deleteTables = s_delete_Org; - else if (columnName.equals(AD_USER_ID)) - m_deleteTables = s_delete_User; - else if (columnName.equals(C_BPARTNER_ID)) - m_deleteTables = s_delete_BPartner; - else if (columnName.equals(M_PRODUCT_ID)) - m_deleteTables = s_delete_Product; + + updateDeleteTable(columnName); Clients.showBusy("Processing...", true); - if (!getDesktop().isServerPushEnabled()) - getDesktop().enableServerPush(true); + if (!form.getDesktop().isServerPushEnabled()) + form.getDesktop().enableServerPush(true); - MergeRunnable runnable = new MergeRunnable(columnName, from_ID, to_ID, this.getDesktop()); + MergeRunnable runnable = new MergeRunnable(columnName, from_ID, to_ID, form.getDesktop()); new Thread(runnable).start(); } // actionPerformed @@ -318,7 +272,7 @@ public class WMerge extends ADForm postMerge(columnName, to_ID); } finally{ Clients.showBusy(null, false); - Clients.response(new AuEcho(WMerge.this, "onAfterProcess", null)); + Clients.response(new AuEcho(form, "onAfterProcess", null)); //release full control of desktop Executions.deactivate(desktop); } @@ -334,221 +288,20 @@ public class WMerge extends ADForm { if (m_success) { - FDialog.info (m_WindowNo, this, "MergeSuccess", + FDialog.info (m_WindowNo, form, "MergeSuccess", m_msg + " #" + m_totalCount); } else { - FDialog.error(m_WindowNo, this, "MergeError", + FDialog.error(m_WindowNo, form, "MergeError", m_errorLog.toString()); return; } dispose(); } - /** - * Merge. - * @param ColumnName column - * @param from_ID from - * @param to_ID to - * @return true if merged - */ - private boolean merge (String ColumnName, int from_ID, int to_ID) + + public ADForm getForm() { - String TableName = ColumnName.substring(0, ColumnName.length()-3); - log.config(ColumnName - + " - From=" + from_ID + ",To=" + to_ID); - - boolean success = true; - m_totalCount = 0; - m_errorLog = new StringBuffer(); - String sql = "SELECT t.TableName, c.ColumnName " - + "FROM AD_Table t" - + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) " - + "WHERE t.IsView='N'" - + " AND t.TableName NOT IN ('C_TaxDeclarationAcct')" - + " AND (" - + "(c.ColumnName=? AND c.IsKey='N')" // #1 - direct - + " OR " - + "c.AD_Reference_Value_ID IN " // Table Reference - + "(SELECT rt.AD_Reference_ID FROM AD_Ref_Table rt" - + " INNER JOIN AD_Column cc ON (rt.AD_Table_ID=cc.AD_Table_ID AND rt.AD_Key=cc.AD_Column_ID) " - + "WHERE cc.IsKey='Y' AND cc.ColumnName=?)" // #2 - + ") " - + "ORDER BY t.LoadSeq DESC"; - PreparedStatement pstmt = null; - - try - { - - m_trx = Trx.get(Trx.createTrxName("merge"), true); - // - pstmt = DB.prepareStatement(sql, Trx.createTrxName()); - pstmt.setString(1, ColumnName); - pstmt.setString(2, ColumnName); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - String tName = rs.getString(1); - String cName = rs.getString(2); - if (!TableName.equals(tName)) // to be sure - sql should prevent it - { - int count = mergeTable (tName, cName, from_ID, to_ID); - if (count < 0) - success = false; - else - m_totalCount += count; - } - } - rs.close(); - pstmt.close(); - pstmt = null; - // - log.config("Success=" + success - + " - " + ColumnName + " - From=" + from_ID + ",To=" + to_ID); - if (success) - { - sql = "DELETE " + TableName + " WHERE " + ColumnName + "=" + from_ID; - - - - - if ( DB.executeUpdate(sql, m_trx.getTrxName()) < 0 ) - { - m_errorLog.append(Env.NL).append("DELETE ").append(TableName) - .append(" - "); - success = false; - log.config(m_errorLog.toString()); - m_trx.rollback(); - return false; - } - - } - // - if (success) - m_trx.commit(); - else - m_trx.rollback(); - - m_trx.close(); - - } - catch (Exception ex) - { - log.log(Level.SEVERE, ColumnName, ex); - } - // Cleanup - try - { - if (pstmt != null) - pstmt.close(); - - } - catch (Exception ex) - { - } - pstmt = null; - return success; - } // merge - - - /** - * Merge Table - * @param TableName table - * @param ColumnName column - * @param from_ID from - * @param to_ID to - * @return -1 for error or number of changes - */ - private int mergeTable (String TableName, String ColumnName, int from_ID, int to_ID) - { - log.fine(TableName + "." + ColumnName + " - From=" + from_ID + ",To=" + to_ID); - String sql = "UPDATE " + TableName - + " SET " + ColumnName + "=" + to_ID - + " WHERE " + ColumnName + "=" + from_ID; - boolean delete = false; - for (int i = 0; i < m_deleteTables.length; i++) - { - if (m_deleteTables[i].equals(TableName)) - { - delete = true; - sql = "DELETE " + TableName + " WHERE " + ColumnName + "=" + from_ID; - } - } - // Delete newly created MCost records - teo_sarca [ 1704554 ] - if (delete && X_M_Cost.Table_Name.equals(TableName) && M_PRODUCT_ID.equals(ColumnName)) - { - sql += " AND " + X_M_Cost.COLUMNNAME_CurrentCostPrice + "=0" - + " AND " + X_M_Cost.COLUMNNAME_CurrentQty + "=0" - + " AND " + X_M_Cost.COLUMNNAME_CumulatedAmt + "=0" - + " AND " + X_M_Cost.COLUMNNAME_CumulatedQty + "=0"; - } - - int count = DB.executeUpdate(sql, m_trx.getTrxName()); - - - if ( count < 0 ) - { - - count = -1; - m_errorLog.append(Env.NL) - .append(delete ? "DELETE " : "UPDATE ") - .append(TableName).append(" - ") - .append(" - ").append(sql); - log.config(m_errorLog.toString()); - m_trx.rollback(); - - } - log.fine(count - + (delete ? " -Delete- " : " -Update- ") + TableName); - - - return count; - } // mergeTable - - /** - * Post Merge - * @param ColumnName column name - * @param to_ID ID - */ - private void postMerge (String ColumnName, int to_ID) - { - if (ColumnName.equals(AD_ORG_ID)) - { - - } - else if (ColumnName.equals(AD_USER_ID)) - { - - } - else if (ColumnName.equals(C_BPARTNER_ID)) - { - MBPartner bp = new MBPartner (Env.getCtx(), to_ID, null); - if (bp.get_ID() != 0) - { - MPayment[] payments = MPayment.getOfBPartner(Env.getCtx(), bp.getC_BPartner_ID(), null); - for (int i = 0; i < payments.length; i++) - { - MPayment payment = payments[i]; - if (payment.testAllocation()) - payment.save(); - } - MInvoice[] invoices = MInvoice.getOfBPartner(Env.getCtx(), bp.getC_BPartner_ID(), null); - for (int i = 0; i < invoices.length; i++) - { - MInvoice invoice = invoices[i]; - if (invoice.testAllocation()) - invoice.save(); - } - bp.setTotalOpenBalance(); - bp.setActualLifeTimeValue(); - bp.save(); - } - } - else if (ColumnName.equals(M_PRODUCT_ID)) - { - - } - } // postMerge - - + return form; + } } // VMerge diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java index 3adab64f84..f1d437deab 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPayPrint.java @@ -18,9 +18,6 @@ package org.adempiere.webui.apps.form; import java.io.File; import java.io.FileInputStream; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @@ -39,19 +36,18 @@ import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Window; import org.adempiere.webui.editor.WNumberEditor; import org.adempiere.webui.panel.ADForm; +import org.adempiere.webui.panel.CustomForm; +import org.adempiere.webui.panel.ICustomForm; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.window.FDialog; import org.adempiere.webui.window.SimplePDFViewer; -import org.compiere.model.MLookupFactory; -import org.compiere.model.MLookupInfo; +import org.compiere.apps.form.PayPrint; import org.compiere.model.MPaySelectionCheck; import org.compiere.model.MPaymentBatch; import org.compiere.print.ReportEngine; -import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; -import org.compiere.util.Language; import org.compiere.util.Msg; import org.compiere.util.ValueNamePair; import org.zkoss.zk.ui.event.Event; @@ -67,18 +63,19 @@ import org.zkoss.zul.Filedownload; * @author Jorg Janke * @version $Id: VPayPrint.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $ */ -public class WPayPrint extends ADForm - implements EventListener +public class WPayPrint extends PayPrint implements ICustomForm, EventListener { /** * */ private static final long serialVersionUID = -3005095685182033400L; + + private CustomForm form = new CustomForm(); /** * Initialize Panel */ - protected void initForm() + public WPayPrint() { try { @@ -87,7 +84,7 @@ public class WPayPrint extends ADForm Borderlayout contentLayout = new Borderlayout(); contentLayout.setWidth("100%"); contentLayout.setHeight("100%"); - this.appendChild(contentLayout); + form.appendChild(contentLayout); Center center = new Center(); contentLayout.appendChild(center); center.appendChild(centerPanel); @@ -101,16 +98,6 @@ public class WPayPrint extends ADForm log.log(Level.SEVERE, "", e); } } // init - - /** Used Bank Account */ - private int m_C_BankAccount_ID = -1; - - /** Payment Information */ - private MPaySelectionCheck[] m_checks = null; - /** Payment Batch */ - private MPaymentBatch m_batch = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(WPayPrint.class); // Static Variables private Panel centerPanel = new Panel(); @@ -194,7 +181,8 @@ public class WPayPrint extends ADForm row.appendChild(fDocumentNo.getComponent()); row.appendChild(lNoPayments.rightAlign()); row.appendChild(fNoPayments); - + + southPanel.getButton(ConfirmPanel.A_OK).setVisible(false); } // VPayPrint /** @@ -202,33 +190,12 @@ public class WPayPrint extends ADForm */ private void dynInit() { - log.config(""); - int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); - - // Load PaySelect - String sql = "SELECT C_PaySelection_ID, Name || ' - ' || TotalAmt FROM C_PaySelection " - + "WHERE AD_Client_ID=? AND Processed='Y' AND IsActive='Y'" - + "ORDER BY PayDate DESC"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, AD_Client_ID); - ResultSet rs = pstmt.executeQuery(); - // - while (rs.next()) - { - KeyNamePair pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); - fPaySelect.addItem(pp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + ArrayList data = getPaySelectionData(); + for(KeyNamePair pp : data) + fPaySelect.addItem(pp); + if (fPaySelect.getItemCount() == 0) - FDialog.info(m_WindowNo, this, "VPayPrintNoRecords"); + FDialog.info(m_WindowNo, form, "VPayPrintNoRecords"); else { fPaySelect.setSelectedIndex(0); @@ -296,44 +263,15 @@ public class WPayPrint extends ADForm log.info( "VPayPrint.loadPaySelectInfo"); if (fPaySelect.getSelectedIndex() == -1) return; - + // load Banks from PaySelectLine int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey(); - m_C_BankAccount_ID = -1; - String sql = "SELECT ps.C_BankAccount_ID, b.Name || ' ' || ba.AccountNo," // 1..2 - + " c.ISO_Code, CurrentBalance " // 3..4 - + "FROM C_PaySelection ps" - + " INNER JOIN C_BankAccount ba ON (ps.C_BankAccount_ID=ba.C_BankAccount_ID)" - + " INNER JOIN C_Bank b ON (ba.C_Bank_ID=b.C_Bank_ID)" - + " INNER JOIN C_Currency c ON (ba.C_Currency_ID=c.C_Currency_ID) " - + "WHERE ps.C_PaySelection_ID=? AND ps.Processed='Y' AND ba.IsActive='Y'"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, C_PaySelection_ID); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - { - m_C_BankAccount_ID = rs.getInt(1); - fBank.setText(rs.getString(2)); - fCurrency.setText(rs.getString(3)); - fBalance.setValue(rs.getBigDecimal(4)); - } - else - { - m_C_BankAccount_ID = -1; - fBank.setText(""); - fCurrency.setText(""); - fBalance.setValue(Env.ZERO); - log.log(Level.SEVERE, "No active BankAccount for C_PaySelection_ID=" + C_PaySelection_ID); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + loadPaySelectInfo(C_PaySelection_ID); + + fBank.setText(bank); + fCurrency.setText(currency); + fBalance.setValue(balance); + loadPaymentRule(); } // loadPaySelectInfo @@ -345,39 +283,18 @@ public class WPayPrint extends ADForm log.info(""); if (m_C_BankAccount_ID == -1) return; - + + fPaymentRule.removeAllItems(); + // load PaymentRule for Bank int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey(); - fPaymentRule.removeAllItems(); - int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule"); - Language language = Language.getLanguage(Env.getAD_Language(Env.getCtx())); - MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID); - String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY")) - + " AND " + info.KeyColumn - + " IN (SELECT PaymentRule FROM C_PaySelectionCheck WHERE C_PaySelection_ID=?) " - + info.Query.substring(info.Query.indexOf(" ORDER BY")); - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, C_PaySelection_ID); - ResultSet rs = pstmt.executeQuery(); - // - while (rs.next()) - { - ValueNamePair pp = new ValueNamePair(rs.getString(2), rs.getString(3)); - fPaymentRule.addItem(pp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } - if (fPaymentRule.getItemCount() == 0) - log.config("PaySel=" + C_PaySelection_ID + ", BAcct=" + m_C_BankAccount_ID + " - " + sql); - else + ArrayList data = loadPaymentRule(C_PaySelection_ID); + for(ValueNamePair pp : data) + fPaymentRule.addItem(pp); + + if (fPaymentRule.getItemCount() > 0) fPaymentRule.setSelectedIndex(0); + loadPaymentRuleInfo(); } // loadPaymentRule @@ -394,54 +311,20 @@ public class WPayPrint extends ADForm log.info("PaymentRule=" + PaymentRule); fNoPayments.setText(" "); - + int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey(); - String sql = "SELECT COUNT(*) " - + "FROM C_PaySelectionCheck " - + "WHERE C_PaySelection_ID=?"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, C_PaySelection_ID); - ResultSet rs = pstmt.executeQuery(); - // - if (rs.next()) - fNoPayments.setText(String.valueOf(rs.getInt(1))); - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + String msg = loadPaymentRuleInfo(C_PaySelection_ID, PaymentRule); + + if(noPayments != null) + fNoPayments.setText(noPayments); + bProcess.setEnabled(PaymentRule.equals("T")); - - // DocumentNo - sql = "SELECT CurrentNext " - + "FROM C_BankAccountDoc " - + "WHERE C_BankAccount_ID=? AND PaymentRule=? AND IsActive='Y'"; - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, m_C_BankAccount_ID); - pstmt.setString(2, PaymentRule); - ResultSet rs = pstmt.executeQuery(); - // - if (rs.next()) - fDocumentNo.setValue(new Integer(rs.getInt(1))); - else - { - log.log(Level.SEVERE, "VPayPrint.loadPaymentRuleInfo - No active BankAccountDoc for C_BankAccount_ID=" - + m_C_BankAccount_ID + " AND PaymentRule=" + PaymentRule); - FDialog.error(m_WindowNo, this, "VPayPrintNoDoc"); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + + if(documentNo != null) + fDocumentNo.setValue(documentNo); + + if(msg != null && msg.length() > 0) + FDialog.error(m_WindowNo, form, msg); } // loadPaymentRuleInfo @@ -464,7 +347,7 @@ public class WPayPrint extends ADForm MPaySelectionCheck.exportToFile(m_checks, tempFile); Filedownload.save(new FileInputStream(tempFile), "plain/text", "paymentExport.txt"); - if (FDialog.ask(m_WindowNo, this, "VPayPrintSuccess?")) + if (FDialog.ask(m_WindowNo, form, "VPayPrintSuccess?")) { // int lastDocumentNo = MPaySelectionCheck.confirmPrint (m_checks, m_batch); @@ -525,7 +408,7 @@ public class WPayPrint extends ADForm { File outFile = File.createTempFile("WPayPrint", null); AEnv.mergePdf(pdfList, outFile); - chequeViewer = new SimplePDFViewer(this.getFormName(), new FileInputStream(outFile)); + chequeViewer = new SimplePDFViewer(form.getFormName(), new FileInputStream(outFile)); chequeViewer.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED); chequeViewer.setWidth("100%"); } @@ -547,7 +430,7 @@ public class WPayPrint extends ADForm } SimplePDFViewer remitViewer = null; - if (FDialog.ask(m_WindowNo, this, "VPayPrintPrintRemittance")) + if (FDialog.ask(m_WindowNo, form, "VPayPrintPrintRemittance")) { pdfList = new ArrayList(); for (int i = 0; i < m_checks.length; i++) @@ -571,7 +454,7 @@ public class WPayPrint extends ADForm File outFile = File.createTempFile("WPayPrint", null); AEnv.mergePdf(pdfList, outFile); String name = Msg.translate(Env.getCtx(), "Remittance"); - remitViewer = new SimplePDFViewer(this.getFormName() + " - " + name, new FileInputStream(outFile)); + remitViewer = new SimplePDFViewer(form.getFormName() + " - " + name, new FileInputStream(outFile)); remitViewer.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED); remitViewer.setWidth("100%"); } @@ -602,7 +485,7 @@ public class WPayPrint extends ADForm if (fPaySelect.getSelectedIndex() == -1 || m_C_BankAccount_ID == -1 || fPaymentRule.getSelectedIndex() == -1 || fDocumentNo.getValue() == null) { - FDialog.error(m_WindowNo, this, "VPayPrintNoRecords", + FDialog.error(m_WindowNo, form, "VPayPrintNoRecords", "(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + "=0)"); return false; } @@ -619,12 +502,16 @@ public class WPayPrint extends ADForm // if (m_checks == null || m_checks.length == 0) { - FDialog.error(m_WindowNo, this, "VPayPrintNoRecords", + FDialog.error(m_WindowNo, form, "VPayPrintNoRecords", "(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + " #0"); return false; } m_batch = MPaymentBatch.getForPaySelection (Env.getCtx(), C_PaySelection_ID, null); return true; } // getChecks + + public ADForm getForm() { + return form; + } } // PayPrint diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java index fc1af67455..9431d0566f 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java @@ -18,13 +18,8 @@ *****************************************************************************/ package org.adempiere.webui.apps.form; -import java.math.BigDecimal; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Timestamp; -import java.text.DecimalFormat; -import java.util.Properties; +import java.util.ArrayList; import java.util.logging.Level; import org.adempiere.webui.apps.ProcessModalDialog; @@ -44,29 +39,18 @@ import org.adempiere.webui.editor.WDateEditor; import org.adempiere.webui.event.WTableModelEvent; import org.adempiere.webui.event.WTableModelListener; import org.adempiere.webui.panel.ADForm; +import org.adempiere.webui.panel.CustomForm; +import org.adempiere.webui.panel.ICustomForm; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.window.FDialog; -import org.compiere.minigrid.ColumnInfo; -import org.compiere.minigrid.IDColumn; -import org.compiere.model.MLookupFactory; -import org.compiere.model.MLookupInfo; -import org.compiere.model.MPaySelection; -import org.compiere.model.MPaySelectionLine; -import org.compiere.model.MRole; -import org.compiere.model.X_C_Order; +import org.compiere.apps.form.PaySelect; import org.compiere.model.X_C_PaySelection; import org.compiere.process.ProcessInfo; import org.compiere.util.ASyncProcess; -import org.compiere.util.CLogger; -import org.compiere.util.DB; -import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; -import org.compiere.util.Language; import org.compiere.util.Msg; -import org.compiere.util.Trx; import org.compiere.util.ValueNamePair; -import org.zkoss.zk.au.out.AuEcho; import org.zkoss.zk.ui.SuspendNotAllowedException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -87,8 +71,8 @@ import org.zkoss.zul.Space; * @author Jorg Janke * @version $Id: VPaySelect.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ */ -public class WPaySelect extends ADForm - implements EventListener, WTableModelListener, ASyncProcess +public class WPaySelect extends PaySelect + implements ICustomForm, EventListener, WTableModelListener, ASyncProcess { /** @todo withholding */ @@ -96,39 +80,8 @@ public class WPaySelect extends ADForm * */ private static final long serialVersionUID = -6031404894392912610L; - - /** - * Initialize Panel - */ - protected void initForm() - { - try - { - zkInit(); - dynInit(); - southPanel.appendChild(new Separator()); - southPanel.appendChild(commandPanel); - } - catch(Exception e) - { - log.log(Level.SEVERE, "", e); - } - } // init - - /** Format */ - private DecimalFormat m_format = DisplayType.getNumberFormat(DisplayType.Amount); - /** Bank Balance */ - private BigDecimal m_bankBalance = new BigDecimal(0.0); - /** SQL for Query */ - private String m_sql; - /** Number of selected rows */ - private int m_noSelected = 0; - /** Client ID */ - private int m_AD_Client_ID = 0; - /** Payment Selection */ - private MPaySelection m_ps = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(WPaySelect.class); + + private CustomForm form = new CustomForm(); // private Panel mainPanel = new Panel(); @@ -153,9 +106,31 @@ public class WPaySelect extends ADForm private WDateEditor fieldPayDate = new WDateEditor(); private Label labelPaymentRule = new Label(); private Listbox fieldPaymentRule = ListboxFactory.newDropdownListbox(); + private Label labelDtype = new Label(); + private Listbox fieldDtype = ListboxFactory.newDropdownListbox(); private Panel southPanel; private ProcessInfo m_pi; private boolean m_isLock; + + /** + * Initialize Panel + */ + public WPaySelect() + { + try + { + zkInit(); + dynInit(); + + loadBankInfo(); + southPanel.appendChild(new Separator()); + southPanel.appendChild(commandPanel); + } + catch(Exception e) + { + log.log(Level.SEVERE, "", e); + } + } // init /** * Static Init @@ -164,7 +139,7 @@ public class WPaySelect extends ADForm private void zkInit() throws Exception { // - this.appendChild(mainPanel); + form.appendChild(mainPanel); mainPanel.appendChild(mainLayout); mainPanel.setStyle("width: 100%; height: 100%; padding: 0; margin: 0"); mainLayout.setHeight("100%"); @@ -179,6 +154,8 @@ public class WPaySelect extends ADForm labelPayDate.setText(Msg.translate(Env.getCtx(), "PayDate")); labelPaymentRule.setText(Msg.translate(Env.getCtx(), "PaymentRule")); fieldPaymentRule.addActionListener(this); + labelDtype.setText(Msg.translate(Env.getCtx(), "C_DocType_ID")); + fieldDtype.addActionListener(this); // labelBankBalance.setText(Msg.translate(Env.getCtx(), "CurrentBalance")); labelBalance.setText("0"); @@ -212,13 +189,20 @@ public class WPaySelect extends ADForm row.appendChild(onlyDue); row.appendChild(new Space()); + row = rows.newRow(); + row.appendChild(labelDtype.rightAlign()); + row.appendChild(fieldDtype); + row.appendChild(new Space()); + row.appendChild(new Space()); + row.appendChild(new Space()); + row = rows.newRow(); row.appendChild(labelPayDate.rightAlign()); row.appendChild(fieldPayDate.getComponent()); row.appendChild(labelPaymentRule.rightAlign()); row.appendChild(fieldPaymentRule); row.appendChild(bRefresh); - + South south = new South(); south.setStyle("border: none"); mainLayout.appendChild(south); @@ -230,6 +214,7 @@ public class WPaySelect extends ADForm center.appendChild(miniTable); // commandPanel.addButton(bGenerate); + commandPanel.getButton(ConfirmPanel.A_OK).setVisible(false); } // jbInit /** @@ -240,170 +225,50 @@ public class WPaySelect extends ADForm */ private void dynInit() { - Properties ctx = Env.getCtx(); + ArrayList bankAccountData = getBankAccountData(); + for(BankInfo bi : bankAccountData) + fieldBankAccount.appendItem(bi.toString(), bi); - // Bank Account Info - String sql = MRole.getDefault().addAccessSQL( - "SELECT ba.C_BankAccount_ID," // 1 - + "b.Name || ' ' || ba.AccountNo AS Name," // 2 - + "ba.C_Currency_ID, c.ISO_Code," // 3..4 - + "ba.CurrentBalance " // 5 - + "FROM C_Bank b, C_BankAccount ba, C_Currency c " - + "WHERE b.C_Bank_ID=ba.C_Bank_ID" - + " AND ba.C_Currency_ID=c.C_Currency_ID " - + " AND EXISTS (SELECT * FROM C_BankAccountDoc d WHERE d.C_BankAccount_ID=ba.C_BankAccount_ID) " - + "ORDER BY 2", - "b", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RW); - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - boolean transfers = false; - BankInfo bi = new BankInfo (rs.getInt(1), rs.getInt(3), - rs.getString(2), rs.getString(4), - rs.getBigDecimal(5), transfers); - fieldBankAccount.appendItem(bi.toString(), bi); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } if (fieldBankAccount.getItemCount() == 0) - FDialog.error(m_WindowNo, this, "VPaySelectNoBank"); + FDialog.error(m_WindowNo, form, "VPaySelectNoBank"); else fieldBankAccount.setSelectedIndex(0); - loadBankInfo(); - - // Optional BusinessPartner with unpaid AP Invoices - KeyNamePair pp = new KeyNamePair(0, ""); - fieldBPartner.addItem(pp); - sql = MRole.getDefault().addAccessSQL( - "SELECT bp.C_BPartner_ID, bp.Name FROM C_BPartner bp", "bp", - MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO) - + " AND EXISTS (SELECT * FROM C_Invoice i WHERE bp.C_BPartner_ID=i.C_BPartner_ID" - // X_C_Order.PAYMENTRULE_DirectDebit - + " AND (i.IsSOTrx='N' OR (i.IsSOTrx='Y' AND i.PaymentRule='D'))" - + " AND i.IsPaid<>'Y') " - + "ORDER BY 2"; - - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - pp = new KeyNamePair(rs.getInt(1), rs.getString(2)); - fieldBPartner.addItem(pp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + + ArrayList bpartnerData = getBPartnerData(); + for(KeyNamePair pp : bpartnerData) + fieldBPartner.appendItem(pp.getName(), pp); fieldBPartner.setSelectedIndex(0); - /** prepare MiniTable - * - SELECT i.C_Invoice_ID, i.DateInvoiced+p.NetDays AS DateDue, - bp.Name, i.DocumentNo, c.ISO_Code, i.GrandTotal, - paymentTermDiscount(i.GrandTotal, i.C_PaymentTerm_ID, i.DateInvoiced, SysDate) AS Discount, - SysDate-paymentTermDueDays(i.C_PaymentTerm_ID,i.DateInvoiced) AS DiscountDate, - i.GrandTotal-paymentTermDiscount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate) AS DueAmount, - currencyConvert(i.GrandTotal-paymentTermDiscount(i.GrandTotal,i.C_PaymentTerm_ID,i.DateInvoiced,SysDate,null), - i.C_Currency_ID,xx100,SysDate) AS PayAmt - FROM C_Invoice i, C_BPartner bp, C_Currency c, C_PaymentTerm p - WHERE i.IsSOTrx='N' - AND i.C_BPartner_ID=bp.C_BPartner_ID - AND i.C_Currency_ID=c.C_Currency_ID - AND i.C_PaymentTerm_ID=p.C_PaymentTerm_ID - AND i.DocStatus IN ('CO','CL') - ORDER BY 2,3 - */ - - m_sql = miniTable.prepareTable(new ColumnInfo[] { - // 0..4 - new ColumnInfo(" ", "i.C_Invoice_ID", IDColumn.class, false, false, null), - new ColumnInfo(Msg.translate(ctx, "DueDate"), "paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) AS DateDue", Timestamp.class, true, true, null), - new ColumnInfo(Msg.translate(ctx, "C_BPartner_ID"), "bp.Name", KeyNamePair.class, true, false, "i.C_BPartner_ID"), - new ColumnInfo(Msg.translate(ctx, "DocumentNo"), "i.DocumentNo", String.class), - new ColumnInfo(Msg.translate(ctx, "C_Currency_ID"), "c.ISO_Code", KeyNamePair.class, true, false, "i.C_Currency_ID"), - // 5..9 - new ColumnInfo(Msg.translate(ctx, "GrandTotal"), "i.GrandTotal", BigDecimal.class), - new ColumnInfo(Msg.translate(ctx, "DiscountAmt"), "paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?)", BigDecimal.class), - new ColumnInfo(Msg.getMsg(ctx, "DiscountDate"), "SysDate-paymentTermDueDays(i.C_PaymentTerm_ID,i.DateInvoiced,SysDate)", Timestamp.class), - new ColumnInfo(Msg.getMsg(ctx, "AmountDue"), "currencyConvert(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID),i.C_Currency_ID, ?,?,i.C_ConversionType_ID, i.AD_Client_ID,i.AD_Org_ID)", BigDecimal.class), - new ColumnInfo(Msg.getMsg(ctx, "AmountPay"), "currencyConvert(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID)-paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?),i.C_Currency_ID, ?,?,i.C_ConversionType_ID, i.AD_Client_ID,i.AD_Org_ID)", BigDecimal.class) - }, - // FROM - "C_Invoice_v i" - + " INNER JOIN C_BPartner bp ON (i.C_BPartner_ID=bp.C_BPartner_ID)" - + " INNER JOIN C_Currency c ON (i.C_Currency_ID=c.C_Currency_ID)" - + " INNER JOIN C_PaymentTerm p ON (i.C_PaymentTerm_ID=p.C_PaymentTerm_ID)", - // WHERE - "i.IsSOTrx=? AND IsPaid='N'" - // Different Payment Selection - + " AND NOT EXISTS (SELECT * FROM C_PaySelectionLine psl" - + " WHERE i.C_Invoice_ID=psl.C_Invoice_ID AND psl.C_PaySelectionCheck_ID IS NOT NULL)" - + " AND i.DocStatus IN ('CO','CL')" - + " AND i.AD_Client_ID=?", // additional where & order in loadTableInfo() - true, "i"); - // + ArrayList docTypeData = getDocTypeData(); + for(KeyNamePair pp : docTypeData) + fieldDtype.appendItem(pp.getName(), pp); + + prepareTable(miniTable); + miniTable.getModel().addTableModelListener(this); // fieldPayDate.setMandatory(true); fieldPayDate.setValue(new Timestamp(System.currentTimeMillis())); - // - m_AD_Client_ID = Env.getAD_Client_ID(Env.getCtx()); } // dynInit /** * Load Bank Info - Load Info from Bank Account and valid Documents (PaymentRule) */ private void loadBankInfo() - { + { BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue(); if (bi == null) return; labelCurrency.setText(bi.Currency); labelBalance.setText(m_format.format(bi.Balance)); - m_bankBalance = bi.Balance; // PaymentRule fieldPaymentRule.removeAllItems(); - int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule"); - Language language = Env.getLanguage(Env.getCtx()); - MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID); - String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY")) - + " AND " + info.KeyColumn - + " IN (SELECT PaymentRule FROM C_BankAccountDoc WHERE C_BankAccount_ID=?) " - + info.Query.substring(info.Query.indexOf(" ORDER BY")); - try - { - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, bi.C_BankAccount_ID); - ResultSet rs = pstmt.executeQuery(); - ValueNamePair vp = null; - while (rs.next()) - { - vp = new ValueNamePair(rs.getString(2), rs.getString(3)); // returns also not active - fieldPaymentRule.addItem(vp); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + + ArrayList paymentRuleData = getPaymentRuleData(bi); + for(ValueNamePair vp : paymentRuleData) + fieldPaymentRule.appendItem(vp.getName(), vp); fieldPaymentRule.setSelectedIndex(0); - } // loadBankInfo /** @@ -411,64 +276,18 @@ public class WPaySelect extends ADForm */ private void loadTableInfo() { - log.config(""); - // not yet initialized - if (m_sql == null) - return; - - String sql = m_sql; - // Parameters Timestamp payDate = (Timestamp)fieldPayDate.getValue(); miniTable.setColorCompare(payDate); log.config("PayDate=" + payDate); - BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue(); - // - String isSOTrx = "N"; - ValueNamePair vp = (ValueNamePair)fieldPaymentRule.getSelectedItem().toValueNamePair(); - if (vp != null && X_C_Order.PAYMENTRULE_DirectDebit.equals(vp.getValue())) - { - isSOTrx = "Y"; - sql += " AND i.PaymentRule='" + X_C_Order.PAYMENTRULE_DirectDebit + "'"; - } - // - if (onlyDue.isSelected()) - sql += " AND paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) <= ?"; - // - KeyNamePair pp = (KeyNamePair)fieldBPartner.getSelectedItem().toKeyNamePair(); - int C_BPartner_ID = pp.getKey(); - if (C_BPartner_ID != 0) - sql += " AND i.C_BPartner_ID=?"; - sql += " ORDER BY 2,3"; - // - log.finest(sql + " - C_Currecny_ID=" + bi.C_Currency_ID + ", C_BPartner_ID=" + C_BPartner_ID); - // Get Open Invoices - try - { - int index = 1; - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setTimestamp(index++, payDate); // DiscountAmt - pstmt.setInt(index++, bi.C_Currency_ID); // DueAmt - pstmt.setTimestamp(index++, payDate); - pstmt.setTimestamp(index++, payDate); // PayAmt - pstmt.setInt(index++, bi.C_Currency_ID); - pstmt.setTimestamp(index++, payDate); - pstmt.setString(index++, isSOTrx); // IsSOTrx - pstmt.setInt(index++, m_AD_Client_ID); // Client - if (onlyDue.isSelected()) - pstmt.setTimestamp(index++, payDate); - if (C_BPartner_ID != 0) - pstmt.setInt(index++, C_BPartner_ID); - // - ResultSet rs = pstmt.executeQuery(); - miniTable.loadTable(rs); - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } + BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue(); + + ValueNamePair paymentRule = (ValueNamePair) fieldPaymentRule.getSelectedItem().getValue(); + KeyNamePair bpartner = (KeyNamePair) fieldBPartner.getSelectedItem().getValue(); + KeyNamePair docType = (KeyNamePair) fieldDtype.getSelectedItem().getValue(); + + loadTableInfo(bi, payDate, paymentRule, onlyDue.isSelected(), bpartner, docType, miniTable); + calculateSelection(); } // loadTableInfo @@ -501,7 +320,7 @@ public class WPaySelect extends ADForm dispose(); // Update Open Invoices - else if (e.getTarget() == fieldBPartner || e.getTarget() == bRefresh) + else if (e.getTarget() == fieldBPartner || e.getTarget() == bRefresh || e.getTarget() == fieldDtype) loadTableInfo(); } // actionPerformed @@ -522,29 +341,7 @@ public class WPaySelect extends ADForm */ public void calculateSelection() { - m_noSelected = 0; - BigDecimal invoiceAmt = new BigDecimal(0.0); - - int rows = miniTable.getRowCount(); - for (int i = 0; i < rows; i++) - { - IDColumn id = (IDColumn)miniTable.getModel().getValueAt(i, 0); - if (id.isSelected()) - { - BigDecimal amt = (BigDecimal)miniTable.getModel().getValueAt(i, 9); - if (amt != null) - invoiceAmt = invoiceAmt.add(amt); - m_noSelected++; - } - } - - // Information - BigDecimal remaining = m_bankBalance.subtract(invoiceAmt); - StringBuffer info = new StringBuffer(); - info.append(m_noSelected).append(" ").append(Msg.getMsg(Env.getCtx(), "Selected")).append(" - "); - info.append(m_format.format(invoiceAmt)).append(", "); - info.append(Msg.getMsg(Env.getCtx(), "Remaining")).append(" ").append(m_format.format(remaining)); - dataStatus.setText(info.toString()); + dataStatus.setText(calculateSelection(miniTable)); // bGenerate.setEnabled(m_noSelected != 0); } // calculateSelection @@ -554,12 +351,6 @@ public class WPaySelect extends ADForm */ private void generatePaySelect() { - log.info(""); - // String trxName Trx.createTrxName("PaySelect"); - // Trx trx = Trx.get(trxName, true); trx needs to be committed too - String trxName = null; - Trx trx = null; - // if (miniTable.getRowCount() == 0) return; miniTable.setSelectedIndices(new int[]{0}); @@ -567,67 +358,31 @@ public class WPaySelect extends ADForm if (m_noSelected == 0) return; - String PaymentRule = ((ValueNamePair)fieldPaymentRule.getSelectedItem().toValueNamePair()).getValue(); - - // Create Header - m_ps = new MPaySelection(Env.getCtx(), 0, trxName); - m_ps.setName (Msg.getMsg(Env.getCtx(), "VPaySelect") - + " - " + ((ValueNamePair)fieldPaymentRule.getSelectedItem().toValueNamePair()).getName() - + " - " + fieldPayDate.getValue()); - m_ps.setPayDate (new Timestamp(fieldPayDate.getComponent().getValue().getTime())); - BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue(); - m_ps.setC_BankAccount_ID(bi.C_BankAccount_ID); - m_ps.setIsApproved(true); - if (!m_ps.save()) + String msg = generatePaySelect(miniTable, (ValueNamePair) fieldPaymentRule.getSelectedItem().getValue(), + new Timestamp(fieldPayDate.getComponent().getValue().getTime()), + (BankInfo)fieldBankAccount.getSelectedItem().getValue()); + + if(msg != null && msg.length() > 0) { - FDialog.error(m_WindowNo, this, "SaveError", Msg.translate(Env.getCtx(), "C_PaySelection_ID")); - m_ps = null; + FDialog.error(m_WindowNo, form, "SaveError", msg); return; } - log.config(m_ps.toString()); - - // Create Lines - int rows = miniTable.getRowCount(); - int line = 0; - for (int i = 0; i < rows; i++) - { - IDColumn id = (IDColumn)miniTable.getModel().getValueAt(i, 0); - if (id.isSelected()) - { - line += 10; - MPaySelectionLine psl = new MPaySelectionLine (m_ps, line, PaymentRule); - int C_Invoice_ID = id.getRecord_ID().intValue(); - BigDecimal OpenAmt = (BigDecimal)miniTable.getModel().getValueAt(i, 8); - BigDecimal PayAmt = (BigDecimal)miniTable.getModel().getValueAt(i, 9); - boolean isSOTrx = false; - // - psl.setInvoice(C_Invoice_ID, isSOTrx, - OpenAmt, PayAmt, OpenAmt.subtract(PayAmt)); - if (!psl.save(trxName)) - { - FDialog.error(m_WindowNo, this, "SaveError", Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID")); - return; - } - log.fine("C_Invoice_ID=" + C_Invoice_ID + ", PayAmt=" + PayAmt); - } - } // for all rows in table - // Ask to Post it - if (!FDialog.ask(m_WindowNo, this, "VPaySelectGenerate?", "(" + m_ps.getName() + ")")) + if (!FDialog.ask(m_WindowNo, form, "VPaySelectGenerate?", "(" + m_ps.getName() + ")")) return; - + // Prepare Process int AD_Proces_ID = 155; // C_PaySelection_CreatePayment // Execute Process - ProcessModalDialog dialog = new ProcessModalDialog(null, getFormName(), this, m_WindowNo, + ProcessModalDialog dialog = new ProcessModalDialog(null, form.getFormName(), this, m_WindowNo, AD_Proces_ID, X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID(), false); if (dialog.isValid()) { try { dialog.setWidth("500px"); dialog.setVisible(true); - dialog.setPage(this.getPage()); + dialog.setPage(form.getPage()); dialog.doModal(); } catch (SuspendNotAllowedException e) { log.log(Level.SEVERE, e.getLocalizedMessage(), e); @@ -658,16 +413,13 @@ public class WPaySelect extends ADForm m_isLock = false; m_pi = pi; Clients.showBusy(null, false); - Clients.response(new AuEcho(this, "onAfterProcess", null)); - } // unlockUI - - public void onAfterProcess() - { - if (!FDialog.ask(0, this, "VPaySelectPrint?", "(" + m_pi.getSummary() + ")")) - { - dispose(); - return; - } + + //TODO: The response returned is always Cancel +// if (!FDialog.ask(0, form, "VPaySelectPrint?", "(" + m_pi.getSummary() + ")")) +// { +// dispose(); +// return; +// } this.dispose(); @@ -676,51 +428,11 @@ public class WPaySelect extends ADForm ADForm form = SessionManager.getAppDesktop().openForm(AD_Form_ID); if (m_ps != null) { - WPayPrint pp = (WPayPrint)form; + WPayPrint pp = (WPayPrint) form.getICustomForm(); pp.setPaySelection(m_ps.getC_PaySelection_ID()); } } - /************************************************************************** - * Bank Account Info - */ - public class BankInfo - { - /** - * BankInfo - * @param newC_BankAccount_ID - * @param newC_Currency_ID - * @param newName - * @param newCurrency - * @param newBalance - * @param newTransfers - */ - public BankInfo (int newC_BankAccount_ID, int newC_Currency_ID, - String newName, String newCurrency, BigDecimal newBalance, boolean newTransfers) - { - C_BankAccount_ID = newC_BankAccount_ID; - C_Currency_ID = newC_Currency_ID; - Name = newName; - Currency = newCurrency; - Balance = newBalance; - } - int C_BankAccount_ID; - int C_Currency_ID; - String Name; - String Currency; - BigDecimal Balance; - boolean Transfers; - - /** - * to String - * @return info - */ - public String toString() - { - return Name; - } - } // BankInfo - public void executeASync(ProcessInfo pi) { } @@ -728,4 +440,7 @@ public class WPaySelect extends ADForm return m_isLock; } + public ADForm getForm() { + return form; + } } // VPaySelect diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java index 2deea8ee70..52904c6180 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java @@ -16,8 +16,6 @@ *****************************************************************************/ package org.adempiere.webui.apps.form; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.util.ArrayList; import java.util.logging.Level; @@ -30,17 +28,13 @@ import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.SimpleListModel; import org.adempiere.webui.component.SimpleTreeModel; import org.adempiere.webui.panel.ADForm; +import org.adempiere.webui.panel.CustomForm; +import org.adempiere.webui.panel.ICustomForm; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.window.FDialog; -import org.compiere.model.MRole; +import org.compiere.apps.form.TreeMaintenance; import org.compiere.model.MTree; import org.compiere.model.MTreeNode; -import org.compiere.model.MTree_Node; -import org.compiere.model.MTree_NodeBP; -import org.compiere.model.MTree_NodeMM; -import org.compiere.model.MTree_NodePR; -import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.KeyNamePair; import org.compiere.util.Msg; @@ -64,17 +58,14 @@ import org.zkoss.zul.Treeitem; * @author Jorg Janke * @version $Id: VTreeMaintenance.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ */ -public class WTreeMaintenance extends ADForm implements EventListener +public class WTreeMaintenance extends TreeMaintenance implements ICustomForm, EventListener { /** * */ private static final long serialVersionUID = 3630156132596215136L; - /** Active Tree */ - private MTree m_tree; - /** Logger */ - private static CLogger log = CLogger.getCLogger(WTreeMaintenance.class); + private CustomForm form = new CustomForm(); private Borderlayout mainLayout = new Borderlayout (); private Panel northPanel = new Panel (); @@ -92,8 +83,7 @@ public class WTreeMaintenance extends ADForm implements EventListener private Listbox centerList = new Listbox(); - @Override - public void initForm() + public WTreeMaintenance() { try { @@ -113,10 +103,7 @@ public class WTreeMaintenance extends ADForm implements EventListener */ private void preInit() { - KeyNamePair[] trees = DB.getKeyNamePairs(MRole.getDefault().addAccessSQL( - "SELECT AD_Tree_ID, Name FROM AD_Tree WHERE TreeType NOT IN ('BB','PC') ORDER BY 2", - "AD_Tree", MRole.SQL_NOTQUALIFIED, MRole.SQL_RW), false); - treeField = new Listbox(trees); + treeField = new Listbox(getTreeData()); treeField.setMold("select"); treeField.addActionListener(this); treeField.setSelectedIndex(0); @@ -136,10 +123,10 @@ public class WTreeMaintenance extends ADForm implements EventListener bDelete.setSrc("images/StepForward24.png"); bDeleteAll.setSrc("images/FastForward24.png"); - this.setWidth("99%"); - this.setHeight("100%"); - this.setStyle("position: absolute; padding: 0; margin: 0"); - this.appendChild (mainLayout); + form.setWidth("99%"); + form.setHeight("100%"); + form.setStyle("position: absolute; padding: 0; margin: 0"); + form.appendChild (mainLayout); mainLayout.setWidth("100%"); mainLayout.setHeight("100%"); mainLayout.setStyle("position: absolute"); @@ -267,41 +254,13 @@ public class WTreeMaintenance extends ADForm implements EventListener String fromClause = m_tree.getSourceTableName(false); // fully qualified String columnNameX = m_tree.getSourceTableName(true); String actionColor = m_tree.getActionColorName(); + // List SimpleListModel model = new SimpleListModel(); - String sql = "SELECT t." + columnNameX - + "_ID,t.Name,t.Description,t.IsSummary," - + actionColor - + " FROM " + fromClause - // + " WHERE t.IsActive='Y'" // R/O - + " ORDER BY 2"; - sql = MRole.getDefault().addAccessSQL(sql, - "t", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO); - log.config(sql); - // - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement (sql, null); - rs = pstmt.executeQuery (); - while (rs.next ()) - { - ListItem item = new ListItem(rs.getInt(1), rs.getString(2), - rs.getString(3), "Y".equals(rs.getString(4)), rs.getString(5)); - model.addElement(item); - } - } - catch (Exception e) - { - log.log(Level.SEVERE, sql, e); - } - finally - { - DB.close(rs, pstmt); - rs = null; pstmt = null; - } - // List + ArrayList items = getTreeItemData(); + for(ListItem item : items) + model.addElement(item); + log.config("#" + model.getSize()); centerList.setItemRenderer(model); centerList.setModel(model); @@ -400,26 +359,7 @@ public class WTreeMaintenance extends ADForm implements EventListener model.addNode(stn); } // May cause Error if in tree - if (m_tree.isProduct()) - { - MTree_NodePR node = new MTree_NodePR (m_tree, item.id); - node.save(); - } - else if (m_tree.isBPartner()) - { - MTree_NodeBP node = new MTree_NodeBP (m_tree, item.id); - node.save(); - } - else if (m_tree.isMenu()) - { - MTree_NodeMM node = new MTree_NodeMM (m_tree, item.id); - node.save(); - } - else - { - MTree_Node node = new MTree_Node (m_tree, item.id); - node.save(); - } + addNode(item); } } // action_treeAdd @@ -438,30 +378,7 @@ public class WTreeMaintenance extends ADForm implements EventListener model.removeNode(stn); // - if (m_tree.isProduct()) - { - MTree_NodePR node = MTree_NodePR.get (m_tree, item.id); - if (node != null) - node.delete(true); - } - else if (m_tree.isBPartner()) - { - MTree_NodeBP node = MTree_NodeBP.get (m_tree, item.id); - if (node != null) - node.delete(true); - } - else if (m_tree.isMenu()) - { - MTree_NodeMM node = MTree_NodeMM.get (m_tree, item.id); - if (node != null) - node.delete(true); - } - else - { - MTree_Node node = MTree_Node.get (m_tree, item.id); - if (node != null) - node.delete(true); - } + deleteNode(item); } } // action_treeDelete @@ -501,52 +418,9 @@ public class WTreeMaintenance extends ADForm implements EventListener } } // action_treeDeleteAll - /************************************************************************** - * Tree Maintenance List Item - */ - class ListItem + public ADForm getForm() { - /** - * ListItem - * @param ID - * @param Name - * @param Description - * @param summary - * @param ImageIndicator - */ - public ListItem (int ID, String Name, String Description, - boolean summary, String ImageIndicator) - { - id = ID; - name = Name; - description = Description; - isSummary = summary; - imageIndicator = ImageIndicator; - } // ListItem - - /** ID */ - public int id; - /** Name */ - public String name; - /** Description */ - public String description; - /** Summary */ - public boolean isSummary; - /** Indicator */ - public String imageIndicator; // Menu - Action - - /** - * To String - * @return String Representation - */ - public String toString () - { - String retValue = name; - if (description != null && description.length() > 0) - retValue += " (" + description + ")"; - return retValue; - } // toString - - } // ListItem + return form; + } } // VTreeMaintenance diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTrxMaterial.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTrxMaterial.java index 52e1cf80e0..e1db6d8939 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTrxMaterial.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WTrxMaterial.java @@ -16,9 +16,6 @@ *****************************************************************************/ package org.adempiere.webui.apps.form; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Timestamp; import java.util.Properties; import java.util.logging.Level; @@ -40,17 +37,14 @@ import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.panel.ADForm; import org.adempiere.webui.panel.ADTabpanel; +import org.adempiere.webui.panel.CustomForm; +import org.adempiere.webui.panel.ICustomForm; import org.adempiere.webui.panel.StatusBarPanel; import org.adempiere.webui.session.SessionManager; -import org.compiere.model.GridTab; -import org.compiere.model.GridWindow; -import org.compiere.model.GridWindowVO; +import org.compiere.apps.form.TrxMaterial; import org.compiere.model.MLocatorLookup; import org.compiere.model.MLookup; import org.compiere.model.MLookupFactory; -import org.compiere.model.MQuery; -import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -68,23 +62,19 @@ import org.zkoss.zul.Separator; * @author Jorg Janke * @version $Id: VTrxMaterial.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ */ -public class WTrxMaterial extends ADForm - implements EventListener, ValueChangeListener +public class WTrxMaterial extends TrxMaterial + implements ICustomForm, EventListener, ValueChangeListener { /** * */ private static final long serialVersionUID = -2141669182129214237L; + + private CustomForm form = new CustomForm(); + /** GridController */ private ADTabpanel m_gridController = null; - /** MWindow */ - private GridWindow m_mWindow = null; - /** MTab pointer */ - private GridTab m_mTab = null; - private MQuery m_staticQuery = null; - /** Logger */ - private static CLogger log = CLogger.getCLogger(WTrxMaterial.class); // private Panel mainPanel = new Panel(); private Borderlayout mainLayout = new Borderlayout(); @@ -110,7 +100,7 @@ public class WTrxMaterial extends ADForm /** * Initialize Panel */ - protected void initForm() + public WTrxMaterial() { log.info(""); try @@ -131,7 +121,7 @@ public class WTrxMaterial extends ADForm */ void zkInit() throws Exception { - this.appendChild(mainPanel); + form.appendChild(mainPanel); mainPanel.setStyle("width: 99%; height: 100%; border: none; padding: 0; margin: 0"); mainPanel.appendChild(mainLayout); mainLayout.setWidth("100%"); @@ -213,16 +203,9 @@ public class WTrxMaterial extends ADForm */ private void dynInit() { - m_staticQuery = new MQuery(); - m_staticQuery.addRestriction("AD_Client_ID", MQuery.EQUAL, Env.getAD_Client_ID(Env.getCtx())); - int AD_Window_ID = 223; // Hardcoded - GridWindowVO wVO = AEnv.getMWindowVO (m_WindowNo, AD_Window_ID, 0); - if (wVO == null) - return; - m_mWindow = new GridWindow (wVO); - m_mTab = m_mWindow.getTab(0); - m_mWindow.initTab(0); + super.dynInit(statusBar); // + m_gridController = new ADTabpanel(); m_gridController.init(null, m_WindowNo, m_mTab, m_mWindow); if (!m_gridController.isGridView()) @@ -231,11 +214,6 @@ public class WTrxMaterial extends ADForm mainLayout.appendChild(center); center.setFlex(true); center.appendChild(m_gridController); - // - m_mTab.setQuery(MQuery.getEqualQuery("1", "2")); - m_mTab.query(false); - statusBar.setStatusLine(" ", false); - statusBar.setStatusDB(" "); } // dynInit @@ -281,132 +259,30 @@ public class WTrxMaterial extends ADForm */ private void refresh() { - /** - * Create Where Clause - */ - MQuery query = m_staticQuery.deepCopy(); - // Organization - Object value = orgField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("AD_Org_ID", MQuery.EQUAL, value); - // Locator - value = locatorField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("M_Locator_ID", MQuery.EQUAL, value); - // Product - value = productField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("M_Product_ID", MQuery.EQUAL, value); - // MovementType - value = mtypeField.getValue(); - if (value != null && value.toString().length() > 0) - query.addRestriction("MovementType", MQuery.EQUAL, value); - // DateFrom - Timestamp ts = (Timestamp)dateFField.getValue(); - if (ts != null) - query.addRestriction("TRUNC(MovementDate)", MQuery.GREATER_EQUAL, ts); - // DateTO - ts = (Timestamp)dateTField.getValue(); - if (ts != null) - query.addRestriction("TRUNC(MovementDate)", MQuery.LESS_EQUAL, ts); - log.info( "VTrxMaterial.refresh query=" + query.toString()); - - /** - * Refresh/Requery - */ - statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "StartSearch"), false); - // - m_mTab.setQuery(query); - m_mTab.query(false); - // - int no = m_mTab.getRowCount(); - statusBar.setStatusLine(" ", false); - statusBar.setStatusDB(Integer.toString(no)); + Object organization = orgField.getValue(); + Object locator = locatorField.getValue(); + Object product = productField.getValue(); + Object movementType = mtypeField.getValue(); + Timestamp movementDateFrom = (Timestamp)dateFField.getValue(); + Timestamp movementDateTo = (Timestamp)dateTField.getValue(); + + refresh(organization, locator, product, movementType, movementDateFrom, movementDateTo, statusBar); } // refresh /** * Zoom */ - private void zoom() + public void zoom() { - log.info(""); - // - int AD_Window_ID = 0; - String ColumnName = null; - String SQL = null; - // - int lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_InOutLine_ID"); - if (lineID != 0) - { - log.fine("M_InOutLine_ID=" + lineID); - if (Env.getContext(Env.getCtx(), m_WindowNo, "MovementType").startsWith("C")) - AD_Window_ID = 169; // Customer - else - AD_Window_ID = 184; // Vendor - ColumnName = "M_InOut_ID"; - SQL = "SELECT M_InOut_ID FROM M_InOutLine WHERE M_InOutLine_ID=?"; - } - else - { - lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_InventoryLine_ID"); - if (lineID != 0) - { - log.fine("M_InventoryLine_ID=" + lineID); - AD_Window_ID = 168; - ColumnName = "M_Inventory_ID"; - SQL = "SELECT M_Inventory_ID FROM M_InventoryLine WHERE M_InventoryLine_ID=?"; - } - else - { - lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_MovementLine_ID"); - if (lineID != 0) - { - log.fine("M_MovementLine_ID=" + lineID); - AD_Window_ID = 170; - ColumnName = "M_Movement_ID"; - SQL = "SELECT M_Movement_ID FROM M_MovementLine WHERE M_MovementLine_ID=?"; - } - else - { - lineID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, "M_ProductionLine_ID"); - if (lineID != 0) - { - log.fine("M_ProductionLine_ID=" + lineID); - AD_Window_ID = 191; - ColumnName = "M_Production_ID"; - SQL = "SELECT M_Production_ID FROM M_ProductionLine WHERE M_ProductionLine_ID=?"; - } - else - log.fine("Not found WindowNo=" + m_WindowNo); - } - } - } - if (AD_Window_ID == 0) - return; - - // Get Parent ID - int parentID = 0; - try - { - PreparedStatement pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, lineID); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - parentID = rs.getInt(1); - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, SQL, e); - } - MQuery query = MQuery.getEqualQuery(ColumnName, parentID); - log.config("AD_Window_ID=" + AD_Window_ID + " - " + query); - if (parentID == 0) - log.log(Level.SEVERE, "No ParentValue - " + SQL + " - " + lineID); + super.zoom(); // Zoom AEnv.zoom(AD_Window_ID, query); } // zoom + + public ADForm getForm() + { + return form; + } } // VTrxMaterial diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADForm.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADForm.java index 800d685576..8120080c55 100755 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADForm.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADForm.java @@ -25,7 +25,6 @@ import org.adempiere.webui.component.Window; import org.adempiere.webui.exception.ApplicationException; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.util.ADClassNameMap; -import org.compiere.apps.form.GenForm; import org.compiere.model.MForm; import org.compiere.process.ProcessInfo; import org.compiere.util.CLogger; @@ -63,6 +62,8 @@ public abstract class ADForm extends Window implements EventListener private ProcessInfo m_pi; + + private ICustomForm m_customForm; /** * Constructor @@ -228,6 +229,7 @@ public abstract class ADForm extends Window implements EventListener if(o instanceof ADForm) { form = (ADForm)o; + form.setICustomForm(customForm); form.init(adFormID, name); return form; } @@ -275,4 +277,14 @@ public abstract class ADForm extends Window implements EventListener { return m_pi; } + + public void setICustomForm(ICustomForm customForm) + { + m_customForm = customForm; + } + + public ICustomForm getICustomForm() + { + return m_customForm; + } }