Attached Files | OrderLoaderTest.jmx [^] (259,189 bytes) 2015-05-16 14:08
erp-core.diff [^] (15,747 bytes) 2015-05-16 14:08 [Show Content] [Hide Content]diff --git a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/dao/TransactionsDao.java b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/dao/TransactionsDao.java
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/dao/TransactionsDao.java
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/dao/TransactionsDao.java
@@ -131,6 +131,7 @@
newTransaction.setForeignConversionRate(payment.getFinancialTransactionConvertRate());
newTransaction.setForeignAmount(payment.getAmount());
}
+ payment.getFINFinaccTransactionList().add(newTransaction);
OBDal.getInstance().save(newTransaction);
OBDal.getInstance().flush();
} finally {
diff --git a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java b/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
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
@@ -21,6 +21,8 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -155,14 +157,14 @@
}
}
- OBDal.getInstance().flush();
if (strAction.equals("P") || strAction.equals("D")) {
// Guess if this is a refund payment
boolean isRefund = false;
OBContext.setAdminMode(false);
try {
- if (payment.getFINPaymentDetailList().size() > 0) {
- for (FIN_PaymentDetail det : payment.getFINPaymentDetailList()) {
+ List<FIN_PaymentDetail> paymentDetailList = payment.getFINPaymentDetailList();
+ if (paymentDetailList.size() > 0) {
+ for (FIN_PaymentDetail det : paymentDetailList) {
if (det.isRefund()) {
isRefund = true;
break;
@@ -178,13 +180,14 @@
OBDal.getInstance().save(payment);
}
- boolean orgLegalWithAccounting = FIN_Utility.periodControlOpened(FIN_Payment.TABLE_NAME,
- payment.getId(), FIN_Payment.TABLE_NAME + "_ID", "LE");
boolean documentEnabled = getDocumentConfirmation(null, payment.getId());
- if (documentEnabled
+ boolean periodNotAvailable = documentEnabled
&& !FIN_Utility.isPeriodOpen(payment.getClient().getId(), payment.getDocumentType()
.getDocumentCategory(), payment.getOrganization().getId(), OBDateUtils
- .formatDate(payment.getPaymentDate())) && orgLegalWithAccounting) {
+ .formatDate(payment.getPaymentDate()))
+ && FIN_Utility.periodControlOpened(FIN_Payment.TABLE_NAME, payment.getId(),
+ FIN_Payment.TABLE_NAME + "_ID", "LE");
+ if (periodNotAvailable) {
msg = OBMessageUtils.messageBD("PeriodNotAvailable");
throw new OBException(msg);
}
@@ -204,6 +207,7 @@
// FIXME: added to access the FIN_PaymentSchedule and FIN_PaymentScheduleDetail tables to be
// removed when new security implementation is done
OBContext.setAdminMode();
+ boolean flushDone = false;
try {
String strRefundCredit = "";
// update payment schedule amount
@@ -313,8 +317,9 @@
}
}
// Execution Process
- if (dao.isAutomatedExecutionPayment(payment.getAccount(), payment.getPaymentMethod(),
- payment.isReceipt())) {
+ if (!isPosOrder
+ && dao.isAutomatedExecutionPayment(payment.getAccount(), payment.getPaymentMethod(),
+ payment.isReceipt())) {
try {
payment.setStatus("RPAE");
@@ -359,16 +364,26 @@
decreaseCustomerCredit(businessPartner, payment.getUsedCredit());
}
}
+
for (FIN_PaymentDetail paymentDetail : payment.getFINPaymentDetailList()) {
+
+ List<FIN_PaymentScheduleDetail> orderPaymentScheduleDetails = new ArrayList<FIN_PaymentScheduleDetail>(
+ paymentDetail.getFINPaymentScheduleDetailList());
+
// Get payment schedule detail list ordered by amount asc.
// First negative if they exist and then positives
- OBCriteria<FIN_PaymentScheduleDetail> obcPSD = OBDal.getInstance().createCriteria(
- FIN_PaymentScheduleDetail.class);
- obcPSD.add(Restrictions.eq(FIN_PaymentScheduleDetail.PROPERTY_PAYMENTDETAILS,
- paymentDetail));
- obcPSD.addOrderBy(FIN_PaymentScheduleDetail.PROPERTY_AMOUNT, true);
+ if (orderPaymentScheduleDetails.size() > 1) {
+ Collections.sort(orderPaymentScheduleDetails,
+ new Comparator<FIN_PaymentScheduleDetail>() {
+ @Override
+ public int compare(FIN_PaymentScheduleDetail o1, FIN_PaymentScheduleDetail o2) {
+ // TODO Auto-generated method stub
+ return o1.getAmount().compareTo(o2.getAmount());
+ }
+ });
+ }
- for (FIN_PaymentScheduleDetail paymentScheduleDetail : obcPSD.list()) {
+ for (FIN_PaymentScheduleDetail paymentScheduleDetail : orderPaymentScheduleDetails) {
BigDecimal amount = paymentScheduleDetail.getAmount().add(
paymentScheduleDetail.getWriteoffAmount());
// Do not restore paid amounts if the payment is awaiting execution.
@@ -378,7 +393,7 @@
paymentScheduleDetail.setInvoicePaid(false);
// Payment = 0 when the payment is generated by a invoice that consume credit
if (invoicePaidAmounts
- | (payment.getAmount().compareTo(new BigDecimal("0.00")) == 0)) {
+ || (payment.getAmount().compareTo(new BigDecimal("0.00")) == 0)) {
if (paymentScheduleDetail.getInvoicePaymentSchedule() != null) {
// BP SO_CreditUsed
businessPartner = paymentScheduleDetail.getInvoicePaymentSchedule()
@@ -458,14 +473,18 @@
&& payment.getAmount().compareTo(BigDecimal.ZERO) != 0
&& !"TRANSACTION".equals(comingFrom)) {
triggerAutomaticFinancialAccountTransaction(payment);
+ flushDone = true;
}
}
if (!payment.getAccount().getCurrency().equals(payment.getCurrency())
&& getConversionRateDocument(payment).size() == 0) {
insertConversionRateDocument(payment);
+ flushDone = true;
}
} finally {
- OBDal.getInstance().flush();
+ if (!flushDone) {
+ OBDal.getInstance().flush();
+ }
OBContext.restorePreviousMode();
}
@@ -1311,7 +1330,7 @@
*/
private void processTransaction(String strAction, FIN_FinaccTransaction transaction)
throws OBException {
- FIN_TransactionProcess.doTransactionProcess(strAction, transaction);
+ FIN_TransactionProcess.doTransactionProcess(strAction, transaction, false);
}
public boolean getDocumentConfirmation(ConnectionProvider conn, String strRecordId) {
@@ -1320,14 +1339,8 @@
OBContext.setAdminMode();
try {
FIN_Payment payment = OBDal.getInstance().get(FIN_Payment.class, strRecordId);
- OBCriteria<FinAccPaymentMethod> obCriteria = OBDal.getInstance().createCriteria(
- FinAccPaymentMethod.class);
- obCriteria.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_ACCOUNT, payment.getAccount()));
- obCriteria.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_PAYMENTMETHOD,
- payment.getPaymentMethod()));
- obCriteria.setFilterOnReadableClients(false);
- obCriteria.setFilterOnReadableOrganization(false);
- List<FinAccPaymentMethod> lines = obCriteria.list();
+ List<FinAccPaymentMethod> lines = payment.getPaymentMethod()
+ .getFinancialMgmtFinAccPaymentMethodList();
List<FIN_FinancialAccountAccounting> accounts = payment.getAccount()
.getFINFinancialAccountAcctList();
for (FIN_FinancialAccountAccounting account : accounts) {
@@ -1360,6 +1373,7 @@
}
}
} catch (Exception e) {
+ // TODO no logging... ??
return confirmation;
} finally {
OBContext.restorePreviousMode();
diff --git a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_TransactionProcess.java b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_TransactionProcess.java
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_TransactionProcess.java
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_TransactionProcess.java
@@ -90,6 +90,13 @@
ftp.transactionProcess(strAction, transaction);
}
+ public static void doTransactionProcess(String strAction, FIN_FinaccTransaction transaction,
+ boolean doPeriodAvailableCheck) throws OBException {
+ FIN_TransactionProcess ftp = WeldUtils
+ .getInstanceFromStaticBeanManager(FIN_TransactionProcess.class);
+ ftp.transactionProcess(strAction, transaction);
+ }
+
private void transactionProcess(String strAction, FIN_FinaccTransaction transaction)
throws OBException {
String msg = "";
@@ -99,6 +106,7 @@
// ***********************
// Process Transaction
// ***********************
+
boolean orgLegalWithAccounting = FIN_Utility.periodControlOpened(
FIN_FinaccTransaction.TABLE_NAME, transaction.getId(), FIN_FinaccTransaction.TABLE_NAME
+ "_ID", "LE");
@@ -110,6 +118,7 @@
msg = OBMessageUtils.messageBD("PeriodNotAvailable");
throw new OBException(msg);
}
+
final FIN_FinancialAccount financialAccount = transaction.getAccount();
financialAccount.setCurrentBalance(financialAccount.getCurrentBalance().add(
transaction.getDepositAmount().subtract(transaction.getPaymentAmount())));
@@ -165,7 +174,6 @@
transaction.setAprmProcessed("R");
OBDal.getInstance().save(financialAccount);
OBDal.getInstance().save(transaction);
- OBDal.getInstance().flush();
} else if (strAction.equals("R")) {
// ***********************
@@ -196,10 +204,14 @@
ConversionRateDoc.class);
obc.add(Restrictions.eq(ConversionRateDoc.PROPERTY_FINANCIALACCOUNTTRANSACTION,
transaction));
+ boolean dataRemoved = false;
for (ConversionRateDoc conversionRateDoc : obc.list()) {
+ dataRemoved = true;
OBDal.getInstance().remove(conversionRateDoc);
}
- OBDal.getInstance().flush();
+ if (dataRemoved) {
+ OBDal.getInstance().flush();
+ }
} finally {
OBContext.restorePreviousMode();
}
@@ -209,7 +221,6 @@
.subtract(transaction.getDepositAmount()).add(transaction.getPaymentAmount()));
OBDal.getInstance().save(financialAccount);
OBDal.getInstance().save(transaction);
- OBDal.getInstance().flush();
if (payment != null) {
Boolean invoicePaidold = false;
for (FIN_PaymentDetail pd : payment.getFINPaymentDetailList()) {
@@ -233,9 +244,9 @@
}
transaction.setAprmProcessed("P");
OBDal.getInstance().save(transaction);
- OBDal.getInstance().flush();
}
} finally {
+ OBDal.getInstance().flush();
OBContext.restorePreviousMode();
}
}
diff --git a/src-db/database/model/tables/C_BPARTNER.xml b/src-db/database/model/tables/C_BPARTNER.xml
--- a/src-db/database/model/tables/C_BPARTNER.xml
+++ b/src-db/database/model/tables/C_BPARTNER.xml
@@ -459,6 +459,18 @@
<index name="C_BPARTNER_NAME" unique="false">
<index-column name="NAME"/>
</index>
+ <index name="C_BPARTNER_NAME_ID" unique="false">
+ <index-column name="NAME"/>
+ <index-column name="C_BPARTNER_ID"/>
+ </index>
+ <index name="C_BPARTNER_REFERENCENO_ID" unique="false">
+ <index-column name="REFERENCENO"/>
+ <index-column name="C_BPARTNER_ID"/>
+ </index>
+ <index name="C_BPARTNER_VALUE_ID" unique="false">
+ <index-column name="VALUE"/>
+ <index-column name="C_BPARTNER_ID"/>
+ </index>
<unique name="C_BPARTNER_VALUE">
<unique-column name="AD_CLIENT_ID"/>
<unique-column name="AD_ORG_ID"/>
diff --git a/src-db/database/model/tables/C_ORDER.xml b/src-db/database/model/tables/C_ORDER.xml
--- a/src-db/database/model/tables/C_ORDER.xml
+++ b/src-db/database/model/tables/C_ORDER.xml
@@ -452,9 +452,17 @@
<index-column name="DATEORDERED"/>
<index-column name="DOCUMENTNO"/>
</index>
+ <index name="C_ORDER_DATEORDERED_ID" unique="false">
+ <index-column name="DATEORDERED"/>
+ <index-column name="C_ORDER_ID"/>
+ </index>
<index name="C_ORDER_DOCNO" unique="false">
<index-column name="DOCUMENTNO"/>
</index>
+ <index name="C_ORDER_DOCUMENTNO_ID" unique="false">
+ <index-column name="DOCUMENTNO"/>
+ <index-column name="C_ORDER_ID"/>
+ </index>
<index name="C_ORDER_UPDATED" unique="false">
<index-column name="UPDATED"/>
</index>
diff --git a/src-db/database/model/tables/M_INOUT.xml b/src-db/database/model/tables/M_INOUT.xml
--- a/src-db/database/model/tables/M_INOUT.xml
+++ b/src-db/database/model/tables/M_INOUT.xml
@@ -335,6 +335,14 @@
<index name="M_INOUT_DOCUMENTNO" unique="false">
<index-column name="DOCUMENTNO"/>
</index>
+ <index name="M_INOUT_DOCUMENTNO_ID" unique="false">
+ <index-column name="DOCUMENTNO"/>
+ <index-column name="M_INOUT_ID"/>
+ </index>
+ <index name="M_INOUT_MOVEMENTDATE_ID" unique="false">
+ <index-column name="MOVEMENTDATE"/>
+ <index-column name="M_INOUT_ID"/>
+ </index>
<index name="M_INOUT_ORDER" unique="false">
<index-column name="C_ORDER_ID"/>
</index>
diff --git a/src-db/database/model/tables/M_PRODUCT.xml b/src-db/database/model/tables/M_PRODUCT.xml
--- a/src-db/database/model/tables/M_PRODUCT.xml
+++ b/src-db/database/model/tables/M_PRODUCT.xml
@@ -425,12 +425,24 @@
<index name="M_PRODUCT_NAME" unique="false">
<index-column name="NAME"/>
</index>
+ <index name="M_PRODUCT_NAME_ID" unique="false">
+ <index-column name="NAME"/>
+ <index-column name="M_PRODUCT_ID"/>
+ </index>
<index name="M_PRODUCT_PRODUCTCATEGORY" unique="false">
<index-column name="M_PRODUCT_CATEGORY_ID"/>
</index>
<index name="M_PRODUCT_UPC" unique="false">
<index-column name="UPC"/>
</index>
+ <index name="M_PRODUCT_UPC_ID" unique="false">
+ <index-column name="UPC"/>
+ <index-column name="M_PRODUCT_ID"/>
+ </index>
+ <index name="M_PRODUCT_VALUE_ID" unique="false">
+ <index-column name="VALUE"/>
+ <index-column name="M_PRODUCT_ID"/>
+ </index>
<unique name="M_PRODUCT_EXPENSETYPE">
<unique-column name="S_EXPENSETYPE_ID"/>
</unique>
|