details: /erp/devel/pi/rev/70c1ea2cde5f
changeset: 12070:70c1ea2cde5f
user: Mikel Irurita <mikel.irurita <at> openbravo.com>
date: Mon May 09 17:22:33 2011 +0200
summary: [APRM] Prevent entity access errors when processing a payment
diffstat:
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
| 233 +++++----
1 files changed, 119 insertions(+), 114 deletions(-)
diffs (259 lines):
diff -r c3b8fa166f26 -r 70c1ea2cde5f
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
---
a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
Mon May 09 13:57:27 2011 +0200
+++
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
Mon May 09 17:22:33 2011 +0200
@@ -172,119 +172,121 @@
.concat("...").toString() : description.toString();
payment.setDescription(truncateDescription);
+ if (paymentAmount.compareTo(payment.getAmount()) != 0)
+ payment.setUsedCredit(paymentAmount.subtract(payment.getAmount()));
+ if (payment.getUsedCredit().compareTo(BigDecimal.ZERO) != 0)
+ updateUsedCredit(payment.getUsedCredit(),
payment.getBusinessPartner(), payment
+ .isReceipt());
+
+ payment.setWriteoffAmount(paymentWriteOfAmount);
+ payment.setProcessed(true);
+ payment.setAPRMProcessPayment("R");
+ // Execution Process
+ if (dao.isAutomatedExecutionPayment(payment.getAccount(),
payment.getPaymentMethod(),
+ payment.isReceipt())) {
+ try {
+ payment.setStatus("RPAE");
+ payment.setProcessNow(false);
+ OBDal.getInstance().save(payment);
+ OBDal.getInstance().flush();
+
+ if (dao.hasNotDeferredExecutionProcess(payment.getAccount(),
payment
+ .getPaymentMethod(), payment.isReceipt())) {
+ PaymentExecutionProcess executionProcess =
dao.getExecutionProcess(payment);
+ if (dao.isAutomaticExecutionProcess(executionProcess)) {
+ final List<FIN_Payment> payments = new
ArrayList<FIN_Payment>(1);
+ payments.add(payment);
+ FIN_ExecutePayment executePayment = new FIN_ExecutePayment();
+ executePayment.init("APP", executionProcess, payments, null,
payment
+ .getOrganization());
+ OBError result = executePayment.execute();
+ if ("Error".equals(result.getType())) {
+ msg.setType("Warning");
+ msg.setMessage(Utility.parseTranslation(conProvider, vars,
vars.getLanguage(),
+ result.getMessage()));
+ } else if (!"".equals(result.getMessage())) {
+ String execProcessMsg =
Utility.parseTranslation(conProvider, vars, vars
+ .getLanguage(), result.getMessage());
+ if (!"".equals(msg.getMessage()))
+ msg.setMessage(msg.getMessage() + "<br>");
+ msg.setMessage(msg.getMessage() + execProcessMsg);
+ }
+ }
+ }
+ } catch (final NoExecutionProcessFoundException e) {
+ e.printStackTrace(System.err);
+ msg.setType("Warning");
+ msg.setMessage(Utility.parseTranslation(conProvider, vars,
vars.getLanguage(),
+ "@NoExecutionProcessFound@"));
+ bundle.setResult(msg);
+ return;
+ } catch (final Exception e) {
+ e.printStackTrace(System.err);
+ msg.setType("Warning");
+ msg.setMessage(Utility.parseTranslation(conProvider, vars,
vars.getLanguage(),
+ "@IssueOnExecutionProcess@"));
+ bundle.setResult(msg);
+ return;
+ }
+ } else {
+ BusinessPartner businessPartner = payment.getBusinessPartner();
+ // When credit is used (consumed) we compensate so_creditused as
this amount is already
+ // included in the payment details. Credit consumed should not
affect to so_creditused
+ if (payment.getGeneratedCredit().compareTo(BigDecimal.ZERO) == 0
+ && payment.getUsedCredit().compareTo(BigDecimal.ZERO) != 0) {
+ if (isReceipt) {
+ increaseCustomerCredit(businessPartner,
payment.getUsedCredit());
+ } else {
+ decreaseCustomerCredit(businessPartner,
payment.getUsedCredit());
+ }
+ }
+ for (FIN_PaymentDetail paymentDetail :
payment.getFINPaymentDetailList()) {
+ for (FIN_PaymentScheduleDetail paymentScheduleDetail :
paymentDetail
+ .getFINPaymentScheduleDetailList()) {
+ BigDecimal amount = paymentDetail.getAmount()
+ .add(paymentDetail.getWriteoffAmount());
+ if (paymentScheduleDetail.getInvoicePaymentSchedule() != null)
{
+ // BP SO_CreditUsed
+ businessPartner =
paymentScheduleDetail.getInvoicePaymentSchedule().getInvoice()
+ .getBusinessPartner();
+ // Payments update credit opposite to invoices
+ if (isReceipt) {
+ decreaseCustomerCredit(businessPartner, amount);
+ } else {
+ increaseCustomerCredit(businessPartner, amount);
+ }
+
FIN_AddPayment.updatePaymentScheduleAmounts(paymentScheduleDetail
+ .getInvoicePaymentSchedule(), paymentDetail.getAmount(),
paymentDetail
+ .getWriteoffAmount());
+ }
+ if (paymentScheduleDetail.getOrderPaymentSchedule() != null) {
+
FIN_AddPayment.updatePaymentScheduleAmounts(paymentScheduleDetail
+ .getOrderPaymentSchedule(), paymentDetail.getAmount(),
paymentDetail
+ .getWriteoffAmount());
+ }
+ // when generating credit for a BP SO_CreditUsed is also
updated
+ if (paymentScheduleDetail.getInvoicePaymentSchedule() == null
+ && paymentScheduleDetail.getOrderPaymentSchedule() == null
+ && paymentScheduleDetail.getPaymentDetails().getGLItem()
== null) {
+ // BP SO_CreditUsed
+ if (isReceipt) {
+ decreaseCustomerCredit(businessPartner, amount);
+ } else {
+ increaseCustomerCredit(businessPartner, amount);
+ }
+ }
+ }
+ }
+ payment.setStatus(isReceipt ? "RPR" : "PPM");
+ if ((FIN_Utility.isAutomaticDepositWithdrawn(payment) ||
strAction.equals("D"))
+ && payment.getAmount().compareTo(BigDecimal.ZERO) != 0)
+ triggerAutomaticFinancialAccountTransaction(vars, conProvider,
payment);
+ }
+
} finally {
OBDal.getInstance().flush();
OBContext.restorePreviousMode();
}
- if (paymentAmount.compareTo(payment.getAmount()) != 0)
- payment.setUsedCredit(paymentAmount.subtract(payment.getAmount()));
- if (payment.getUsedCredit().compareTo(BigDecimal.ZERO) != 0)
- updateUsedCredit(payment.getUsedCredit(),
payment.getBusinessPartner(), payment
- .isReceipt());
-
- payment.setWriteoffAmount(paymentWriteOfAmount);
- payment.setProcessed(true);
- payment.setAPRMProcessPayment("R");
- // Execution Process
- if (dao.isAutomatedExecutionPayment(payment.getAccount(),
payment.getPaymentMethod(),
- payment.isReceipt())) {
- try {
- payment.setStatus("RPAE");
- payment.setProcessNow(false);
- OBDal.getInstance().save(payment);
- OBDal.getInstance().flush();
-
- if (dao.hasNotDeferredExecutionProcess(payment.getAccount(),
- payment.getPaymentMethod(), payment.isReceipt())) {
- PaymentExecutionProcess executionProcess =
dao.getExecutionProcess(payment);
- if (dao.isAutomaticExecutionProcess(executionProcess)) {
- final List<FIN_Payment> payments = new
ArrayList<FIN_Payment>(1);
- payments.add(payment);
- FIN_ExecutePayment executePayment = new FIN_ExecutePayment();
- executePayment.init("APP", executionProcess, payments, null,
payment
- .getOrganization());
- OBError result = executePayment.execute();
- if ("Error".equals(result.getType())) {
- msg.setType("Warning");
- msg.setMessage(Utility.parseTranslation(conProvider, vars,
vars.getLanguage(),
- result.getMessage()));
- } else if (!"".equals(result.getMessage())) {
- String execProcessMsg =
Utility.parseTranslation(conProvider, vars, vars
- .getLanguage(), result.getMessage());
- if (!"".equals(msg.getMessage()))
- msg.setMessage(msg.getMessage() + "<br>");
- msg.setMessage(msg.getMessage() + execProcessMsg);
- }
- }
- }
- } catch (final NoExecutionProcessFoundException e) {
- e.printStackTrace(System.err);
- msg.setType("Warning");
- msg.setMessage(Utility.parseTranslation(conProvider, vars,
vars.getLanguage(),
- "@NoExecutionProcessFound@"));
- bundle.setResult(msg);
- return;
- } catch (final Exception e) {
- e.printStackTrace(System.err);
- msg.setType("Warning");
- msg.setMessage(Utility.parseTranslation(conProvider, vars,
vars.getLanguage(),
- "@IssueOnExecutionProcess@"));
- bundle.setResult(msg);
- return;
- }
- } else {
- BusinessPartner businessPartner = payment.getBusinessPartner();
- // When credit is used (consumed) we compensate so_creditused as
this amount is already
- // included in the payment details. Credit consumed should not
affect to so_creditused
- if (payment.getGeneratedCredit().compareTo(BigDecimal.ZERO) == 0
- && payment.getUsedCredit().compareTo(BigDecimal.ZERO) != 0) {
- if (isReceipt) {
- increaseCustomerCredit(businessPartner, payment.getUsedCredit());
- } else {
- decreaseCustomerCredit(businessPartner, payment.getUsedCredit());
- }
- }
- for (FIN_PaymentDetail paymentDetail :
payment.getFINPaymentDetailList()) {
- for (FIN_PaymentScheduleDetail paymentScheduleDetail :
paymentDetail
- .getFINPaymentScheduleDetailList()) {
- BigDecimal amount =
paymentDetail.getAmount().add(paymentDetail.getWriteoffAmount());
- if (paymentScheduleDetail.getInvoicePaymentSchedule() != null) {
- // BP SO_CreditUsed
- businessPartner =
paymentScheduleDetail.getInvoicePaymentSchedule().getInvoice()
- .getBusinessPartner();
- // Payments update credit opposite to invoices
- if (isReceipt) {
- decreaseCustomerCredit(businessPartner, amount);
- } else {
- increaseCustomerCredit(businessPartner, amount);
- }
-
FIN_AddPayment.updatePaymentScheduleAmounts(paymentScheduleDetail
- .getInvoicePaymentSchedule(), paymentDetail.getAmount(),
paymentDetail
- .getWriteoffAmount());
- }
- if (paymentScheduleDetail.getOrderPaymentSchedule() != null) {
-
FIN_AddPayment.updatePaymentScheduleAmounts(paymentScheduleDetail
- .getOrderPaymentSchedule(), paymentDetail.getAmount(),
paymentDetail
- .getWriteoffAmount());
- }
- // when generating credit for a BP SO_CreditUsed is also updated
- if (paymentScheduleDetail.getInvoicePaymentSchedule() == null
- && paymentScheduleDetail.getOrderPaymentSchedule() == null
- && paymentScheduleDetail.getPaymentDetails().getGLItem() ==
null) {
- // BP SO_CreditUsed
- if (isReceipt) {
- decreaseCustomerCredit(businessPartner, amount);
- } else {
- increaseCustomerCredit(businessPartner, amount);
- }
- }
- }
- }
- payment.setStatus(isReceipt ? "RPR" : "PPM");
- if ((FIN_Utility.isAutomaticDepositWithdrawn(payment) ||
strAction.equals("D"))
- && payment.getAmount().compareTo(BigDecimal.ZERO) != 0)
- triggerAutomaticFinancialAccountTransaction(vars, conProvider,
payment);
- }
// ***********************
// Reactivate Payment
@@ -404,16 +406,19 @@
payment.getFINPaymentDetailList().removeAll(removedPD);
OBDal.getInstance().save(payment);
+ if (payment.getGeneratedCredit().compareTo(BigDecimal.ZERO) == 0
+ && payment.getUsedCredit().compareTo(BigDecimal.ZERO) == 1) {
+ undoUsedCredit(payment.getUsedCredit(),
payment.getBusinessPartner(), payment
+ .isReceipt());
+ }
+ payment.setGeneratedCredit(BigDecimal.ZERO);
+ payment.setUsedCredit(BigDecimal.ZERO);
+
} finally {
OBDal.getInstance().flush();
OBContext.restorePreviousMode();
}
- if (payment.getGeneratedCredit().compareTo(BigDecimal.ZERO) == 0
- && payment.getUsedCredit().compareTo(BigDecimal.ZERO) == 1)
- undoUsedCredit(payment.getUsedCredit(),
payment.getBusinessPartner(), payment.isReceipt());
- payment.setGeneratedCredit(BigDecimal.ZERO);
- payment.setUsedCredit(BigDecimal.ZERO);
}
payment.setProcessNow(false);
------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network
management toolset available today. Delivers lowest initial
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits