You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ha...@apache.org on 2008/12/25 07:26:15 UTC

svn commit: r729396 [1/2] - in /ofbiz/trunk: applications/accounting/config/ applications/accounting/entitydef/ applications/accounting/src/org/ofbiz/accounting/invoice/ applications/accounting/src/org/ofbiz/accounting/payment/ applications/accounting/...

Author: hansbak
Date: Wed Dec 24 22:26:14 2008
New Revision: 729396

URL: http://svn.apache.org/viewvc?rev=729396&view=rev
Log:
OFBIZ-2097: show organizationPartyId in header(can be set in preferences), rewrote financial history to show currencies, invoice/p[aymentworker now can show in actual and organizationparty currency

Added:
    ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy   (with props)
    ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy   (with props)
Modified:
    ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
    ofbiz/trunk/applications/accounting/entitydef/entitymodel.xml
    ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceWorker.java
    ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java
    ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/EditInvoice.groovy
    ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml
    ofbiz/trunk/applications/accounting/webapp/accounting/payment/PaymentForms.xml
    ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml
    ofbiz/trunk/applications/accounting/widget/Menus.xml
    ofbiz/trunk/applications/party/entitydef/entitymodel.xml
    ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/PartyFinancialHistory.groovy
    ofbiz/trunk/applications/party/webapp/partymgr/party/PartyForms.xml
    ofbiz/trunk/applications/party/widget/partymgr/PartyScreens.xml
    ofbiz/trunk/applications/party/widget/partymgr/ProfileScreens.xml
    ofbiz/trunk/framework/common/config/CommonUiLabels.xml
    ofbiz/trunk/framework/common/webcommon/includes/header.ftl
    ofbiz/trunk/framework/common/widget/CommonScreens.xml

Modified: ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml (original)
+++ ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml Wed Dec 24 22:26:14 2008
@@ -3777,12 +3777,8 @@
         <value xml:lang="th">PDF</value>
         <value xml:lang="zh">PDF</value>
     </property>
-    <property key="AccountingInvoicePDFOtherCur">
-        <value xml:lang="en">PDF other Currency</value>
-        <value xml:lang="fr">PDF en autre devise</value>
-        <value xml:lang="it">PDF Altra Valuta</value>
-        <value xml:lang="nl">PDF andere valuta</value>
-        <value xml:lang="th">PDF สกุลเงินอื่น ๆ</value>
+    <property key="AccountingInvoicePDFDefaultCur">
+        <value xml:lang="en">PDF default Currency</value>
     </property>
     <property key="AccountingInvoicePaid">
         <value xml:lang="ar">مسدد</value>
@@ -3855,6 +3851,9 @@
         <value xml:lang="th">ใบกำกับการขาย</value>
         <value xml:lang="zh">销售发票</value>
     </property>
+    <property key="InvoicesApplPayments">
+            <value xml:lang="en">Payments applied to Invoices</value>
+    </property>
     <property key="AccountingInvoiceStatus">
         <value xml:lang="ar">الوضعيات</value>
         <value xml:lang="en">Status</value>

Modified: ofbiz/trunk/applications/accounting/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/entitydef/entitymodel.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/accounting/entitydef/entitymodel.xml Wed Dec 24 22:26:14 2008
@@ -1418,6 +1418,45 @@
       </relation>
     </entity>
 
+  <view-entity entity-name="InvoiceAndApplAndPayment" package-name="org.ofbiz.accounting.invoice" title="Invoice and related applications and payments">
+    <member-entity entity-alias="INV" entity-name="Invoice"/>
+    <member-entity entity-alias="PAP" entity-name="PaymentApplication"/>
+    <member-entity entity-alias="PAM" entity-name="Payment"/>
+    <alias-all entity-alias="INV"/>
+    <alias-all entity-alias="PAP">
+      <exclude field="billingAccountId"/>
+    </alias-all>
+    <alias-all entity-alias="PAM" prefix="pm"/>
+    <view-link entity-alias="INV" rel-entity-alias="PAP">
+      <key-map field-name="invoiceId"/>
+    </view-link>
+    <view-link entity-alias="PAP" rel-entity-alias="PAM">
+      <key-map field-name="paymentId"/>
+    </view-link>
+  </view-entity>
+
+  <view-entity entity-name="InvoiceAndType" package-name="org.ofbiz.accounting.invoice">
+    <member-entity entity-alias="INV" entity-name="Invoice"/>
+    <member-entity entity-alias="IVT" entity-name="InvoiceType"/>
+    <alias-all entity-alias="INV"/>
+    <alias-all entity-alias="IVT">
+      <exclude field="invoiceTypeId"/>
+    </alias-all>
+    <view-link entity-alias="INV" rel-entity-alias="IVT">
+      <key-map field-name="invoiceTypeId"/>
+    </view-link>
+    <relation type="many" rel-entity-name="InvoiceItem">
+      <key-map field-name="invoiceId"/>
+    </relation>
+    <relation type="many" rel-entity-name="PaymentApplication">
+      <key-map field-name="invoiceId"/>
+    </relation>
+    <relation type="many" rel-entity-name="AcctgTrans">
+      <key-map field-name="invoiceId"/>
+    </relation>
+  </view-entity>
+
+
   <!-- ========================================================= -->
   <!-- org.ofbiz.accounting.ledger -->
   <!-- ========================================================= -->
@@ -2531,6 +2570,26 @@
         <key-map field-name="overrideGlAccountId" rel-field-name="glAccountId"/>
       </relation>
     </entity>
+    <view-entity entity-name="PaymentAndType"
+      package-name="org.ofbiz.accounting.payment"
+      never-cache="true"
+      title="Payment and Payment type View Entity">
+      <member-entity entity-alias="PY" entity-name="Payment"/> 
+      <member-entity entity-alias="TY" entity-name="PaymentType"/>
+      <alias-all entity-alias="PY"/>
+      <alias-all entity-alias="TY">
+        <exclude field="paymentTypeId"/>
+      </alias-all>
+      <view-link entity-alias="PY" rel-entity-alias="TY">
+        <key-map field-name="paymentTypeId"/>
+      </view-link>
+      <relation type="many" fk-name="PAYTYPE_PAY" rel-entity-name="PaymentApplication">
+        <key-map field-name="paymentId"/>
+      </relation>
+      <relation type="many" fk-name="PAYTYPE_TOPAY" title="to" rel-entity-name="PaymentApplication">
+        <key-map field-name="paymentId" rel-field-name="toPaymentId"/>
+      </relation>
+    </view-entity>
     <view-entity entity-name="PaymentAndApplication"
             package-name="org.ofbiz.accounting.payment"
             never-cache="true"

Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceWorker.java?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceWorker.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceWorker.java Wed Dec 24 22:26:14 2008
@@ -19,6 +19,7 @@
 package org.ofbiz.accounting.invoice;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.sql.Timestamp;
 import java.util.Iterator;
 import java.util.List;
@@ -29,6 +30,7 @@
 import org.ofbiz.base.util.UtilDateTime;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilNumber;
+import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -37,6 +39,7 @@
 import org.ofbiz.entity.condition.EntityConditionList;
 import org.ofbiz.entity.condition.EntityOperator;
 import org.ofbiz.entity.util.EntityUtil;
+import org.ofbiz.service.LocalDispatcher;
 
 /**
  * InvoiceWorker - Worker methods of invoices
@@ -60,6 +63,10 @@
     }
 
     public static BigDecimal getInvoiceTotalBd(GenericDelegator delegator, String invoiceId) {
+        return getInvoiceTotalBd(delegator, invoiceId, true);
+    }
+
+    public static BigDecimal getInvoiceTotalBd(GenericDelegator delegator, String invoiceId, Boolean actualCurrency) {
         if (delegator == null) {
             throw new IllegalArgumentException("Null delegator is not allowed in this method");
         }
@@ -75,7 +82,7 @@
             throw new IllegalArgumentException("The invoiceId passed does not match an existing invoice");
         }
         
-        return getInvoiceTotalBd(invoice);
+        return getInvoiceTotalBd(invoice, actualCurrency);
     }
 
     /** Method to get the taxable invoice item types as a List of invoiceItemTypeIds.  These are identified in Enumeration with enumTypeId TAXABLE_INV_ITM_TY. */
@@ -127,10 +134,10 @@
     }
     
     public static double getInvoiceNoTaxTotal(GenericValue invoice) {
-        return getInvoiceTotalBd(invoice).doubleValue() - getInvoiceTaxTotal(invoice);
+        return getInvoiceTotalBd(invoice, true).doubleValue() - getInvoiceTaxTotal(invoice);
     }
     public static BigDecimal getInvoiceNoTaxTotalBd(GenericValue invoice) {
-        return getInvoiceTotalBd(invoice).subtract(getInvoiceTaxTotalBd(invoice));
+        return getInvoiceTotalBd(invoice, true).subtract(getInvoiceTaxTotalBd(invoice));
     }
     
     /**
@@ -139,10 +146,14 @@
      * @return the invoice total as double
      */
     public static double getInvoiceTotal(GenericValue invoice) {
-        return getInvoiceTotalBd(invoice).doubleValue();
+        return getInvoiceTotalBd(invoice, true).doubleValue();
     }
         
     public static BigDecimal getInvoiceTotalBd(GenericValue invoice) {
+        return getInvoiceTotalBd(invoice, true);
+    }
+        
+    public static BigDecimal getInvoiceTotalBd(GenericValue invoice, Boolean actualCurrency) {
         BigDecimal invoiceTotal = ZERO;
         BigDecimal invoiceTaxTotal = ZERO;
         List invoiceItems = null;
@@ -168,6 +179,10 @@
                 }
             }
         }
+        invoiceTotal = invoiceTotal.add(invoiceTaxTotal).setScale(decimals, rounding);
+        if (UtilValidate.isNotEmpty(invoiceTotal) && !actualCurrency) {
+            invoiceTotal = invoiceTotal.multiply(getInvoiceCurrencyConversionRate(invoice)).setScale(decimals,rounding);
+        }
         return invoiceTotal.add(invoiceTaxTotal).setScale(decimals, rounding);
     }
 
@@ -365,11 +380,17 @@
      * @param invoice GenericValue object of the Invoice
      * @return the invoice total as double
      */
+    public static BigDecimal getInvoiceNotApplied(GenericDelegator delegator, String invoiceId, Boolean actualCurrency) {
+        return InvoiceWorker.getInvoiceTotalBd(delegator, invoiceId, actualCurrency).subtract(getInvoiceAppliedBd(delegator, invoiceId,  UtilDateTime.nowTimestamp(), actualCurrency));
+    }
     public static BigDecimal getInvoiceNotApplied(GenericDelegator delegator, String invoiceId) {
         return InvoiceWorker.getInvoiceTotalBd(delegator, invoiceId).subtract(getInvoiceAppliedBd(delegator, invoiceId));
     }
     public static BigDecimal getInvoiceNotApplied(GenericValue invoice) {
-        return InvoiceWorker.getInvoiceTotalBd(invoice).subtract(getInvoiceAppliedBd(invoice));
+        return InvoiceWorker.getInvoiceTotalBd(invoice, true).subtract(getInvoiceAppliedBd(invoice));
+    }
+    public static BigDecimal getInvoiceNotApplied(GenericValue invoice, Boolean actualCurrency) {
+        return InvoiceWorker.getInvoiceTotalBd(invoice, actualCurrency).subtract(getInvoiceAppliedBd(invoice, actualCurrency));
     }
     /**
      * Returns amount not applied (ie, still outstanding) of an invoice at an asOfDate, based on Payment.effectiveDate <= asOfDateTime
@@ -379,7 +400,7 @@
      * @return
      */
     public static BigDecimal getInvoiceNotApplied(GenericValue invoice, Timestamp asOfDateTime) {
-        return InvoiceWorker.getInvoiceTotalBd(invoice).subtract(getInvoiceAppliedBd(invoice, asOfDateTime));
+        return InvoiceWorker.getInvoiceTotalBd(invoice, true).subtract(getInvoiceAppliedBd(invoice, asOfDateTime));
     }
 
     
@@ -393,7 +414,7 @@
     }
 
     public static BigDecimal getInvoiceAppliedBd(GenericDelegator delegator, String invoiceId) {
-        return getInvoiceAppliedBd(delegator, invoiceId, UtilDateTime.nowTimestamp());
+        return getInvoiceAppliedBd(delegator, invoiceId, UtilDateTime.nowTimestamp(), true);
     }
     
     /**
@@ -404,7 +425,7 @@
      * @param asOfDateTime - a Timestamp
      * @return
      */
-    public static BigDecimal getInvoiceAppliedBd(GenericDelegator delegator, String invoiceId, Timestamp asOfDateTime) {
+    public static BigDecimal getInvoiceAppliedBd(GenericDelegator delegator, String invoiceId, Timestamp asOfDateTime, Boolean actualCurrency) {
         if (delegator == null) {
             throw new IllegalArgumentException("Null delegator is not allowed in this method");
         }
@@ -433,6 +454,9 @@
                 invoiceApplied = invoiceApplied.add(paymentApplication.getBigDecimal("amountApplied")).setScale(decimals,rounding);
             }
         }
+        if (UtilValidate.isNotEmpty(invoiceApplied) && !actualCurrency) {
+        	invoiceApplied = invoiceApplied.multiply(getInvoiceCurrencyConversionRate(delegator, invoiceId)).setScale(decimals,rounding);
+        }
         return invoiceApplied;
     }
     /**
@@ -451,8 +475,11 @@
      * @param invoiceItemSeqId
      * @return
      */
+    public static BigDecimal getInvoiceAppliedBd(GenericValue invoice, Boolean actualCurrency) {
+        return getInvoiceAppliedBd(invoice.getDelegator(), invoice.getString("invoiceId"), UtilDateTime.nowTimestamp(), actualCurrency);
+    }
     public static BigDecimal getInvoiceAppliedBd(GenericValue invoice, Timestamp asOfDateTime) {
-        return getInvoiceAppliedBd(invoice.getDelegator(), invoice.getString("invoiceId"), asOfDateTime);
+        return getInvoiceAppliedBd(invoice.getDelegator(), invoice.getString("invoiceId"), asOfDateTime, true);
     }
     public static BigDecimal getInvoiceAppliedBd(GenericValue invoice) {
         return getInvoiceAppliedBd(invoice, UtilDateTime.nowTimestamp());
@@ -519,6 +546,82 @@
         }
         return invoiceItemApplied;        
     }
-    
+    public static BigDecimal getInvoiceCurrencyConversionRate(GenericValue invoice) {
+    	BigDecimal conversionRate = null;
+    	GenericDelegator delegator = invoice.getDelegator();
+    	String otherCurrencyUomId = null;
+    	// find the organization party currencyUomId which different from the invoice currency
+    	try {
+    		GenericValue party  = delegator.findByPrimaryKey("PartyAcctgPreference", UtilMisc.toMap("partyId", invoice.getString("partyIdFrom")));
+    		if (UtilValidate.isEmpty(party) || party.getString("baseCurrencyUomId").equals(invoice.getString("currencyUomId"))) {
+    			party  = delegator.findByPrimaryKey("PartyAccntgPreferences", UtilMisc.toMap("partyId", invoice.getString("partyId")));
+    		}
+    		if (party.getString("baseCurrencyUomId").equals(invoice.getString("currencyUomId"))) {
+    			return BigDecimal.ONE;  // organization party has the same currency so conversion not required.
+    		} else {
+    			otherCurrencyUomId = new String(invoice.getString("currencyUomId"));
+    		}
+    	} catch (GenericEntityException e) {
+    		Debug.logError(e, "Trouble getting database records....", module);            
+    	}
+
+    	try {
+    		// check if the invoice is posted and get the conversion from there
+    		List acctgTransEntries = invoice.getRelated("AcctgTrans");
+    		if (UtilValidate.isNotEmpty(acctgTransEntries)) {
+    			GenericValue acctgTransEntry = ((GenericValue) acctgTransEntries.get(0)).getRelated("AcctgTransEntry").get(0);
+    			conversionRate = acctgTransEntry.getBigDecimal("amount").divide(acctgTransEntry.getBigDecimal("origAmount"), new MathContext(100)).setScale(decimals,rounding);
+    		}
+    		// check if a payment is applied and use the currency conversion from there
+    		if (UtilValidate.isEmpty(conversionRate)) {
+    			List paymentAppls = invoice.getRelated("PaymentApplication");
+    			Iterator ii = paymentAppls.iterator();
+    			while (ii.hasNext()) {
+    				GenericValue paymentAppl = (GenericValue) ii.next();
+    				GenericValue payment = paymentAppl.getRelatedOne("Payment");
+    				if (UtilValidate.isNotEmpty(payment.getBigDecimal("actualCurrencyAmount"))) {
+    					if (UtilValidate.isEmpty(conversionRate)) {
+    						conversionRate = payment.getBigDecimal("amount").divide(payment.getBigDecimal("actualCurrencyAmount"),new MathContext(100)).setScale(decimals,rounding);
+    					} else {
+    						conversionRate = conversionRate.add(payment.getBigDecimal("amount").divide(payment.getBigDecimal("actualCurrencyAmount"),new MathContext(100))).divide(new BigDecimal("2"),new MathContext(100)).setScale(decimals,rounding);
+    					}
+    				}
+    			}
+    		}
+    		// use the dated conversion entity
+    		if (UtilValidate.isEmpty(conversionRate)) {
+    			List rates = EntityUtil.filterByDate(delegator.findByAnd("UomConversionDated", UtilMisc.toMap("uomIdTo", invoice.getString("currencyUomId"), "uomId", otherCurrencyUomId)), invoice.getTimestamp("invoiceDate")); 
+    			if (UtilValidate.isNotEmpty(rates)) {
+    				conversionRate = (BigDecimal.ONE).divide(((GenericValue) rates.get(0)).getBigDecimal("conversionFactor"), new MathContext(100)).setScale(decimals,rounding);
+    			} else {
+    				Debug.logError("Could not find conversionrate for invoice: " + invoice.getString("invoiceId"), module);
+    				return new BigDecimal("1");
+    			}
+    		}
+
+    	} catch (GenericEntityException e) {
+    		Debug.logError(e, "Trouble getting database records....", module);            
+    	}
+    	return(conversionRate);
+    }
+
+    public static BigDecimal getInvoiceCurrencyConversionRate(GenericDelegator delegator, String invoiceId) {
+        if (delegator == null) {
+            throw new IllegalArgumentException("Null delegator is not allowed in this method");
+        }
+        
+        GenericValue invoice = null;
+        try {
+            invoice = delegator.findByPrimaryKey("Invoice", UtilMisc.toMap("invoiceId", invoiceId));    
+        } catch (GenericEntityException e) {
+            Debug.logError(e, "Problem getting Invoice", module);
+        }
+        
+        if (invoice == null) {
+            throw new IllegalArgumentException("The invoiceId passed does not match an existing invoice");
+        }
+        
+        return getInvoiceCurrencyConversionRate(invoice);
+    }
    
 }

Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java Wed Dec 24 22:26:14 2008
@@ -54,18 +54,18 @@
     private static int rounding = UtilNumber.getBigDecimalRoundingMode("invoice.rounding");
     
     /** @deprecated */
-    public static void getPartyPaymentMethodValueMaps(PageContext pageContext, String partyId, boolean showOld, String paymentMethodValueMapsAttr) {
+    public static void getPartyPaymentMethodValueMaps(PageContext pageContext, String partyId, Boolean showOld, String paymentMethodValueMapsAttr) {
         GenericDelegator delegator = (GenericDelegator) pageContext.getRequest().getAttribute("delegator");
         List paymentMethodValueMaps = getPartyPaymentMethodValueMaps(delegator, partyId, showOld);
         pageContext.setAttribute(paymentMethodValueMapsAttr, paymentMethodValueMaps);
     }
 
-    // to be able to use in minilanguage where boolean cannot be used
+    // to be able to use in minilanguage where Boolean cannot be used
     public static List getPartyPaymentMethodValueMaps(GenericDelegator delegator, String partyId) {
         return(getPartyPaymentMethodValueMaps(delegator, partyId, false)); 
     }
     
-    public static List getPartyPaymentMethodValueMaps(GenericDelegator delegator, String partyId, boolean showOld) {
+    public static List getPartyPaymentMethodValueMaps(GenericDelegator delegator, String partyId, Boolean showOld) {
         List paymentMethodValueMaps = new LinkedList();
         try {
             List paymentMethods = delegator.findByAnd("PaymentMethod", UtilMisc.toMap("partyId", partyId));
@@ -118,7 +118,7 @@
         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
         Map results = new HashMap();
         
-        boolean tryEntity = true;
+        Boolean tryEntity = true;
         if (request.getAttribute("_ERROR_MESSAGE_") != null) tryEntity = false;
 
         String donePage = request.getParameter("DONE_PAGE");
@@ -236,10 +236,10 @@
      * @return the applied total as double
      */
     public static double getPaymentApplied(GenericDelegator delegator, String paymentId) {
-        return getPaymentAppliedBd(delegator, paymentId).doubleValue(); 
+        return getPaymentAppliedBd(delegator, paymentId, false).doubleValue(); 
     }
     
-    public static BigDecimal getPaymentAppliedBd(GenericDelegator delegator, String paymentId) {
+    public static BigDecimal getPaymentAppliedBd(GenericDelegator delegator, String paymentId, Boolean actual) {
         if (delegator == null) {
             throw new IllegalArgumentException("Null delegator is not allowed in this method");
         }
@@ -255,7 +255,7 @@
             throw new IllegalArgumentException("The paymentId passed does not match an existing payment");
         }
         
-        return getPaymentAppliedBd(payment);
+        return getPaymentAppliedBd(payment, actual);
     }
     /**
      * Method to return the amount applied converted to the currency of payment
@@ -307,7 +307,7 @@
      * @param false for currency of the payment, true for the actual currency
      * @return the applied total as BigDecimal in the currency of the payment
      */
-    public static BigDecimal getPaymentAppliedBd(GenericValue payment, boolean actual) {
+    public static BigDecimal getPaymentAppliedBd(GenericValue payment, Boolean actual) {
         BigDecimal paymentApplied = BigDecimal.ZERO;
         List paymentApplications = null;
         try {
@@ -344,11 +344,21 @@
     public static BigDecimal getPaymentNotAppliedBd(GenericValue payment) {
         return payment.getBigDecimal("amount").subtract(getPaymentAppliedBd(payment)).setScale(decimals,rounding);
     }
+    public static BigDecimal getPaymentNotAppliedBd(GenericValue payment, Boolean actual) {
+    	if (actual && UtilValidate.isNotEmpty(payment.getBigDecimal("actualCurrencyAmount"))) {
+    		return payment.getBigDecimal("actualCurrencyAmount").subtract(getPaymentAppliedBd(payment, actual)).setScale(decimals,rounding);
+    	}
+   		return payment.getBigDecimal("amount").subtract(getPaymentAppliedBd(payment)).setScale(decimals,rounding);
+    }
     public static double getPaymentNotApplied(GenericDelegator delegator, String paymentId) {
-        return getPaymentNotAppliedBd(delegator,paymentId).doubleValue();
+        return getPaymentNotAppliedBd(delegator,paymentId, false).doubleValue();
+    }
+
+    public static BigDecimal getPaymentNotApplied(GenericDelegator delegator, String paymentId, Boolean actual) {
+        return getPaymentNotAppliedBd(delegator,paymentId, actual);
     }
 
-    public static BigDecimal getPaymentNotAppliedBd(GenericDelegator delegator, String paymentId) {
+    public static BigDecimal getPaymentNotAppliedBd(GenericDelegator delegator, String paymentId, Boolean actual) {
         if (delegator == null) {
             throw new IllegalArgumentException("Null delegator is not allowed in this method");
         }
@@ -363,6 +373,6 @@
         if (payment == null) {
             throw new IllegalArgumentException("The paymentId passed does not match an existing payment");
         }
-        return payment.getBigDecimal("amount").subtract(getPaymentAppliedBd(delegator,paymentId)).setScale(decimals,rounding);
+        return payment.getBigDecimal("amount").subtract(getPaymentAppliedBd(delegator,paymentId, actual)).setScale(decimals,rounding);
     }
 }

Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/EditInvoice.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/EditInvoice.groovy?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/EditInvoice.groovy (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/EditInvoice.groovy Wed Dec 24 22:26:14 2008
@@ -35,60 +35,20 @@
 invoice = delegator.findByPrimaryKey("Invoice", [invoiceId : invoiceId]);
 context.invoice = invoice;
 
-other = parameters.other;        // allow the display of the invoice in the currency of the other party. sales: partyId, purch: partyIdFrom using the convertUom service.
-conversionRate = null;
+currency = parameters.currency;        // allow the display of the invoice in the original currency, the default is to display the invoice in the default currency
+BigDecimal conversionRate = new BigDecimal("1");
 ZERO = BigDecimal.ZERO;
 decimals = UtilNumber.getBigDecimalScale("invoice.decimals");
 rounding = UtilNumber.getBigDecimalRoundingMode("invoice.rounding");
-if ("Y".equalsIgnoreCase(other)) {
-    if (invoice.currencyUomId.equals(invoice.getRelatedOne("Party").preferredCurrencyUomId)) {
-        otherCurrency = invoice.getRelatedOne("FromParty").preferredCurrencyUomId;
-    } else {
-        otherCurrency = invoice.getRelatedOne("Party").preferredCurrencyUomId;
-    }
-    result = null;
-    if (otherCurrency && invoice.currencyUomId && !otherCurrency.equals(invoice.currencyUomId)) {
-        invoice.currencyUomId = otherCurrency;
-        // check if the transaction is created, take the conversion from there
-        acctgTransEntries = invoice.getRelated("AcctgTrans");
-        if (acctgTransEntries) {
-            acctgTransEntry = acctgTransEntries[0].getRelated("AcctgTransEntry")[0];
-            conversionRate = acctgTransEntry.getBigDecimal("amount").divided(acctgTransEntry.getBigDecimal("origAmount"), new MathContext(100));
-        }
-        // check if a payment is applied and use the currency conversion from there
-        if (!conversionRate) {
-            paymentAppls = invoice.getRelated("PaymentApplication");
-            paymentAppls.each { paymentAppl ->
-                payment = paymentAppl.getRelatedOne("Payment"); 
-                if (!conversionRate) {
-                    conversionRate = payment.getBigDecimal("amount").divide(payment.getBigDecimal("actualCurrencyAmount"),new MathContext(100));
-                } else {
-                    conversionRate = conversionRate.add(payment.getBigDecimal("amount").divide(payment.getBigDecimal("actualCurrencyAmount"),new MathContext(100))).divide(new BigDecimal("2"),new MathContext(100));
-                }
-            }
-        }
-        if (!conversionRate) {
-            result = dispatcher.runSync("convertUom", [uomId : invoice.currencyUomId, 
-                                               uomIdTo : otherCurrency, 
-                                               originalValue : new Double("1.00"), 
-                                               asOfDate : invoice.invoiceDate]);
-    
-            if (result.convertedValue != null) {
-                conversionRate = new BigDecimal(result.convertedValue.doubleValue());
-                invoice.invoiceMessage = invoice.get("invoiceMessage") ? 
-                          invoice.invoiceMessage.concat(" Converted from " + invoice.currencyUomId + " Rate: " + conversionRate.setScale(6, rounding).toString()) :
-                          "Converted from " + invoice.currencyUomId + " Rate: " + conversionRate.setScale(6, rounding).toString();
-            }
-        }
-    } 
-}
-
-if (!conversionRate) {
-    conversionRate = 1;
-}
 
 if (invoice) {
-    invoiceItems = invoice.getRelatedOrderBy("InvoiceItem", ["invoiceItemSeqId"]);
+	if (currency && !invoice.getString("currencyUomId").equals(currency)) {
+		conversionRate = InvoiceWorker.getInvoiceCurrencyConversionRate(invoice);
+		invoice.currencyUomId = currency;
+		invoice.invoiceMessage = " converted from original with a rate of: " + conversionRate.setScale(8, rounding);  
+	}
+	
+	invoiceItems = invoice.getRelatedOrderBy("InvoiceItem", ["invoiceItemSeqId"]);
     invoiceItemsConv = FastList.newInstance();
     invoiceItems.each { invoiceItem ->
       invoiceItem.amount = new Double((invoiceItem.getBigDecimal("amount").multiply(conversionRate).setScale(decimals, rounding)).doubleValue());

Modified: ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml Wed Dec 24 22:26:14 2008
@@ -76,8 +76,12 @@
         <field name="invoiceDate"><display/></field>
         <field name="statusId"><display-entity entity-name="StatusItem" description="${description}"/></field>
         <field name="description"><display/></field>
-        <field name="partyIdFrom"><display description="${partyNameResultFrom.fullName} [${partyIdFrom}]"/></field>
-        <field name="partyIdTo" parameter-name="partyId"><display description="${partyNameResultTo.fullName} [${partyId}]"/></field>
+        <field name="partyIdFrom">
+            <hyperlink target="/partymgr/control/PartyFinancialHistory?partyId=${partyIdFrom}" target-type="inter-app" description="${partyNameResultFrom.fullName} [${partyIdFrom}]"/>
+        </field>
+        <field name="partyIdTo" parameter-name="partyId">
+            <hyperlink target="/partymgr/control/PartyFinancialHistory?partyId=${partyId}" target-type="inter-app" description="${partyNameResultTo.fullName} [${partyId}]"/>
+        </field>
         <field name="invoiceDate"><display description="${date:dateStr(invoiceDate)}"/></field>
         <field name="total" widget-area-style="align-text"><display type="currency" currency="${currencyUomId}"/></field>
         <field name="amountToApply" widget-area-style="align-text"><display type="currency" currency="${currencyUomId}"/></field>

Modified: ofbiz/trunk/applications/accounting/webapp/accounting/payment/PaymentForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/payment/PaymentForms.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/payment/PaymentForms.xml (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/payment/PaymentForms.xml Wed Dec 24 22:26:14 2008
@@ -83,6 +83,15 @@
 
     <form name="NewPaymentOut" type="single" target="createPayment" default-map-name="payment"
         header-row-style="header-row" default-table-style="basic-table">
+        <actions>
+            <entity-condition entity-name="PaymentType" list-name="paymentTypes">
+                <condition-list combine="or">
+                    <condition-expr field-name="parentTypeId" operator="equals" value="DISBURSEMENT"/>
+                    <condition-expr field-name="parentTypeId" operator="equals" value="TAX_PAYMENT"/>
+                </condition-list>
+                <order-by field-name="description"/>
+            </entity-condition>
+        </actions>
         <field name="statusId"><hidden value="PMNT_NOT_PAID"/></field>
         <field position="1" name="organizationPartyId" parameter-name="partyIdFrom">
             <drop-down allow-empty="false">
@@ -95,9 +104,7 @@
         <field name="partyIdTo" position="2"><lookup target-form-name="LookupPartyName"/></field>
         <field position="1" name="paymentTypeId">
             <drop-down allow-empty="false">
-                <entity-options description="${description}" entity-name="PaymentType">
-                    <entity-order-by field-name="description"/>
-                </entity-options>
+                <list-options list-name="paymentTypes" key-name="paymentTypeId" description="${description}"/>
             </drop-down>
         </field>
         <field position="2" name="paymentMethodTypeId">
@@ -135,6 +142,7 @@
         <field position="1" name="paymentTypeId">
             <drop-down allow-empty="false">
                 <entity-options description="${description}" entity-name="PaymentType">
+                    <entity-constraint field-name="parentTypeId" value="RECEIPT"/>
                     <entity-order-by field-name="description"/>
                 </entity-options>
             </drop-down>

Modified: ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml Wed Dec 24 22:26:14 2008
@@ -444,20 +444,6 @@
                         <container style="screenlet">
                             <container style="screenlet-title-bar">
                                 <container style="h3">
-                                    <label text="${uiLabelMap.AccountingAssignPaymentToInvoice}"/>
-                                </container>
-                            </container>
-                            <container style="screenlet-body">
-                                <section>
-                                    <widgets>    
-                                        <include-form name="AddPayment" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
-                                    </widgets>
-                                </section>
-                            </container>
-                        </container>
-                        <container style="screenlet">
-                            <container style="screenlet-title-bar">
-                                <container style="h3">
                                     <label text="${uiLabelMap.AccountingInvoiceItems}"/>
                                 </container>
                             </container>

Modified: ofbiz/trunk/applications/accounting/widget/Menus.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/Menus.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/Menus.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/Menus.xml Wed Dec 24 22:26:14 2008
@@ -108,7 +108,6 @@
         </menu-item>
     </menu>
     <menu name="InvoiceSubTabBar" menu-container-style="button-bar button-style-2" default-selected-style="selected">  
-        
         <menu-item name="createNew" title="${uiLabelMap.CommonCreateNew}" >
             <link target="newInvoice"/>
         </menu-item>
@@ -120,15 +119,18 @@
         </menu-item>
         <menu-item name="pdf" title="${uiLabelMap.AccountingInvoicePDF}">
             <condition>
-                <not><if-empty field-name="invoice.invoiceId"/></not>
+                    <not><if-empty field-name="invoice.invoiceId"/></not>
             </condition>
             <link target="invoice.pdf?invoiceId=${invoice.invoiceId}" target-window="_BLANK"/>
         </menu-item>
-        <menu-item name="pdfOtherCur" title="${uiLabelMap.AccountingInvoicePDFOtherCur}">
+        <menu-item name="pdfDfltCur" title="${uiLabelMap.AccountingInvoicePDFDefaultCur}(${defaultOrganizationPartyCurrencyUomId})">
             <condition>
-                <not><if-empty field-name="invoice.invoiceId"/></not>
+                <and>
+                    <not><if-empty field-name="invoice.invoiceId"/></not>
+                    <if-compare-field field-name="invoice.currencyUomId" operator="not-equals" to-field-name="defaultOrganizationPartyCurrencyUomId"/>
+                </and>
             </condition>
-            <link target="invoice.pdf?invoiceId=${invoice.invoiceId}&amp;other=Y" target-window="_BLANK"/>
+            <link target="invoice.pdf?invoiceId=${invoice.invoiceId}&amp;currency=${defaultOrganizationPartyCurrencyUomId}" target-window="_BLANK"/>
         </menu-item>
         <menu-item name="statusToApproved" title="${uiLabelMap.AccountingInvoiceStatusToApproved}">
             <condition>
@@ -437,13 +439,13 @@
             <condition>
                 <if-service-permission service-name="acctgPrefPermissionCheck" main-action="UPDATE"/>
             </condition>
-            <link target="AdminMain?organizationPartyId=${organizationPartyId}"/>
+            <link target="AdminMain?organizationPartyId=${defaultOrganizationPartyId}"/>
         </menu-item>
         <menu-item name="PartyAccounts" title="${uiLabelMap.AccountingAccounting}">
             <condition>
                 <if-service-permission service-name="basicGeneralLedgerPermissionCheck" main-action="VIEW"/>
             </condition>
-            <link target="PartyAccountsSummary?organizationPartyId=${organizationPartyId}"/>
+            <link target="PartyAccountsSummary?organizationPartyId=${defaultOrganizationPartyId}"/>
         </menu-item>
     </menu>
     <menu name="OrganizationAccountingTabBar" extends="CommonTabBarMenu" extends-resource="component://common/widget/CommonMenus.xml"

Modified: ofbiz/trunk/applications/party/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/entitydef/entitymodel.xml?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/party/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/party/entitydef/entitymodel.xml Wed Dec 24 22:26:14 2008
@@ -2627,19 +2627,15 @@
             <key-map field-name="partyId"/>
         </relation>
     </extend-entity>
-    <view-entity entity-name="PartyAcctgAndName"
+    <view-entity entity-name="PartyAcctgPrefAndGroup"
         package-name="org.ofbiz.party.party"
-        title="PartyAcctgPreference and PartyNameView Entity">
+        title="PartyAcctgPreference and PartyGroup Entity">
       <member-entity entity-alias="PTYACCPREF" entity-name="PartyAcctgPreference"/>
-      <member-entity entity-alias="PTYNVIEW" entity-name="PartyNameView"/>
+      <member-entity entity-alias="PTYGROUP" entity-name="PartyGroup"/>
       <alias entity-alias="PTYACCPREF"  name="partyId" />
-      <alias entity-alias="PTYNVIEW"  name="firstName"/>
-      <alias entity-alias="PTYNVIEW"  name="middleName"/>
-      <alias entity-alias="PTYNVIEW"  name="lastName"/>
-      <alias entity-alias="PTYNVIEW"  name="groupName"/>
-      <alias entity-alias="PTYNVIEW"  name="partyTypeId"/>
-      <alias entity-alias="PTYNVIEW"  name="description"/>
-      <view-link entity-alias="PTYACCPREF" rel-entity-alias="PTYNVIEW">
+      <alias entity-alias="PTYACCPREF"  name="baseCurrencyUomId" />
+      <alias entity-alias="PTYGROUP"  name="groupName"/>
+      <view-link entity-alias="PTYACCPREF" rel-entity-alias="PTYGROUP">
         <key-map field-name="partyId"/>
       </view-link>
     </view-entity>

Modified: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/PartyFinancialHistory.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/PartyFinancialHistory.groovy?rev=729396&r1=729395&r2=729396&view=diff
==============================================================================
--- ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/PartyFinancialHistory.groovy (original)
+++ ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/PartyFinancialHistory.groovy Wed Dec 24 22:26:14 2008
@@ -16,278 +16,116 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import java.util.*;
-import java.math.*;
-import java.sql.Timestamp;
-import org.ofbiz.base.util.*;
 import org.ofbiz.entity.*;
-import org.ofbiz.securityext.login.*;
+import org.ofbiz.base.util.*;
 import org.ofbiz.common.*;
 import org.ofbiz.webapp.control.*;
 import org.ofbiz.accounting.invoice.*;
 import org.ofbiz.accounting.payment.*;
-
-delegator = parameters.delegator;
-partyId = parameters.partyId;
-List historyList = new LinkedList();
-
-//get payment totals
-BigDecimal totalPaymentsIn = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-BigDecimal totalPaymentsOut = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-tpayments = delegator.findByOr("Payment",["partyIdTo" : partyId,"partyIdFrom" : partyId]);
-Iterator pl = tpayments.iterator();
-while (pl.hasNext()) {
-    payment = (GenericValue) pl.next();
-    if (payment.statusId.equals("PMNT_CANCELLED")) continue;
-    if (payment.partyIdTo.equals(partyId))
-        totalPaymentsIn = totalPaymentsIn.add(payment.getBigDecimal("amount")).setScale(2,BigDecimal.ROUND_HALF_UP);
-    else
-        totalPaymentsOut = totalPaymentsOut.add(payment.getBigDecimal("amount")).setScale(2,BigDecimal.ROUND_HALF_UP);
-}
-
-// totals
-BigDecimal totalSalesInvoice = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-BigDecimal totalPurchaseInvoice = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-BigDecimal totalInvoiceApplied = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-BigDecimal totalInvoiceNotApplied = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-
-// payment and invoices list which will be updated with the amount applied
-// to see what is left over...
-List invoices = delegator.findByOr("Invoice",["partyId" : partyId , "partyIdFrom" : partyId] , ["invoiceDate"]);
-List payments = delegator.findByOr("Payment",["partyIdTo" : partyId , "partyIdFrom" : partyId] , ["effectiveDate"]);
-    
-List notAppliedInvoices = new LinkedList(); // to store the not fully applied invoices
-    
-// start reading from the invoices list
-if (invoices != null && invoices.size() > 0) {
-    Iterator inv = invoices.iterator();
-    while (inv.hasNext())   {
-        invoice = (GenericValue) inv.next();
-        if (invoice.statusId.equals("INVOICE_CANCELLED")) continue;
-        BigDecimal invoiceAmount = InvoiceWorker.getInvoiceTotalBd(invoice).setScale(2,BigDecimal.ROUND_HALF_UP);
-        invoiceApplied = InvoiceWorker.getInvoiceAppliedBd(invoice).setScale(2,BigDecimal.ROUND_HALF_UP);
-        if (invoice.getString("partyId").equals(partyId)) { //negate for outgoing payments
-            invoiceAmount = invoiceAmount.multiply(new BigDecimal("-1"));
-            invoiceApplied = invoiceApplied.multiply(new BigDecimal("-1"));
-        }
-        if (invoice.invoiceTypeId.equals("PURCHASE_INVOICE")) totalPurchaseInvoice = totalPurchaseInvoice.add(invoiceAmount);
-        if (invoice.invoiceTypeId.equals("SALES_INVOICE")) totalSalesInvoice = totalSalesInvoice.add(invoiceAmount);
-        totalInvoiceApplied = totalInvoiceApplied.add(invoiceApplied);
-//      Debug.logInfo("Invoice type: "+ invoice.getString("invoiceTypeId") + "amount: " + invoiceAmount + " applied: " + invoiceApplied,"??");
-        if (!invoiceAmount.equals(invoiceApplied))  {
-            Map notAppliedInvoice = ["invoiceId" : invoice.invoiceId,
-                                     "invoiceTypeId" : invoice.invoiceTypeId.substring(0,1), 
-                                     "invoiceDate" : invoice.invoiceDate.toString().substring(0,10),
-                                     "invoiceAmount" : invoiceAmount.toString(),
-                                     "invoiceNotApplied" : invoiceAmount.subtract(invoiceApplied).toString()];
-                notAppliedInvoices.add(notAppliedInvoice);
-                totalInvoiceNotApplied = totalInvoiceNotApplied.add(invoiceAmount).subtract(invoiceApplied);
-        }
-        Map historyItem = ["invoiceId" : invoice.invoiceId,
-                           "invoiceTypeId" : invoice.invoiceTypeId.substring(0,1), 
-                           "invoiceDate" : invoice.invoiceDate.toString().substring(0,10),
-                           "invoiceAmount" : invoiceAmount.toString(),
-                           "totInvoiceApplied" : invoiceApplied.toString()
-            ];
-        // check for applications
-        List applications = invoice.getRelated("PaymentApplication",null,["paymentId"]);
-        if (applications != null && applications.size() > 0) {
-            Iterator appl = applications.iterator();
-            oldPaymentId = new String(" ");
-            BigDecimal applied = new BigDecimal("0");
-            boolean first = true;
-            while (appl.hasNext())  {   // read the applications for this invoice
-                application = (GenericValue) appl.next();
-                paymentId = application.paymentId;
-
-                //reduce the payment amount in the payment list
-                pl = payments.iterator();
-                while (pl.hasNext()) {
-                    payment = (GenericValue) pl.next();
-                    if (paymentId.equals(payment.paymentId)) {
-                        plInd = payments.indexOf(payment);
-                        payment.amount = payment.getBigDecimal("amount").subtract(application.getBigDecimal("amountApplied")).doubleValue();
-                        payments.remove(plInd);
-                        payments.add(plInd,payment);
-                        break;
-                    }
-                }
-                
-                // check if the payment number has changed, then we have to output a line....
-                if (!first && !paymentId.equals(oldPaymentId)) { // if the payment number has changed, but not the first
-                    payment = delegator.findByPrimaryKey("Payment",["paymentId" : oldPaymentId]);
-                    BigDecimal amount = payment.getBigDecimal("amount").setScale(2,BigDecimal.ROUND_HALF_UP);
-                    if (payment.getString("partyIdFrom").equals(partyId)) amount = amount.multiply(new BigDecimal("-1"));
-                    historyItem = ["applied" : applied.toString(),
-                                   "paymentId" : oldPaymentId,
-                                   "amount" : amount.toString(),
-                                   "effectiveDate" : payment.effectiveDate.toString().substring(0,10)];  
-                    historyList.add(historyItem);
-                    historyItem = new HashMap();
-                    applied = new BigDecimal("0");
-                }
-                applied = applied.add(application.getBigDecimal("amountApplied")).setScale(2,BigDecimal.ROUND_HALF_UP);
-                oldPaymentId = paymentId;
-                first = false;
-            }
-            if (!applied.equals("0")) {
-                payment = delegator.findByPrimaryKey("Payment",["paymentId" : oldPaymentId]);
-                if (payment != null) {
-                    BigDecimal amount = payment.getBigDecimal("amount").setScale(2,BigDecimal.ROUND_HALF_UP);
-                    if (payment.getString("partyIdFrom").equals(partyId))   amount = amount.multiply(new BigDecimal("-1"));
-                    historyItem = ["invoiceId" : invoice.invoiceId,
-                                   "invoiceTypeId" : invoice.invoiceTypeId.substring(0,1),
-                                   "invoiceDate" : invoice.invoiceDate.toString().substring(0,10),
-                                   "invoiceAmount" : invoiceAmount.toString(),
-                                   "totInvoiceApplied" : invoiceApplied.toString(),
-                                   "applied" : applied.toString(),
-                                   "paymentId" : oldPaymentId,
-                                   "amount" : amount.toString(),
-                                   "effectiveDate" : payment.effectiveDate.toString().substring(0,10)];
-                    historyList.add(historyItem);
-                }
-            }
-        }
-    }
-    context.historyListInvoices = historyList;
-}
-
-// totals
-BigDecimal totalPaymentApplied = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-// list of payments where payments are applied
-historyList = new LinkedList();
-if (payments) {
-    pay = payments.iterator();
-    while (pay.hasNext())   {
-        payment = (GenericValue) pay.next();
-        if (payment.statusId.equals("PMNT_CANCELLED")) continue;
-        applications = payment.getRelated("PaymentApplication", ["paymentId"]);
-        if (!applications) continue; // none found  
-        Map historyItem = ["paymentId" : payment.paymentId , "effectiveDate" : payment.effectiveDate.toString().substring(0,10)];
-        BigDecimal amount = payment.getBigDecimal("amount").setScale(2,BigDecimal.ROUND_HALF_UP);
-        if (payment.partyIdFrom.equals(organizationPartyId)) {
-            amount = amount.multiply(new BigDecimal("-1"));
-        }
-        historyItem.amount = amount.toString();
-        ap = applications.iterator();
-        while (ap.hasNext())    {
-            application = (GenericValue) ap.next();
-            historyItem = ["toPaymentId" : application.paymentId,
-                           "applied" : application.amountApplied];
-            toPayment = application.getRelatedOne("Payment");
-            historyItem.toEffectiveDate = toPayment.effectiveDate.toString().substring(0,10);
-            toAmount = toPayment.getBigDecimal("amount").setScale(2,BigDecimal.ROUND_HALF_UP);
-            if (toPayment.partyIdFrom.equals(partyId)) toAmount = toAmount.multiply(new BigDecimal("-1"));
-            //reduce the payment amount in the payment list
-            pl = payments.iterator();
-            while (pl.hasNext()) {
-                payment = (GenericValue) pl.next();
-                // reduce paymentId
-                if (application.paymentId.equals(payment.paymentId)) {
-                    plInd = payments.indexOf(payment);
-                    payment.amount =
-                            payment.getBigDecimal("amount").
-                            subtract(application.getBigDecimal("amountApplied")).doubleValue();
-                    payments.remove(plInd);
-                    payments.add(plInd,payment);
-                    totalPaymentApplied = totalPaymentApplied.add(application.getBigDecimal("amountApplied"));
-                }
-                // reduce toPaymentId
-                if (application.toPaymentId.equals(payment.paymentId)) {
-                    plInd = payments.indexOf(payment);
-                    payment.amount =
-                            payment.getBigDecimal("amount").
-                            subtract(application.getBigDecimal("amountApplied")).doubleValue();
-                    payments.remove(plInd);
-                    payments.add(plInd,payment);
-                    totalPaymentApplied = totalPaymentApplied.add(application.getBigDecimal("amountApplied"));
-                }
-            }
-        }
-    }
-    context.historyListPayments = historyList;
-}
-
-// check if any invoices left not applied
-if (notAppliedInvoices != null && notAppliedInvoices.size() > 0) {
-    context.historyListInvoicesN = notAppliedInvoices;
-}
-
-/*
-// list payments applied to other companies
-historyList = new LinkedList();
-if (payments) {
-    Iterator pm = payments.iterator();
-    while (pm.hasNext())    {
-        payment = (GenericValue) pm.next();
-        // check if payment completely applied
-        BigDecimal amount = payment.getBigDecimal("amount").setScale(2,BigDecimal.ROUND_HALF_UP);
-        if (amount.compareTo(new BigDecimal("0.00")) == 0) 
-            continue;
-        Debug.logInfo(" other company payments: " + payment.paymentId + " amount:" + payment.getBigDecimal("amount") + " applied:" + PaymentWorker.getPaymentAppliedBd(payment),"??");
-        List paymentApplications = payment.getRelated("PaymentApplication");
-        Iterator pa = paymentApplications.iterator();
-        while (pa.hasNext())    {
-            paymentApplication = (GenericValue) pa.next();
-            if (paymentApplication.invoiceId != null) {
-                invoice = paymentApplication.getRelatedOne("Invoice");
-                if (!invoice.partyId.equals(partyId)) {
-                    historyItem = new HashMap();
-                    Map historyItem = ["paymentId" : payment.paymentId,
-                                       "invoiceId" : paymentApplication.invoiceId,
-                                       "invoiceItemSeqId" : paymentApplication.invoiceItemSeqId,
-                                       "partyId" : invoice.partyIdFrom,
-                                       "amount" : amount.toString(),
-                                       "applied" : paymentApplication.getBigDecimal("amountApplied").setScale(2,BigDecimal.ROUND_HALF_UP).toString(),
-                                       "effectiveDate" : payment.effectiveDate.toString().substring(0,10)];
-                    historyList.add(historyItem);
-                }
-            }
-        }
-    }
-    context.historyListPaymentsO = historyList;
-}
-*/
-// list not applied payments
-BigDecimal totalPaymentNotApplied = new BigDecimal("0.00").setScale(2,BigDecimal.ROUND_HALF_UP);
-historyList = new LinkedList();
-if (payments != null && payments.size() > 0) {
-    Iterator pm = payments.iterator();
-    while (pm.hasNext())    {
-        payment = (GenericValue) pm.next();
-        payment = delegator.findByPrimaryKey("Payment",["paymentId" : payment.paymentId]);
-        notApplied = payment.getBigDecimal("amount").subtract(PaymentWorker.getPaymentAppliedBd(payment)).setScale(2,BigDecimal.ROUND_HALF_UP);
-        // check if payment completely applied
-        Debug.logInfo(" payment: " + payment.paymentId + " amount:" + payment.getBigDecimal("amount") + " applied:" + PaymentWorker.getPaymentAppliedBd(payment),"??");  
-        if (notApplied.compareTo(new BigDecimal("0.00")) == 0) 
-            continue;
-        Map historyItem = new HashMap();
-        BigDecimal amount = payment.getBigDecimal("amount").setScale(2,BigDecimal.ROUND_HALF_UP);
-        totalPaymentNotApplied = totalPaymentNotApplied.add(notApplied);
-        historyItem = ["paymentId" : payment.paymentId,
-                       "amount" : amount.toString(),
-                       "notApplied" : notApplied.toString(),
-                       "effectiveDate" : payment.effectiveDate.toString().substring(0,10)];
-        historyList.add(historyItem);
-    }
-    context.historyListPaymentsN = historyList;
-}
-
-// create totals
-finanSummary = ["totalSalesInvoice" : totalSalesInvoice.toString(), 
-                "totalPurchaseInvoice" : totalPurchaseInvoice.toString(),   
-                "totalPaymentsIn" : totalPaymentsIn.toString(), 
-                "totalPaymentsOut" : totalPaymentsOut.toString(),   
-                "totalInvoiceApplied" : totalInvoiceApplied.toString(),
-                "totalInvoiceNotApplied" : totalInvoiceNotApplied.toString(),
-                "totalPaymentNotApplied" : totalPaymentNotApplied.toString(),
-                "totalPaymentNotApplied" : totalPaymentNotApplied.toString()];
-totalToBePaid = totalSalesInvoice.add(totalPurchaseInvoice).subtract(totalInvoiceApplied).subtract(totalPaymentNotApplied);
-if (totalToBePaid.compareTo(new BigDecimal("0.00")) < 0 ) finanSummary.totalToBePaid = totalToBePaid.toString();
-else if (totalToBePaid.compareTo(new BigDecimal("0.00")) > 0 ) finanSummary.totalToBeReceived = totalToBePaid.toString();
-else    {
-    finanSummary.totalToBePaid = "0.00";
-    finanSummary.totalToBeReceived = "0.00";
+import org.ofbiz.entity.*;
+import org.ofbiz.entity.condition.*;
+import org.ofbiz.entity.util.*;
+import javolution.util.FastMap;
+
+Boolean actualCurrency = new Boolean(context.actualCurrency);
+if (actualCurrency == null) {
+	actualCurrency = true;
+}
+actualCurrencyUomId = context.actualCurrencyUomId;
+if (!actualCurrencyUomId) {
+	actualCurrencyUomId = context.defaultOrganizationPartyCurrencyUomId;
+}
+findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true);
+//get total/unapplied/applied invoices separated by sales/purch amount:
+totalInvSaApplied 		= BigDecimal.ZERO;
+totalInvSaNotApplied 	= BigDecimal.ZERO;
+totalInvPuApplied 		= BigDecimal.ZERO;
+totalInvPuNotApplied 	= BigDecimal.ZERO;
+
+invExprs = 
+	EntityCondition.makeCondition([
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_IN_PROCESS"),
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_WRITEOFF"),
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_CANCELLED"),
+		EntityCondition.makeCondition([
+		    EntityCondition.makeCondition([
+		        EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, parameters.partyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, context.defaultOrganizationPartyId)
+				],EntityOperator.AND),
+		    EntityCondition.makeCondition([
+				EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, context.defaultOrganizationPartyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, parameters.partyId)
+				],EntityOperator.AND)
+			],EntityOperator.OR)
+		],EntityOperator.AND);
+		
+invIterator = delegator.find("InvoiceAndType", invExprs, null, null, null, findOpts);
+
+while (invoice = invIterator.next()) {
+	if ("PURCHASE_INVOICE".equals(invoice.parentTypeId)) {
+		totalInvPuApplied += InvoiceWorker.getInvoiceAppliedBd(invoice, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+		totalInvPuNotApplied += InvoiceWorker.getInvoiceNotApplied(invoice, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+	}
+	else if ("SALES_INVOICE".equals(invoice.parentTypeId)) {
+		totalInvSaApplied += InvoiceWorker.getInvoiceAppliedBd(invoice, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+		totalInvSaNotApplied += InvoiceWorker.getInvoiceNotApplied(invoice, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+	}
+	else {
+		Debug.logError("InvoiceType: " + invoice.invoiceTypeId + " without a valid parentTypeId: " + invoice.parentTypeId + " !!!! Should be either PURCHASE_INVOICE or SALES_INVOICE", "");
+	}
+}
+
+invIterator.close();
+	
+//get total/unapplied/applied payment in/out total amount:
+totalPayInApplied 		= BigDecimal.ZERO;
+totalPayInNotApplied 	= BigDecimal.ZERO;
+totalPayOutApplied 		= BigDecimal.ZERO;
+totalPayOutNotApplied 	= BigDecimal.ZERO;
+	
+payExprs = 
+    EntityCondition.makeCondition([
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "PMNT_NOTPAID"),
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "PMNT_CANCELLED"),
+		EntityCondition.makeCondition([
+       		EntityCondition.makeCondition([
+				EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, parameters.partyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, context.defaultOrganizationPartyId)
+				], EntityOperator.AND),
+			EntityCondition.makeCondition([
+				EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, context.defaultOrganizationPartyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, parameters.partyId)
+				], EntityOperator.AND)
+			], EntityOperator.OR)
+		], EntityOperator.AND);
+
+payIterator = delegator.find("PaymentAndType", payExprs, null, null, null, findOpts);
+
+while (payment = payIterator.next()) {
+	if ("DISBURSEMENT".equals(payment.parentTypeId) || "TAX_PAYMENT".equals(payment.parentTypeId)) {
+		totalPayOutApplied += PaymentWorker.getPaymentAppliedBd(payment, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+		totalPayOutNotApplied += PaymentWorker.getPaymentNotAppliedBd(payment, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+	}
+	else if ("RECEIPT".equals(payment.parentTypeId)) {
+		totalPayInApplied += PaymentWorker.getPaymentAppliedBd(payment, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+		totalPayInNotApplied += PaymentWorker.getPaymentNotAppliedBd(payment, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+	}
+	else {
+		Debug.logError("PaymentTypeId: " + payment.paymentTypeId + " without a valid parentTypeId: " + payment.parentTypeId + " !!!! Should be either DISBURSEMENT, TAX_PAYMENT or RECEIPT", "");
+	}
+}
+payIterator.close();
+context.finanSummary = FastMap.newInstance();
+context.finanSummary.totalSalesInvoice 		= totalInvSaApplied.add(totalInvSaNotApplied);
+context.finanSummary.totalPurchaseInvoice 	= totalInvPuApplied.add(totalInvPuNotApplied);
+context.finanSummary.totalPaymentsIn 		= totalPayInApplied.add(totalPayInNotApplied); 
+context.finanSummary.totalPaymentsOut 		= totalPayOutApplied.add(totalPayOutNotApplied);
+context.finanSummary.totalInvoiceNotApplied = totalInvSaNotApplied.subtract(totalInvPuNotApplied);
+context.finanSummary.totalPaymentNotApplied = totalPayInNotApplied.subtract(totalPayOutNotApplied);
+transferAmount = totalInvSaApplied.add(totalInvSaNotApplied).subtract(totalInvPuApplied.add(totalInvPuNotApplied)).subtract(totalPayInApplied.add(totalPayInNotApplied).add(totalPayOutApplied.add(totalPayOutNotApplied)));
+if (transferAmount.signum() == -1) {
+	context.finanSummary.totalToBePaid = transferAmount.negate();
+} else {
+	context.finanSummary.totalToBeReceived = transferAmount;
 }
- context.finanSummary = finanSummary;
-    
\ No newline at end of file
+	

Added: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy?rev=729396&view=auto
==============================================================================
--- ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy (added)
+++ ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy Wed Dec 24 22:26:14 2008
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.common.*;
+import org.ofbiz.webapp.control.*;
+import org.ofbiz.accounting.invoice.*;
+import org.ofbiz.accounting.payment.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.entity.condition.*;
+import org.ofbiz.entity.util.*;
+import javolution.util.FastMap;
+
+Boolean actualCurrency = new Boolean(context.actualCurrency);
+if (actualCurrency == null) {
+	actualCurrency = true;
+}
+findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true);
+	
+invExprs = 
+	EntityCondition.makeCondition([
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_IN_PROCESS"),
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_WRITEOFF"),
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "INVOICE_CANCELLED"),
+		EntityCondition.makeCondition([
+		    EntityCondition.makeCondition([
+		        EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, parameters.partyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, context.defaultOrganizationPartyId)
+				],EntityOperator.AND),
+		    EntityCondition.makeCondition([
+				EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, context.defaultOrganizationPartyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, parameters.partyId)
+				],EntityOperator.AND)
+			],EntityOperator.OR)
+		],EntityOperator.AND);
+		
+invIterator = delegator.find("InvoiceAndType", invExprs, null, null, null, findOpts);
+invoiceList = [];
+while (invoice = invIterator.next()) {
+	unAppliedAmount = InvoiceWorker.getInvoiceNotApplied(invoice, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+	if (unAppliedAmount.signum() == 1) {
+		if (actualCurrency.equals(true)) {
+            invoiceCurrencyUomId = invoice.currencyUomId;
+		} else {
+            invoiceCurrencyUomId = context.defaultOrganizationPartyCurrencyUomId;
+		}
+		invoiceList.add([invoiceId : invoice.invoiceId, 
+		                 invoiceDate : invoice.invoiceDate,
+		                 unAppliedAmount : unAppliedAmount,
+		                 invoiceCurrencyUomId : invoiceCurrencyUomId,
+		                 amount : InvoiceWorker.getInvoiceTotalBd(invoice, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP),
+		                 invoiceTypeId : invoice.invoiceTypeId, 
+		                 invoiceParentTypeId : invoice.parentTypeId]);
+	}
+}
+invIterator.close();
+
+context.ListUnAppliedInvoices = invoiceList;

Propchange: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedInvoicesForParty.groovy
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy?rev=729396&view=auto
==============================================================================
--- ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy (added)
+++ ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy Wed Dec 24 22:26:14 2008
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.common.*;
+import org.ofbiz.webapp.control.*;
+import org.ofbiz.accounting.invoice.*;
+import org.ofbiz.accounting.payment.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.entity.condition.*;
+import org.ofbiz.entity.util.*;
+import javolution.util.FastMap;
+
+Boolean actualCurrency = new Boolean(context.actualCurrency);
+if (actualCurrency == null) {
+	actualCurrency = true;
+}
+findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true);
+	
+payExprs = 
+    EntityCondition.makeCondition([
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "PMNT_NOTPAID"),
+		EntityCondition.makeCondition("statusId", EntityOperator.NOT_EQUAL, "PMNT_CANCELLED"),
+		EntityCondition.makeCondition([
+       		EntityCondition.makeCondition([
+				EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, parameters.partyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, context.defaultOrganizationPartyId)
+				], EntityOperator.AND),
+			EntityCondition.makeCondition([
+				EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, context.defaultOrganizationPartyId),
+				EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, parameters.partyId)
+				], EntityOperator.AND)
+			], EntityOperator.OR)
+		], EntityOperator.AND);
+
+paymentList = [];
+payIterator = delegator.find("PaymentAndType", payExprs, null, null, null, findOpts);
+
+while (payment = payIterator.next()) {
+	unAppliedAmount = PaymentWorker.getPaymentNotAppliedBd(payment, actualCurrency).setScale(2,BigDecimal.ROUND_HALF_UP);
+	if (unAppliedAmount.signum() == 1) {
+		if (actualCurrency.equals(true) && payment.actualCurrencyAmount && payment.actualCurrencyUomId) {
+			amount = payment.actualCurrencyAmount;
+			paymentCurrencyUomId = payment.actualCurrencyUomId;
+		} else {
+			amount = payment.amount;
+			paymentCurrencyUomId = payment.currencyUomId;
+		}
+		paymentList.add([paymentId : payment.paymentId, 
+		                 effectiveDate : payment.effectiveDate,
+		                 unAppliedAmount : unAppliedAmount,
+		                 amount : amount,
+		                 paymentCurrencyUomId : paymentCurrencyUomId,
+		                 paymentTypeId : payment.paymentTypeId,
+		                 paymentParentTypeId : payment.parentTypeId]);
+	}
+}
+payIterator.close();
+
+context.paymentList = paymentList;
\ No newline at end of file

Propchange: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/party/webapp/partymgr/WEB-INF/actions/party/UnAppliedPaymentsForParty.groovy
------------------------------------------------------------------------------
    svn:mime-type = text/plain