Author: sichen
Date: Wed Aug 29 11:39:40 2007
New Revision: 570894

URL: http://svn.apache.org/viewvc?rev=570894&view=rev
Log:
Fix rounding issues in general ledger posting routines because they did not 
have configurable BigDecimal rounding properties.

Modified:
    ofbiz/trunk/applications/accounting/config/arithmetic.properties
    
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/AcctgTransServices.xml
    
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
    ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml

Modified: ofbiz/trunk/applications/accounting/config/arithmetic.properties
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/arithmetic.properties?rev=570894&r1=570893&r2=570894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/config/arithmetic.properties (original)
+++ ofbiz/trunk/applications/accounting/config/arithmetic.properties Wed Aug 29 
11:39:40 2007
@@ -20,6 +20,10 @@
 # Arithmetic properties for configuring BigDecimal calculations  
 #
 
+# These should correspond to the convention in minilang which is different 
than that for BigDecimal in Java.  See simple-methods.xsd
+ledger.decimals = 2
+ledger.rounding = HalfUp
+
 # For setting decimal precision and rounding method of operations related to 
invoices
 invoice.decimals = 2
 invoice.rounding = ROUND_HALF_UP

Modified: 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/AcctgTransServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/AcctgTransServices.xml?rev=570894&r1=570893&r2=570894&view=diff
==============================================================================
--- 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/AcctgTransServices.xml
 (original)
+++ 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/AcctgTransServices.xml
 Wed Aug 29 11:39:40 2007
@@ -97,17 +97,22 @@
     <simple-method method-name="calculateAcctgTransTrialBalance" 
short-description="Calculate Trial Balance for a AcctgTrans">
         <check-permission permission="ACCOUNTING" 
action="_ATX_CREATE"><fail-message message="Security Error: to run 
calculateAcctgTransTrialBalance you must have the ACCOUNTING_ATX_CREATE or 
ACCOUNTING_ADMIN permission"/></check-permission>
         <check-errors/>
-        
+       
+        <property-to-field resource="arithmetic" property="ledger.decimals" 
field-name="ledgerDecimals"/>
+        <property-to-field resource="arithmetic" property="ledger.rounding" 
field-name="ledgerRounding"/>
+ 
+        <log level="info" message="Using ledger decimals [${ledgerDecimals}] 
and rounding [${ledgerRounding}]"/>
+
         <!-- get all AcctgTransEntry for this trans, for each if debit add to 
debits total if credit add to credits total -->
         <entity-condition entity-name="AcctgTransEntry" 
list-name="acctgTransEntryList">
             <condition-expr field-name="acctgTransId" 
env-name="parameters.acctgTransId"/>
             <order-by field-name="acctgTransEntrySeqId"/>
         </entity-condition>
-        <calculate field-name="debitTotal" type="Double"><number 
value="0"/></calculate>
-        <calculate field-name="creditTotal" type="Double"><number 
value="0"/></calculate>
+        <calculate field-name="debitTotal" type="BigDecimal"><number 
value="0"/></calculate>
+        <calculate field-name="creditTotal" type="BigDecimal"><number 
value="0"/></calculate>
         <iterate entry-name="acctgTransEntry" list-name="acctgTransEntryList">
             <if-compare field-name="debitCreditFlag" 
map-name="acctgTransEntry" operator="equals" value="D">
-               <calculate field-name="debitTotal" type="Double">
+               <calculate field-name="debitTotal" type="BigDecimal" 
decimal-scale="${ledgerDecimals}" rounding-mode="${ledgerRounding}">
                         <calcop operator="add">
                             <calcop operator="get" field-name="debitTotal"/>
                             <calcop operator="get" 
field-name="acctgTransEntry.amount"/>
@@ -115,7 +120,7 @@
                </calculate>
             <else>
                 <if-compare field-name="debitCreditFlag" 
map-name="acctgTransEntry" operator="equals" value="C">
-                    <calculate field-name="creditTotal" type="Double">
+                    <calculate field-name="creditTotal" type="BigDecimal" 
decimal-scale="${ledgerDecimals}" rounding-mode="${ledgerRounding}">
                         <calcop operator="add">
                             <calcop operator="get" field-name="creditTotal"/>
                             <calcop operator="get" 
field-name="acctgTransEntry.amount"/>
@@ -134,10 +139,10 @@
         <check-errors/>
         
         <!-- should now have the debitTotal and creditTotal, calculate the 
debitCreditDifference -->
-        <calculate field-name="debitCreditDifference">
+        <calculate field-name="debitCreditDifference" type="BigDecimal"  
decimal-scale="${ledgerDecimals}" rounding-mode="${ledgerRounding}">
             <calcop operator="add">
-                <calcop operator="get" field-name="debitTotal"/>
-                <calcop operator="negative" field-name="creditTotal"/>
+                <calcop operator="get" field-name="debitTotal" 
type="BigDecimal"/>
+                <calcop operator="negative" field-name="creditTotal" 
type="BigDecimal"/>
             </calcop>
         </calculate>
         

Modified: 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml?rev=570894&r1=570893&r2=570894&view=diff
==============================================================================
--- 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
 (original)
+++ 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
 Wed Aug 29 11:39:40 2007
@@ -297,8 +297,14 @@
 
     <!-- ========== GL Posting Services ========== -->
     <simple-method method-name="createAcctgTransAndEntries" 
short-description="Verifies and posts a set of AcctgTransEntries">
+        <!-- retrieve ledger rounding properties -->
+        <property-to-field resource="arithmetic" property="ledger.decimals" 
field-name="ledgerDecimals"/>
+        <property-to-field resource="arithmetic" property="ledger.rounding" 
field-name="ledgerRounding"/>
+        <log level="info" message="Using ledger decimals [${ledgerDecimals}] 
and rounding [${ledgerRounding}]"/>        
+
         <!-- first loop through and make sure all the entries are valid  -->
         <iterate list-name="parameters.acctgTransEntries" 
entry-name="acctgTransEntry">
+            <log level="info" message="${acctgTransEntry}"/>
             <!-- the organization party must be an internal organization -->
             <entity-one entity-name="PartyRole" value-name="partyRole" 
use-cache="true" auto-field-map="false">
                 <field-map field-name="partyId" 
env-name="acctgTransEntry.organizationPartyId"/>
@@ -310,23 +316,23 @@
             </if-empty>
             <!-- add up debits and credits -->
             <if-compare field-name="acctgTransEntry.debitCreditFlag" 
operator="equals" value="D">
-                <calculate field-name="debitTotal">
+                <calculate field-name="debitTotal" 
decimal-scale="${ledgerDecimals}" rounding-mode="${ledgerRounding}">
                     <calcop operator="get" 
field-name="acctgTransEntry.amount"/>
                     <calcop operator="get" field-name="debitTotal"/>
                 </calculate>
             </if-compare>
             <if-compare field-name="acctgTransEntry.debitCreditFlag" 
operator="equals" value="C">
-                <calculate field-name="creditTotal">
+                <calculate field-name="creditTotal" 
decimal-scale="${ledgerDecimals}" rounding-mode="${ledgerRounding}">
                     <calcop operator="get" 
field-name="acctgTransEntry.amount"/>
                     <calcop operator="get" field-name="creditTotal"/>
                 </calculate>
             </if-compare>
         </iterate>
-        <calculate field-name="debitCreditDifference">
+        <calculate field-name="debitCreditDifference" 
decimal-scale="${ledgerDecimals}" rounding-mode="${ledgerRounding}">
             <calcop operator="get" field-name="debitTotal"/>
             <calcop operator="negative" field-name="creditTotal"/>
         </calculate>
-
+        <!-- <log level="info" message="In createAcctgTransAndEntries: 
debitTotal = [${debitTotal}] creditTotal=[${creditTotal}] 
debitCreditDifference=[${debitCreditDifference}]"/> -->
         <!-- if the debit and credit totals do not balance, return an error -->
         <if-compare field-name="debitCreditDifference" 
operator="greater-equals" value="0.000001" type="Double">
             <add-error><fail-property resource="AccountingUiLabels" 
property="AccountingDebitCreditMustEqual"/></add-error>

Modified: ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml?rev=570894&r1=570893&r2=570894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml 
(original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml Wed Aug 
29 11:39:40 2007
@@ -263,9 +263,9 @@
             location="org/ofbiz/accounting/ledger/AcctgTransServices.xml" 
invoke="calculateAcctgTransTrialBalance" auth="true">
         <description>Calculate Trial Balance for a AcctgTrans</description>
         <auto-attributes include="pk" mode="IN" optional="false"/>
-        <attribute name="debitTotal" type="Double" mode="OUT" 
optional="false"/>
-        <attribute name="creditTotal" type="Double" mode="OUT" 
optional="false"/>
-        <attribute name="debitCreditDifference" type="Double" mode="OUT" 
optional="false"/>
+        <attribute name="debitTotal" type="BigDecimal" mode="OUT" 
optional="false"/>
+        <attribute name="creditTotal" type="BigDecimal" mode="OUT" 
optional="false"/>
+        <attribute name="debitCreditDifference" type="BigDecimal" mode="OUT" 
optional="false"/>
     </service>
     <service name="postAcctgTrans" default-entity-name="AcctgTrans" 
engine="simple"
             location="org/ofbiz/accounting/ledger/AcctgTransServices.xml" 
invoke="postAcctgTrans" auth="true"


Reply via email to