diff --git a/base/src/org/adempiere/process/ClientAcctProcessor.java b/base/src/org/adempiere/process/ClientAcctProcessor.java index e47688cca7..b6f10ac6e6 100644 --- a/base/src/org/adempiere/process/ClientAcctProcessor.java +++ b/base/src/org/adempiere/process/ClientAcctProcessor.java @@ -29,8 +29,13 @@ package org.adempiere.process; +import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.logging.Level; import org.compiere.acct.Doc; @@ -41,6 +46,7 @@ import org.compiere.process.ProcessInfoParameter; import org.compiere.process.SvrProcess; import org.compiere.util.AdempiereUserError; import org.compiere.util.DB; +import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.util.Trx; @@ -115,32 +121,101 @@ public class ClientAcctProcessor extends SvrProcess */ private void postSession() { - for (int i = 0; i < Doc.getDocumentsTableID().length; i++) + List listProcessedOn = new ArrayList(); + listProcessedOn.add(Env.ZERO); // to include potential null values + + //get current time from db + Timestamp ts = DB.getSQLValueTS(get_TrxName(), "SELECT CURRENT_TIMESTAMP FROM DUAL"); + + //go back 2 second to be safe (to avoid posting documents being completed at this precise moment) + long ms = ts.getTime()- (2 * 1000); + ts = new Timestamp(ms); + long mili = ts.getTime(); + BigDecimal value = new BigDecimal(Long.toString(mili)); + + //first pass, collect all ts (FR 2962094 - required for weighted average costing) + int[] documentsTableID = Doc.getDocumentsTableID(); + String[] documentsTableName = Doc.getDocumentsTableName(); + for (int i = 0; i < documentsTableID.length; i++) { - int AD_Table_ID = Doc.getDocumentsTableID()[i]; - String TableName = Doc.getDocumentsTableName()[i]; + int AD_Table_ID = documentsTableID[i]; + String TableName = documentsTableName[i]; // Post only special documents - if (p_AD_Table_ID != 0 + if (p_AD_Table_ID != 0 && p_AD_Table_ID != AD_Table_ID) continue; - // SELECT * FROM table - StringBuffer sql = new StringBuffer ("SELECT * FROM ").append(TableName) - .append(" WHERE AD_Client_ID=?") - .append(" AND Processed='Y' AND Posted='N' AND IsActive='Y'") - .append(" ORDER BY Created"); - // - int count = 0; - int countError = 0; + + StringBuffer sql = new StringBuffer ("SELECT DISTINCT ProcessedOn FROM ").append(TableName) + .append(" WHERE AD_Client_ID=? AND ProcessedOn 0) + } // for tableID + + } // for processedOn + + for (int i = 0; i < documentsTableID.length; i++) + { + String TableName = documentsTableName[i]; + if (count[i] > 0) { - m_summary.append(TableName).append("=").append(count); - if (countError > 0) - m_summary.append("(Errors=").append(countError).append(")"); + m_summary.append(TableName).append("=").append(count[i]); + if (countError[i] > 0) + m_summary.append("(Errors=").append(countError[i]).append(")"); m_summary.append(" - "); log.finer(getName() + ": " + m_summary.toString()); } else log.finer(getName() + ": " + TableName + " - no work"); } + } // postSession } // ClientAcctProcessor diff --git a/serverRoot/src/main/server/org/compiere/server/AcctProcessor.java b/serverRoot/src/main/server/org/compiere/server/AcctProcessor.java index 078697159f..31f9f4fa7c 100644 --- a/serverRoot/src/main/server/org/compiere/server/AcctProcessor.java +++ b/serverRoot/src/main/server/org/compiere/server/AcctProcessor.java @@ -16,9 +16,13 @@ *****************************************************************************/ package org.compiere.server; +import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.logging.Level; import org.compiere.acct.Doc; @@ -28,6 +32,7 @@ import org.compiere.model.MAcctSchema; import org.compiere.model.MClient; import org.compiere.model.MCost; import org.compiere.util.DB; +import org.compiere.util.Env; import org.compiere.util.TimeUtil; @@ -88,31 +93,101 @@ public class AcctProcessor extends AdempiereServer */ private void postSession() { - for (int i = 0; i < Doc.getDocumentsTableID().length; i++) + List listProcessedOn = new ArrayList(); + listProcessedOn.add(Env.ZERO); // to include potential null values + + //get current time from db + Timestamp ts = DB.getSQLValueTS(null, "SELECT CURRENT_TIMESTAMP FROM DUAL"); + + //go back 2 second to be safe (to avoid posting documents being completed at this precise moment) + long ms = ts.getTime()- (2 * 1000); + ts = new Timestamp(ms); + long mili = ts.getTime(); + BigDecimal value = new BigDecimal(Long.toString(mili)); + + //first pass, collect all ts (FR 2962094 - required for weighted average costing) + int[] documentsTableID = Doc.getDocumentsTableID(); + String[] documentsTableName = Doc.getDocumentsTableName(); + for (int i = 0; i < documentsTableID.length; i++) { - int AD_Table_ID = Doc.getDocumentsTableID()[i]; - String TableName = Doc.getDocumentsTableName()[i]; + int AD_Table_ID = documentsTableID[i]; + String TableName = documentsTableName[i]; + // Post only special documents + if (m_model.getAD_Table_ID() != 0 + && m_model.getAD_Table_ID() != AD_Table_ID) + continue; + + StringBuffer sql = new StringBuffer ("SELECT DISTINCT ProcessedOn FROM ").append(TableName) + .append(" WHERE AD_Client_ID=? AND ProcessedOn 0) + } // for tableID + + } // for processedOn + + for (int i = 0; i < documentsTableID.length; i++) + { + String TableName = documentsTableName[i]; + if (count[i] > 0) { - m_summary.append(TableName).append("=").append(count); - if (countError > 0) - m_summary.append("(Errors=").append(countError).append(")"); + m_summary.append(TableName).append("=").append(count[i]); + if (countError[i] > 0) + m_summary.append("(Errors=").append(countError[i]).append(")"); m_summary.append(" - "); log.finer(getName() + ": " + m_summary.toString()); } else log.finer(getName() + ": " + TableName + " - no work"); } + } // postSession /**