
--- modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java	2013-02-21 16:51:04.354730400 +0100
+++ modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java	2013-02-21 17:07:42.354295265 +0100
@@ -909,6 +909,9 @@
                   for (final FIN_PaymentScheduleDetail invScheDetail : paymentScheduleDetail
                       .getInvoicePaymentSchedule()
                       .getFINPaymentScheduleDetailInvoicePaymentScheduleList()) {
+                	  if (invScheDetail.isCanceled()){
+                		  continue; 
+                	  }
                     if (invScheDetail.getPaymentDetails() == null) {
                       outStandingAmt = outStandingAmt.add(invScheDetail.getAmount()).add(
                           invScheDetail.getWriteoffAmount());
@@ -927,6 +930,8 @@
                         .getNewPaymentScheduleDetail(payment.getOrganization(), outStandingAmt);
                     mergedScheduleDetail.setInvoicePaymentSchedule(paymentScheduleDetail
                         .getInvoicePaymentSchedule());
+                    mergedScheduleDetail.setOrderPaymentSchedule(paymentScheduleDetail
+                            .getOrderPaymentSchedule());
                     OBDal.getInstance().save(mergedScheduleDetail);
                   }
                 } else if (paymentScheduleDetail.getOrderPaymentSchedule() != null) {
@@ -934,6 +939,9 @@
                   for (final FIN_PaymentScheduleDetail ordScheDetail : paymentScheduleDetail
                       .getOrderPaymentSchedule()
                       .getFINPaymentScheduleDetailOrderPaymentScheduleList()) {
+                	  if (ordScheDetail.isCanceled()){
+                		  continue; 
+                	  }
                     if (ordScheDetail.getPaymentDetails() == null) {
                       outStandingAmt = outStandingAmt.add(ordScheDetail.getAmount()).add(
                           ordScheDetail.getWriteoffAmount());
@@ -979,6 +987,8 @@
                 }
                 OBDal.getInstance().remove(removedPD);
               }
+              OBDal.getInstance().flush();
+              removedPDS.clear();
             }
             if (payment.getGeneratedCredit().compareTo(BigDecimal.ZERO) == 0
                 && payment.getUsedCredit().compareTo(BigDecimal.ZERO) == 1) {
