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/10/08 16:39:13 UTC
svn commit: r702894 - in /ofbiz/trunk/applications/accounting:
src/org/ofbiz/accounting/payment/ webapp/accounting/WEB-INF/actions/invoice/
webapp/accounting/WEB-INF/actions/payment/ webapp/accounting/invoice/ widget/
Author: hansbak
Date: Wed Oct 8 07:39:12 2008
New Revision: 702894
URL: http://svn.apache.org/viewvc?rev=702894&view=rev
Log:
fix an error in applying payments to invoices and make applying invoices to payment work too when there are different currencies
Modified:
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/ListNotAppliedPayments.groovy
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/payment/ListNotAppliedInvoices.groovy
ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml
ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml
ofbiz/trunk/applications/accounting/widget/PaymentScreens.xml
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=702894&r1=702893&r2=702894&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 Oct 8 07:39:12 2008
@@ -292,7 +292,22 @@
return getPaymentAppliedBd(payment).doubleValue();
}
+ /**
+ * Method to return the total amount of an payment which is applied to a payment
+ * @param payment GenericValue object of the Payment
+ * @return the applied total as BigDecimal in the currency of the payment
+ */
public static BigDecimal getPaymentAppliedBd(GenericValue payment) {
+ return getPaymentAppliedBd(payment, false);
+ }
+
+ /**
+ * Method to return the total amount of an payment which is applied to a payment
+ * @param payment GenericValue object of the Payment
+ * @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) {
BigDecimal paymentApplied = BigDecimal.ZERO;
List paymentApplications = null;
try {
@@ -306,20 +321,20 @@
Iterator p = paymentApplications.iterator();
while (p.hasNext()) {
GenericValue paymentApplication = (GenericValue) p.next();
- BigDecimal amountApplied = paymentApplication.getBigDecimal("amountApplied");
+ BigDecimal amountApplied = paymentApplication.getBigDecimal("amountApplied");
// check currency invoice and if different convert amount applied for display
- if (paymentApplication.get("invoiceId") != null && payment.get("actualCurrencyAmount") != null && payment.get("actualCurrencyUomId") != null) {
+ if (!actual && paymentApplication.get("invoiceId") != null && payment.get("actualCurrencyAmount") != null && payment.get("actualCurrencyUomId") != null) {
GenericValue invoice = paymentApplication.getRelatedOne("Invoice");
if (payment.getString("actualCurrencyUomId").equals(invoice.getString("currencyUomId"))) {
amountApplied = amountApplied.multiply(payment.getBigDecimal("amount")).divide(payment.getBigDecimal("actualCurrencyAmount"),new MathContext(100));
}
}
- paymentApplied = paymentApplied.add(amountApplied).setScale(decimals,rounding);
+ paymentApplied = paymentApplied.add(amountApplied).setScale(decimals,rounding);
}
}
- } catch (GenericEntityException e) {
- Debug.logError(e, "Trouble getting entities", module);
- }
+ } catch (GenericEntityException e) {
+ Debug.logError(e, "Trouble getting entities", module);
+ }
return paymentApplied;
}
public static double getPaymentNotApplied(GenericValue payment) {
Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/ListNotAppliedPayments.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/ListNotAppliedPayments.groovy?rev=702894&r1=702893&r2=702894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/ListNotAppliedPayments.groovy (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/ListNotAppliedPayments.groovy Wed Oct 8 07:39:12 2008
@@ -24,70 +24,67 @@
import org.ofbiz.accounting.invoice.*;
import org.ofbiz.accounting.payment.*;
import org.ofbiz.accounting.util.UtilAccounting;
-import java.text.DateFormat;
-import java.math.*;
import org.ofbiz.entity.condition.EntityCondition;
import org.ofbiz.entity.condition.EntityConditionList;
import org.ofbiz.entity.condition.EntityExpr;
import org.ofbiz.entity.condition.EntityOperator;
-import org.ofbiz.entity.model.*;
-import java.text.NumberFormat;
+import java.math.*;
invoiceId = parameters.invoiceId;
invoice = delegator.findByPrimaryKey("Invoice", [invoiceId : invoiceId]);
decimals = UtilNumber.getBigDecimalScale("invoice.decimals");
rounding = UtilNumber.getBigDecimalRoundingMode("invoice.rounding");
-locale = context.locale;
-paymentsMapList = []; // to pass back to the screeen list of unapplied payments
+exprList = [EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, invoice.partyIdFrom),
+ EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, invoice.partyId)];
+partyCond = EntityCondition.makeCondition(exprList, EntityOperator.AND);
+
+exprList1 = [EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_NOT_PAID"),
+ EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_RECEIVED"),
+ EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_SENT")];
+statusCond = EntityCondition.makeCondition(exprList1, EntityOperator.OR);
-// retrieve payments for the related parties which have not been (fully) applied yet
-payments = null;
-payment = null;
-exprList = [];
-expr = EntityCondition.makeCondition("partyIdTo", EntityOperator.EQUALS, invoice.getString("partyIdFrom"));
-exprList.add(expr);
-expr = EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, invoice.getString("partyId"));
-exprList.add(expr);
-
-// only payments with received and sent and not paid
-exprListStatus = [];
-expr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_NOT_PAID");
-exprListStatus.add(expr);
-expr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_RECEIVED");
-exprListStatus.add(expr);
-expr = EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "PMNT_SENT");
-exprListStatus.add(expr);
-orCond = EntityCondition.makeCondition(exprListStatus, EntityOperator.OR);
-exprList.add(orCond);
+currCond = EntityCondition.makeCondition("currencyUomId", EntityOperator.EQUALS, invoice.currencyUomId);
+actualCurrCond = EntityCondition.makeCondition("actualCurrencyUomId", EntityOperator.EQUALS, invoice.currencyUomId);
-topCond = EntityCondition.makeCondition(exprList, EntityOperator.AND);
+topCond = EntityCondition.makeCondition([partyCond, statusCond, currCond], EntityOperator.AND);
+topCondActual = EntityCondition.makeCondition([partyCond, statusCond, actualCurrCond], EntityOperator.AND);
payments = delegator.findList("Payment", topCond, null, ["effectiveDate"], null, false);
-if (payments) {
- paymentApplications = null;
- paymentApplication = null;
- invoiceApplied = InvoiceWorker.getInvoiceAppliedBd(invoice);
- invoiceAmount = InvoiceWorker.getInvoiceTotalBd(invoice);
- invoiceToApply = InvoiceWorker.getInvoiceNotApplied(invoice);
- payments.each { payment ->
- if (PaymentWorker.getPaymentNotAppliedBd(payment).signum() == 1) {
- // put in the map
- paymentMap = [:];
- paymentMap.paymentId = payment.paymentId;
- paymentMap.effectiveDate = payment.effectiveDate; // list as YYYY-MM-DD
- paymentMap.amount = payment.amount;
- paymentMap.currencyUomId = payment.currencyUomId;
- paymentMap.amountApplied = PaymentWorker.getPaymentAppliedBd(payment);
- paymentToApply = PaymentWorker.getPaymentNotAppliedBd(payment);
- if (paymentToApply.compareTo(invoiceToApply) < 0 ) {
- paymentMap.amountToApply = paymentToApply;
- } else {
- paymentMap.amountToApply = invoiceToApply;
- }
- paymentsMapList.add(paymentMap);
- }
- }
-}
-context.payments = paymentsMapList;
+context.payments = getPayments(payments, false);
+payments = delegator.findList("Payment", topCondActual, null, ["effectiveDate"], null, false);
+context.paymentsActualCurrency = getPayments(payments, true);
+
+List getPayments(List payments, boolean actual) {
+ if (payments) {
+ paymentList = []; // to pass back to the screeen list of unapplied payments
+ invoiceApplied = InvoiceWorker.getInvoiceAppliedBd(invoice);
+ invoiceAmount = InvoiceWorker.getInvoiceTotalBd(invoice);
+ invoiceToApply = InvoiceWorker.getInvoiceNotApplied(invoice);
+ payments.each { payment ->
+ paymentMap = [:];
+ paymentApplied = PaymentWorker.getPaymentAppliedBd(payment, true);
+ if (actual) {
+ paymentMap.amount = payment.actualCurrencyAmount;
+ paymentMap.currencyUomId = payment.actualCurrencyUomId;
+ paymentToApply = payment.getBigDecimal("actualCurrencyAmount").setScale(decimals,rounding).subtract(paymentApplied);
+ } else {
+ paymentMap.amount = payment.amount;
+ paymentMap.currencyUomId = payment.currencyUomId;
+ paymentToApply = payment.getBigDecimal("amount").setScale(decimals,rounding).subtract(paymentApplied);
+ }
+ if (paymentToApply.signum() == 1) {
+ paymentMap.paymentId = payment.paymentId;
+ paymentMap.effectiveDate = payment.effectiveDate;
+ if (paymentToApply.compareTo(invoiceToApply) < 0 ) {
+ paymentMap.amountToApply = paymentToApply;
+ } else {
+ paymentMap.amountToApply = invoiceToApply;
+ }
+ paymentList.add(paymentMap);
+ }
+ }
+ return paymentList;
+ }
+}
Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/payment/ListNotAppliedInvoices.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/payment/ListNotAppliedInvoices.groovy?rev=702894&r1=702893&r2=702894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/payment/ListNotAppliedInvoices.groovy (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/payment/ListNotAppliedInvoices.groovy Wed Oct 8 07:39:12 2008
@@ -38,7 +38,7 @@
exprList = [EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, payment.partyIdFrom),
EntityCondition.makeCondition("partyIdFrom", EntityOperator.EQUALS, payment.partyIdTo)];
-partyCond = EntityCondition.makeCondition(exprList, EntityOperator.OR);
+partyCond = EntityCondition.makeCondition(exprList, EntityOperator.AND);
exprList1 = [EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "INVOICE_APPROVED"),
EntityCondition.makeCondition("statusId", EntityOperator.EQUALS, "INVOICE_SEND"),
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=702894&r1=702893&r2=702894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/invoice/InvoiceForms.xml Wed Oct 8 07:39:12 2008
@@ -425,6 +425,8 @@
<submit button-type="button"/>
</field>
</form>
+
+ <form name="ListPaymentsNotAppliedForeignCurrency" extends="ListPaymentsNotApplied" list-name="paymentsActualCurrency"/>
<form name="ListInvoiceRoles" type="list" use-row-submit="true" title="" list-name="invoiceRoles" paginate-target="invoiceRoles"
odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
Modified: ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml?rev=702894&r1=702893&r2=702894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/InvoiceScreens.xml Wed Oct 8 07:39:12 2008
@@ -348,20 +348,9 @@
<if-compare field-name="notAppliedAmount" operator="greater" value="0"/>
</condition>
<widgets>
- <container style="screenlet">
- <container style="screenlet-title-bar">
- <container style="h3">
- <label text="${uiLabelMap.AccountingPaymentsApplied} ${appliedAmount?currency(${invoice.currencyUomId})} ${uiLabelMap.AccountingOpenPayments} ${notAppliedAmount?currency(${invoice.currencyUomId})}"/>
- </container>
- </container>
- <container style="screenlet-body">
- <section>
- <widgets>
- <include-form name="EditInvoiceApplications" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
- </widgets>
- </section>
- </container>
- </container>
+ <screenlet title="${uiLabelMap.AccountingPaymentsApplied} ${appliedAmount?currency(${invoice.currencyUomId})} ${uiLabelMap.AccountingOpenPayments} ${notAppliedAmount?currency(${invoice.currencyUomId})}">
+ <include-form name="EditInvoiceApplications" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
+ </screenlet>
<section>
<condition>
<if-empty field-name="invoiceApplications"/>
@@ -372,23 +361,30 @@
</section>
<section>
<condition>
- <not><if-empty field-name="payments"/></not>
+ <or>
+ <not><if-empty field-name="payments"/></not>
+ <not><if-empty field-name="paymentsActualCurrency"/></not>
+ </or>
</condition>
<widgets>
- <container style="screenlet">
- <container style="screenlet-title-bar">
- <container style="h3">
- <label text="${uiLabelMap.AccountingListPaymentsNotYetApplied} [${invoice.partyIdFrom}] ${uiLabelMap.AccountingPaymentSentForm} [${invoice.partyId}]"/>
- </container>
- </container>
- <container style="screenlet-body">
- <section>
- <widgets>
- <include-form name="ListPaymentsNotApplied" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
- </widgets>
- </section>
- </container>
- </container>
+ <screenlet title="${uiLabelMap.AccountingListPaymentsNotYetApplied} [${invoice.partyIdFrom}] ${uiLabelMap.AccountingPaymentSentForm} [${invoice.partyId}]">
+ <section>
+ <condition>
+ <not><if-empty field-name="payments"/></not>
+ </condition>
+ <widgets>
+ <include-form name="ListPaymentsNotApplied" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
+ </widgets>
+ </section>
+ <section>
+ <condition>
+ <not><if-empty field-name="paymentsActualCurrency"/></not>
+ </condition>
+ <widgets>
+ <include-form name="ListPaymentsNotAppliedForeignCurrency" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
+ </widgets>
+ </section>
+ </screenlet>
</widgets>
</section>
<container style="screenlet">
@@ -407,20 +403,9 @@
</container>
</widgets>
<fail-widgets>
- <container style="screenlet">
- <container style="screenlet-title-bar">
- <container style="h3">
- <label text="${uiLabelMap.AccountingPaymentsApplied} ${appliedAmount?currency(${invoice.currencyUomId})} ${uiLabelMap.AccountingOpenPayments} ${notAppliedAmount?currency(${invoice.currencyUomId})}"/>
- </container>
- </container>
- <container style="screenlet-body">
- <section>
- <widgets>
- <include-form name="EditInvoiceApplications" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
- </widgets>
- </section>
- </container>
- </container>
+ <screenlet title="${uiLabelMap.AccountingPaymentsApplied} ${appliedAmount?currency(${invoice.currencyUomId})} ${uiLabelMap.AccountingOpenPayments} ${notAppliedAmount?currency(${invoice.currencyUomId})}">
+ <include-form name="EditInvoiceApplications" location="component://accounting/webapp/accounting/invoice/InvoiceForms.xml"/>
+ </screenlet>
<section>
<condition>
<if-empty field-name="invoiceApplications"/>
Modified: ofbiz/trunk/applications/accounting/widget/PaymentScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/PaymentScreens.xml?rev=702894&r1=702893&r2=702894&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/PaymentScreens.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/PaymentScreens.xml Wed Oct 8 07:39:12 2008
@@ -253,7 +253,10 @@
<widgets>
<section>
<condition>
- <not><if-empty field-name="invoices"/></not>
+ <or>
+ <not><if-empty field-name="invoices"/></not>
+ <not><if-empty field-name="invoicesOtherCurrency"/></not>
+ </or>
</condition>
<widgets>
<screenlet title="${uiLabelMap.AccountingListInvoicesNotYetApplied}">
@@ -261,24 +264,23 @@
<label style="h2" text="${uiLabelMap.CommonFrom} ${partyNameViewTo.groupName}${partyNameViewTo.lastName},${partyNameViewTo.firstName} ${partyNameViewTo.middleName}[${payment.partyIdTo}]"/>
<label style="h2" text="${uiLabelMap.CommonTo} ${partyNameViewFrom.groupName}${partyNameViewFrom.lastName},${partyNameViewFrom.firstName} ${partyNameViewFrom.middleName} [${payment.partyIdFrom}]"/>
</container>
- <include-form name="listInvoicesNotApplied" location="component://accounting/webapp/accounting/payment/PaymentForms.xml"/>
- </screenlet>
- </widgets>
- </section>
- <section>
- <condition>
- <not><if-empty field-name="invoicesOtherCurrency"/></not>
- </condition>
- <widgets>
- <screenlet title="${uiLabelMap.AccountingListInvoicesNotYetApplied}">
- <container>
- <label style="h1" text="Othercurrency invoices"/>
- </container>
- <container>
- <label style="h2" text="${uiLabelMap.CommonFrom} ${partyNameViewTo.groupName}${partyNameViewTo.lastName},${partyNameViewTo.firstName} ${partyNameViewTo.middleName}[${payment.partyIdTo}]"/>
- <label style="h2" text="${uiLabelMap.CommonTo} ${partyNameViewFrom.groupName}${partyNameViewFrom.lastName},${partyNameViewFrom.firstName} ${partyNameViewFrom.middleName} [${payment.partyIdFrom}]"/>
- </container>
- <include-form name="listInvoicesNotAppliedOtherCurrency" location="component://accounting/webapp/accounting/payment/PaymentForms.xml"/>
+ <section>
+ <condition>
+ <not><if-empty field-name="invoices"/></not>
+ </condition>
+ <widgets>
+ <include-form name="listInvoicesNotApplied" location="component://accounting/webapp/accounting/payment/PaymentForms.xml"/>
+ </widgets>
+ </section>
+ <section>
+ <condition>
+ <not><if-empty field-name="invoicesOtherCurrency"/></not>
+ </condition>
+ <widgets>
+ <label style="h2" text="Othercurrency invoices"/>
+ <include-form name="listInvoicesNotAppliedOtherCurrency" location="component://accounting/webapp/accounting/payment/PaymentForms.xml"/>
+ </widgets>
+ </section>
</screenlet>
</widgets>
</section>