details:   /erp/devel/pi/rev/fe5026297cf9
changeset: 7108:fe5026297cf9
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Wed Apr 21 19:39:17 2010 +0200
summary:   Fixes 0013065: Reconciliation Psted button failing

details:   /erp/devel/pi/rev/9ecddaf2a817
changeset: 7109:9ecddaf2a817
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Thu Apr 22 00:34:17 2010 +0200
summary:   Fixes bug 0013066: Accounting process fails

diffstat:

 src/org/openbravo/erpCommon/ad_forms/AcctServer.java              |    1 +
 src/org/openbravo/erpCommon/ad_forms/DocFINFinAccTransaction.java |   61 +++++-
 src/org/openbravo/erpCommon/ad_forms/DocFINPayment.java           |   56 ++--
 src/org/openbravo/erpCommon/ad_forms/DocFINReconciliation.java    |  103 
+++++----
 4 files changed, 142 insertions(+), 79 deletions(-)

diffs (truncated from 337 to 300 lines):

diff -r 7e8895c44dea -r 9ecddaf2a817 
src/org/openbravo/erpCommon/ad_forms/AcctServer.java
--- a/src/org/openbravo/erpCommon/ad_forms/AcctServer.java      Wed Apr 21 
22:04:36 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/AcctServer.java      Thu Apr 22 
00:34:17 2010 +0200
@@ -550,6 +550,7 @@
         log4j.warn("AcctServer - Post -Cannot lock Document - ignored: " + 
tableName + "_ID="
             + strClave);
         setStatus(STATUS_DocumentLocked); // Status locked document
+        this.setMessageResult(conn, vars, STATUS_DocumentLocked, "Error");
         return false;
       } else
         AcctServerData.delete(connectionProvider, AD_Table_ID, Record_ID);
diff -r 7e8895c44dea -r 9ecddaf2a817 
src/org/openbravo/erpCommon/ad_forms/DocFINFinAccTransaction.java
--- a/src/org/openbravo/erpCommon/ad_forms/DocFINFinAccTransaction.java Wed Apr 
21 22:04:36 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/DocFINFinAccTransaction.java Thu Apr 
22 00:34:17 2010 +0200
@@ -86,10 +86,8 @@
     // If payment exists the payment details are loaded, if not the GLItem 
info is loaded
     if (payment != null)
       return loadLinesPaymentDetailsFieldProvider(transaction);
-    else if (transaction.getGLItem() != null)
+    else
       return loadLinesGLItemFieldProvider(transaction);
-    else
-      return null;
   }
 
   public FieldProviderFactory[] loadLinesPaymentDetailsFieldProvider(
@@ -155,7 +153,8 @@
       FieldProviderFactory.setField(data[0], "FIN_Finacc_Transaction_ID", 
transaction.getId());
       FieldProviderFactory.setField(data[0], "AD_Client_ID", 
transaction.getClient().getId());
       FieldProviderFactory.setField(data[0], "adOrgId", 
transaction.getOrganization().getId());
-      FieldProviderFactory.setField(data[0], "cGlItemId", 
transaction.getGLItem().getId());
+      FieldProviderFactory.setField(data[0], "cGlItemId",
+          transaction.getGLItem() != null ? transaction.getGLItem().getId() : 
"");
       FieldProviderFactory.setField(data[0], "DepositAmount", 
transaction.getDepositAmount()
           .toString());
       FieldProviderFactory.setField(data[0], "PaymentAmount", 
transaction.getPaymentAmount()
@@ -280,9 +279,14 @@
     fact.createLine(line, getAccountFee(as, transaction.getAccount(), conn), 
C_Currency_ID, line
         .getPaymentAmount(), line.getDepositAmount(), Fact_Acct_Group_ID, 
nextSeqNo(SeqNo),
         DocumentType, conn);
-    fact.createLine(line, getWithdrawalAccount(as, transaction.getAccount(), 
conn), C_Currency_ID,
-        line.getPaymentAmount(), line.getDepositAmount(), Fact_Acct_Group_ID, 
nextSeqNo(SeqNo),
-        DocumentType, conn);
+    if (!getDocumentReconciliationConfirmation(conn, transaction.getAccount()))
+      fact.createLine(line, getWithdrawalAccount(as, transaction.getAccount(), 
conn),
+          C_Currency_ID, line.getDepositAmount(), line.getPaymentAmount(), 
Fact_Acct_Group_ID,
+          nextSeqNo(SeqNo), DocumentType, conn);
+    else
+      fact.createLine(line, getAccountReconciliation(conn, 
transaction.getAccount(), as),
+          C_Currency_ID, line.getDepositAmount(), line.getPaymentAmount(), 
Fact_Acct_Group_ID,
+          nextSeqNo(SeqNo), DocumentType, conn);
     SeqNo = "0";
     return fact;
   }
@@ -351,6 +355,25 @@
     return null;
   }
 
+  public boolean getDocumentReconciliationConfirmation(ConnectionProvider conn,
+      FIN_FinancialAccount financialAccount) {
+    // Checks if this step (Reconciliation) is configured to generate 
accounting for the
+    // selected financial account
+    boolean confirmation = false;
+    boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
+    try {
+      List<FIN_FinancialAccountAccounting> accounts = financialAccount
+          .getFINFinancialAccountAcctList();
+      for (FIN_FinancialAccountAccounting account : accounts) {
+        if (account.getDebitAccount() != null)
+          confirmation = true;
+      }
+    } finally {
+      OBContext.getOBContext().setInAdministratorMode(wasAdministrator);
+    }
+    return confirmation;
+  }
+
   public boolean getDocumentPaymentConfirmation(ConnectionProvider conn, 
FIN_Payment payment) {
     // Checks if this step (Make receive payment) is configured to generate 
accounting for the
     // selected financial account
@@ -559,4 +582,28 @@
     return account;
   }
 
+  public Account getAccountReconciliation(ConnectionProvider conn, 
FIN_FinancialAccount finAccount,
+      AcctSchema as) throws ServletException {
+    boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
+    Account account = null;
+    try {
+      OBCriteria<FIN_FinancialAccountAccounting> accounts = 
OBDal.getInstance().createCriteria(
+          FIN_FinancialAccountAccounting.class);
+      
accounts.add(Expression.eq(FIN_FinancialAccountAccounting.PROPERTY_ACCOUNT, 
finAccount));
+      
accounts.add(Expression.eq(FIN_FinancialAccountAccounting.PROPERTY_ACCOUNTINGSCHEMA,
 OBDal
+          
.getInstance().get(org.openbravo.model.financialmgmt.accounting.coa.AcctSchema.class,
+              as.m_C_AcctSchema_ID)));
+      
accounts.add(Expression.eq(FIN_FinancialAccountAccounting.PROPERTY_ACTIVE, 
true));
+      accounts.setFilterOnReadableClients(false);
+      accounts.setFilterOnReadableOrganization(false);
+      List<FIN_FinancialAccountAccounting> accountList = accounts.list();
+      if (accountList == null || accountList.size() == 0)
+        return null;
+      account = new Account(conn, 
accountList.get(0).getDebitAccount().getId());
+    } finally {
+      OBContext.getOBContext().setInAdministratorMode(wasAdministrator);
+    }
+    return account;
+  }
+
 }
\ No newline at end of file
diff -r 7e8895c44dea -r 9ecddaf2a817 
src/org/openbravo/erpCommon/ad_forms/DocFINPayment.java
--- a/src/org/openbravo/erpCommon/ad_forms/DocFINPayment.java   Wed Apr 21 
22:04:36 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/DocFINPayment.java   Thu Apr 22 
00:34:17 2010 +0200
@@ -62,7 +62,7 @@
 
   public boolean loadDocumentDetails(FieldProvider[] data, ConnectionProvider 
conn) {
     DateDoc = data[0].getField("PaymentDate");
-    Amounts[0] = data[0].getField("AMOUNT");
+    Amounts[0] = data[0].getField("Amount");
     loadDocumentType();
     p_lines = loadLines();
     return true;
@@ -130,6 +130,8 @@
     // Select specific definition
     String strClassname = "";
     final StringBuilder whereClause = new StringBuilder();
+    Fact fact = new Fact(this, as, Fact.POST_Actual);
+    String Fact_Acct_Group_ID = SequenceIdData.getUUID();
     boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
     try {
       whereClause.append(" as astdt ");
@@ -168,36 +170,34 @@
           log4j.error("Error while creating new instance for 
DocFINPaymentTemplate - ", e);
         }
       }
+
+      for (int i = 0; p_lines != null && i < p_lines.length; i++) {
+        DocLine_FINPayment line = (DocLine_FINPayment) p_lines[i];
+
+        boolean isReceipt = DocumentType.equals("ARR");
+        boolean isPrepayment = line.getIsPrepayment().equals("Y");
+
+        String bpAmount = line.getAmount();
+        if (line.WriteOffAmt != null && !line.WriteOffAmt.equals("")
+            && !line.WriteOffAmt.equals("0")) {
+          fact.createLine(line, 
getAccount(AcctServer.ACCTTYPE_WriteOffDefault, as, conn),
+              C_Currency_ID, (isReceipt ? line.WriteOffAmt : ""), (isReceipt ? 
""
+                  : line.WriteOffAmt), Fact_Acct_Group_ID, nextSeqNo(SeqNo), 
DocumentType, conn);
+          bpAmount = new BigDecimal(bpAmount).add(new 
BigDecimal(line.WriteOffAmt)).toString();
+        }
+        fact.createLine(line, getAccountBPartner(
+            (line.m_C_BPartner_ID == null || line.m_C_BPartner_ID.equals("")) 
? this.C_BPartner_ID
+                : line.m_C_BPartner_ID, as, isReceipt, isPrepayment, conn), 
C_Currency_ID,
+            (isReceipt ? "" : bpAmount), (isReceipt ? bpAmount : ""), 
Fact_Acct_Group_ID,
+            nextSeqNo(SeqNo), DocumentType, conn);
+        FIN_Payment payment = OBDal.getInstance().get(FIN_Payment.class, 
Record_ID);
+        fact.createLine(line, getAccount(conn, payment.getAccount(), as, 
isReceipt), C_Currency_ID,
+            (isReceipt ? line.getAmount() : ""), (isReceipt ? "" : 
line.getAmount()),
+            Fact_Acct_Group_ID, "999999", DocumentType, conn);
+      }
     } finally {
       OBContext.getOBContext().setInAdministratorMode(wasAdministrator);
     }
-    Fact fact = new Fact(this, as, Fact.POST_Actual);
-    String Fact_Acct_Group_ID = SequenceIdData.getUUID();
-
-    for (int i = 0; p_lines != null && i < p_lines.length; i++) {
-      DocLine_FINPayment line = (DocLine_FINPayment) p_lines[i];
-
-      boolean isReceipt = DocumentType.equals("ARR");
-      boolean isPrepayment = line.getIsPrepayment().equals("Y");
-
-      fact.createLine(line, getAccountBPartner(
-          (line.m_C_BPartner_ID == null || line.m_C_BPartner_ID.equals("")) ? 
this.C_BPartner_ID
-              : line.m_C_BPartner_ID, as, isReceipt, isPrepayment, conn), 
C_Currency_ID,
-          (isReceipt ? "" : line.getAmount()), (isReceipt ? line.getAmount() : 
""),
-          Fact_Acct_Group_ID, nextSeqNo(SeqNo), DocumentType, conn);
-      FIN_Payment payment = OBDal.getInstance().get(FIN_Payment.class, 
Record_ID);
-      fact.createLine(line, getAccount(conn, payment.getAccount(), as, 
isReceipt), C_Currency_ID,
-          (isReceipt ? line.getAmount() : ""), (isReceipt ? "" : 
line.getAmount()),
-          Fact_Acct_Group_ID, "999999", DocumentType, conn);
-
-      if (line.WriteOffAmt != null && !line.WriteOffAmt.equals("") && 
!line.WriteOffAmt.equals("0")) {
-        fact.createLine(line, getAccount(AcctServer.ACCTTYPE_WriteOffDefault, 
as, conn),
-            C_Currency_ID, (isReceipt ? line.WriteOffAmt : ""),
-            (isReceipt ? "" : line.WriteOffAmt), Fact_Acct_Group_ID, 
nextSeqNo(SeqNo),
-            DocumentType, conn);
-      }
-
-    }
 
     SeqNo = "0";
     return fact;
diff -r 7e8895c44dea -r 9ecddaf2a817 
src/org/openbravo/erpCommon/ad_forms/DocFINReconciliation.java
--- a/src/org/openbravo/erpCommon/ad_forms/DocFINReconciliation.java    Wed Apr 
21 22:04:36 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/DocFINReconciliation.java    Thu Apr 
22 00:34:17 2010 +0200
@@ -75,26 +75,36 @@
     DateDoc = data[0].getField("statementDate");
     C_DocType_ID = data[0].getField("C_Doctype_ID");
     DocumentNo = data[0].getField("DocumentNo");
-    FIN_Reconciliation reconciliation = OBDal.getInstance()
-        .get(FIN_Reconciliation.class, Record_ID);
-    Amounts[0] = 
reconciliation.getEndingBalance().subtract(reconciliation.getStartingbalance())
-        .toString();
+    boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
+    try {
+      FIN_Reconciliation reconciliation = 
OBDal.getInstance().get(FIN_Reconciliation.class,
+          Record_ID);
+      Amounts[0] = 
reconciliation.getEndingBalance().subtract(reconciliation.getStartingbalance())
+          .toString();
+    } finally {
+      OBContext.getOBContext().setInAdministratorMode(wasAdministrator);
+    }
     loadDocumentType();
     p_lines = loadLines();
     return true;
   }
 
   public FieldProviderFactory[] loadLinesFieldProvider(String Id) {
-    FIN_Reconciliation reconciliation = 
OBDal.getInstance().get(FIN_Reconciliation.class, Id);
-    List<FIN_FinaccTransaction> transactions = 
getTransactionList(reconciliation);
     FieldProviderFactory[] linesInfo = null;
-    for (FIN_FinaccTransaction transaction : transactions) {
-      FIN_Payment payment = transaction.getFinPayment();
-      // If payment exists the payment details are loaded, if not the GLItem 
info is loaded
-      if (payment != null)
-        linesInfo = add(linesInfo, 
loadLinesPaymentDetailsFieldProvider(transaction));
-      else if (transaction.getGLItem() != null)
-        linesInfo = add(linesInfo, loadLinesGLItemFieldProvider(transaction));
+    boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
+    try {
+      FIN_Reconciliation reconciliation = 
OBDal.getInstance().get(FIN_Reconciliation.class, Id);
+      List<FIN_FinaccTransaction> transactions = 
getTransactionList(reconciliation);
+      for (FIN_FinaccTransaction transaction : transactions) {
+        FIN_Payment payment = transaction.getFinPayment();
+        // If payment exists the payment details are loaded, if not the GLItem 
info is loaded
+        if (payment != null)
+          linesInfo = add(linesInfo, 
loadLinesPaymentDetailsFieldProvider(transaction));
+        else if (transaction.getGLItem() != null)
+          linesInfo = add(linesInfo, 
loadLinesGLItemFieldProvider(transaction));
+      }
+    } finally {
+      OBContext.getOBContext().setInAdministratorMode(wasAdministrator);
     }
     return linesInfo;
   }
@@ -229,23 +239,28 @@
     FieldProviderFactory[] data = loadLinesFieldProvider(Record_ID);
     if (data == null || data.length == 0)
       return null;
-    for (int i = 0; i < data.length; i++) {
-      String Line_ID = data[i].getField("FIN_Finacc_Transaction_ID");
-      DocLine_FINReconciliation docLine = new 
DocLine_FINReconciliation(DocumentType, Record_ID,
-          Line_ID);
-      String strPaymentId = data[i].getField("FIN_Payment_ID");
-      if (strPaymentId != null && !strPaymentId.equals(""))
-        docLine.setFinPaymentId(strPaymentId);
-      docLine.m_Record_Id2 = strPaymentId;
-      docLine.setIsPrepayment(data[i].getField("isprepayment"));
-      docLine.setCGlItemId(data[i].getField("cGlItemId"));
-      docLine.setPaymentAmount(data[i].getField("PaymentAmount"));
-      docLine.setDepositAmount(data[i].getField("DepositAmount"));
-      docLine.setWriteOffAmt(data[i].getField("WriteOffAmt"));
-      docLine.setAmount(data[i].getField("Amount"));
-      
docLine.setFinFinAccTransactionId(data[i].getField("FIN_Finacc_Transaction_ID"));
-      docLine.loadAttributes(data[i], this);
-      list.add(docLine);
+    boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
+    try {
+      for (int i = 0; i < data.length; i++) {
+        String Line_ID = data[i].getField("FIN_Finacc_Transaction_ID");
+        DocLine_FINReconciliation docLine = new 
DocLine_FINReconciliation(DocumentType, Record_ID,
+            Line_ID);
+        String strPaymentId = data[i].getField("FIN_Payment_ID");
+        if (strPaymentId != null && !strPaymentId.equals(""))
+          docLine.setFinPaymentId(strPaymentId);
+        docLine.m_Record_Id2 = strPaymentId;
+        docLine.setIsPrepayment(data[i].getField("isprepayment"));
+        docLine.setCGlItemId(data[i].getField("cGlItemId"));
+        docLine.setPaymentAmount(data[i].getField("PaymentAmount"));
+        docLine.setDepositAmount(data[i].getField("DepositAmount"));
+        docLine.setWriteOffAmt(data[i].getField("WriteOffAmt"));
+        docLine.setAmount(data[i].getField("Amount"));
+        
docLine.setFinFinAccTransactionId(data[i].getField("FIN_Finacc_Transaction_ID"));
+        docLine.loadAttributes(data[i], this);
+        list.add(docLine);
+      }
+    } finally {
+      OBContext.getOBContext().setInAdministratorMode(wasAdministrator);
     }
     // Return Array
     DocLine_FINReconciliation[] dl = new 
DocLine_FINReconciliation[list.size()];
@@ -258,6 +273,7 @@
     // Select specific definition
     String strClassname = "";
     final StringBuilder whereClause = new StringBuilder();
+    Fact fact = new Fact(this, as, Fact.POST_Actual);
     boolean wasAdministrator = 
OBContext.getOBContext().setInAdministratorMode(true);
     try {
       whereClause.append(" as astdt ");

------------------------------------------------------------------------------
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to