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/03 09:12:35 UTC
svn commit: r701313 - in /ofbiz/trunk/applications/accounting: config/
script/org/ofbiz/accounting/invoice/ src/org/ofbiz/accounting/invoice/
src/org/ofbiz/accounting/payment/ webapp/accounting/WEB-INF/actions/invoice/
Author: hansbak
Date: Fri Oct 3 00:12:35 2008
New Revision: 701313
URL: http://svn.apache.org/viewvc?rev=701313&view=rev
Log:
correct some errors in the updpaymentappl service make the currency display properly in the messages, make the 'other currency' view of the invoice working again
Modified:
ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentWorker.java
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/invoice/EditInvoice.groovy
Modified: ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml?rev=701313&r1=701312&r2=701313&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml (original)
+++ ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml Fri Oct 3 00:12:35 2008
@@ -4481,15 +4481,15 @@
<value xml:lang="zh">å·²æ¶å°æ¯ä»</value>
</property>
<property key="AccountingPaymentApplRemoved">
- <value xml:lang="en">PaymentID [${paymentApplication.paymentId}] with amount ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} removed from</value>
- <value xml:lang="es">IdPago[${paymentApplication.paymentId}] con cantidad ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} suprimido de</value>
- <value xml:lang="fr">Le paiement [${paymentApplication.paymentId}] d'un montant de ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} a été retiré de</value>
- <value xml:lang="it">Codice Pagamento [${paymentApplication.paymentId}] con importo ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} cancellato da</value>
- <value xml:lang="nl">BetalingsNr [${paymentApplication.paymentId}] met het bedrag ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} verwijdert van</value>
- <value xml:lang="ro">Cod Plata [${paymentApplication.paymentId}] cu o valoare ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} eliminata din</value>
- <value xml:lang="ru">ÐлаÑеж Ñ ÐºÐ¾Ð´Ð¾Ð¼ [${paymentApplication.paymentId}] на ÑÑÐ¼Ð¼Ñ ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} Ñдален из</value>
- <value xml:lang="th">รหัสà¸à¸²à¸£à¸à¸³à¸£à¸°à¹à¸à¸´à¸ [${paymentApplication.paymentId}] à¸à¹à¸§à¸¢à¸à¸³à¸à¸§à¸ ${paymentApplication.amountApplied?currency(${payment.currencyUomId})} ลà¸à¸à¸²à¸</value>
- <value xml:lang="zh">ææ¯ä»ç¼å·ä¸º[${paymentApplication.paymentId}]ãéé¢ä¸º${paymentApplication.amountApplied?currency(${payment.currencyUomId})}çæ¯ä»å é¤åº</value>
+ <value xml:lang="en">PaymentID [${paymentApplication.paymentId}] with amount ${paymentApplication.amountApplied?currency(${currencyUomId})} removed from</value>
+ <value xml:lang="es">IdPago[${paymentApplication.paymentId}] con cantidad ${paymentApplication.amountApplied?currency(${currencyUomId})} suprimido de</value>
+ <value xml:lang="fr">Le paiement [${paymentApplication.paymentId}] d'un montant de ${paymentApplication.amountApplied?currency(${currencyUomId})} a été retiré de</value>
+ <value xml:lang="it">Codice Pagamento [${paymentApplication.paymentId}] con importo ${paymentApplication.amountApplied?currency(${currencyUomId})} cancellato da</value>
+ <value xml:lang="nl">BetalingsNr [${paymentApplication.paymentId}] met het bedrag ${paymentApplication.amountApplied?currency(${currencyUomId})} verwijdert van</value>
+ <value xml:lang="ro">Cod Plata [${paymentApplication.paymentId}] cu o valoare ${paymentApplication.amountApplied?currency(${currencyUomId})} eliminata din</value>
+ <value xml:lang="ru">ÐлаÑеж Ñ ÐºÐ¾Ð´Ð¾Ð¼ [${paymentApplication.paymentId}] на ÑÑÐ¼Ð¼Ñ ${paymentApplication.amountApplied?currency(${currencyUomId})} Ñдален из</value>
+ <value xml:lang="th">รหัสà¸à¸²à¸£à¸à¸³à¸£à¸°à¹à¸à¸´à¸ [${paymentApplication.paymentId}] à¸à¹à¸§à¸¢à¸à¸³à¸à¸§à¸ ${paymentApplication.amountApplied?currency(${currencyUomId})} ลà¸à¸à¸²à¸</value>
+ <value xml:lang="zh">ææ¯ä»ç¼å·ä¸º[${paymentApplication.paymentId}]ãéé¢ä¸º${paymentApplication.amountApplied?currency(${currencyUomId})}çæ¯ä»å é¤åº</value>
</property>
<property key="AccountingPaymentApplToBillingAccount">
<value xml:lang="en">Billing Account ID [${paymentApplication.billingAccountId}]</value>
Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml?rev=701313&r1=701312&r2=701313&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml (original)
+++ ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml Fri Oct 3 00:12:35 2008
@@ -147,7 +147,14 @@
<set from-field="nowTimestamp" field="newEntity.invoiceDate"/>
</if-empty>
<if-empty field="parameters.currencyUomId">
- <set from-field="partyAcctgPreference.baseCurrencyUomId" field="newEntity.currencyUomId"/>
+ <!-- if provided set the default currency to the receiving party -->
+ <entity-one entity-name="Party" value-name="party"/>
+ <if-not-empty field="party.preferredCurrencyUomId">
+ <set field="newEntity.currencyUomId" from-field="party.preferredCurrencyUomId"/>
+ <else>
+ <set field="newEntity.currencyUomId" from-field="partyAcctgPreference.baseCurrencyUomId"/>
+ </else>
+ </if-not-empty>
</if-empty>
<create-value value-name="newEntity"/>
@@ -340,6 +347,7 @@
<check-errors/>
</if-empty>
<!-- payment -->
+ <set field="currencyUomId" value=""/><!-- currency of the paymentApplication -->
<if-not-empty field="paymentApplication.paymentId">
<entity-one entity-name="Payment" value-name="payment">
<field-map field-name="paymentId" value="${paymentApplication.paymentId}"/>
@@ -351,8 +359,8 @@
<check-errors/>
</if-not-empty>
<field-to-result field-name="paymentApplication.paymentId" result-name="paymentId"/>
+ <set field="currencyUomId" from-field="paymentId.currencyUomId"/>
</if-not-empty>
- <property-to-field resource="AccountingUiLabels" property="AccountingPaymentApplRemoved" field-name="successMessage"/>
<!-- check invoice -->
<if-not-empty field="paymentApplication.invoiceId">
<entity-one entity-name="Invoice" value-name="invoice">
@@ -363,6 +371,7 @@
<log level="info" message="Invoice not found, invoice Id: ${invoiceId}"/>
<check-errors/>
</if-empty>
+ <set field="currencyUomId" from-field="invoice.currencyUomId"/>
<!-- if the invoice is already PAID, then set it back to READY and clear out the paidDate -->
<if-compare field="invoice.statusId" operator="equals" value="INVOICE_PAID">
<set field="invoiceStatusMap.invoiceId" value="${paymentApplication.invoiceId}" />
@@ -398,13 +407,18 @@
<if-not-empty field="paymentApplication.billingAccountId">
<field-to-result field-name="paymentApplication.billingAccountId" result-name="billingAccountId"/>
<property-to-field resource="AccountingUiLabels" property="AccountingPaymentApplToBillingAccount" field-name="toMessage"/>
+ <entity-one entity-name="BillingAccount">
+ <field-map field-name="billingAccountId" env-name="paymentApplication.billingAccountId"/>
+ </entity-one>
+ <set field="currencyUomId" from-field="billingAccount.accountCurrencyUomId"/>
</if-not-empty>
<!-- tax authority -->
<if-not-empty field="paymentApplication.taxAuthGeoId">
<field-to-result field-name="paymentApplication.taxAuthGeoId" result-name="taxAuthGeoId"/>
<property-to-field resource="AccountingUiLabels" property="AccountingPaymentApplToTaxAuth" field-name="toMessage"/>
</if-not-empty>
- <!-- finaly delete application -->
+ <!-- finally delete application -->
+ <property-to-field resource="AccountingUiLabels" property="AccountingPaymentApplRemoved" field-name="successMessage"/>
<string-append field-name="successMessage" string=" ${toMessage}"/>
<remove-value value-name="paymentApplication"/>
</simple-method>
Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java?rev=701313&r1=701312&r2=701313&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java Fri Oct 3 00:12:35 2008
@@ -2341,51 +2341,38 @@
// amount available on the payment reduced by the already applied amounts
BigDecimal amountAppliedMax = ZERO;
// the maximum that can be applied taking payment,invoice,invoiceitem,billing account in concideration
- // if maxApplied is missing, this value can be used
+ // if maxApplied is missing, this value can be used,
+ // Payment this should be checked after the invoice checking because it is possible the currency is changed
GenericValue payment = null;
+ String currencyUomId = null;
if (paymentId == null || paymentId.equals("")) {
errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentIdBlankNotSupplied",locale));
} else {
- try {
- payment = delegator.findByPrimaryKey("Payment", UtilMisc.toMap("paymentId", paymentId));
- } catch (GenericEntityException e) {
- ServiceUtil.returnError(e.getMessage());
- }
- if (payment == null) {
- errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentRecordNotFound",UtilMisc.toMap("paymentId",paymentId),locale));
- }
- paymentApplyAvailable = payment.getBigDecimal("amount").subtract(PaymentWorker.getPaymentAppliedBd(payment)).setScale(decimals,rounding);
-
- if (payment.getString("statusId").equals("PMNT_CANCELLED")) {
- errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentCancelled", UtilMisc.toMap("paymentId",paymentId), locale));
- }
- if (payment.getString("statusId").equals("PMNT_CONFIRMED")) {
- errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentConfirmed", UtilMisc.toMap("paymentId",paymentId), locale));
- }
-
- // if the amount to apply is 0 give it amount the payment still need
- // to apply
- if (amountApplied.signum() == 0) {
- amountAppliedMax = paymentApplyAvailable;
- }
-
- if (paymentApplicationId == null) {
- // only check for new application records, update on existing records is checked in the paymentApplication section
- if (paymentApplyAvailable.signum() == 0) {
- errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentAlreadyApplied",UtilMisc.toMap("paymentId",paymentId), locale));
- } else {
- // check here for too much application if a new record is
- // added (paymentApplicationId == null)
- if (amountApplied.compareTo(paymentApplyAvailable) > 0) {
- errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentLessRequested",
- UtilMisc.<String, Object>toMap("paymentId",paymentId,
- "paymentApplyAvailable",paymentApplyAvailable,
- "amountApplied",amountApplied,"isoCode",payment.getString("currencyUomId")),locale));
- }
- }
- }
+ try {
+ payment = delegator.findByPrimaryKey("Payment", UtilMisc.toMap("paymentId", paymentId));
+ } catch (GenericEntityException e) {
+ ServiceUtil.returnError(e.getMessage());
+ }
+ if (payment == null) {
+ errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentRecordNotFound",UtilMisc.toMap("paymentId",paymentId),locale));
+ }
+ paymentApplyAvailable = payment.getBigDecimal("amount").subtract(PaymentWorker.getPaymentAppliedBd(payment)).setScale(decimals,rounding);
+
+ if (payment.getString("statusId").equals("PMNT_CANCELLED")) {
+ errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentCancelled", UtilMisc.toMap("paymentId",paymentId), locale));
+ }
+ if (payment.getString("statusId").equals("PMNT_CONFIRMED")) {
+ errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentConfirmed", UtilMisc.toMap("paymentId",paymentId), locale));
+ }
+
+ currencyUomId = payment.getString("currencyUomId");
+
+ // if the amount to apply is 0 give it amount the payment still need
+ // to apply
+ if (amountApplied.signum() == 0) {
+ amountAppliedMax = paymentApplyAvailable;
+ }
- if (debug) Debug.logInfo("Payment info retrieved and checked...", module);
}
// the "TO" Payment.....
@@ -2425,7 +2412,7 @@
errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentLessRequested",
UtilMisc.<String, Object>toMap("paymentId",toPaymentId,
"paymentApplyAvailable",toPaymentApplyAvailable,
- "amountApplied",amountApplied,"isoCode",payment.getString("currencyUomId")),locale));
+ "amountApplied",amountApplied,"isoCode", currencyUomId),locale));
}
}
}
@@ -2470,11 +2457,11 @@
errorMessageList.add(UtilProperties.getMessage(resource, "AccountingBillingAccountNotFound",UtilMisc.toMap("billingAccountId",billingAccountId), locale));
}
// check the currency
- if (billingAccount.get("accountCurrencyUomId") != null && payment.get("currencyUomId") != null &&
- !billingAccount.getString("accountCurrencyUomId").equals(payment.getString("currencyUomId"))) {
+ if (billingAccount.get("accountCurrencyUomId") != null && currencyUomId != null &&
+ !billingAccount.getString("accountCurrencyUomId").equals(currencyUomId)) {
errorMessageList.add(UtilProperties.getMessage(resource, "AccountingBillingAccountCurrencyProblem",
UtilMisc.toMap("billingAccountId",billingAccountId,"accountCurrencyUomId",billingAccount.getString("accountCurrencyUomId"),
- "paymentId",paymentId,"paymentCurrencyUomId", payment.getString("currencyUomId")),locale));
+ "paymentId",paymentId,"paymentCurrencyUomId", currencyUomId),locale));
}
if (debug) Debug.logInfo("Billing Account info retrieved and checked...", module);
@@ -2503,8 +2490,8 @@
}
// check the currency
- if (payment.get("currencyUomId") != null && invoice.get("currencyUomId") != null &&
- !payment.getString("currencyUomId").equals(invoice.getString("currencyUomId"))) {
+ if (currencyUomId != null && invoice.get("currencyUomId") != null &&
+ !currencyUomId.equals(invoice.getString("currencyUomId"))) {
Debug.logInfo(UtilProperties.getMessage(resource, "AccountingInvoicePaymentCurrencyProblem",
UtilMisc.toMap("invoiceCurrency", invoice.getString("currencyUomId"), "paymentCurrency", payment.getString("currencyUomId")),locale), module);
Debug.logInfo("will try to apply payment on the actualCurrency amount on payment", module);
@@ -2512,8 +2499,9 @@
if (payment.get("actualCurrencyAmount") == null || payment.get("actualCurrencyUomId") == null) {
errorMessageList.add("Actual amounts are required in the currency of the invoice to make this work....");
} else {
- if (!payment.get("actualCurrencyUomId").equals(invoice.get("currencyUomId"))) {
- errorMessageList.add("actual currency on payment not the same as original invoice currency");
+ currencyUomId = payment.getString("actualCurrencyUomId");
+ if (!currencyUomId.equals(invoice.getString("currencyUomId"))) {
+ errorMessageList.add("actual currency on payment (" + currencyUomId + ") not the same as original invoice currency (" + invoice.getString("currencyUomId") + ")");
}
}
paymentApplyAvailable = payment.getBigDecimal("actualCurrencyAmount").subtract(PaymentWorker.getPaymentAppliedBd(payment)).setScale(decimals,rounding);
@@ -2569,8 +2557,8 @@
if (invoiceItem == null) {
errorMessageList.add(UtilProperties.getMessage(resource,"AccountingInvoiceItemNotFound",UtilMisc.toMap("invoiceId",invoiceId,"invoiceItemSeqId",invoiceItemSeqId),locale));
} else {
- if (invoice.get("currencyUomId") != null && payment.get("currencyUomId") != null && !invoice.getString("currencyUomId").equals(payment.getString("currencyUomId"))) {
- errorMessageList.add(UtilProperties.getMessage(resource,"AccountingInvoicePaymentCurrencyProblem",UtilMisc.toMap("paymentCurrencyId",payment.getString("currencyUomId"),"itemCurrency",invoice.getString("currencyUomId")) ,locale));
+ if (invoice.get("currencyUomId") != null && currencyUomId != null && !invoice.getString("currencyUomId").equals(currencyUomId)) {
+ errorMessageList.add(UtilProperties.getMessage(resource,"AccountingInvoicePaymentCurrencyProblem",UtilMisc.toMap("paymentCurrencyId", currencyUomId,"itemCurrency",invoice.getString("currencyUomId")) ,locale));
}
// get the invoice item applied value
@@ -2597,6 +2585,24 @@
}
}
+ // check this at the end because the invoice can change the currency.......
+ if (paymentApplicationId == null) {
+ // only check for new application records, update on existing records is checked in the paymentApplication section
+ if (paymentApplyAvailable.signum() == 0) {
+ errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentAlreadyApplied",UtilMisc.toMap("paymentId",paymentId), locale));
+ } else {
+ // check here for too much application if a new record is
+ // added (paymentApplicationId == null)
+ if (amountApplied.compareTo(paymentApplyAvailable) > 0) {
+ errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentLessRequested",
+ UtilMisc.<String, Object>toMap("paymentId",paymentId,
+ "paymentApplyAvailable",paymentApplyAvailable,
+ "amountApplied",amountApplied,"isoCode", currencyUomId),locale));
+ }
+ }
+ }
+
+
// get the application record if the applicationId is supplied if not
// create empty record.
BigDecimal newInvoiceApplyAvailable = invoiceApplyAvailable;
@@ -2647,7 +2653,11 @@
// check if the payment for too much application if an existing
// application record is changed
- newPaymentApplyAvailable = paymentApplyAvailable.add(paymentApplication.getBigDecimal("amountApplied")).subtract(amountApplied).setScale(decimals, rounding);
+ if (paymentApplyAvailable.compareTo(ZERO) == 0) {
+ newPaymentApplyAvailable = paymentApplyAvailable.add(paymentApplication.getBigDecimal("amountApplied")).subtract(amountApplied).setScale(decimals, rounding);
+ } else {
+ newPaymentApplyAvailable = paymentApplyAvailable.add(paymentApplyAvailable).subtract(amountApplied).setScale(decimals, rounding);
+ }
if (newPaymentApplyAvailable.compareTo(ZERO) < 0) {
errorMessageList.add(UtilProperties.getMessage(resource, "AccountingPaymentNotEnough", UtilMisc.<String, Object>toMap("paymentId",paymentId,"paymentApplyAvailable",paymentApplyAvailable.add(paymentApplication.getBigDecimal("amountApplied")),"amountApplied",amountApplied),locale));
}
@@ -2769,9 +2779,8 @@
if (amountApplied.signum() == 0) {
errorMessageList.add(UtilProperties.getMessage(resource, "AccountingNoAmount",locale));
} else {
- successMessage = UtilProperties.getMessage(resource, "AccountingApplicationSuccess",UtilMisc.<String, Object>toMap("amountApplied",amountApplied,"paymentId",paymentId,"isoCode", payment.getString("currencyUomId"),"toMessage",toMessage),locale);
+ successMessage = UtilProperties.getMessage(resource, "AccountingApplicationSuccess",UtilMisc.<String, Object>toMap("amountApplied",amountApplied,"paymentId",paymentId,"isoCode", currencyUomId, "toMessage", toMessage),locale);
}
-
// report error messages if any
if (errorMessageList.size() > 0) {
return ServiceUtil.returnError(errorMessageList);
@@ -2878,8 +2887,8 @@
// create application payment record but check currency
// first if supplied
- if (invoice.get("currencyUomId") != null && payment.get("currencyUomId") != null && !invoice.getString("currencyUomId").equals( payment.getString("currencyUomId"))) {
- errorMessageList.add("Payment currency (" + payment.getString("currencyUomId") + ") and invoice currency(" + invoice.getString("currencyUomId") + ") not the same\n");
+ if (invoice.get("currencyUomId") != null && currencyUomId != null && !invoice.getString("currencyUomId").equals(currencyUomId)) {
+ errorMessageList.add("Payment currency (" + currencyUomId + ") and invoice currency(" + invoice.getString("currencyUomId") + ") not the same\n");
} else {
paymentApplication.set("paymentApplicationId", null);
// make sure we get a new record
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=701313&r1=701312&r2=701313&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 Fri Oct 3 00:12:35 2008
@@ -42,8 +42,6 @@
import org.ofbiz.entity.util.EntityUtil;
import org.ofbiz.entity.condition.EntityCondition;
import org.ofbiz.entity.condition.EntityOperator;
-import org.ofbiz.entity.condition.EntityExpr;
-import org.ofbiz.entity.condition.EntityConditionList;
/**
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=701313&r1=701312&r2=701313&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 Fri Oct 3 00:12:35 2008
@@ -25,6 +25,7 @@
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.math.BigDecimal;
+import java.math.MathContext;
import org.ofbiz.base.util.UtilNumber;
import javolution.util.FastList;
@@ -34,32 +35,52 @@
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 = BigDecimal.ONE;
+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;
ZERO = BigDecimal.ZERO;
decimals = UtilNumber.getBigDecimalScale("invoice.decimals");
rounding = UtilNumber.getBigDecimalRoundingMode("invoice.rounding");
if ("Y".equalsIgnoreCase(other)) {
- if ((invoice.getRelatedOne("InvoiceType")).parentTypeId.equals("SALES_INVOICE")) {
- otherCurrency = invoice.getRelatedOne("Party").preferredCurrencyUomId;
- } else {
- otherCurrency = invoice.getRelatedOne("FromParty").preferredCurrencyUomId;
- }
- result = null;
- if (otherCurrency && invoice.currencyUomId && !otherCurrency.equals(invoice.currencyUomId)) {
- result = dispatcher.runSync("convertUom", [uomId : invoice.currencyUomId,
+ 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") ?
+ 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();
- invoice.currencyUomId = otherCurrency;
- }
- }
+ }
+ }
+ }
}
if (invoice) {