📄 importaccount.java
字号:
Log.error("ImportAccount.doIt - Update Element Count=" + no);
//
conn.commit();
} // for all I_Product
rs.close();
pstmt.close();
//
pstmt_insertElementValue.close();
pstmt_updateElementValue.close();
pstmt_setImported.close();
//
conn.close();
conn = null;
}
catch (SQLException e)
{
try
{
if (conn != null)
conn.close();
conn = null;
}
catch (SQLException ex)
{
}
throw new Exception ("ImportAccount.doIt", e);
}
finally
{
if (conn != null)
conn.close();
conn = null;
}
// Set Error to indicator to not imported
sql = new StringBuffer ("UPDATE I_ElementValue "
+ "SET I_IsImported='N', Updated=SysDate "
+ "WHERE I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdate(sql.toString());
addLog (null, 0, new BigDecimal (no), "@Errors@");
addLog (null, 0, new BigDecimal (noInsert), "@C_ElementValue_ID@: @Inserted@");
addLog (null, 0, new BigDecimal (noUpdate), "@C_ElementValue_ID@: @Updated@");
// ***** Set Parent
sql = new StringBuffer ("UPDATE I_ElementValue i "
+ "SET ParentElementValue_ID=(SELECT C_ElementValue_ID"
+ " FROM C_ElementValue ev WHERE i.C_Element_ID=ev.C_Element_ID"
+ " AND i.ParentValue=ev.Value AND i.AD_Client_ID=ev.AD_Client_ID) "
+ "WHERE ParentElementValue_ID IS NULL"
+ " AND I_IsImported='Y'").append(clientCheck);
no = DB.executeUpdate(sql.toString());
Log.trace(Log.l5_DData, "ImportAccount.doIt", "Found Parent ElementValue=" + no);
//
sql = new StringBuffer ("UPDATE I_ElementValue "
+ "SET I_ErrorMsg=I_ErrorMsg||'Info=ParentNotFound, ' "
+ "WHERE ParentElementValue_ID IS NULL AND ParentValue IS NOT NULL"
+ " AND I_IsImported='Y'").append(clientCheck);
no = DB.executeUpdate(sql.toString());
Log.trace(Log.l3_Util, "ImportAccount.doIt", "Not Found Patent ElementValue=" + no);
//
sql = new StringBuffer ("SELECT i.ParentElementValue_ID, i.I_ElementValue_ID,"
+ " e.AD_Tree_ID, i.C_ElementValue_ID, i.Value||'-'||i.Name AS Info "
+ "FROM I_ElementValue i"
+ " INNER JOIN C_Element e ON (i.C_Element_ID=e.C_Element_ID) "
+ "WHERE i.C_ElementValue_ID IS NOT NULL AND e.AD_Tree_ID IS NOT NULL"
+ " AND i.ParentElementValue_ID IS NOT NULL"
+ " AND i.I_IsImported='Y' AND i.AD_Client_ID=").append(m_AD_Client_ID);
int noParentUpdate = 0;
try
{
Statement stmt = DB.createStatement();
ResultSet rs = stmt.executeQuery(sql.toString());
//
String updateSQL = "UPDATE AD_TreeNode SET Parent_ID=?, SeqNo=? "
+ "WHERE AD_Tree_ID=? AND Node_ID=?";
PreparedStatement updateStmt = DB.prepareStatement(updateSQL);
//
while (rs.next())
{
updateStmt.setInt(1, rs.getInt(1)); // Parent
updateStmt.setInt(2, rs.getInt(2)); // SeqNo (assume sequenec in import is the same)
updateStmt.setInt(3, rs.getInt(3)); // Tree
updateStmt.setInt(4, rs.getInt(4)); // Node
try
{
no = updateStmt.executeUpdate();
noParentUpdate += no;
}
catch (SQLException ex)
{
Log.error("ImportAccount.doIt (ParentUpdate)", ex);
no = 0;
}
if (no == 0)
Log.trace(Log.l1_User, "ImportAccount.doIt", "Parent not found for " + rs.getString(5));
}
rs.close();
stmt.close();
}
catch (SQLException e)
{
Log.error("ImportAccount.doIt (ParentUpdateLoop) " + sql.toString(), e);
}
addLog (null, 0, new BigDecimal (noParentUpdate), "@ParentElementValue_ID@: @Updated@");
// Reset Processing Flag
sql = new StringBuffer ("UPDATE I_ElementValue "
+ "SET Processing='-'"
+ "WHERE I_IsImported='Y' AND Processed='Y' AND Processing='Y'"
+ " AND C_ElementValue_ID IS NOT NULL")
.append(clientCheck);
if (m_updateDefaultAccounts)
sql.append(" AND AD_Column_ID IS NULL");
no = DB.executeUpdate(sql.toString());
Log.trace(Log.l5_DData, "ImportAccount.doIt", "Reset Processing Flag=" + no);
if (m_updateDefaultAccounts)
updateDefaults(clientCheck);
// Re-Enable Triggers
no = DB.executeUpdate("ALTER TABLE C_ValidCombination ENABLE ALL TRIGGERS");
Log.trace(Log.l5_DData, "ImportAccount.doIt", "Enable Description Update =" + no);
// Update Description
no = DB.executeUpdate("UPDATE C_ValidCombination SET Updated=SysDate WHERE AD_Client_ID=" + m_AD_Client_ID);
Log.trace(Log.l5_DData, "ImportAccount.doIt", "Update Account Description =" + no);
return "";
} // doIt
/*************************************************************************/
/**
* Update Default Accounts
* @param clientCheck client where cluase
*/
private void updateDefaults (String clientCheck)
{
Log.trace(Log.l3_Util, "ImportAccount.updateDefaults - CreateNewCombination=" + m_createNewCombination);
// **** Update Defaults
StringBuffer sql = new StringBuffer ("SELECT C_AcctSchema_ID FROM C_AcctSchema_Element "
+ "WHERE C_Element_ID=?").append(clientCheck);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
pstmt.setInt(1, m_C_Element_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
updateDefaultAccounts (rs.getInt(1));
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("ImportAccount.updateDefaults", e);
}
// Default Account DEFAULT_ACCT
sql = new StringBuffer ("UPDATE C_AcctSchema_Element e "
+ "SET C_ElementValue_ID=(SELECT C_ElementValue_ID FROM I_ElementValue i"
+ " WHERE e.C_Element_ID=i.C_Element_ID AND i.C_ElementValue_ID IS NOT NULL"
+ " AND UPPER(i.Default_Account)='DEFAULT_ACCT') "
+ "WHERE EXISTS (SELECT * FROM I_ElementValue i"
+ " WHERE e.C_Element_ID=i.C_Element_ID AND i.C_ElementValue_ID IS NOT NULL"
+ " AND UPPER(i.Default_Account)='DEFAULT_ACCT' "
+ " AND i.I_IsImported='Y')")
.append(clientCheck);
int no = DB.executeUpdate(sql.toString());
addLog (null, 0, new BigDecimal (no), "@C_AcctSchema_Element_ID@: @Updated@");
} // updateDefaults
/**
* Update Default Accounts.
* _Default.xxxx = C_ValidCombination_ID => Account_ID=C_ElementValue_ID
* @param C_AcctSchema_ID Accounting Schema
*/
private void updateDefaultAccounts (int C_AcctSchema_ID)
{
Log.trace(Log.l3_Util, "ImportAccount.updateDefaultAccounts", "C_AcctSchema_ID=" + C_AcctSchema_ID);
AcctSchema as = new AcctSchema (C_AcctSchema_ID);
if (as.getAcctSchemaElement("AC").getC_Element_ID() != m_C_Element_ID)
{
Log.error("ImportAccount.updateDefaultAccounts - C_Element_ID=" + m_C_Element_ID + " not in AcctSchema=" + as);
return;
}
int[] counts = new int[] {0, 0, 0};
String sql = "SELECT i.C_ElementValue_ID, t.TableName, c.ColumnName, i.I_ElementValue_ID "
+ "FROM I_ElementValue i"
+ " INNER JOIN AD_Column c ON (i.AD_Column_ID=c.AD_Column_ID)"
+ " INNER JOIN AD_Table t ON (c.AD_Table_ID=t.AD_Table_ID) "
+ "WHERE i.I_IsImported='Y' AND i.Processed='Y' AND Processing='Y'"
+ " AND i.C_ElementValue_ID IS NOT NULL AND C_Element_ID=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, m_C_Element_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
int C_ElementValue_ID = rs.getInt(1);
String TableName = rs.getString(2);
String ColumnName = rs.getString(3);
int I_ElementValue_ID = rs.getInt(4);
// Update it
int u = updateDefaultAccount(TableName, ColumnName, C_AcctSchema_ID, C_ElementValue_ID);
counts[u]++;
if (u != UPDATE_ERROR)
{
sql = "UPDATE I_ElementValue SET Processing='N' "
+ "WHERE I_ElementValue_ID=" + I_ElementValue_ID;
int no = DB.executeUpdate(sql.toString());
if (no != 1)
Log.error("ImportAccount.updateDefaultAccounts - Updated=" + no);
}
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("ImportAccount.createDefaultAccounts", e);
}
addLog (null, 0, new BigDecimal (counts[UPDATE_ERROR]), as.toString() + ": @Errors@");
addLog (null, 0, new BigDecimal (counts[UPDATE_YES]), as.toString() + ": @Updated@");
addLog (null, 0, new BigDecimal (counts[UPDATE_SAME]), as.toString() + ": OK");
} // createDefaultAccounts
private static final int UPDATE_ERROR = 0;
private static final int UPDATE_YES = 1;
private static final int UPDATE_SAME = 2;
/**
* Update Default Account.
* This is the sql to delete unused accounts - with the import still in the table(!):
DELETE C_ElementValue e
WHERE NOT EXISTS (SELECT * FROM Fact_Acct f WHERE f.Account_ID=e.C_ElementValue_ID)
AND NOT EXISTS (SELECT * FROM C_ValidCombination vc WHERE vc.Account_ID=e.C_ElementValue_ID)
AND NOT EXISTS (SELECT * FROM I_ElementValue i WHERE i.C_ElementValue_ID=e.C_ElementValue_ID);
* @param TableName Table Name
* @param ColumnName Column Name
* @param C_AcctSchema_ID Account Schema
* @param C_ElementValue_ID new Account
* @return UPDATE_* status
*/
private int updateDefaultAccount (String TableName, String ColumnName, int C_AcctSchema_ID, int C_ElementValue_ID)
{
Log.trace(Log.l5_DData, "ImportAccount.updateDefaultAccount - "
+ TableName + "." + ColumnName + " - " + C_ElementValue_ID);
int retValue = UPDATE_ERROR;
StringBuffer sql = new StringBuffer ("SELECT x.")
.append(ColumnName).append(",Account_ID FROM ")
.append(TableName).append(" x INNER JOIN C_ValidCombination vc ON (x.")
.append(ColumnName).append("=vc.C_ValidCombination_ID) ")
.append("WHERE x.C_AcctSchema_ID=").append(C_AcctSchema_ID);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
int C_ValidCombination_ID = rs.getInt(1);
int Account_ID = rs.getInt(2);
// The current account value is the same
if (Account_ID == C_ElementValue_ID)
{
retValue = UPDATE_SAME;
Log.trace(Log.l6_Database, "Account_ID same as new value");
}
// We need to update the Account Value
else
{
if (m_createNewCombination)
{
Account acct = Account.getAccount(C_ValidCombination_ID);
acct.setAccount_ID(C_ElementValue_ID);
if (acct.save())
{
int newC_ValidCombination_ID = acct.getC_ValidCombination_ID();
if (C_ValidCombination_ID != newC_ValidCombination_ID)
{
sql = new StringBuffer ("UPDATE ").append(TableName)
.append(" SET ").append(ColumnName).append("=").append(newC_ValidCombination_ID)
.append(" WHERE C_AcctSchema_ID=").append(C_AcctSchema_ID);
int no = DB.executeUpdate(sql.toString());
Log.trace(no == 1 ? Log.l5_DData : 0, "ImportAccount.updateDefaultAccount - #" + no + " - "
+ TableName + "." + ColumnName + " - " + C_ElementValue_ID
+ " -- " + C_ValidCombination_ID + " -> " + newC_ValidCombination_ID);
if (no == 1)
retValue = UPDATE_YES;
}
}
else
Log.error("ImportAccount.updateDefaultAccount - Account not saved - " + acct);
}
else // Replace Combination
{
// Only Acct Combination directly
sql = new StringBuffer ("UPDATE C_ValidCombination SET Account_ID=")
.append(C_ElementValue_ID).append(" WHERE C_ValidCombination_ID=").append(C_ValidCombination_ID);
int no = DB.executeUpdate(sql.toString());
Log.trace(no == 1 ? Log.l5_DData : 0, "ImportAccount.updateDefaultAccount - Replace #" + no + " - "
+ "C_ValidCombination_ID=" + C_ValidCombination_ID + ", New Account_ID=" + C_ElementValue_ID);
if (no == 1)
{
retValue = UPDATE_YES;
// Where Acct was used
sql = new StringBuffer ("UPDATE C_ValidCombination SET Account_ID=")
.append(C_ElementValue_ID).append(" WHERE Account_ID=").append(Account_ID);
no = DB.executeUpdate(sql.toString());
Log.trace(no == 1 ? Log.l5_DData : 0, "ImportAccount.updateDefaultAccount - Replace VC #" + no + " - "
+ "Account_ID=" + Account_ID + ", New Account_ID=" + C_ElementValue_ID);
sql = new StringBuffer ("UPDATE Fact_Acct SET Account_ID=")
.append(C_ElementValue_ID).append(" WHERE Account_ID=").append(Account_ID);
no = DB.executeUpdate(sql.toString());
Log.trace(no == 1 ? Log.l5_DData : 0, "ImportAccount.updateDefaultAccount - Replace Fact #" + no + " - "
+ "Account_ID=" + Account_ID + ", New Account_ID=" + C_ElementValue_ID);
}
} // replace combination
} // need to update
} // for all default accounts
else
Log.error("ImportAccount.updateDefaultAccount - Account not found " + sql);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("ImportAccount.updateDefaultAccount " + sql, e);
}
return retValue;
} // updateDefaultAccount
} // ImportAccount
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -