details:   https://code.openbravo.com/erp/devel/pi/rev/7b78a07d02b6
changeset: 18182:7b78a07d02b6
user:      Eduardo Argal <eduardo.argal <at> openbravo.com>
date:      Wed Oct 10 10:32:32 2012 +0200
summary:   Fixed issue 21873, fixed issue 21874, fixed issue 21661

diffstat:

 
modules/org.openbravo.client.application/src/org/openbravo/client/application/event/ElementValueEventHandler.java
 |   189 +
 src-db/database/model/triggers/C_ELEMENTVALUE_TRG.xml                          
                                   |   126 +-
 src-db/database/model/triggers/C_VALIDCOMBINATION_TRG.xml                      
                                   |   246 --
 src-db/database/sourcedata/AD_CALLOUT.xml                                      
                                   |    10 +
 src-db/database/sourcedata/AD_COLUMN.xml                                       
                                   |  1022 +++++----
 src-db/database/sourcedata/AD_FIELD.xml                                        
                                   |   162 +-
 src-db/database/sourcedata/AD_FIELDGROUP.xml                                   
                                   |     9 +
 src-db/database/sourcedata/AD_MODEL_OBJECT.xml                                 
                                   |    24 +
 src-db/database/sourcedata/AD_MODEL_OBJECT_MAPPING.xml                         
                                   |    20 +
 src-db/database/sourcedata/AD_REFERENCE.xml                                    
                                   |    12 +
 src-db/database/sourcedata/OBUISEL_SELECTOR.xml                                
                                   |    17 +
 
src-util/modulescript/build/classes/org/openbravo/modulescript/DeleteDuplicateMatchInvoiceData.class
              |     0 
 
src-util/modulescript/build/classes/org/openbravo/modulescript/PaymentZeroAmountData.class
                        |     0 
 
src-util/modulescript/build/classes/org/openbravo/modulescript/UniqueValidCombination.class
                       |     0 
 
src-util/modulescript/build/classes/org/openbravo/modulescript/UniqueValidCombinationData.class
                   |     0 
 
src-util/modulescript/src/org/openbravo/modulescript/DeleteDuplicateMatchInvoice_data.xsql
                        |     2 +-
 
src-util/modulescript/src/org/openbravo/modulescript/PaymentZeroAmount_data.xsql
                                  |     2 +-
 
src-util/modulescript/src/org/openbravo/modulescript/UniqueValidCombination.java
                                  |    43 +
 
src-util/modulescript/src/org/openbravo/modulescript/UniqueValidCombination_data.xsql
                             |   149 +
 src/org/openbravo/erpCommon/ad_callouts/SE_ElementValue_AccountSign.java       
                                   |    38 +
 20 files changed, 1213 insertions(+), 858 deletions(-)

diffs (truncated from 3850 to 300 lines):

diff -r fbfe1fab2cff -r 7b78a07d02b6 
modules/org.openbravo.client.application/src/org/openbravo/client/application/event/ElementValueEventHandler.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ 
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/event/ElementValueEventHandler.java
 Wed Oct 10 10:32:32 2012 +0200
@@ -0,0 +1,189 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License.
+ * The Original Code is Openbravo ERP.
+ * The Initial Developer of the Original Code is Openbravo SLU
+ * All portions are Copyright (C) 2012 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+
+package org.openbravo.client.application.event;
+
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.enterprise.event.Observes;
+
+import org.apache.log4j.Logger;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+import org.openbravo.base.model.Entity;
+import org.openbravo.base.model.ModelProvider;
+import org.openbravo.base.provider.OBProvider;
+import org.openbravo.client.kernel.event.EntityNewEvent;
+import org.openbravo.client.kernel.event.EntityPersistenceEventObserver;
+import org.openbravo.client.kernel.event.EntityUpdateEvent;
+import org.openbravo.dal.service.OBCriteria;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.model.ad.utility.Tree;
+import org.openbravo.model.ad.utility.TreeNode;
+import org.openbravo.model.financialmgmt.accounting.coa.Element;
+import org.openbravo.model.financialmgmt.accounting.coa.ElementValue;
+
+public class ElementValueEventHandler extends EntityPersistenceEventObserver {
+
+  private static Entity[] entities = { ModelProvider.getInstance().getEntity(
+      ElementValue.ENTITY_NAME) };
+  protected Logger logger = Logger.getLogger(this.getClass());
+
+  @Override
+  protected Entity[] getObservedEntities() {
+    return entities;
+  }
+
+  public void onSave(@Observes EntityNewEvent event) {
+    if (!isValidEvent(event)) {
+      return;
+    }
+    final ElementValue account = (ElementValue) event.getTargetInstance();
+    // If value is not a number account will be folded in the root directory 
of the tree. So do
+    // nothing, DB trigger will manage
+    try {
+      new BigInteger(account.getSearchKey());
+    } catch (NumberFormatException e) {
+      return;
+    }
+    doIt(account);
+  }
+
+  public void onUpdate(@Observes EntityUpdateEvent event) {
+    if (!isValidEvent(event)) {
+      return;
+    }
+    final ElementValue account = (ElementValue) event.getTargetInstance();
+    doIt(account);
+  }
+
+  private void doIt(ElementValue account) {
+    boolean isNumber = true;
+    try {
+      new BigInteger(account.getSearchKey());
+    } catch (NumberFormatException e) {
+      isNumber = false;
+    }
+    String rootNode = "0";
+    OBCriteria<TreeNode> obc = 
OBDal.getInstance().createCriteria(TreeNode.class);
+    obc.add(Restrictions.eq(TreeNode.PROPERTY_NODE, account.getId()));
+    obc.setMaxResults(1);
+    List<TreeNode> nodes = obc.list();
+    HashMap<String, String> result = getParentAndSeqNo(account);
+    String parent_ID = result.get("ParentID");
+    String seqNo = result.get("SeqNo");
+    if (nodes.size() > 0) {
+      TreeNode node = nodes.get(0);
+      node.setReportSet(!isNumber ? rootNode : parent_ID);
+      node.setSequenceNumber(new Long(seqNo));
+      OBDal.getInstance().save(node);
+    } else {
+      TreeNode treeElement = OBProvider.getInstance().get(TreeNode.class);
+      treeElement.setNode(account.getId());
+      treeElement.setTree(account.getAccountingElement().getTree());
+      treeElement.setReportSet(!isNumber ? rootNode : parent_ID);
+      // System.out.println("ElementValueEventHandler - node_id=" + 
account.getId() +
+      // " - parent_id="
+      // + treeElement.getReportSet() + " - Tree_id=" + 
treeElement.getTree().getId());
+      treeElement.setSequenceNumber(new Long(seqNo));
+      OBDal.getInstance().save(treeElement);
+    }
+
+  }
+
+  HashMap<String, String> getParentAndSeqNo(ElementValue account) {
+    HashMap<String, String> result = new HashMap<String, String>();
+    // Default values for result
+    result.put("ParentID", "0");
+    result
+        .put("SeqNo", 
String.valueOf(getNextSeqNo(account.getAccountingElement().getTree(), "0")));
+    List<ElementValue> accounts = 
getAccountList(account.getAccountingElement());
+    ElementValue previousElement = null;
+    if (!accounts.contains(account)) {
+      accounts.remove(account);
+    }
+    for (int i = 0; i < accounts.size(); i++) {
+      if (accounts.get(i).getSearchKey().replace('(', ' ').trim().replace(')', 
' ').trim()
+          .compareTo(account.getSearchKey()) < 0) {
+        if (i > 0) {
+          previousElement = accounts.get(i);
+        }
+      }
+    }
+    if (previousElement != null && previousElement.isSummaryLevel() && 
!account.isSummaryLevel()) {
+      result.put("ParentID", previousElement.getId());
+      result.put("SeqNo", "0");
+    } else if (previousElement == null) {
+      return result;
+    } else {
+      OBCriteria<TreeNode> obc = 
OBDal.getInstance().createCriteria(TreeNode.class);
+      obc.add(Restrictions.eq(TreeNode.PROPERTY_NODE, 
previousElement.getId()));
+      obc.setMaxResults(1);
+      List<TreeNode> nodes = obc.list();
+      result.put("ParentID", nodes.get(0).getReportSet());
+      result.put("SeqNo", String.valueOf(nodes.get(0).getSequenceNumber() + 
10));
+    }
+    updateSeqNo(result.get("ParentID"), 
account.getAccountingElement().getTree(),
+        result.get("SeqNo"));
+    return result;
+
+  }
+
+  List<ElementValue> getAccountList(Element accountElement) {
+    OBCriteria<ElementValue> obc = 
OBDal.getInstance().createCriteria(ElementValue.class);
+    obc.add(Restrictions.eq(ElementValue.PROPERTY_ACCOUNTINGELEMENT, 
accountElement));
+    obc.add(Restrictions.eq(ElementValue.PROPERTY_ACTIVE, true));
+    obc.addOrder(Order.asc(ElementValue.PROPERTY_SEARCHKEY));
+    obc.setFilterOnReadableClients(false);
+    obc.setFilterOnReadableOrganization(false);
+    return obc.list();
+  }
+
+  void updateSeqNo(String parentID, Tree tree, String seqNo) {
+    OBCriteria<TreeNode> obc = 
OBDal.getInstance().createCriteria(TreeNode.class);
+    obc.add(Restrictions.eq(TreeNode.PROPERTY_TREE, tree));
+    obc.add(Restrictions.eq(TreeNode.PROPERTY_REPORTSET, parentID));
+    obc.add(Restrictions.ge(TreeNode.PROPERTY_SEQUENCENUMBER, new 
Long(seqNo)));
+    obc.setFilterOnReadableClients(false);
+    obc.setFilterOnReadableOrganization(false);
+    for (TreeNode node : obc.list()) {
+      node.setSequenceNumber(node.getSequenceNumber() + 10l);
+      OBDal.getInstance().save(node);
+    }
+    return;
+  }
+
+  long getNextSeqNo(Tree tree, String parent_ID) {
+    OBCriteria<TreeNode> obc = 
OBDal.getInstance().createCriteria(TreeNode.class);
+    obc.add(Restrictions.eq(TreeNode.PROPERTY_REPORTSET, parent_ID));
+    obc.add(Restrictions.eq(TreeNode.PROPERTY_TREE, tree));
+    obc.addOrder(Order.desc(TreeNode.PROPERTY_SEQUENCENUMBER));
+    obc.setFilterOnReadableClients(false);
+    obc.setFilterOnReadableOrganization(false);
+    List<TreeNode> nodes = obc.list();
+    if (nodes.size() > 0) {
+      return obc.list().get(0).getSequenceNumber() + 10l;
+    } else {
+      return 10l;
+    }
+  }
+
+}
diff -r fbfe1fab2cff -r 7b78a07d02b6 
src-db/database/model/triggers/C_ELEMENTVALUE_TRG.xml
--- a/src-db/database/model/triggers/C_ELEMENTVALUE_TRG.xml     Wed Oct 10 
09:47:15 2012 +0200
+++ b/src-db/database/model/triggers/C_ELEMENTVALUE_TRG.xml     Wed Oct 10 
10:32:32 2012 +0200
@@ -26,6 +26,8 @@
   v_xParent_ID VARCHAR2(32);
   v_NextNo     VARCHAR2(32);
   v_count NUMBER;
+  TYPE RECORD IS REF CURSOR;
+  cur_AcctSchema RECORD;
     
 BEGIN
     
@@ -52,6 +54,28 @@
     FROM AD_Language
     WHERE IsActive='Y'
       AND IsSystemLanguage='Y';
+    -- Create Valid Combination
+    IF(:new.elementlevel = 'S') THEN
+           FOR cur_AcctSchema IN
+        (SELECT C_AcctSchema_ID
+        FROM C_AcctSchema_Element
+        WHERE C_AcctSchema_Element.C_Element_ID = :new.C_Element_ID
+        )
+      LOOP
+                         INSERT INTO C_VALIDCOMBINATION
+                                 (C_VALIDCOMBINATION_ID, AD_CLIENT_ID, 
AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY,
+                                  UPDATED, UPDATEDBY, ALIAS, COMBINATION, 
DESCRIPTION, ISFULLYQUALIFIED,
+                                  C_ACCTSCHEMA_ID, ACCOUNT_ID, M_PRODUCT_ID, 
C_BPARTNER_ID, AD_ORGTRX_ID, C_LOCFROM_ID,
+                                  C_LOCTO_ID, C_SALESREGION_ID, C_PROJECT_ID, 
C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID,
+                                  USER2_ID)
+                               VALUES (
+                                  GET_UUID(), :new.AD_Client_ID, 
:new.AD_Org_ID, :new.IsActive, :new.Created, :new.CreatedBy,
+                                  :new.Updated, :new.UpdatedBy, :new.value, 
:new.value, '', 'Y',
+                                  cur_AcctSchema.C_AcctSchema_ID, 
:new.C_ElementValue_ID, null, null, null, null,
+                                  null, null, null, null, null, null,
+                                  null);
+                       END LOOP;
+    END IF;
     --  Create TreeNode --
     --  get AD_Tree_ID + ParentID
     SELECT e.AD_Tree_ID,
@@ -64,30 +88,38 @@
       AND n.Parent_ID IS NULL
       AND e.C_Element_ID=:new.C_Element_ID;
     --  DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||'  
Node='||:new.C_ElementValue_ID||'  Parent='||v_xParent_ID);
-    --  Insert into TreeNode
-    INSERT
-    INTO AD_TreeNode
-      (
-        AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive,
-        Created, CreatedBy, Updated,
-        UpdatedBy, AD_Tree_ID, Node_ID,
-        Parent_ID, SeqNo
-      )
-      VALUES
-      (
-        get_uuid(), :new.AD_Client_ID, :new.AD_Org_ID, :new.IsActive,
-        :new.Created, :new.CreatedBy, :new.Updated,
-        :new.UpdatedBy, v_xTree_ID, :new.C_ElementValue_ID,
-        v_xParent_ID,(
-        CASE :new.IsSummary
-          WHEN 'Y'
-          THEN 100
-          ELSE 999
-        END
-        )
-      )
-      ;
-    -- Summary Nodes first
+    SELECT count(*)
+    INTo v_Count
+    FROM AD_TreeNode
+    WHERE node_ID = :new.C_ElementValue_ID
+    
+    AND AD_Tree_ID = v_xTree_ID;
+    IF(v_Count = 0) THEN 
+           --  Insert into TreeNode
+           INSERT
+           INTO AD_TreeNode
+             (
+               AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive,
+               Created, CreatedBy, Updated,
+               UpdatedBy, AD_Tree_ID, Node_ID,
+               Parent_ID, SeqNo
+             )
+             VALUES
+             (
+               get_uuid(), :new.AD_Client_ID, :new.AD_Org_ID, :new.IsActive,
+               :new.Created, :new.CreatedBy, :new.Updated,
+               :new.UpdatedBy, v_xTree_ID, :new.C_ElementValue_ID,
+               v_xParent_ID,(
+               CASE :new.IsSummary
+                 WHEN 'Y'
+                 THEN 100
+                 ELSE 999
+               END
+               )
+             )
+             ;
+       -- Summary Nodes first
+   END IF;
   END IF;
   -- Inserting
   -- C_ElementValue update trigger
@@ -95,9 +127,15 @@
   IF UPDATING THEN
     IF COALESCE(:old.Name, '.') <> COALESCE(:NEW.Name, '.') THEN

------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to