Refactor custom form - ID: 2787613
This commit is contained in:
parent
757d689a32
commit
4629e3dd26
|
@ -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
|
||||||
|
}
|
|
@ -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<KeyNamePair> getPaySelectionData()
|
||||||
|
{
|
||||||
|
ArrayList<KeyNamePair> data = new ArrayList<KeyNamePair>();
|
||||||
|
|
||||||
|
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<ValueNamePair> loadPaymentRule(int C_PaySelection_ID)
|
||||||
|
{
|
||||||
|
ArrayList<ValueNamePair> data = new ArrayList<ValueNamePair>();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
}
|
|
@ -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<BankInfo> getBankAccountData()
|
||||||
|
{
|
||||||
|
ArrayList<BankInfo> data = new ArrayList<BankInfo>();
|
||||||
|
//
|
||||||
|
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<KeyNamePair> getBPartnerData()
|
||||||
|
{
|
||||||
|
ArrayList<KeyNamePair> data = new ArrayList<KeyNamePair>();
|
||||||
|
|
||||||
|
// 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<KeyNamePair> getDocTypeData()
|
||||||
|
{
|
||||||
|
ArrayList<KeyNamePair> data = new ArrayList<KeyNamePair>();
|
||||||
|
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<ValueNamePair> getPaymentRuleData(BankInfo bi)
|
||||||
|
{
|
||||||
|
if (bi == null)
|
||||||
|
return null;
|
||||||
|
m_bankBalance = bi.Balance;
|
||||||
|
|
||||||
|
ArrayList<ValueNamePair> data = new ArrayList<ValueNamePair>();
|
||||||
|
|
||||||
|
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
|
|
@ -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<ListItem> getTreeItemData()
|
||||||
|
{
|
||||||
|
ArrayList<ListItem> data = new ArrayList<ListItem>();
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -22,26 +22,17 @@ import java.awt.Font;
|
||||||
import java.awt.GridLayout;
|
import java.awt.GridLayout;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.compiere.apps.ADialog;
|
import org.compiere.apps.ADialog;
|
||||||
import org.compiere.apps.ConfirmPanel;
|
import org.compiere.apps.ConfirmPanel;
|
||||||
import org.compiere.grid.ed.VLookup;
|
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.MLookupFactory;
|
||||||
import org.compiere.model.MPayment;
|
|
||||||
import org.compiere.model.X_M_Cost;
|
|
||||||
import org.compiere.swing.CLabel;
|
import org.compiere.swing.CLabel;
|
||||||
import org.compiere.swing.CPanel;
|
import org.compiere.swing.CPanel;
|
||||||
import org.compiere.util.CLogger;
|
|
||||||
import org.compiere.util.DB;
|
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Trx;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Merge Dialog.
|
* Merge Dialog.
|
||||||
|
@ -50,55 +41,21 @@ import org.compiere.util.Trx;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VMerge.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
* @version $Id: VMerge.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
||||||
*/
|
*/
|
||||||
public class VMerge extends CPanel
|
public class VMerge extends Merge implements FormPanel, ActionListener
|
||||||
implements FormPanel, ActionListener
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 149783846292562740L;
|
private static final long serialVersionUID = 149783846292562740L;
|
||||||
/** Window No */
|
|
||||||
private int m_WindowNo = 0;
|
private CPanel panel = new CPanel();
|
||||||
|
|
||||||
/** FormFrame */
|
/** FormFrame */
|
||||||
private FormFrame m_frame;
|
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 CLabel[] m_label = null;
|
||||||
private VLookup[] m_from = null;
|
private VLookup[] m_from = null;
|
||||||
private VLookup[] m_to = null;
|
private VLookup[] m_to = null;
|
||||||
private String[] m_deleteTables = null;
|
|
||||||
|
|
||||||
|
|
||||||
private BorderLayout mainLayout = new BorderLayout();
|
private BorderLayout mainLayout = new BorderLayout();
|
||||||
private CPanel CenterPanel = new CPanel();
|
private CPanel CenterPanel = new CPanel();
|
||||||
|
@ -121,7 +78,7 @@ public class VMerge extends CPanel
|
||||||
{
|
{
|
||||||
preInit();
|
preInit();
|
||||||
jbInit ();
|
jbInit ();
|
||||||
frame.getContentPane().add(this, BorderLayout.CENTER);
|
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
// frame.getContentPane().add(statusBar, BorderLayout.SOUTH);
|
// frame.getContentPane().add(statusBar, BorderLayout.SOUTH);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -133,14 +90,14 @@ public class VMerge extends CPanel
|
||||||
/**
|
/**
|
||||||
* Pre Init
|
* Pre Init
|
||||||
*/
|
*/
|
||||||
private void preInit()
|
public void preInit()
|
||||||
{
|
{
|
||||||
int count = 4; // ** Update **
|
int count = 4; // ** Update **
|
||||||
m_columnName = new String[count];
|
m_columnName = new String[count];
|
||||||
m_label = new CLabel[count];
|
m_label = new CLabel[count];
|
||||||
m_from = new VLookup[count];
|
m_from = new VLookup[count];
|
||||||
m_to = new VLookup[count];
|
m_to = new VLookup[count];
|
||||||
|
|
||||||
// ** Update **
|
// ** Update **
|
||||||
preInit (0, 2163, DisplayType.TableDir, AD_ORG_ID); // C_Order.AD_Org_ID
|
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
|
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
|
void jbInit () throws Exception
|
||||||
{
|
{
|
||||||
this.setLayout (mainLayout);
|
panel.setLayout (mainLayout);
|
||||||
mainLayout.setHgap (5);
|
mainLayout.setHgap (5);
|
||||||
mainLayout.setVgap (5);
|
mainLayout.setVgap (5);
|
||||||
//
|
//
|
||||||
this.add (confirmPanel, BorderLayout.SOUTH);
|
panel.add (confirmPanel, BorderLayout.SOUTH);
|
||||||
confirmPanel.addActionListener(this);
|
confirmPanel.addActionListener(this);
|
||||||
//
|
//
|
||||||
centerLayout.setHgap (5);
|
centerLayout.setHgap (5);
|
||||||
|
@ -185,7 +142,7 @@ public class VMerge extends CPanel
|
||||||
centerLayout.setRows (m_label.length+1);
|
centerLayout.setRows (m_label.length+1);
|
||||||
//
|
//
|
||||||
CenterPanel.setLayout (centerLayout);
|
CenterPanel.setLayout (centerLayout);
|
||||||
this.add (CenterPanel, BorderLayout.CENTER);
|
panel.add (CenterPanel, BorderLayout.CENTER);
|
||||||
CenterPanel.add (new CLabel(), null);
|
CenterPanel.add (new CLabel(), null);
|
||||||
CenterPanel.add (mergeFromLabel, null);
|
CenterPanel.add (mergeFromLabel, null);
|
||||||
CenterPanel.add (mergeToLabel, null);
|
CenterPanel.add (mergeToLabel, null);
|
||||||
|
@ -227,12 +184,13 @@ public class VMerge extends CPanel
|
||||||
dispose();
|
dispose();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//
|
|
||||||
String columnName = null;
|
String columnName = null;
|
||||||
String from_Info = null;
|
String from_Info = null;
|
||||||
String to_Info = null;
|
String to_Info = null;
|
||||||
int from_ID = 0;
|
int from_ID = 0;
|
||||||
int to_ID = 0;
|
int to_ID = 0;
|
||||||
|
|
||||||
// get first merge pair
|
// get first merge pair
|
||||||
for (int i = 0; (i < m_columnName.length && from_ID == 0 && to_ID == 0); i++)
|
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
|
String msg = Msg.getMsg(Env.getCtx(), "MergeFrom") + " = " + from_Info
|
||||||
+ "\n" + Msg.getMsg(Env.getCtx(), "MergeTo") + " = " + to_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;
|
return;
|
||||||
|
|
||||||
// ** Update **
|
updateDeleteTable(columnName);
|
||||||
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;
|
|
||||||
|
|
||||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
confirmPanel.getOKButton().setEnabled(false);
|
confirmPanel.getOKButton().setEnabled(false);
|
||||||
//
|
//
|
||||||
boolean success = merge (columnName, from_ID, to_ID);
|
boolean success = merge (columnName, from_ID, to_ID);
|
||||||
postMerge(columnName, to_ID);
|
postMerge(columnName, to_ID);
|
||||||
//
|
//
|
||||||
confirmPanel.getOKButton().setEnabled(true);
|
confirmPanel.getOKButton().setEnabled(true);
|
||||||
setCursor(Cursor.getDefaultCursor());
|
panel.setCursor(Cursor.getDefaultCursor());
|
||||||
//
|
//
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
ADialog.info (m_WindowNo, this, "MergeSuccess",
|
ADialog.info (m_WindowNo, panel, "MergeSuccess",
|
||||||
msg + " #" + m_totalCount);
|
msg + " #" + m_totalCount);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ADialog.error(m_WindowNo, this, "MergeError",
|
ADialog.error(m_WindowNo, panel, "MergeError",
|
||||||
m_errorLog.toString());
|
m_errorLog.toString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dispose();
|
dispose();
|
||||||
} // actionPerformed
|
} // 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
|
} // VMerge
|
||||||
|
|
|
@ -24,9 +24,7 @@ import java.awt.GridBagLayout;
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.sql.PreparedStatement;
|
import java.util.ArrayList;
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
@ -35,8 +33,6 @@ import javax.swing.JFileChooser;
|
||||||
import org.compiere.apps.ADialog;
|
import org.compiere.apps.ADialog;
|
||||||
import org.compiere.apps.ConfirmPanel;
|
import org.compiere.apps.ConfirmPanel;
|
||||||
import org.compiere.grid.ed.VNumber;
|
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.MPaySelectionCheck;
|
||||||
import org.compiere.model.MPaymentBatch;
|
import org.compiere.model.MPaymentBatch;
|
||||||
import org.compiere.plaf.CompiereColor;
|
import org.compiere.plaf.CompiereColor;
|
||||||
|
@ -45,13 +41,11 @@ import org.compiere.print.ReportEngine;
|
||||||
import org.compiere.swing.CComboBox;
|
import org.compiere.swing.CComboBox;
|
||||||
import org.compiere.swing.CLabel;
|
import org.compiere.swing.CLabel;
|
||||||
import org.compiere.swing.CPanel;
|
import org.compiere.swing.CPanel;
|
||||||
import org.compiere.util.CLogger;
|
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Ini;
|
import org.compiere.util.Ini;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Language;
|
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.ValueNamePair;
|
import org.compiere.util.ValueNamePair;
|
||||||
|
|
||||||
|
@ -61,13 +55,14 @@ import org.compiere.util.ValueNamePair;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VPayPrint.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
* @version $Id: VPayPrint.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
||||||
*/
|
*/
|
||||||
public class VPayPrint extends CPanel
|
public class VPayPrint extends PayPrint implements FormPanel, ActionListener
|
||||||
implements FormPanel, ActionListener
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -6359854263967310497L;
|
private static final long serialVersionUID = -6359854263967310497L;
|
||||||
|
|
||||||
|
private CPanel panel = new CPanel();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize Panel
|
* Initialize Panel
|
||||||
|
@ -92,19 +87,9 @@ public class VPayPrint extends CPanel
|
||||||
}
|
}
|
||||||
} // init
|
} // init
|
||||||
|
|
||||||
/** Window No */
|
|
||||||
private int m_WindowNo = 0;
|
|
||||||
/** FormFrame */
|
/** FormFrame */
|
||||||
private FormFrame m_frame;
|
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
|
// Static Variables
|
||||||
private CPanel centerPanel = new CPanel();
|
private CPanel centerPanel = new CPanel();
|
||||||
|
@ -136,7 +121,7 @@ public class VPayPrint extends CPanel
|
||||||
*/
|
*/
|
||||||
private void jbInit() throws Exception
|
private void jbInit() throws Exception
|
||||||
{
|
{
|
||||||
CompiereColor.setBackground(this);
|
CompiereColor.setBackground(panel);
|
||||||
//
|
//
|
||||||
southPanel.setLayout(southLayout);
|
southPanel.setLayout(southLayout);
|
||||||
southLayout.setAlignment(FlowLayout.RIGHT);
|
southLayout.setAlignment(FlowLayout.RIGHT);
|
||||||
|
@ -207,33 +192,17 @@ public class VPayPrint extends CPanel
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
log.config("");
|
ArrayList<KeyNamePair> data = getPaySelectionData();
|
||||||
int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx());
|
for(KeyNamePair pp : data)
|
||||||
|
fPaySelect.addItem(pp);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
if (fPaySelect.getItemCount() == 0)
|
if (fPaySelect.getItemCount() == 0)
|
||||||
ADialog.info(m_WindowNo, this, "VPayPrintNoRecords");
|
ADialog.info(m_WindowNo, panel, "VPayPrintNoRecords");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fPaySelect.setSelectedIndex(0);
|
||||||
|
loadPaySelectInfo();
|
||||||
|
}
|
||||||
} // dynInit
|
} // dynInit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -297,44 +266,14 @@ public class VPayPrint extends CPanel
|
||||||
log.info( "VPayPrint.loadPaySelectInfo");
|
log.info( "VPayPrint.loadPaySelectInfo");
|
||||||
if (fPaySelect.getSelectedIndex() == -1)
|
if (fPaySelect.getSelectedIndex() == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// load Banks from PaySelectLine
|
|
||||||
int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey();
|
int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey();
|
||||||
m_C_BankAccount_ID = -1;
|
loadPaySelectInfo(C_PaySelection_ID);
|
||||||
String sql = "SELECT ps.C_BankAccount_ID, b.Name || ' ' || ba.AccountNo," // 1..2
|
|
||||||
+ " c.ISO_Code, CurrentBalance " // 3..4
|
fBank.setText(bank);
|
||||||
+ "FROM C_PaySelection ps"
|
fCurrency.setText(currency);
|
||||||
+ " INNER JOIN C_BankAccount ba ON (ps.C_BankAccount_ID=ba.C_BankAccount_ID)"
|
fBalance.setValue(balance);
|
||||||
+ " 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);
|
|
||||||
}
|
|
||||||
loadPaymentRule();
|
loadPaymentRule();
|
||||||
} // loadPaySelectInfo
|
} // loadPaySelectInfo
|
||||||
|
|
||||||
|
@ -346,37 +285,17 @@ public class VPayPrint extends CPanel
|
||||||
log.info("");
|
log.info("");
|
||||||
if (m_C_BankAccount_ID == -1)
|
if (m_C_BankAccount_ID == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// load PaymentRule for Bank
|
|
||||||
int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey();
|
|
||||||
fPaymentRule.removeAllItems();
|
fPaymentRule.removeAllItems();
|
||||||
int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule");
|
|
||||||
Language language = Language.getLanguage(Env.getAD_Language(Env.getCtx()));
|
int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey();
|
||||||
MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID);
|
ArrayList<ValueNamePair> data = loadPaymentRule(C_PaySelection_ID);
|
||||||
String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY"))
|
for(ValueNamePair pp : data)
|
||||||
+ " AND " + info.KeyColumn
|
fPaymentRule.addItem(pp);
|
||||||
+ " IN (SELECT PaymentRule FROM C_PaySelectionCheck WHERE C_PaySelection_ID=?) "
|
|
||||||
+ info.Query.substring(info.Query.indexOf(" ORDER BY"));
|
if (fPaymentRule.getItemCount() > 0)
|
||||||
try
|
fPaymentRule.setSelectedIndex(0);
|
||||||
{
|
|
||||||
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);
|
|
||||||
loadPaymentRuleInfo();
|
loadPaymentRuleInfo();
|
||||||
} // loadPaymentRule
|
} // loadPaymentRule
|
||||||
|
|
||||||
|
@ -393,54 +312,20 @@ public class VPayPrint extends CPanel
|
||||||
|
|
||||||
log.info("PaymentRule=" + PaymentRule);
|
log.info("PaymentRule=" + PaymentRule);
|
||||||
fNoPayments.setText(" ");
|
fNoPayments.setText(" ");
|
||||||
|
|
||||||
int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey();
|
int C_PaySelection_ID = ((KeyNamePair)fPaySelect.getSelectedItem()).getKey();
|
||||||
String sql = "SELECT COUNT(*) "
|
String msg = loadPaymentRuleInfo(C_PaySelection_ID, PaymentRule);
|
||||||
+ "FROM C_PaySelectionCheck "
|
|
||||||
+ "WHERE C_PaySelection_ID=?";
|
if(noPayments != null)
|
||||||
try
|
fNoPayments.setText(noPayments);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
bProcess.setEnabled(PaymentRule.equals("T"));
|
bProcess.setEnabled(PaymentRule.equals("T"));
|
||||||
|
|
||||||
// DocumentNo
|
if(documentNo != null)
|
||||||
sql = "SELECT CurrentNext "
|
fDocumentNo.setValue(documentNo);
|
||||||
+ "FROM C_BankAccountDoc "
|
|
||||||
+ "WHERE C_BankAccount_ID=? AND PaymentRule=? AND IsActive='Y'";
|
if(msg != null && msg.length() > 0)
|
||||||
try
|
ADialog.error(m_WindowNo, panel, msg);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
} // loadPaymentRuleInfo
|
} // loadPaymentRuleInfo
|
||||||
|
|
||||||
|
|
||||||
|
@ -460,16 +345,16 @@ public class VPayPrint extends CPanel
|
||||||
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
fc.setMultiSelectionEnabled(false);
|
fc.setMultiSelectionEnabled(false);
|
||||||
fc.setSelectedFile(new java.io.File("paymentExport.txt"));
|
fc.setSelectedFile(new java.io.File("paymentExport.txt"));
|
||||||
if (fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
|
if (fc.showSaveDialog(panel) != JFileChooser.APPROVE_OPTION)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Create File
|
// Create File
|
||||||
int no = MPaySelectionCheck.exportToFile(m_checks, fc.getSelectedFile());
|
int no = MPaySelectionCheck.exportToFile(m_checks, fc.getSelectedFile());
|
||||||
ADialog.info(m_WindowNo, this, "Saved",
|
ADialog.info(m_WindowNo, panel, "Saved",
|
||||||
fc.getSelectedFile().getAbsolutePath() + "\n"
|
fc.getSelectedFile().getAbsolutePath() + "\n"
|
||||||
+ Msg.getMsg(Env.getCtx(), "NoOfLines") + "=" + no);
|
+ Msg.getMsg(Env.getCtx(), "NoOfLines") + "=" + no);
|
||||||
|
|
||||||
if (ADialog.ask(m_WindowNo, this, "VPayPrintSuccess?"))
|
if (ADialog.ask(m_WindowNo, panel, "VPayPrintSuccess?"))
|
||||||
{
|
{
|
||||||
// int lastDocumentNo =
|
// int lastDocumentNo =
|
||||||
MPaySelectionCheck.confirmPrint (m_checks, m_batch);
|
MPaySelectionCheck.confirmPrint (m_checks, m_batch);
|
||||||
|
@ -500,7 +385,7 @@ public class VPayPrint extends CPanel
|
||||||
if (!getChecks(PaymentRule))
|
if (!getChecks(PaymentRule))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
|
|
||||||
boolean somethingPrinted = false;
|
boolean somethingPrinted = false;
|
||||||
boolean directPrint = !Ini.isPropertyBool(Ini.P_PRINTPREVIEW);
|
boolean directPrint = !Ini.isPropertyBool(Ini.P_PRINTPREVIEW);
|
||||||
|
@ -509,13 +394,13 @@ public class VPayPrint extends CPanel
|
||||||
{
|
{
|
||||||
MPaySelectionCheck check = m_checks[i];
|
MPaySelectionCheck check = m_checks[i];
|
||||||
// ReportCtrl will check BankAccountDoc for PrintFormat
|
// 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)
|
if (!somethingPrinted && ok)
|
||||||
somethingPrinted = true;
|
somethingPrinted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Confirm Print and Update BankAccountDoc
|
// 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);
|
int lastDocumentNo = MPaySelectionCheck.confirmPrint (m_checks, m_batch);
|
||||||
if (lastDocumentNo != 0)
|
if (lastDocumentNo != 0)
|
||||||
|
@ -528,16 +413,16 @@ public class VPayPrint extends CPanel
|
||||||
}
|
}
|
||||||
} // confirm
|
} // confirm
|
||||||
|
|
||||||
if (ADialog.ask(m_WindowNo, this, "VPayPrintPrintRemittance"))
|
if (ADialog.ask(m_WindowNo, panel, "VPayPrintPrintRemittance"))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_checks.length; i++)
|
for (int i = 0; i < m_checks.length; i++)
|
||||||
{
|
{
|
||||||
MPaySelectionCheck check = m_checks[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
|
} // remittance
|
||||||
|
|
||||||
this.setCursor(Cursor.getDefaultCursor());
|
panel.setCursor(Cursor.getDefaultCursor());
|
||||||
dispose();
|
dispose();
|
||||||
} // cmd_print
|
} // cmd_print
|
||||||
|
|
||||||
|
@ -553,7 +438,7 @@ public class VPayPrint extends CPanel
|
||||||
if (fPaySelect.getSelectedIndex() == -1 || m_C_BankAccount_ID == -1
|
if (fPaySelect.getSelectedIndex() == -1 || m_C_BankAccount_ID == -1
|
||||||
|| fPaymentRule.getSelectedIndex() == -1 || fDocumentNo.getValue() == null)
|
|| 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)");
|
"(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + "=0)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -564,16 +449,16 @@ public class VPayPrint extends CPanel
|
||||||
|
|
||||||
log.config("C_PaySelection_ID=" + C_PaySelection_ID + ", PaymentRule=" + PaymentRule + ", DocumentNo=" + startDocumentNo);
|
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
|
// get Slecetions
|
||||||
m_checks = MPaySelectionCheck.get(C_PaySelection_ID, PaymentRule, startDocumentNo, null);
|
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)
|
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");
|
"(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + " #0");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,13 +25,8 @@ import java.awt.GridBagLayout;
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
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.sql.Timestamp;
|
||||||
import java.text.DecimalFormat;
|
import java.util.ArrayList;
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
@ -43,33 +38,23 @@ import javax.swing.event.TableModelListener;
|
||||||
import org.compiere.apps.ADialog;
|
import org.compiere.apps.ADialog;
|
||||||
import org.compiere.apps.AEnv;
|
import org.compiere.apps.AEnv;
|
||||||
import org.compiere.apps.ConfirmPanel;
|
import org.compiere.apps.ConfirmPanel;
|
||||||
|
import org.compiere.apps.IProcessParameter;
|
||||||
import org.compiere.apps.ProcessCtl;
|
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.VCheckBox;
|
||||||
import org.compiere.grid.ed.VComboBox;
|
import org.compiere.grid.ed.VComboBox;
|
||||||
import org.compiere.grid.ed.VDate;
|
import org.compiere.grid.ed.VDate;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
|
||||||
import org.compiere.minigrid.IDColumn;
|
|
||||||
import org.compiere.minigrid.MiniTable;
|
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.model.X_C_PaySelection;
|
||||||
import org.compiere.plaf.CompiereColor;
|
import org.compiere.plaf.CompiereColor;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.swing.CLabel;
|
import org.compiere.swing.CLabel;
|
||||||
import org.compiere.swing.CPanel;
|
import org.compiere.swing.CPanel;
|
||||||
import org.compiere.util.ASyncProcess;
|
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.Env;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Language;
|
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Trx;
|
|
||||||
import org.compiere.util.ValueNamePair;
|
import org.compiere.util.ValueNamePair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -81,8 +66,7 @@ import org.compiere.util.ValueNamePair;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VPaySelect.java,v 1.2 2008/07/11 08:20:12 cruiz Exp $
|
* @version $Id: VPaySelect.java,v 1.2 2008/07/11 08:20:12 cruiz Exp $
|
||||||
*/
|
*/
|
||||||
public class VPaySelect extends CPanel
|
public class VPaySelect extends PaySelect implements FormPanel, ActionListener, TableModelListener, ASyncProcess
|
||||||
implements FormPanel, ActionListener, TableModelListener, ASyncProcess
|
|
||||||
{
|
{
|
||||||
/** @todo withholding */
|
/** @todo withholding */
|
||||||
|
|
||||||
|
@ -90,6 +74,8 @@ public class VPaySelect extends CPanel
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 2872767371244295934L;
|
private static final long serialVersionUID = 2872767371244295934L;
|
||||||
|
|
||||||
|
private CPanel panel = new CPanel();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize Panel
|
* Initialize Panel
|
||||||
|
@ -113,29 +99,10 @@ public class VPaySelect extends CPanel
|
||||||
log.log(Level.SEVERE, "", e);
|
log.log(Level.SEVERE, "", e);
|
||||||
}
|
}
|
||||||
} // init
|
} // init
|
||||||
|
|
||||||
/** Window No */
|
|
||||||
private int m_WindowNo = 0;
|
|
||||||
/** FormFrame */
|
/** FormFrame */
|
||||||
private FormFrame m_frame;
|
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 CPanel mainPanel = new CPanel();
|
||||||
private BorderLayout mainLayout = new BorderLayout();
|
private BorderLayout mainLayout = new BorderLayout();
|
||||||
|
@ -171,7 +138,7 @@ public class VPaySelect extends CPanel
|
||||||
*/
|
*/
|
||||||
private void jbInit() throws Exception
|
private void jbInit() throws Exception
|
||||||
{
|
{
|
||||||
CompiereColor.setBackground(this);
|
CompiereColor.setBackground(panel);
|
||||||
//
|
//
|
||||||
mainPanel.setLayout(mainLayout);
|
mainPanel.setLayout(mainLayout);
|
||||||
parameterPanel.setLayout(parameterLayout);
|
parameterPanel.setLayout(parameterLayout);
|
||||||
|
@ -254,157 +221,30 @@ public class VPaySelect extends CPanel
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
Properties ctx = Env.getCtx();
|
ArrayList<BankInfo> bankAccountData = getBankAccountData();
|
||||||
//
|
for(BankInfo bi : bankAccountData)
|
||||||
m_AD_Client_ID = Env.getAD_Client_ID(Env.getCtx());
|
fieldBankAccount.addItem(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.addItem(bi);
|
|
||||||
}
|
|
||||||
rs.close();
|
|
||||||
pstmt.close();
|
|
||||||
}
|
|
||||||
catch (SQLException e)
|
|
||||||
{
|
|
||||||
log.log(Level.SEVERE, sql, e);
|
|
||||||
}
|
|
||||||
if (fieldBankAccount.getItemCount() == 0)
|
if (fieldBankAccount.getItemCount() == 0)
|
||||||
ADialog.error(m_WindowNo, this, "VPaySelectNoBank");
|
ADialog.error(m_WindowNo, panel, "VPaySelectNoBank");
|
||||||
else
|
else
|
||||||
fieldBankAccount.setSelectedIndex(0);
|
fieldBankAccount.setSelectedIndex(0);
|
||||||
|
|
||||||
// Optional BusinessPartner with unpaid AP Invoices
|
ArrayList<KeyNamePair> bpartnerData = getBPartnerData();
|
||||||
KeyNamePair pp = new KeyNamePair(0, "");
|
for(KeyNamePair pp : bpartnerData)
|
||||||
fieldBPartner.addItem(pp);
|
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);
|
|
||||||
}
|
|
||||||
fieldBPartner.setSelectedIndex(0);
|
fieldBPartner.setSelectedIndex(0);
|
||||||
|
|
||||||
/**Document type**/
|
ArrayList<KeyNamePair> docTypeData = getDocTypeData();
|
||||||
try
|
for(KeyNamePair pp : docTypeData)
|
||||||
{
|
fieldDtype.addItem(pp);
|
||||||
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",
|
prepareTable(miniTable);
|
||||||
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");
|
|
||||||
//
|
|
||||||
miniTable.getModel().addTableModelListener(this);
|
miniTable.getModel().addTableModelListener(this);
|
||||||
//
|
//
|
||||||
fieldPayDate.setMandatory(true);
|
fieldPayDate.setMandatory(true);
|
||||||
fieldPayDate.setValue(new Timestamp(System.currentTimeMillis()));
|
fieldPayDate.setValue(new Timestamp(System.currentTimeMillis()));
|
||||||
|
|
||||||
} // dynInit
|
} // dynInit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -417,37 +257,14 @@ public class VPaySelect extends CPanel
|
||||||
return;
|
return;
|
||||||
labelCurrency.setText(bi.Currency);
|
labelCurrency.setText(bi.Currency);
|
||||||
labelBalance.setText(m_format.format(bi.Balance));
|
labelBalance.setText(m_format.format(bi.Balance));
|
||||||
m_bankBalance = bi.Balance;
|
|
||||||
|
|
||||||
// PaymentRule
|
// PaymentRule
|
||||||
fieldPaymentRule.removeAllItems();
|
fieldPaymentRule.removeAllItems();
|
||||||
int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule");
|
|
||||||
Language language = Env.getLanguage(Env.getCtx());
|
ArrayList<ValueNamePair> paymentRuleData = getPaymentRuleData(bi);
|
||||||
MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID);
|
for(ValueNamePair vp : paymentRuleData)
|
||||||
String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY"))
|
fieldPaymentRule.addItem(vp);
|
||||||
+ " 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);
|
|
||||||
}
|
|
||||||
fieldPaymentRule.setSelectedIndex(0);
|
fieldPaymentRule.setSelectedIndex(0);
|
||||||
|
|
||||||
} // loadBankInfo
|
} // loadBankInfo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -455,70 +272,18 @@ public class VPaySelect extends CPanel
|
||||||
*/
|
*/
|
||||||
private void loadTableInfo()
|
private void loadTableInfo()
|
||||||
{
|
{
|
||||||
log.config("");
|
|
||||||
// not yet initialized
|
|
||||||
if (m_sql == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
String sql = m_sql;
|
|
||||||
// Parameters
|
|
||||||
Timestamp payDate = (Timestamp)fieldPayDate.getValue();
|
Timestamp payDate = (Timestamp)fieldPayDate.getValue();
|
||||||
miniTable.setColorCompare(payDate);
|
miniTable.setColorCompare(payDate);
|
||||||
log.config("PayDate=" + payDate);
|
log.config("PayDate=" + payDate);
|
||||||
|
|
||||||
BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem();
|
BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem();
|
||||||
//
|
|
||||||
String isSOTrx = "N";
|
ValueNamePair paymentRule = (ValueNamePair)fieldPaymentRule.getSelectedItem();
|
||||||
ValueNamePair vp = (ValueNamePair)fieldPaymentRule.getSelectedItem();
|
KeyNamePair bpartner = (KeyNamePair)fieldBPartner.getSelectedItem();
|
||||||
if (vp != null && X_C_Order.PAYMENTRULE_DirectDebit.equals(vp.getValue()))
|
KeyNamePair docType = (KeyNamePair)fieldDtype.getSelectedItem();
|
||||||
{
|
|
||||||
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";
|
|
||||||
|
|
||||||
log.finest(sql + " - C_Currency_ID=" + bi.C_Currency_ID + ", C_BPartner_ID=" + C_BPartner_ID + ", C_doctype_id=" + c_doctype_id );
|
loadTableInfo(bi, payDate, paymentRule, onlyDue.isSelected(), bpartner, docType, miniTable);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
calculateSelection();
|
calculateSelection();
|
||||||
} // loadTableInfo
|
} // loadTableInfo
|
||||||
|
|
||||||
|
@ -575,29 +340,7 @@ public class VPaySelect extends CPanel
|
||||||
*/
|
*/
|
||||||
public void calculateSelection()
|
public void calculateSelection()
|
||||||
{
|
{
|
||||||
m_noSelected = 0;
|
dataStatus.setText(calculateSelection(miniTable));
|
||||||
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());
|
|
||||||
//
|
//
|
||||||
bGenerate.setEnabled(m_noSelected != 0);
|
bGenerate.setEnabled(m_noSelected != 0);
|
||||||
} // calculateSelection
|
} // calculateSelection
|
||||||
|
@ -607,12 +350,6 @@ public class VPaySelect extends CPanel
|
||||||
*/
|
*/
|
||||||
private void generatePaySelect()
|
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);
|
miniTable.stopEditor(true);
|
||||||
if (miniTable.getRowCount() == 0)
|
if (miniTable.getRowCount() == 0)
|
||||||
return;
|
return;
|
||||||
|
@ -621,65 +358,29 @@ public class VPaySelect extends CPanel
|
||||||
if (m_noSelected == 0)
|
if (m_noSelected == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
String PaymentRule = ((ValueNamePair)fieldPaymentRule.getSelectedItem()).getValue();
|
String msg = generatePaySelect(miniTable, (ValueNamePair) fieldPaymentRule.getSelectedItem(),
|
||||||
|
fieldPayDate.getTimestamp(), (BankInfo)fieldBankAccount.getSelectedItem());
|
||||||
// Create Header
|
|
||||||
m_ps = new MPaySelection(Env.getCtx(), 0, trxName);
|
if(msg != null && msg.length() > 0)
|
||||||
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())
|
|
||||||
{
|
{
|
||||||
ADialog.error(m_WindowNo, this, "SaveError", Msg.translate(Env.getCtx(), "C_PaySelection_ID"));
|
ADialog.error(m_WindowNo, panel, "SaveError", msg);
|
||||||
m_ps = null;
|
|
||||||
return;
|
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
|
// 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;
|
return;
|
||||||
|
|
||||||
// Prepare Process
|
// Prepare Process
|
||||||
int AD_Proces_ID = 155; // C_PaySelection_CreatePayment
|
int AD_Proces_ID = 155; // C_PaySelection_CreatePayment
|
||||||
ProcessInfo pi = new ProcessInfo (m_frame.getTitle(), AD_Proces_ID,
|
ProcessInfo pi = new ProcessInfo (m_frame.getTitle(), AD_Proces_ID,
|
||||||
X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID());
|
X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID());
|
||||||
pi.setAD_User_ID (Env.getAD_User_ID(Env.getCtx()));
|
pi.setAD_User_ID (Env.getAD_User_ID(Env.getCtx()));
|
||||||
pi.setAD_Client_ID(Env.getAD_Client_ID(Env.getCtx()));
|
pi.setAD_Client_ID(Env.getAD_Client_ID(Env.getCtx()));
|
||||||
|
|
||||||
|
ProcessParameterPanel pp = new ProcessParameterPanel(m_WindowNo, pi);
|
||||||
// Execute Process
|
// 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);
|
// ProcessCtl worker = new ProcessCtl(this, pi, trx);
|
||||||
// worker.start(); // complete tasks in unlockUI
|
// worker.start(); // complete tasks in unlockUI
|
||||||
} // generatePaySelect
|
} // generatePaySelect
|
||||||
|
@ -691,7 +392,7 @@ public class VPaySelect extends CPanel
|
||||||
*/
|
*/
|
||||||
public void lockUI (ProcessInfo pi)
|
public void lockUI (ProcessInfo pi)
|
||||||
{
|
{
|
||||||
this.setEnabled(false);
|
panel.setEnabled(false);
|
||||||
m_isLocked = true;
|
m_isLocked = true;
|
||||||
} // lockUI
|
} // lockUI
|
||||||
|
|
||||||
|
@ -705,7 +406,7 @@ public class VPaySelect extends CPanel
|
||||||
// this.setEnabled(true);
|
// this.setEnabled(true);
|
||||||
// m_isLocked = false;
|
// m_isLocked = false;
|
||||||
// Ask to Print it // Window is disposed
|
// Ask to Print it // Window is disposed
|
||||||
if (!ADialog.ask(0, this, "VPaySelectPrint?", "(" + pi.getSummary() + ")"))
|
if (!ADialog.ask(0, panel, "VPaySelectPrint?", "(" + pi.getSummary() + ")"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Start PayPrint
|
// Start PayPrint
|
||||||
|
@ -720,7 +421,7 @@ public class VPaySelect extends CPanel
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
ff.pack();
|
ff.pack();
|
||||||
this.setVisible(false);
|
panel.setVisible(false);
|
||||||
AEnv.addToWindowManager(ff);
|
AEnv.addToWindowManager(ff);
|
||||||
AEnv.showCenterScreen(ff);
|
AEnv.showCenterScreen(ff);
|
||||||
this.dispose();
|
this.dispose();
|
||||||
|
@ -744,46 +445,4 @@ public class VPaySelect extends CPanel
|
||||||
{
|
{
|
||||||
log.config("-");
|
log.config("-");
|
||||||
} // executeASync
|
} // 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
|
} // VPaySelect
|
||||||
|
|
|
@ -22,8 +22,7 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.sql.PreparedStatement;
|
import java.util.ArrayList;
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import javax.swing.DefaultListModel;
|
import javax.swing.DefaultListModel;
|
||||||
|
@ -36,20 +35,13 @@ import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
import org.compiere.grid.tree.VTreePanel;
|
import org.compiere.grid.tree.VTreePanel;
|
||||||
import org.compiere.model.MRole;
|
|
||||||
import org.compiere.model.MTree;
|
import org.compiere.model.MTree;
|
||||||
import org.compiere.model.MTreeNode;
|
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.CButton;
|
||||||
import org.compiere.swing.CCheckBox;
|
import org.compiere.swing.CCheckBox;
|
||||||
import org.compiere.swing.CComboBox;
|
import org.compiere.swing.CComboBox;
|
||||||
import org.compiere.swing.CLabel;
|
import org.compiere.swing.CLabel;
|
||||||
import org.compiere.swing.CPanel;
|
import org.compiere.swing.CPanel;
|
||||||
import org.compiere.util.CLogger;
|
|
||||||
import org.compiere.util.DB;
|
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
@ -60,22 +52,18 @@ import org.compiere.util.Msg;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VTreeMaintenance.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
* @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
|
implements FormPanel, ActionListener, ListSelectionListener, PropertyChangeListener
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 3679450924195670486L;
|
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 BorderLayout mainLayout = new BorderLayout ();
|
||||||
private CPanel northPanel = new CPanel ();
|
private CPanel northPanel = new CPanel ();
|
||||||
|
@ -108,7 +96,7 @@ public class VTreeMaintenance extends CPanel
|
||||||
{
|
{
|
||||||
preInit();
|
preInit();
|
||||||
jbInit ();
|
jbInit ();
|
||||||
frame.getContentPane().add(this, BorderLayout.CENTER);
|
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
// frame.getContentPane().add(statusBar, BorderLayout.SOUTH);
|
// frame.getContentPane().add(statusBar, BorderLayout.SOUTH);
|
||||||
action_loadTree();
|
action_loadTree();
|
||||||
}
|
}
|
||||||
|
@ -123,10 +111,7 @@ public class VTreeMaintenance extends CPanel
|
||||||
*/
|
*/
|
||||||
private void preInit()
|
private void preInit()
|
||||||
{
|
{
|
||||||
KeyNamePair[] trees = DB.getKeyNamePairs(MRole.getDefault().addAccessSQL(
|
treeField = new CComboBox(getTreeData());
|
||||||
"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.addActionListener(this);
|
treeField.addActionListener(this);
|
||||||
//
|
//
|
||||||
centerTree = new VTreePanel (m_WindowNo, false, true);
|
centerTree = new VTreePanel (m_WindowNo, false, true);
|
||||||
|
@ -139,7 +124,7 @@ public class VTreeMaintenance extends CPanel
|
||||||
*/
|
*/
|
||||||
private void jbInit () throws Exception
|
private void jbInit () throws Exception
|
||||||
{
|
{
|
||||||
this.setLayout (mainLayout);
|
panel.setLayout (mainLayout);
|
||||||
treeLabel.setText (Msg.translate(Env.getCtx(), "AD_Tree_ID"));
|
treeLabel.setText (Msg.translate(Env.getCtx(), "AD_Tree_ID"));
|
||||||
cbAllNodes.setEnabled (false);
|
cbAllNodes.setEnabled (false);
|
||||||
cbAllNodes.setText (Msg.translate(Env.getCtx(), "IsAllNodes"));
|
cbAllNodes.setText (Msg.translate(Env.getCtx(), "IsAllNodes"));
|
||||||
|
@ -155,7 +140,7 @@ public class VTreeMaintenance extends CPanel
|
||||||
northPanel.setLayout (northLayout);
|
northPanel.setLayout (northLayout);
|
||||||
northLayout.setAlignment (FlowLayout.LEFT);
|
northLayout.setAlignment (FlowLayout.LEFT);
|
||||||
//
|
//
|
||||||
this.add (northPanel, BorderLayout.NORTH);
|
panel.add (northPanel, BorderLayout.NORTH);
|
||||||
northPanel.add (treeLabel, null);
|
northPanel.add (treeLabel, null);
|
||||||
northPanel.add (treeField, null);
|
northPanel.add (treeField, null);
|
||||||
northPanel.add (cbAllNodes, null);
|
northPanel.add (cbAllNodes, null);
|
||||||
|
@ -165,7 +150,7 @@ public class VTreeMaintenance extends CPanel
|
||||||
northPanel.add (bDelete, null);
|
northPanel.add (bDelete, null);
|
||||||
northPanel.add (bDeleteAll, null);
|
northPanel.add (bDeleteAll, null);
|
||||||
//
|
//
|
||||||
this.add (splitPane, BorderLayout.CENTER);
|
panel.add (splitPane, BorderLayout.CENTER);
|
||||||
splitPane.add (centerTree, JSplitPane.LEFT);
|
splitPane.add (centerTree, JSplitPane.LEFT);
|
||||||
splitPane.add (new JScrollPane(centerList), JSplitPane.RIGHT);
|
splitPane.add (new JScrollPane(centerList), JSplitPane.RIGHT);
|
||||||
centerList.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
|
centerList.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
@ -221,43 +206,13 @@ public class VTreeMaintenance extends CPanel
|
||||||
bDelete.setEnabled(!m_tree.isAllNodes());
|
bDelete.setEnabled(!m_tree.isAllNodes());
|
||||||
bDeleteAll.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
|
// List
|
||||||
DefaultListModel model = new DefaultListModel();
|
DefaultListModel model = new DefaultListModel();
|
||||||
String sql = "SELECT t." + columnNameX
|
ArrayList<ListItem> items = getTreeItemData();
|
||||||
+ "_ID,t.Name,t.Description,t.IsSummary,"
|
for(ListItem item : items)
|
||||||
+ actionColor
|
model.addElement(item);
|
||||||
+ " 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
|
// List
|
||||||
log.config("#" + model.getSize());
|
log.config("#" + model.getSize());
|
||||||
centerList.setModel(model);
|
centerList.setModel(model);
|
||||||
|
@ -319,27 +274,9 @@ public class VTreeMaintenance extends CPanel
|
||||||
{
|
{
|
||||||
centerTree.nodeChanged(true, item.id, item.name,
|
centerTree.nodeChanged(true, item.id, item.name,
|
||||||
item.description, item.isSummary, item.imageIndicator);
|
item.description, item.isSummary, item.imageIndicator);
|
||||||
|
|
||||||
// May cause Error if in tree
|
// May cause Error if in tree
|
||||||
if (m_tree.isProduct())
|
addNode(item);
|
||||||
{
|
|
||||||
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_treeAdd
|
||||||
|
|
||||||
|
@ -354,31 +291,8 @@ public class VTreeMaintenance extends CPanel
|
||||||
{
|
{
|
||||||
centerTree.nodeChanged(false, item.id, item.name,
|
centerTree.nodeChanged(false, item.id, item.name,
|
||||||
item.description, item.isSummary, item.imageIndicator);
|
item.description, item.isSummary, item.imageIndicator);
|
||||||
//
|
|
||||||
if (m_tree.isProduct())
|
deleteNode(item);
|
||||||
{
|
|
||||||
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
|
} // action_treeDelete
|
||||||
|
|
||||||
|
@ -413,54 +327,6 @@ public class VTreeMaintenance extends CPanel
|
||||||
ListItem item = (ListItem)model.getElementAt(index);
|
ListItem item = (ListItem)model.getElementAt(index);
|
||||||
action_treeDelete(item);
|
action_treeDelete(item);
|
||||||
}
|
}
|
||||||
} // action_treeDeleteAll
|
} // 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
|
|
||||||
|
|
||||||
} // VTreeMaintenance
|
} // VTreeMaintenance
|
||||||
|
|
|
@ -25,9 +25,6 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.VetoableChangeListener;
|
import java.beans.VetoableChangeListener;
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
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.VDate;
|
||||||
import org.compiere.grid.ed.VLocator;
|
import org.compiere.grid.ed.VLocator;
|
||||||
import org.compiere.grid.ed.VLookup;
|
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.MLocatorLookup;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
import org.compiere.model.MQuery;
|
|
||||||
import org.compiere.plaf.CompiereColor;
|
import org.compiere.plaf.CompiereColor;
|
||||||
import org.compiere.swing.CPanel;
|
import org.compiere.swing.CPanel;
|
||||||
import org.compiere.util.CLogger;
|
|
||||||
import org.compiere.util.DB;
|
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
@ -63,28 +54,21 @@ import org.compiere.util.Msg;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VTrxMaterial.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
* @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
|
implements FormPanel, ActionListener, VetoableChangeListener
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 7435309844451490697L;
|
private static final long serialVersionUID = 7435309844451490697L;
|
||||||
/** Window No */
|
|
||||||
private int m_WindowNo = 0;
|
private CPanel panel = new CPanel();
|
||||||
|
|
||||||
/** FormFrame */
|
/** FormFrame */
|
||||||
private FormFrame m_frame;
|
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 CPanel mainPanel = new CPanel();
|
||||||
private BorderLayout mainLayout = new BorderLayout();
|
private BorderLayout mainLayout = new BorderLayout();
|
||||||
|
@ -139,7 +123,7 @@ public class VTrxMaterial extends CPanel
|
||||||
*/
|
*/
|
||||||
void jbInit() throws Exception
|
void jbInit() throws Exception
|
||||||
{
|
{
|
||||||
CompiereColor.setBackground(this);
|
CompiereColor.setBackground(panel);
|
||||||
mainPanel.setLayout(mainLayout);
|
mainPanel.setLayout(mainLayout);
|
||||||
mainLayout.setVgap(10);
|
mainLayout.setVgap(10);
|
||||||
parameterPanel.setLayout(parameterLayout);
|
parameterPanel.setLayout(parameterLayout);
|
||||||
|
@ -220,24 +204,10 @@ public class VTrxMaterial extends CPanel
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
m_staticQuery = new MQuery();
|
super.dynInit(statusBar);
|
||||||
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_gridController = new GridController();
|
m_gridController = new GridController();
|
||||||
m_gridController.initGrid(m_mTab, true, m_WindowNo, null, null);
|
m_gridController.initGrid(m_mTab, true, m_WindowNo, null, null);
|
||||||
mainPanel.add(m_gridController, BorderLayout.CENTER);
|
mainPanel.add(m_gridController, BorderLayout.CENTER);
|
||||||
//
|
|
||||||
m_mTab.setQuery(MQuery.getEqualQuery("1", "2"));
|
|
||||||
m_mTab.query(false);
|
|
||||||
statusBar.setStatusLine(" ", false);
|
|
||||||
statusBar.setStatusDB(" ");
|
|
||||||
} // dynInit
|
} // dynInit
|
||||||
|
|
||||||
|
|
||||||
|
@ -300,144 +270,37 @@ public class VTrxMaterial extends CPanel
|
||||||
*/
|
*/
|
||||||
private void refresh()
|
private void refresh()
|
||||||
{
|
{
|
||||||
/**
|
Object organization = orgField.getValue();
|
||||||
* Create Where Clause
|
Object locator = locatorField.getValue();
|
||||||
*/
|
Object product = productField.getValue();
|
||||||
MQuery query = m_staticQuery.deepCopy();
|
Object movementType = mtypeField.getValue();
|
||||||
// Organization
|
Timestamp movementDateFrom = (Timestamp)dateFField.getValue();
|
||||||
Object value = orgField.getValue();
|
Timestamp movementDateTo = (Timestamp)dateTField.getValue();
|
||||||
if (value != null && value.toString().length() > 0)
|
|
||||||
query.addRestriction("AD_Org_ID", MQuery.EQUAL, value);
|
panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
// Locator
|
refresh(organization, locator, product, movementType, movementDateFrom, movementDateTo, statusBar);
|
||||||
value = locatorField.getValue();
|
panel.setCursor(Cursor.getDefaultCursor());
|
||||||
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));
|
|
||||||
} // refresh
|
} // refresh
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zoom
|
* Zoom
|
||||||
*/
|
*/
|
||||||
private void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info("");
|
super.zoom();
|
||||||
//
|
|
||||||
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);
|
|
||||||
|
|
||||||
// Zoom
|
// Zoom
|
||||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
AWindow frame = new AWindow();
|
AWindow frame = new AWindow();
|
||||||
if (!frame.initWindow(AD_Window_ID, query))
|
if (!frame.initWindow(AD_Window_ID, query))
|
||||||
{
|
{
|
||||||
setCursor(Cursor.getDefaultCursor());
|
panel.setCursor(Cursor.getDefaultCursor());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AEnv.addToWindowManager(frame);
|
AEnv.addToWindowManager(frame);
|
||||||
AEnv.showCenterScreen(frame);
|
AEnv.showCenterScreen(frame);
|
||||||
frame = null;
|
frame = null;
|
||||||
setCursor(Cursor.getDefaultCursor());
|
panel.setCursor(Cursor.getDefaultCursor());
|
||||||
} // zoom
|
} // zoom
|
||||||
|
|
||||||
} // VTrxMaterial
|
} // VTrxMaterial
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui.apps.form;
|
package org.adempiere.webui.apps.form;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.adempiere.webui.component.ConfirmPanel;
|
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.WSearchEditor;
|
||||||
import org.adempiere.webui.editor.WTableDirEditor;
|
import org.adempiere.webui.editor.WTableDirEditor;
|
||||||
import org.adempiere.webui.panel.ADForm;
|
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.session.SessionManager;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
|
import org.compiere.apps.form.Merge;
|
||||||
import org.compiere.model.Lookup;
|
import org.compiere.model.Lookup;
|
||||||
import org.compiere.model.MBPartner;
|
|
||||||
import org.compiere.model.MInvoice;
|
|
||||||
import org.compiere.model.MLookupFactory;
|
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.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Trx;
|
|
||||||
import org.zkoss.zk.au.out.AuEcho;
|
import org.zkoss.zk.au.out.AuEcho;
|
||||||
import org.zkoss.zk.ui.Desktop;
|
import org.zkoss.zk.ui.Desktop;
|
||||||
import org.zkoss.zk.ui.DesktopUnavailableException;
|
import org.zkoss.zk.ui.DesktopUnavailableException;
|
||||||
|
@ -63,50 +57,18 @@ import org.zkoss.zkex.zul.South;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VMerge.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
* @version $Id: VMerge.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
||||||
*/
|
*/
|
||||||
public class WMerge extends ADForm
|
public class WMerge extends Merge implements ICustomForm, EventListener
|
||||||
implements EventListener
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 5797395051958101596L;
|
private static final long serialVersionUID = 5797395051958101596L;
|
||||||
private int m_totalCount = 0;
|
|
||||||
/** Error Log */
|
private CustomForm form = new CustomForm();
|
||||||
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);
|
|
||||||
|
|
||||||
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 Label[] m_label = null;
|
||||||
private WEditor[] m_from = null;
|
private WEditor[] m_from = null;
|
||||||
private WEditor[] m_to = null;
|
private WEditor[] m_to = null;
|
||||||
private String[] m_deleteTables = null;
|
|
||||||
|
|
||||||
|
|
||||||
private Borderlayout mainLayout = new Borderlayout();
|
private Borderlayout mainLayout = new Borderlayout();
|
||||||
private Panel CenterPanel = new Panel();
|
private Panel CenterPanel = new Panel();
|
||||||
|
@ -120,7 +82,7 @@ public class WMerge extends ADForm
|
||||||
/**
|
/**
|
||||||
* Initialize Panel
|
* Initialize Panel
|
||||||
*/
|
*/
|
||||||
protected void initForm()
|
public WMerge()
|
||||||
{
|
{
|
||||||
log.info( "VMerge.init - WinNo=" + m_WindowNo);
|
log.info( "VMerge.init - WinNo=" + m_WindowNo);
|
||||||
try
|
try
|
||||||
|
@ -184,7 +146,7 @@ public class WMerge extends ADForm
|
||||||
*/
|
*/
|
||||||
void jbInit () throws Exception
|
void jbInit () throws Exception
|
||||||
{
|
{
|
||||||
this.appendChild (mainLayout);
|
form.appendChild (mainLayout);
|
||||||
mainLayout.setHeight("100%");
|
mainLayout.setHeight("100%");
|
||||||
mainLayout.setWidth("100%");
|
mainLayout.setWidth("100%");
|
||||||
//
|
//
|
||||||
|
@ -275,25 +237,17 @@ public class WMerge extends ADForm
|
||||||
|
|
||||||
m_msg = Msg.getMsg(Env.getCtx(), "MergeFrom") + " = " + from_Info
|
m_msg = Msg.getMsg(Env.getCtx(), "MergeFrom") + " = " + from_Info
|
||||||
+ "\n" + Msg.getMsg(Env.getCtx(), "MergeTo") + " = " + to_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;
|
return;
|
||||||
|
|
||||||
// ** Update **
|
updateDeleteTable(columnName);
|
||||||
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;
|
|
||||||
|
|
||||||
Clients.showBusy("Processing...", true);
|
Clients.showBusy("Processing...", true);
|
||||||
|
|
||||||
if (!getDesktop().isServerPushEnabled())
|
if (!form.getDesktop().isServerPushEnabled())
|
||||||
getDesktop().enableServerPush(true);
|
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();
|
new Thread(runnable).start();
|
||||||
|
|
||||||
} // actionPerformed
|
} // actionPerformed
|
||||||
|
@ -318,7 +272,7 @@ public class WMerge extends ADForm
|
||||||
postMerge(columnName, to_ID);
|
postMerge(columnName, to_ID);
|
||||||
} finally{
|
} finally{
|
||||||
Clients.showBusy(null, false);
|
Clients.showBusy(null, false);
|
||||||
Clients.response(new AuEcho(WMerge.this, "onAfterProcess", null));
|
Clients.response(new AuEcho(form, "onAfterProcess", null));
|
||||||
//release full control of desktop
|
//release full control of desktop
|
||||||
Executions.deactivate(desktop);
|
Executions.deactivate(desktop);
|
||||||
}
|
}
|
||||||
|
@ -334,221 +288,20 @@ public class WMerge extends ADForm
|
||||||
{
|
{
|
||||||
if (m_success)
|
if (m_success)
|
||||||
{
|
{
|
||||||
FDialog.info (m_WindowNo, this, "MergeSuccess",
|
FDialog.info (m_WindowNo, form, "MergeSuccess",
|
||||||
m_msg + " #" + m_totalCount);
|
m_msg + " #" + m_totalCount);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FDialog.error(m_WindowNo, this, "MergeError",
|
FDialog.error(m_WindowNo, form, "MergeError",
|
||||||
m_errorLog.toString());
|
m_errorLog.toString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dispose();
|
dispose();
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Merge.
|
public ADForm getForm()
|
||||||
* @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);
|
return form;
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
} // VMerge
|
} // VMerge
|
||||||
|
|
|
@ -18,9 +18,6 @@ package org.adempiere.webui.apps.form;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
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.component.Window;
|
||||||
import org.adempiere.webui.editor.WNumberEditor;
|
import org.adempiere.webui.editor.WNumberEditor;
|
||||||
import org.adempiere.webui.panel.ADForm;
|
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.session.SessionManager;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
import org.adempiere.webui.window.SimplePDFViewer;
|
import org.adempiere.webui.window.SimplePDFViewer;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.apps.form.PayPrint;
|
||||||
import org.compiere.model.MLookupInfo;
|
|
||||||
import org.compiere.model.MPaySelectionCheck;
|
import org.compiere.model.MPaySelectionCheck;
|
||||||
import org.compiere.model.MPaymentBatch;
|
import org.compiere.model.MPaymentBatch;
|
||||||
import org.compiere.print.ReportEngine;
|
import org.compiere.print.ReportEngine;
|
||||||
import org.compiere.util.CLogger;
|
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Language;
|
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.ValueNamePair;
|
import org.compiere.util.ValueNamePair;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
|
@ -67,18 +63,19 @@ import org.zkoss.zul.Filedownload;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VPayPrint.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
* @version $Id: VPayPrint.java,v 1.2 2006/07/30 00:51:28 jjanke Exp $
|
||||||
*/
|
*/
|
||||||
public class WPayPrint extends ADForm
|
public class WPayPrint extends PayPrint implements ICustomForm, EventListener
|
||||||
implements EventListener
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -3005095685182033400L;
|
private static final long serialVersionUID = -3005095685182033400L;
|
||||||
|
|
||||||
|
private CustomForm form = new CustomForm();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize Panel
|
* Initialize Panel
|
||||||
*/
|
*/
|
||||||
protected void initForm()
|
public WPayPrint()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -87,7 +84,7 @@ public class WPayPrint extends ADForm
|
||||||
Borderlayout contentLayout = new Borderlayout();
|
Borderlayout contentLayout = new Borderlayout();
|
||||||
contentLayout.setWidth("100%");
|
contentLayout.setWidth("100%");
|
||||||
contentLayout.setHeight("100%");
|
contentLayout.setHeight("100%");
|
||||||
this.appendChild(contentLayout);
|
form.appendChild(contentLayout);
|
||||||
Center center = new Center();
|
Center center = new Center();
|
||||||
contentLayout.appendChild(center);
|
contentLayout.appendChild(center);
|
||||||
center.appendChild(centerPanel);
|
center.appendChild(centerPanel);
|
||||||
|
@ -101,16 +98,6 @@ public class WPayPrint extends ADForm
|
||||||
log.log(Level.SEVERE, "", e);
|
log.log(Level.SEVERE, "", e);
|
||||||
}
|
}
|
||||||
} // init
|
} // 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
|
// Static Variables
|
||||||
private Panel centerPanel = new Panel();
|
private Panel centerPanel = new Panel();
|
||||||
|
@ -194,7 +181,8 @@ public class WPayPrint extends ADForm
|
||||||
row.appendChild(fDocumentNo.getComponent());
|
row.appendChild(fDocumentNo.getComponent());
|
||||||
row.appendChild(lNoPayments.rightAlign());
|
row.appendChild(lNoPayments.rightAlign());
|
||||||
row.appendChild(fNoPayments);
|
row.appendChild(fNoPayments);
|
||||||
|
|
||||||
|
southPanel.getButton(ConfirmPanel.A_OK).setVisible(false);
|
||||||
} // VPayPrint
|
} // VPayPrint
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -202,33 +190,12 @@ public class WPayPrint extends ADForm
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
log.config("");
|
ArrayList<KeyNamePair> data = getPaySelectionData();
|
||||||
int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx());
|
for(KeyNamePair pp : data)
|
||||||
|
fPaySelect.addItem(pp);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
if (fPaySelect.getItemCount() == 0)
|
if (fPaySelect.getItemCount() == 0)
|
||||||
FDialog.info(m_WindowNo, this, "VPayPrintNoRecords");
|
FDialog.info(m_WindowNo, form, "VPayPrintNoRecords");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fPaySelect.setSelectedIndex(0);
|
fPaySelect.setSelectedIndex(0);
|
||||||
|
@ -296,44 +263,15 @@ public class WPayPrint extends ADForm
|
||||||
log.info( "VPayPrint.loadPaySelectInfo");
|
log.info( "VPayPrint.loadPaySelectInfo");
|
||||||
if (fPaySelect.getSelectedIndex() == -1)
|
if (fPaySelect.getSelectedIndex() == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// load Banks from PaySelectLine
|
// load Banks from PaySelectLine
|
||||||
int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey();
|
int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey();
|
||||||
m_C_BankAccount_ID = -1;
|
loadPaySelectInfo(C_PaySelection_ID);
|
||||||
String sql = "SELECT ps.C_BankAccount_ID, b.Name || ' ' || ba.AccountNo," // 1..2
|
|
||||||
+ " c.ISO_Code, CurrentBalance " // 3..4
|
fBank.setText(bank);
|
||||||
+ "FROM C_PaySelection ps"
|
fCurrency.setText(currency);
|
||||||
+ " INNER JOIN C_BankAccount ba ON (ps.C_BankAccount_ID=ba.C_BankAccount_ID)"
|
fBalance.setValue(balance);
|
||||||
+ " 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);
|
|
||||||
}
|
|
||||||
loadPaymentRule();
|
loadPaymentRule();
|
||||||
} // loadPaySelectInfo
|
} // loadPaySelectInfo
|
||||||
|
|
||||||
|
@ -345,39 +283,18 @@ public class WPayPrint extends ADForm
|
||||||
log.info("");
|
log.info("");
|
||||||
if (m_C_BankAccount_ID == -1)
|
if (m_C_BankAccount_ID == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
fPaymentRule.removeAllItems();
|
||||||
|
|
||||||
// load PaymentRule for Bank
|
// load PaymentRule for Bank
|
||||||
int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey();
|
int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey();
|
||||||
fPaymentRule.removeAllItems();
|
ArrayList<ValueNamePair> data = loadPaymentRule(C_PaySelection_ID);
|
||||||
int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule");
|
for(ValueNamePair pp : data)
|
||||||
Language language = Language.getLanguage(Env.getAD_Language(Env.getCtx()));
|
fPaymentRule.addItem(pp);
|
||||||
MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID);
|
|
||||||
String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY"))
|
if (fPaymentRule.getItemCount() > 0)
|
||||||
+ " 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
|
|
||||||
fPaymentRule.setSelectedIndex(0);
|
fPaymentRule.setSelectedIndex(0);
|
||||||
|
|
||||||
loadPaymentRuleInfo();
|
loadPaymentRuleInfo();
|
||||||
} // loadPaymentRule
|
} // loadPaymentRule
|
||||||
|
|
||||||
|
@ -394,54 +311,20 @@ public class WPayPrint extends ADForm
|
||||||
|
|
||||||
log.info("PaymentRule=" + PaymentRule);
|
log.info("PaymentRule=" + PaymentRule);
|
||||||
fNoPayments.setText(" ");
|
fNoPayments.setText(" ");
|
||||||
|
|
||||||
int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey();
|
int C_PaySelection_ID = fPaySelect.getSelectedItem().toKeyNamePair().getKey();
|
||||||
String sql = "SELECT COUNT(*) "
|
String msg = loadPaymentRuleInfo(C_PaySelection_ID, PaymentRule);
|
||||||
+ "FROM C_PaySelectionCheck "
|
|
||||||
+ "WHERE C_PaySelection_ID=?";
|
if(noPayments != null)
|
||||||
try
|
fNoPayments.setText(noPayments);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
bProcess.setEnabled(PaymentRule.equals("T"));
|
bProcess.setEnabled(PaymentRule.equals("T"));
|
||||||
|
|
||||||
// DocumentNo
|
if(documentNo != null)
|
||||||
sql = "SELECT CurrentNext "
|
fDocumentNo.setValue(documentNo);
|
||||||
+ "FROM C_BankAccountDoc "
|
|
||||||
+ "WHERE C_BankAccount_ID=? AND PaymentRule=? AND IsActive='Y'";
|
if(msg != null && msg.length() > 0)
|
||||||
try
|
FDialog.error(m_WindowNo, form, msg);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
} // loadPaymentRuleInfo
|
} // loadPaymentRuleInfo
|
||||||
|
|
||||||
|
|
||||||
|
@ -464,7 +347,7 @@ public class WPayPrint extends ADForm
|
||||||
MPaySelectionCheck.exportToFile(m_checks, tempFile);
|
MPaySelectionCheck.exportToFile(m_checks, tempFile);
|
||||||
Filedownload.save(new FileInputStream(tempFile), "plain/text", "paymentExport.txt");
|
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 =
|
// int lastDocumentNo =
|
||||||
MPaySelectionCheck.confirmPrint (m_checks, m_batch);
|
MPaySelectionCheck.confirmPrint (m_checks, m_batch);
|
||||||
|
@ -525,7 +408,7 @@ public class WPayPrint extends ADForm
|
||||||
{
|
{
|
||||||
File outFile = File.createTempFile("WPayPrint", null);
|
File outFile = File.createTempFile("WPayPrint", null);
|
||||||
AEnv.mergePdf(pdfList, outFile);
|
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.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED);
|
||||||
chequeViewer.setWidth("100%");
|
chequeViewer.setWidth("100%");
|
||||||
}
|
}
|
||||||
|
@ -547,7 +430,7 @@ public class WPayPrint extends ADForm
|
||||||
}
|
}
|
||||||
|
|
||||||
SimplePDFViewer remitViewer = null;
|
SimplePDFViewer remitViewer = null;
|
||||||
if (FDialog.ask(m_WindowNo, this, "VPayPrintPrintRemittance"))
|
if (FDialog.ask(m_WindowNo, form, "VPayPrintPrintRemittance"))
|
||||||
{
|
{
|
||||||
pdfList = new ArrayList<File>();
|
pdfList = new ArrayList<File>();
|
||||||
for (int i = 0; i < m_checks.length; i++)
|
for (int i = 0; i < m_checks.length; i++)
|
||||||
|
@ -571,7 +454,7 @@ public class WPayPrint extends ADForm
|
||||||
File outFile = File.createTempFile("WPayPrint", null);
|
File outFile = File.createTempFile("WPayPrint", null);
|
||||||
AEnv.mergePdf(pdfList, outFile);
|
AEnv.mergePdf(pdfList, outFile);
|
||||||
String name = Msg.translate(Env.getCtx(), "Remittance");
|
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.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED);
|
||||||
remitViewer.setWidth("100%");
|
remitViewer.setWidth("100%");
|
||||||
}
|
}
|
||||||
|
@ -602,7 +485,7 @@ public class WPayPrint extends ADForm
|
||||||
if (fPaySelect.getSelectedIndex() == -1 || m_C_BankAccount_ID == -1
|
if (fPaySelect.getSelectedIndex() == -1 || m_C_BankAccount_ID == -1
|
||||||
|| fPaymentRule.getSelectedIndex() == -1 || fDocumentNo.getValue() == null)
|
|| 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)");
|
"(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + "=0)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -619,12 +502,16 @@ public class WPayPrint extends ADForm
|
||||||
//
|
//
|
||||||
if (m_checks == null || m_checks.length == 0)
|
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");
|
"(" + Msg.translate(Env.getCtx(), "C_PaySelectionLine_ID") + " #0");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
m_batch = MPaymentBatch.getForPaySelection (Env.getCtx(), C_PaySelection_ID, null);
|
m_batch = MPaymentBatch.getForPaySelection (Env.getCtx(), C_PaySelection_ID, null);
|
||||||
return true;
|
return true;
|
||||||
} // getChecks
|
} // getChecks
|
||||||
|
|
||||||
|
public ADForm getForm() {
|
||||||
|
return form;
|
||||||
|
}
|
||||||
|
|
||||||
} // PayPrint
|
} // PayPrint
|
||||||
|
|
|
@ -18,13 +18,8 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui.apps.form;
|
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.sql.Timestamp;
|
||||||
import java.text.DecimalFormat;
|
import java.util.ArrayList;
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.adempiere.webui.apps.ProcessModalDialog;
|
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.WTableModelEvent;
|
||||||
import org.adempiere.webui.event.WTableModelListener;
|
import org.adempiere.webui.event.WTableModelListener;
|
||||||
import org.adempiere.webui.panel.ADForm;
|
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.session.SessionManager;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.apps.form.PaySelect;
|
||||||
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.model.X_C_PaySelection;
|
import org.compiere.model.X_C_PaySelection;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.util.ASyncProcess;
|
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.Env;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Language;
|
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Trx;
|
|
||||||
import org.compiere.util.ValueNamePair;
|
import org.compiere.util.ValueNamePair;
|
||||||
import org.zkoss.zk.au.out.AuEcho;
|
|
||||||
import org.zkoss.zk.ui.SuspendNotAllowedException;
|
import org.zkoss.zk.ui.SuspendNotAllowedException;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
|
@ -87,8 +71,8 @@ import org.zkoss.zul.Space;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VPaySelect.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
* @version $Id: VPaySelect.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
||||||
*/
|
*/
|
||||||
public class WPaySelect extends ADForm
|
public class WPaySelect extends PaySelect
|
||||||
implements EventListener, WTableModelListener, ASyncProcess
|
implements ICustomForm, EventListener, WTableModelListener, ASyncProcess
|
||||||
{
|
{
|
||||||
/** @todo withholding */
|
/** @todo withholding */
|
||||||
|
|
||||||
|
@ -96,39 +80,8 @@ public class WPaySelect extends ADForm
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -6031404894392912610L;
|
private static final long serialVersionUID = -6031404894392912610L;
|
||||||
|
|
||||||
/**
|
private CustomForm form = new CustomForm();
|
||||||
* 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 Panel mainPanel = new Panel();
|
private Panel mainPanel = new Panel();
|
||||||
|
@ -153,9 +106,31 @@ public class WPaySelect extends ADForm
|
||||||
private WDateEditor fieldPayDate = new WDateEditor();
|
private WDateEditor fieldPayDate = new WDateEditor();
|
||||||
private Label labelPaymentRule = new Label();
|
private Label labelPaymentRule = new Label();
|
||||||
private Listbox fieldPaymentRule = ListboxFactory.newDropdownListbox();
|
private Listbox fieldPaymentRule = ListboxFactory.newDropdownListbox();
|
||||||
|
private Label labelDtype = new Label();
|
||||||
|
private Listbox fieldDtype = ListboxFactory.newDropdownListbox();
|
||||||
private Panel southPanel;
|
private Panel southPanel;
|
||||||
private ProcessInfo m_pi;
|
private ProcessInfo m_pi;
|
||||||
private boolean m_isLock;
|
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
|
* Static Init
|
||||||
|
@ -164,7 +139,7 @@ public class WPaySelect extends ADForm
|
||||||
private void zkInit() throws Exception
|
private void zkInit() throws Exception
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
this.appendChild(mainPanel);
|
form.appendChild(mainPanel);
|
||||||
mainPanel.appendChild(mainLayout);
|
mainPanel.appendChild(mainLayout);
|
||||||
mainPanel.setStyle("width: 100%; height: 100%; padding: 0; margin: 0");
|
mainPanel.setStyle("width: 100%; height: 100%; padding: 0; margin: 0");
|
||||||
mainLayout.setHeight("100%");
|
mainLayout.setHeight("100%");
|
||||||
|
@ -179,6 +154,8 @@ public class WPaySelect extends ADForm
|
||||||
labelPayDate.setText(Msg.translate(Env.getCtx(), "PayDate"));
|
labelPayDate.setText(Msg.translate(Env.getCtx(), "PayDate"));
|
||||||
labelPaymentRule.setText(Msg.translate(Env.getCtx(), "PaymentRule"));
|
labelPaymentRule.setText(Msg.translate(Env.getCtx(), "PaymentRule"));
|
||||||
fieldPaymentRule.addActionListener(this);
|
fieldPaymentRule.addActionListener(this);
|
||||||
|
labelDtype.setText(Msg.translate(Env.getCtx(), "C_DocType_ID"));
|
||||||
|
fieldDtype.addActionListener(this);
|
||||||
//
|
//
|
||||||
labelBankBalance.setText(Msg.translate(Env.getCtx(), "CurrentBalance"));
|
labelBankBalance.setText(Msg.translate(Env.getCtx(), "CurrentBalance"));
|
||||||
labelBalance.setText("0");
|
labelBalance.setText("0");
|
||||||
|
@ -212,13 +189,20 @@ public class WPaySelect extends ADForm
|
||||||
row.appendChild(onlyDue);
|
row.appendChild(onlyDue);
|
||||||
row.appendChild(new Space());
|
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 = rows.newRow();
|
||||||
row.appendChild(labelPayDate.rightAlign());
|
row.appendChild(labelPayDate.rightAlign());
|
||||||
row.appendChild(fieldPayDate.getComponent());
|
row.appendChild(fieldPayDate.getComponent());
|
||||||
row.appendChild(labelPaymentRule.rightAlign());
|
row.appendChild(labelPaymentRule.rightAlign());
|
||||||
row.appendChild(fieldPaymentRule);
|
row.appendChild(fieldPaymentRule);
|
||||||
row.appendChild(bRefresh);
|
row.appendChild(bRefresh);
|
||||||
|
|
||||||
South south = new South();
|
South south = new South();
|
||||||
south.setStyle("border: none");
|
south.setStyle("border: none");
|
||||||
mainLayout.appendChild(south);
|
mainLayout.appendChild(south);
|
||||||
|
@ -230,6 +214,7 @@ public class WPaySelect extends ADForm
|
||||||
center.appendChild(miniTable);
|
center.appendChild(miniTable);
|
||||||
//
|
//
|
||||||
commandPanel.addButton(bGenerate);
|
commandPanel.addButton(bGenerate);
|
||||||
|
commandPanel.getButton(ConfirmPanel.A_OK).setVisible(false);
|
||||||
} // jbInit
|
} // jbInit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -240,170 +225,50 @@ public class WPaySelect extends ADForm
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
Properties ctx = Env.getCtx();
|
ArrayList<BankInfo> 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)
|
if (fieldBankAccount.getItemCount() == 0)
|
||||||
FDialog.error(m_WindowNo, this, "VPaySelectNoBank");
|
FDialog.error(m_WindowNo, form, "VPaySelectNoBank");
|
||||||
else
|
else
|
||||||
fieldBankAccount.setSelectedIndex(0);
|
fieldBankAccount.setSelectedIndex(0);
|
||||||
loadBankInfo();
|
|
||||||
|
ArrayList<KeyNamePair> bpartnerData = getBPartnerData();
|
||||||
// Optional BusinessPartner with unpaid AP Invoices
|
for(KeyNamePair pp : bpartnerData)
|
||||||
KeyNamePair pp = new KeyNamePair(0, "");
|
fieldBPartner.appendItem(pp.getName(), pp);
|
||||||
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);
|
|
||||||
}
|
|
||||||
fieldBPartner.setSelectedIndex(0);
|
fieldBPartner.setSelectedIndex(0);
|
||||||
|
|
||||||
/** prepare MiniTable
|
ArrayList<KeyNamePair> docTypeData = getDocTypeData();
|
||||||
*
|
for(KeyNamePair pp : docTypeData)
|
||||||
SELECT i.C_Invoice_ID, i.DateInvoiced+p.NetDays AS DateDue,
|
fieldDtype.appendItem(pp.getName(), pp);
|
||||||
bp.Name, i.DocumentNo, c.ISO_Code, i.GrandTotal,
|
|
||||||
paymentTermDiscount(i.GrandTotal, i.C_PaymentTerm_ID, i.DateInvoiced, SysDate) AS Discount,
|
prepareTable(miniTable);
|
||||||
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");
|
|
||||||
//
|
|
||||||
miniTable.getModel().addTableModelListener(this);
|
miniTable.getModel().addTableModelListener(this);
|
||||||
//
|
//
|
||||||
fieldPayDate.setMandatory(true);
|
fieldPayDate.setMandatory(true);
|
||||||
fieldPayDate.setValue(new Timestamp(System.currentTimeMillis()));
|
fieldPayDate.setValue(new Timestamp(System.currentTimeMillis()));
|
||||||
//
|
|
||||||
m_AD_Client_ID = Env.getAD_Client_ID(Env.getCtx());
|
|
||||||
} // dynInit
|
} // dynInit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load Bank Info - Load Info from Bank Account and valid Documents (PaymentRule)
|
* Load Bank Info - Load Info from Bank Account and valid Documents (PaymentRule)
|
||||||
*/
|
*/
|
||||||
private void loadBankInfo()
|
private void loadBankInfo()
|
||||||
{
|
{
|
||||||
BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue();
|
BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue();
|
||||||
if (bi == null)
|
if (bi == null)
|
||||||
return;
|
return;
|
||||||
labelCurrency.setText(bi.Currency);
|
labelCurrency.setText(bi.Currency);
|
||||||
labelBalance.setText(m_format.format(bi.Balance));
|
labelBalance.setText(m_format.format(bi.Balance));
|
||||||
m_bankBalance = bi.Balance;
|
|
||||||
|
|
||||||
// PaymentRule
|
// PaymentRule
|
||||||
fieldPaymentRule.removeAllItems();
|
fieldPaymentRule.removeAllItems();
|
||||||
int AD_Reference_ID = 195; // MLookupInfo.getAD_Reference_ID("All_Payment Rule");
|
|
||||||
Language language = Env.getLanguage(Env.getCtx());
|
ArrayList<ValueNamePair> paymentRuleData = getPaymentRuleData(bi);
|
||||||
MLookupInfo info = MLookupFactory.getLookup_List(language, AD_Reference_ID);
|
for(ValueNamePair vp : paymentRuleData)
|
||||||
String sql = info.Query.substring(0, info.Query.indexOf(" ORDER BY"))
|
fieldPaymentRule.appendItem(vp.getName(), vp);
|
||||||
+ " 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);
|
|
||||||
}
|
|
||||||
fieldPaymentRule.setSelectedIndex(0);
|
fieldPaymentRule.setSelectedIndex(0);
|
||||||
|
|
||||||
} // loadBankInfo
|
} // loadBankInfo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -411,64 +276,18 @@ public class WPaySelect extends ADForm
|
||||||
*/
|
*/
|
||||||
private void loadTableInfo()
|
private void loadTableInfo()
|
||||||
{
|
{
|
||||||
log.config("");
|
|
||||||
// not yet initialized
|
|
||||||
if (m_sql == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
String sql = m_sql;
|
|
||||||
// Parameters
|
|
||||||
Timestamp payDate = (Timestamp)fieldPayDate.getValue();
|
Timestamp payDate = (Timestamp)fieldPayDate.getValue();
|
||||||
miniTable.setColorCompare(payDate);
|
miniTable.setColorCompare(payDate);
|
||||||
log.config("PayDate=" + 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
|
BankInfo bi = (BankInfo)fieldBankAccount.getSelectedItem().getValue();
|
||||||
try
|
|
||||||
{
|
ValueNamePair paymentRule = (ValueNamePair) fieldPaymentRule.getSelectedItem().getValue();
|
||||||
int index = 1;
|
KeyNamePair bpartner = (KeyNamePair) fieldBPartner.getSelectedItem().getValue();
|
||||||
PreparedStatement pstmt = DB.prepareStatement(sql, null);
|
KeyNamePair docType = (KeyNamePair) fieldDtype.getSelectedItem().getValue();
|
||||||
pstmt.setTimestamp(index++, payDate); // DiscountAmt
|
|
||||||
pstmt.setInt(index++, bi.C_Currency_ID); // DueAmt
|
loadTableInfo(bi, payDate, paymentRule, onlyDue.isSelected(), bpartner, docType, miniTable);
|
||||||
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);
|
|
||||||
}
|
|
||||||
calculateSelection();
|
calculateSelection();
|
||||||
} // loadTableInfo
|
} // loadTableInfo
|
||||||
|
|
||||||
|
@ -501,7 +320,7 @@ public class WPaySelect extends ADForm
|
||||||
dispose();
|
dispose();
|
||||||
|
|
||||||
// Update Open Invoices
|
// Update Open Invoices
|
||||||
else if (e.getTarget() == fieldBPartner || e.getTarget() == bRefresh)
|
else if (e.getTarget() == fieldBPartner || e.getTarget() == bRefresh || e.getTarget() == fieldDtype)
|
||||||
loadTableInfo();
|
loadTableInfo();
|
||||||
|
|
||||||
} // actionPerformed
|
} // actionPerformed
|
||||||
|
@ -522,29 +341,7 @@ public class WPaySelect extends ADForm
|
||||||
*/
|
*/
|
||||||
public void calculateSelection()
|
public void calculateSelection()
|
||||||
{
|
{
|
||||||
m_noSelected = 0;
|
dataStatus.setText(calculateSelection(miniTable));
|
||||||
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());
|
|
||||||
//
|
//
|
||||||
bGenerate.setEnabled(m_noSelected != 0);
|
bGenerate.setEnabled(m_noSelected != 0);
|
||||||
} // calculateSelection
|
} // calculateSelection
|
||||||
|
@ -554,12 +351,6 @@ public class WPaySelect extends ADForm
|
||||||
*/
|
*/
|
||||||
private void generatePaySelect()
|
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)
|
if (miniTable.getRowCount() == 0)
|
||||||
return;
|
return;
|
||||||
miniTable.setSelectedIndices(new int[]{0});
|
miniTable.setSelectedIndices(new int[]{0});
|
||||||
|
@ -567,67 +358,31 @@ public class WPaySelect extends ADForm
|
||||||
if (m_noSelected == 0)
|
if (m_noSelected == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
String PaymentRule = ((ValueNamePair)fieldPaymentRule.getSelectedItem().toValueNamePair()).getValue();
|
String msg = generatePaySelect(miniTable, (ValueNamePair) fieldPaymentRule.getSelectedItem().getValue(),
|
||||||
|
new Timestamp(fieldPayDate.getComponent().getValue().getTime()),
|
||||||
// Create Header
|
(BankInfo)fieldBankAccount.getSelectedItem().getValue());
|
||||||
m_ps = new MPaySelection(Env.getCtx(), 0, trxName);
|
|
||||||
m_ps.setName (Msg.getMsg(Env.getCtx(), "VPaySelect")
|
if(msg != null && msg.length() > 0)
|
||||||
+ " - " + ((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())
|
|
||||||
{
|
{
|
||||||
FDialog.error(m_WindowNo, this, "SaveError", Msg.translate(Env.getCtx(), "C_PaySelection_ID"));
|
FDialog.error(m_WindowNo, form, "SaveError", msg);
|
||||||
m_ps = null;
|
|
||||||
return;
|
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
|
// 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;
|
return;
|
||||||
|
|
||||||
// Prepare Process
|
// Prepare Process
|
||||||
int AD_Proces_ID = 155; // C_PaySelection_CreatePayment
|
int AD_Proces_ID = 155; // C_PaySelection_CreatePayment
|
||||||
|
|
||||||
// Execute Process
|
// 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);
|
AD_Proces_ID, X_C_PaySelection.Table_ID, m_ps.getC_PaySelection_ID(), false);
|
||||||
if (dialog.isValid()) {
|
if (dialog.isValid()) {
|
||||||
try {
|
try {
|
||||||
dialog.setWidth("500px");
|
dialog.setWidth("500px");
|
||||||
dialog.setVisible(true);
|
dialog.setVisible(true);
|
||||||
dialog.setPage(this.getPage());
|
dialog.setPage(form.getPage());
|
||||||
dialog.doModal();
|
dialog.doModal();
|
||||||
} catch (SuspendNotAllowedException e) {
|
} catch (SuspendNotAllowedException e) {
|
||||||
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
|
@ -658,16 +413,13 @@ public class WPaySelect extends ADForm
|
||||||
m_isLock = false;
|
m_isLock = false;
|
||||||
m_pi = pi;
|
m_pi = pi;
|
||||||
Clients.showBusy(null, false);
|
Clients.showBusy(null, false);
|
||||||
Clients.response(new AuEcho(this, "onAfterProcess", null));
|
|
||||||
} // unlockUI
|
//TODO: The response returned is always Cancel
|
||||||
|
// if (!FDialog.ask(0, form, "VPaySelectPrint?", "(" + m_pi.getSummary() + ")"))
|
||||||
public void onAfterProcess()
|
// {
|
||||||
{
|
// dispose();
|
||||||
if (!FDialog.ask(0, this, "VPaySelectPrint?", "(" + m_pi.getSummary() + ")"))
|
// return;
|
||||||
{
|
// }
|
||||||
dispose();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.dispose();
|
this.dispose();
|
||||||
|
|
||||||
|
@ -676,51 +428,11 @@ public class WPaySelect extends ADForm
|
||||||
ADForm form = SessionManager.getAppDesktop().openForm(AD_Form_ID);
|
ADForm form = SessionManager.getAppDesktop().openForm(AD_Form_ID);
|
||||||
if (m_ps != null)
|
if (m_ps != null)
|
||||||
{
|
{
|
||||||
WPayPrint pp = (WPayPrint)form;
|
WPayPrint pp = (WPayPrint) form.getICustomForm();
|
||||||
pp.setPaySelection(m_ps.getC_PaySelection_ID());
|
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) {
|
public void executeASync(ProcessInfo pi) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -728,4 +440,7 @@ public class WPaySelect extends ADForm
|
||||||
return m_isLock;
|
return m_isLock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ADForm getForm() {
|
||||||
|
return form;
|
||||||
|
}
|
||||||
} // VPaySelect
|
} // VPaySelect
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui.apps.form;
|
package org.adempiere.webui.apps.form;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.logging.Level;
|
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.SimpleListModel;
|
||||||
import org.adempiere.webui.component.SimpleTreeModel;
|
import org.adempiere.webui.component.SimpleTreeModel;
|
||||||
import org.adempiere.webui.panel.ADForm;
|
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.session.SessionManager;
|
||||||
import org.adempiere.webui.window.FDialog;
|
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.MTree;
|
||||||
import org.compiere.model.MTreeNode;
|
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.Env;
|
||||||
import org.compiere.util.KeyNamePair;
|
import org.compiere.util.KeyNamePair;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
@ -64,17 +58,14 @@ import org.zkoss.zul.Treeitem;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VTreeMaintenance.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
* @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;
|
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 Borderlayout mainLayout = new Borderlayout ();
|
||||||
private Panel northPanel = new Panel ();
|
private Panel northPanel = new Panel ();
|
||||||
|
@ -92,8 +83,7 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
private Listbox centerList = new Listbox();
|
private Listbox centerList = new Listbox();
|
||||||
|
|
||||||
|
|
||||||
@Override
|
public WTreeMaintenance()
|
||||||
public void initForm()
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -113,10 +103,7 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
*/
|
*/
|
||||||
private void preInit()
|
private void preInit()
|
||||||
{
|
{
|
||||||
KeyNamePair[] trees = DB.getKeyNamePairs(MRole.getDefault().addAccessSQL(
|
treeField = new Listbox(getTreeData());
|
||||||
"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.setMold("select");
|
treeField.setMold("select");
|
||||||
treeField.addActionListener(this);
|
treeField.addActionListener(this);
|
||||||
treeField.setSelectedIndex(0);
|
treeField.setSelectedIndex(0);
|
||||||
|
@ -136,10 +123,10 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
bDelete.setSrc("images/StepForward24.png");
|
bDelete.setSrc("images/StepForward24.png");
|
||||||
bDeleteAll.setSrc("images/FastForward24.png");
|
bDeleteAll.setSrc("images/FastForward24.png");
|
||||||
|
|
||||||
this.setWidth("99%");
|
form.setWidth("99%");
|
||||||
this.setHeight("100%");
|
form.setHeight("100%");
|
||||||
this.setStyle("position: absolute; padding: 0; margin: 0");
|
form.setStyle("position: absolute; padding: 0; margin: 0");
|
||||||
this.appendChild (mainLayout);
|
form.appendChild (mainLayout);
|
||||||
mainLayout.setWidth("100%");
|
mainLayout.setWidth("100%");
|
||||||
mainLayout.setHeight("100%");
|
mainLayout.setHeight("100%");
|
||||||
mainLayout.setStyle("position: absolute");
|
mainLayout.setStyle("position: absolute");
|
||||||
|
@ -267,41 +254,13 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
String fromClause = m_tree.getSourceTableName(false); // fully qualified
|
String fromClause = m_tree.getSourceTableName(false); // fully qualified
|
||||||
String columnNameX = m_tree.getSourceTableName(true);
|
String columnNameX = m_tree.getSourceTableName(true);
|
||||||
String actionColor = m_tree.getActionColorName();
|
String actionColor = m_tree.getActionColorName();
|
||||||
|
|
||||||
// List
|
// List
|
||||||
SimpleListModel model = new SimpleListModel();
|
SimpleListModel model = new SimpleListModel();
|
||||||
String sql = "SELECT t." + columnNameX
|
ArrayList<ListItem> items = getTreeItemData();
|
||||||
+ "_ID,t.Name,t.Description,t.IsSummary,"
|
for(ListItem item : items)
|
||||||
+ actionColor
|
model.addElement(item);
|
||||||
+ " 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
|
|
||||||
log.config("#" + model.getSize());
|
log.config("#" + model.getSize());
|
||||||
centerList.setItemRenderer(model);
|
centerList.setItemRenderer(model);
|
||||||
centerList.setModel(model);
|
centerList.setModel(model);
|
||||||
|
@ -400,26 +359,7 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
model.addNode(stn);
|
model.addNode(stn);
|
||||||
}
|
}
|
||||||
// May cause Error if in tree
|
// May cause Error if in tree
|
||||||
if (m_tree.isProduct())
|
addNode(item);
|
||||||
{
|
|
||||||
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_treeAdd
|
||||||
|
|
||||||
|
@ -438,30 +378,7 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
model.removeNode(stn);
|
model.removeNode(stn);
|
||||||
|
|
||||||
//
|
//
|
||||||
if (m_tree.isProduct())
|
deleteNode(item);
|
||||||
{
|
|
||||||
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
|
} // action_treeDelete
|
||||||
|
|
||||||
|
@ -501,52 +418,9 @@ public class WTreeMaintenance extends ADForm implements EventListener
|
||||||
}
|
}
|
||||||
} // action_treeDeleteAll
|
} // action_treeDeleteAll
|
||||||
|
|
||||||
/**************************************************************************
|
public ADForm getForm()
|
||||||
* Tree Maintenance List Item
|
|
||||||
*/
|
|
||||||
class ListItem
|
|
||||||
{
|
{
|
||||||
/**
|
return form;
|
||||||
* 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
|
|
||||||
|
|
||||||
} // VTreeMaintenance
|
} // VTreeMaintenance
|
||||||
|
|
|
@ -16,9 +16,6 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui.apps.form;
|
package org.adempiere.webui.apps.form;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
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.event.ValueChangeListener;
|
||||||
import org.adempiere.webui.panel.ADForm;
|
import org.adempiere.webui.panel.ADForm;
|
||||||
import org.adempiere.webui.panel.ADTabpanel;
|
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.panel.StatusBarPanel;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.compiere.model.GridTab;
|
import org.compiere.apps.form.TrxMaterial;
|
||||||
import org.compiere.model.GridWindow;
|
|
||||||
import org.compiere.model.GridWindowVO;
|
|
||||||
import org.compiere.model.MLocatorLookup;
|
import org.compiere.model.MLocatorLookup;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
import org.compiere.model.MLookupFactory;
|
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.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
@ -68,23 +62,19 @@ import org.zkoss.zul.Separator;
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: VTrxMaterial.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
* @version $Id: VTrxMaterial.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
|
||||||
*/
|
*/
|
||||||
public class WTrxMaterial extends ADForm
|
public class WTrxMaterial extends TrxMaterial
|
||||||
implements EventListener, ValueChangeListener
|
implements ICustomForm, EventListener, ValueChangeListener
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -2141669182129214237L;
|
private static final long serialVersionUID = -2141669182129214237L;
|
||||||
|
|
||||||
|
private CustomForm form = new CustomForm();
|
||||||
|
|
||||||
/** GridController */
|
/** GridController */
|
||||||
private ADTabpanel m_gridController = null;
|
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 Panel mainPanel = new Panel();
|
||||||
private Borderlayout mainLayout = new Borderlayout();
|
private Borderlayout mainLayout = new Borderlayout();
|
||||||
|
@ -110,7 +100,7 @@ public class WTrxMaterial extends ADForm
|
||||||
/**
|
/**
|
||||||
* Initialize Panel
|
* Initialize Panel
|
||||||
*/
|
*/
|
||||||
protected void initForm()
|
public WTrxMaterial()
|
||||||
{
|
{
|
||||||
log.info("");
|
log.info("");
|
||||||
try
|
try
|
||||||
|
@ -131,7 +121,7 @@ public class WTrxMaterial extends ADForm
|
||||||
*/
|
*/
|
||||||
void zkInit() throws Exception
|
void zkInit() throws Exception
|
||||||
{
|
{
|
||||||
this.appendChild(mainPanel);
|
form.appendChild(mainPanel);
|
||||||
mainPanel.setStyle("width: 99%; height: 100%; border: none; padding: 0; margin: 0");
|
mainPanel.setStyle("width: 99%; height: 100%; border: none; padding: 0; margin: 0");
|
||||||
mainPanel.appendChild(mainLayout);
|
mainPanel.appendChild(mainLayout);
|
||||||
mainLayout.setWidth("100%");
|
mainLayout.setWidth("100%");
|
||||||
|
@ -213,16 +203,9 @@ public class WTrxMaterial extends ADForm
|
||||||
*/
|
*/
|
||||||
private void dynInit()
|
private void dynInit()
|
||||||
{
|
{
|
||||||
m_staticQuery = new MQuery();
|
super.dynInit(statusBar);
|
||||||
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_gridController = new ADTabpanel();
|
m_gridController = new ADTabpanel();
|
||||||
m_gridController.init(null, m_WindowNo, m_mTab, m_mWindow);
|
m_gridController.init(null, m_WindowNo, m_mTab, m_mWindow);
|
||||||
if (!m_gridController.isGridView())
|
if (!m_gridController.isGridView())
|
||||||
|
@ -231,11 +214,6 @@ public class WTrxMaterial extends ADForm
|
||||||
mainLayout.appendChild(center);
|
mainLayout.appendChild(center);
|
||||||
center.setFlex(true);
|
center.setFlex(true);
|
||||||
center.appendChild(m_gridController);
|
center.appendChild(m_gridController);
|
||||||
//
|
|
||||||
m_mTab.setQuery(MQuery.getEqualQuery("1", "2"));
|
|
||||||
m_mTab.query(false);
|
|
||||||
statusBar.setStatusLine(" ", false);
|
|
||||||
statusBar.setStatusDB(" ");
|
|
||||||
} // dynInit
|
} // dynInit
|
||||||
|
|
||||||
|
|
||||||
|
@ -281,132 +259,30 @@ public class WTrxMaterial extends ADForm
|
||||||
*/
|
*/
|
||||||
private void refresh()
|
private void refresh()
|
||||||
{
|
{
|
||||||
/**
|
Object organization = orgField.getValue();
|
||||||
* Create Where Clause
|
Object locator = locatorField.getValue();
|
||||||
*/
|
Object product = productField.getValue();
|
||||||
MQuery query = m_staticQuery.deepCopy();
|
Object movementType = mtypeField.getValue();
|
||||||
// Organization
|
Timestamp movementDateFrom = (Timestamp)dateFField.getValue();
|
||||||
Object value = orgField.getValue();
|
Timestamp movementDateTo = (Timestamp)dateTField.getValue();
|
||||||
if (value != null && value.toString().length() > 0)
|
|
||||||
query.addRestriction("AD_Org_ID", MQuery.EQUAL, value);
|
refresh(organization, locator, product, movementType, movementDateFrom, movementDateTo, statusBar);
|
||||||
// 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));
|
|
||||||
} // refresh
|
} // refresh
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zoom
|
* Zoom
|
||||||
*/
|
*/
|
||||||
private void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info("");
|
super.zoom();
|
||||||
//
|
|
||||||
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);
|
|
||||||
|
|
||||||
// Zoom
|
// Zoom
|
||||||
AEnv.zoom(AD_Window_ID, query);
|
AEnv.zoom(AD_Window_ID, query);
|
||||||
} // zoom
|
} // zoom
|
||||||
|
|
||||||
|
public ADForm getForm()
|
||||||
|
{
|
||||||
|
return form;
|
||||||
|
}
|
||||||
|
|
||||||
} // VTrxMaterial
|
} // VTrxMaterial
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.adempiere.webui.component.Window;
|
||||||
import org.adempiere.webui.exception.ApplicationException;
|
import org.adempiere.webui.exception.ApplicationException;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.adempiere.webui.util.ADClassNameMap;
|
import org.adempiere.webui.util.ADClassNameMap;
|
||||||
import org.compiere.apps.form.GenForm;
|
|
||||||
import org.compiere.model.MForm;
|
import org.compiere.model.MForm;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
|
@ -63,6 +62,8 @@ public abstract class ADForm extends Window implements EventListener
|
||||||
|
|
||||||
|
|
||||||
private ProcessInfo m_pi;
|
private ProcessInfo m_pi;
|
||||||
|
|
||||||
|
private ICustomForm m_customForm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -228,6 +229,7 @@ public abstract class ADForm extends Window implements EventListener
|
||||||
if(o instanceof ADForm)
|
if(o instanceof ADForm)
|
||||||
{
|
{
|
||||||
form = (ADForm)o;
|
form = (ADForm)o;
|
||||||
|
form.setICustomForm(customForm);
|
||||||
form.init(adFormID, name);
|
form.init(adFormID, name);
|
||||||
return form;
|
return form;
|
||||||
}
|
}
|
||||||
|
@ -275,4 +277,14 @@ public abstract class ADForm extends Window implements EventListener
|
||||||
{
|
{
|
||||||
return m_pi;
|
return m_pi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setICustomForm(ICustomForm customForm)
|
||||||
|
{
|
||||||
|
m_customForm = customForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICustomForm getICustomForm()
|
||||||
|
{
|
||||||
|
return m_customForm;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue