details:   https://code.openbravo.com/erp/devel/pi/rev/8845de885b87
changeset: 22327:8845de885b87
user:      David Miguelez <david.miguelez <at> openbravo.com>
date:      Mon Mar 03 11:06:05 2014 +0100
summary:   Fixes Issue 24405. Fixes problem with more than 1000 Pending Trx.

diffstat:

 src-db/database/model/tables/M_TRANSACTION.xml                                 
                      |    5 +
 src-db/database/sourcedata/AD_COLUMN.xml                                       
                      |   34 +++++++
 src-db/database/sourcedata/AD_ELEMENT.xml                                      
                      |   12 ++
 src-db/database/sourcedata/AD_FIELD.xml                                        
                      |   26 +++++
 
src-util/modulescript/build/classes/org/openbravo/modulescript/UpdateMTransactionCostingStatus.class
 |    0 
 
src-util/modulescript/src/org/openbravo/modulescript/UpdateMTransactionCostingStatus.java
            |    2 +
 src/org/openbravo/costing/CostingBackground.java                               
                      |   44 ++++++---
 7 files changed, 106 insertions(+), 17 deletions(-)

diffs (245 lines):

diff -r ab571092c694 -r 8845de885b87 
src-db/database/model/tables/M_TRANSACTION.xml
--- a/src-db/database/model/tables/M_TRANSACTION.xml    Mon Mar 03 10:04:32 
2014 +0100
+++ b/src-db/database/model/tables/M_TRANSACTION.xml    Mon Mar 03 11:06:05 
2014 +0100
@@ -121,6 +121,10 @@
         <default><![CDATA[Y]]></default>
         <onCreateDefault/>
       </column>
+      <column name="ISPROCESSED" primaryKey="false" required="true" 
type="CHAR" size="1" autoIncrement="false">
+        <default><![CDATA[N]]></default>
+        <onCreateDefault><![CDATA['N']]></onCreateDefault>
+      </column>
       <foreign-key foreignTable="M_INTERNAL_CONSUMPTIONLINE" 
name="M_INTL_CONSUMP_MTRANSACTION">
         <reference local="M_INTERNAL_CONSUMPTIONLINE_ID" 
foreign="M_INTERNAL_CONSUMPTIONLINE_ID"/>
       </foreign-key>
@@ -188,5 +192,6 @@
       <check name="M_TRANSACTION_CURRENCY"><![CDATA[(TRANSACTIONCOST IS NULL) 
OR ((TRANSACTIONCOST IS NOT NULL) AND (C_CURRENCY_ID IS NOT NULL))]]></check>
       <check name="M_TRANSACTION_ISACTIVE_CHECK"><![CDATA[ISACTIVE IN ('Y', 
'N')]]></check>
       <check name="M_TRANSACTION_ISCOSTCALC_TRX"><![CDATA[ISCOSTCALCULATED IN 
('Y', 'N')]]></check>
+      <check name="M_TRANSACTION_ISPROCESSED"><![CDATA[ISPROCESSED IN ('Y', 
'N')]]></check>
     </table>
   </database>
diff -r ab571092c694 -r 8845de885b87 src-db/database/sourcedata/AD_COLUMN.xml
--- a/src-db/database/sourcedata/AD_COLUMN.xml  Mon Mar 03 10:04:32 2014 +0100
+++ b/src-db/database/sourcedata/AD_COLUMN.xml  Mon Mar 03 11:06:05 2014 +0100
@@ -304701,6 +304701,40 @@
 <!--BB367F44E4854CBDAAB25CC57E82B464-->  
<ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
 <!--BB367F44E4854CBDAAB25CC57E82B464--></AD_COLUMN>
 
+<!--BB403BFE8561486BB3B12F188C8256CE--><AD_COLUMN>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<AD_COLUMN_ID><![CDATA[BB403BFE8561486BB3B12F188C8256CE]]></AD_COLUMN_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <NAME><![CDATA[Is Processed]]></NAME>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<COLUMNNAME><![CDATA[Isprocessed]]></COLUMNNAME>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<AD_TABLE_ID><![CDATA[329]]></AD_TABLE_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<AD_REFERENCE_ID><![CDATA[20]]></AD_REFERENCE_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<FIELDLENGTH><![CDATA[1]]></FIELDLENGTH>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<DEFAULTVALUE><![CDATA[N]]></DEFAULTVALUE>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <ISKEY><![CDATA[N]]></ISKEY>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <ISPARENT><![CDATA[N]]></ISPARENT>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISMANDATORY><![CDATA[Y]]></ISMANDATORY>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISUPDATEABLE><![CDATA[Y]]></ISUPDATEABLE>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <SEQNO><![CDATA[93]]></SEQNO>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<AD_ELEMENT_ID><![CDATA[4BF0322B8D3841F089368309E30F2D87]]></AD_ELEMENT_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<DEVELOPMENTSTATUS><![CDATA[RE]]></DEVELOPMENTSTATUS>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <POSITION><![CDATA[31]]></POSITION>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
+<!--BB403BFE8561486BB3B12F188C8256CE-->  
<ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
+<!--BB403BFE8561486BB3B12F188C8256CE--></AD_COLUMN>
+
 <!--BB466480BFAC492AA36E5495EC72BD44--><AD_COLUMN>
 <!--BB466480BFAC492AA36E5495EC72BD44-->  
<AD_COLUMN_ID><![CDATA[BB466480BFAC492AA36E5495EC72BD44]]></AD_COLUMN_ID>
 <!--BB466480BFAC492AA36E5495EC72BD44-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r ab571092c694 -r 8845de885b87 src-db/database/sourcedata/AD_ELEMENT.xml
--- a/src-db/database/sourcedata/AD_ELEMENT.xml Mon Mar 03 10:04:32 2014 +0100
+++ b/src-db/database/sourcedata/AD_ELEMENT.xml Mon Mar 03 11:06:05 2014 +0100
@@ -22156,6 +22156,18 @@
 <!--4B4FE5FD9E234FC3A704B77C67C8ECFB-->  <ISGLOSSARY><![CDATA[N]]></ISGLOSSARY>
 <!--4B4FE5FD9E234FC3A704B77C67C8ECFB--></AD_ELEMENT>
 
+<!--4BF0322B8D3841F089368309E30F2D87--><AD_ELEMENT>
+<!--4BF0322B8D3841F089368309E30F2D87-->  
<AD_ELEMENT_ID><![CDATA[4BF0322B8D3841F089368309E30F2D87]]></AD_ELEMENT_ID>
+<!--4BF0322B8D3841F089368309E30F2D87-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--4BF0322B8D3841F089368309E30F2D87-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--4BF0322B8D3841F089368309E30F2D87-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--4BF0322B8D3841F089368309E30F2D87-->  
<COLUMNNAME><![CDATA[Isprocessed]]></COLUMNNAME>
+<!--4BF0322B8D3841F089368309E30F2D87-->  <NAME><![CDATA[Is Processed]]></NAME>
+<!--4BF0322B8D3841F089368309E30F2D87-->  <PRINTNAME><![CDATA[Is 
Processed]]></PRINTNAME>
+<!--4BF0322B8D3841F089368309E30F2D87-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--4BF0322B8D3841F089368309E30F2D87-->  <ISGLOSSARY><![CDATA[N]]></ISGLOSSARY>
+<!--4BF0322B8D3841F089368309E30F2D87--></AD_ELEMENT>
+
 <!--4C86EEDF992E4136B9870F6042A3330F--><AD_ELEMENT>
 <!--4C86EEDF992E4136B9870F6042A3330F-->  
<AD_ELEMENT_ID><![CDATA[4C86EEDF992E4136B9870F6042A3330F]]></AD_ELEMENT_ID>
 <!--4C86EEDF992E4136B9870F6042A3330F-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r ab571092c694 -r 8845de885b87 src-db/database/sourcedata/AD_FIELD.xml
--- a/src-db/database/sourcedata/AD_FIELD.xml   Mon Mar 03 10:04:32 2014 +0100
+++ b/src-db/database/sourcedata/AD_FIELD.xml   Mon Mar 03 11:06:05 2014 +0100
@@ -183408,6 +183408,32 @@
 <!--1D534D626BB1488DBEBDB4B6E0C70A8B-->  
<EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
 <!--1D534D626BB1488DBEBDB4B6E0C70A8B--></AD_FIELD>
 
+<!--1D58EC15C6BC4732951AB9B55332BFE5--><AD_FIELD>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<AD_FIELD_ID><![CDATA[1D58EC15C6BC4732951AB9B55332BFE5]]></AD_FIELD_ID>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <NAME><![CDATA[Is Processed]]></NAME>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <AD_TAB_ID><![CDATA[289]]></AD_TAB_ID>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<AD_COLUMN_ID><![CDATA[BB403BFE8561486BB3B12F188C8256CE]]></AD_COLUMN_ID>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<IGNOREINWAD><![CDATA[N]]></IGNOREINWAD>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<DISPLAYLENGTH><![CDATA[1]]></DISPLAYLENGTH>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <ISREADONLY><![CDATA[N]]></ISREADONLY>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <SEQNO><![CDATA[180]]></SEQNO>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<SHOWINRELATION><![CDATA[N]]></SHOWINRELATION>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<STARTINODDCOLUMN><![CDATA[N]]></STARTINODDCOLUMN>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<ISSHOWNINSTATUSBAR><![CDATA[N]]></ISSHOWNINSTATUSBAR>
+<!--1D58EC15C6BC4732951AB9B55332BFE5-->  
<EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
+<!--1D58EC15C6BC4732951AB9B55332BFE5--></AD_FIELD>
+
 <!--1D5E40824DA04DC1AED695552A1A3038--><AD_FIELD>
 <!--1D5E40824DA04DC1AED695552A1A3038-->  
<AD_FIELD_ID><![CDATA[1D5E40824DA04DC1AED695552A1A3038]]></AD_FIELD_ID>
 <!--1D5E40824DA04DC1AED695552A1A3038-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r ab571092c694 -r 8845de885b87 
src-util/modulescript/build/classes/org/openbravo/modulescript/UpdateMTransactionCostingStatus.class
Binary file 
src-util/modulescript/build/classes/org/openbravo/modulescript/UpdateMTransactionCostingStatus.class
 has changed
diff -r ab571092c694 -r 8845de885b87 
src-util/modulescript/src/org/openbravo/modulescript/UpdateMTransactionCostingStatus.java
--- 
a/src-util/modulescript/src/org/openbravo/modulescript/UpdateMTransactionCostingStatus.java
 Mon Mar 03 10:04:32 2014 +0100
+++ 
b/src-util/modulescript/src/org/openbravo/modulescript/UpdateMTransactionCostingStatus.java
 Mon Mar 03 11:06:05 2014 +0100
@@ -33,6 +33,8 @@
       ps = cp
           .getPreparedStatement("UPDATE m_transaction SET costing_status = 
'CC' WHERE iscostcalculated = 'Y' AND costing_status = 'NC'");
       ps.executeUpdate();
+      ps = cp.getPreparedStatement("UPDATE m_transaction SET isprocessed = 'Y' 
WHERE iscostcalculated = 'Y' AND isprocessed = 'N'");
+      ps.executeUpdate();
     } catch (Exception e) {
       handleError(e);
     } finally {
diff -r ab571092c694 -r 8845de885b87 
src/org/openbravo/costing/CostingBackground.java
--- a/src/org/openbravo/costing/CostingBackground.java  Mon Mar 03 10:04:32 
2014 +0100
+++ b/src/org/openbravo/costing/CostingBackground.java  Mon Mar 03 11:06:05 
2014 +0100
@@ -23,10 +23,11 @@
 import java.util.List;
 
 import org.apache.log4j.Logger;
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.session.OBPropertiesProvider;
 import org.openbravo.dal.core.OBContext;
-import org.openbravo.dal.core.SessionHandler;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBQuery;
 import org.openbravo.erpCommon.utility.OBError;
@@ -83,10 +84,12 @@
         orgsWithRule.add(org.getId());
       }
 
+      // Fix the Not Processed flag for those Transactions with Cost Not 
Calculated
+      SetNotProcessedWhenNotCalculatedTransactions(orgsWithRule);
+
       List<MaterialTransaction> trxs = getTransactionsBatch(orgsWithRule);
       int counter = 0, total = trxs.size(), batch = 0;
-      boolean pendingTrx = trxs.size() > 0;
-      while (pendingTrx && counter < maxTransactions) {
+      while (counter < maxTransactions) {
         batch++;
         for (MaterialTransaction transaction : trxs) {
           counter++;
@@ -94,6 +97,7 @@
             log4j.debug("Start transaction process: " + transaction.getId());
             CostingServer transactionCost = new CostingServer(transaction);
             transactionCost.process();
+            transaction.setProcessed(true);
             log4j.debug("Transaction processed: " + counter + "/" + total + " 
batch: " + batch);
           } catch (OBException e) {
             String resultMsg = OBMessageUtils.parseTranslation(e.getMessage());
@@ -114,11 +118,10 @@
           }
 
           // If cost has been calculated successfully do a commit.
-          SessionHandler.getInstance().commitAndStart();
+          OBDal.getInstance().getConnection().commit();
         }
         OBDal.getInstance().getSession().clear();
         trxs = getTransactionsBatch(orgsWithRule);
-        pendingTrx = areTransactionsPending(orgsWithRule);
         total += trxs.size();
       }
 
@@ -137,11 +140,21 @@
     }
   }
 
+  private void SetNotProcessedWhenNotCalculatedTransactions(List<String> 
orgsWithRule) {
+    ScrollableResults trxs = getTransactionsNotCalculated(orgsWithRule);
+    while (trxs.next()) {
+      MaterialTransaction transaction = (MaterialTransaction) trxs.get(0);
+      transaction.setProcessed(false);
+      OBDal.getInstance().save(transaction);
+    }
+    OBDal.getInstance().flush();
+  }
+
   private List<MaterialTransaction> getTransactionsBatch(List<String> 
orgsWithRule) {
     StringBuffer where = new StringBuffer();
     where.append(" as trx");
     where.append(" join trx." + MaterialTransaction.PROPERTY_PRODUCT + " as 
p");
-    where.append(" where trx." + MaterialTransaction.PROPERTY_ISCOSTCALCULATED 
+ " = false");
+    where.append(" where trx." + MaterialTransaction.PROPERTY_ISPROCESSED + " 
= false");
     where.append("   and trx." + MaterialTransaction.PROPERTY_COSTINGSTATUS + 
" <> 'S'");
     where.append("   and p." + Product.PROPERTY_PRODUCTTYPE + " = 'I'");
     where.append("   and p." + Product.PROPERTY_STOCKED + " = true");
@@ -171,24 +184,21 @@
     return trxQry.list();
   }
 
-  private boolean areTransactionsPending(List<String> orgsWithRule) {
+  /**
+   * Get Transactions with Processed flag = 'Y' but it's cost is Not Calculated
+   */
+  private ScrollableResults getTransactionsNotCalculated(List<String> 
orgsWithRule) {
     StringBuffer where = new StringBuffer();
     where.append(" as trx");
-    where.append(" join trx." + MaterialTransaction.PROPERTY_PRODUCT + " as 
p");
-    where.append(" where trx." + MaterialTransaction.PROPERTY_ISCOSTCALCULATED 
+ " = false");
-    where.append("   and trx." + MaterialTransaction.PROPERTY_COSTINGSTATUS + 
" = 'NC'");
-    where.append("   and p." + Product.PROPERTY_PRODUCTTYPE + " = 'I'");
-    where.append("   and p." + Product.PROPERTY_STOCKED + " = true");
-    where.append("   and trx." + 
MaterialTransaction.PROPERTY_TRANSACTIONPROCESSDATE + " <= :now");
+    where.append(" where trx." + MaterialTransaction.PROPERTY_ISPROCESSED + " 
= true");
+    where.append("   and trx." + MaterialTransaction.PROPERTY_ISCOSTCALCULATED 
+ " = false");
     where.append("   and trx." + MaterialTransaction.PROPERTY_ORGANIZATION + 
".id in (:orgs)");
-    where.append(" order by trx." + 
MaterialTransaction.PROPERTY_TRANSACTIONPROCESSDATE);
     OBQuery<MaterialTransaction> trxQry = OBDal.getInstance().createQuery(
         MaterialTransaction.class, where.toString());
-    trxQry.setMaxResult(1);
-    trxQry.setNamedParameter("now", new Date());
     trxQry.setFilterOnReadableOrganization(false);
     trxQry.setNamedParameter("orgs", orgsWithRule);
+    trxQry.setFetchSize(1000);
 
-    return trxQry.list().size() > 0;
+    return trxQry.scroll(ScrollMode.FORWARD_ONLY);
   }
 }

------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to