From a1702112f15d66b8cbadda0f4cca9c2413c7de7f Mon Sep 17 00:00:00 2001 From: Deepak Pansheriya Date: Wed, 5 Aug 2015 19:24:00 +0530 Subject: [PATCH] IDEMPIERE-2675: Adding custom table support in Tree --- .../oracle/201506241206_IDEMPIERE-2675.sql | 58 +++++++++++++++++++ .../201506241206_IDEMPIERE-2675.sql | 56 ++++++++++++++++++ .../src/org/compiere/model/I_AD_Tree.java | 15 +++++ .../src/org/compiere/model/MTree.java | 31 +++++++++- .../src/org/compiere/model/X_AD_Tree.java | 32 +++++++++- 5 files changed, 189 insertions(+), 3 deletions(-) create mode 100644 migration/i2.1z/oracle/201506241206_IDEMPIERE-2675.sql create mode 100644 migration/i2.1z/postgresql/201506241206_IDEMPIERE-2675.sql diff --git a/migration/i2.1z/oracle/201506241206_IDEMPIERE-2675.sql b/migration/i2.1z/oracle/201506241206_IDEMPIERE-2675.sql new file mode 100644 index 0000000000..784db49eb5 --- /dev/null +++ b/migration/i2.1z/oracle/201506241206_IDEMPIERE-2675.sql @@ -0,0 +1,58 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Jun 18, 2015 10:47:07 AM IST +INSERT INTO AD_Column (SeqNoSelection,AD_Column_ID,IsAlwaysUpdateable,IsSyncDatabase,AD_Client_ID,AD_Org_ID,CreatedBy,Updated,UpdatedBy,EntityType,IsSecure,IsEncrypted,IsParent,IsMandatory,IsIdentifier,SeqNo,Help,Version,FieldLength,IsKey,IsTranslated,Created,IsUpdateable,IsAutocomplete,IsAllowLogging,IsAllowCopy,Description,ColumnName,Name,IsSelectionColumn,AD_Column_UU,IsActive,IsToolbarButton,FKConstraintType,AD_Element_ID,AD_Reference_ID,AD_Table_ID) VALUES (0,212212,'N','N',0,0,100,TO_DATE('2015-06-18 10:47:06','YYYY-MM-DD HH24:MI:SS'),100,'D','N','N','N','N','N',0,'The Database Table provides the information of the table definition',0,10,'N','N',TO_DATE('2015-06-18 10:47:06','YYYY-MM-DD HH24:MI:SS'),'Y','N','Y','Y','Database Table information','AD_Table_ID','Table','N','cd639a6d-243f-4737-80b7-e953534cafa6','Y','N','N',126,19,288) +; + +-- Jun 18, 2015 10:47:12 AM IST +UPDATE AD_Column SET FKConstraintType='N', FKConstraintName='ADTable_ADTree',Updated=TO_DATE('2015-06-18 10:47:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=212212 +; + +-- Jun 18, 2015 10:47:12 AM IST +ALTER TABLE AD_Tree ADD AD_Table_ID NUMBER(10) DEFAULT NULL +; + +-- Jun 18, 2015 10:47:12 AM IST +ALTER TABLE AD_Tree ADD CONSTRAINT ADTable_ADTree FOREIGN KEY (AD_Table_ID) REFERENCES ad_table(ad_table_id) DEFERRABLE INITIALLY DEFERRED +; + +-- Jun 18, 2015 10:47:46 AM IST +INSERT INTO AD_Ref_List (AD_Ref_List_ID,CreatedBy,UpdatedBy,Created,Updated,EntityType,AD_Client_ID,AD_Org_ID,Description,Value,Name,IsActive,AD_Ref_List_UU,AD_Reference_ID) VALUES (200310,100,100,TO_DATE('2015-06-18 10:47:45','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2015-06-18 10:47:45','YYYY-MM-DD HH24:MI:SS'),'D',0,0,'Custom Table','TL','Custom Table','Y','e3104c45-9a71-4ea1-bd24-9125d33f07db',120) +; + +-- Jun 18, 2015 10:48:11 AM IST +INSERT INTO AD_Field (ColumnSpan,AD_Field_ID,AD_Client_ID,CreatedBy,AD_Org_ID,Updated,UpdatedBy,IsHeading,IsDisplayed,IsFieldOnly,IsSameLine,IsDisplayedGrid,SeqNo,IsReadOnly,IsCentrallyMaintained,Created,EntityType,Name,IsEncrypted,DisplayLength,AD_Field_UU,IsActive,AD_Column_ID,AD_Tab_ID) VALUES (2,203825,0,100,0,TO_DATE('2015-06-18 10:48:05','YYYY-MM-DD HH24:MI:SS'),100,'N','N','N','N','N',100,'N','Y',TO_DATE('2015-06-18 10:48:05','YYYY-MM-DD HH24:MI:SS'),'D','AD_Tree_UU','N',36,'13075486-eba0-4882-8270-9205a2440b6f','Y',60514,243) +; + +-- Jun 18, 2015 10:48:11 AM IST +INSERT INTO AD_Field (ColumnSpan,AD_Field_ID,AD_Client_ID,CreatedBy,AD_Org_ID,Updated,UpdatedBy,IsHeading,Help,IsDisplayed,IsFieldOnly,IsSameLine,SeqNo,IsReadOnly,IsCentrallyMaintained,Created,EntityType,Name,Description,IsEncrypted,DisplayLength,AD_Field_UU,IsActive,AD_Column_ID,AD_Tab_ID) VALUES (2,203826,0,100,0,TO_DATE('2015-06-18 10:48:11','YYYY-MM-DD HH24:MI:SS'),100,'N','The Database Table provides the information of the table definition','Y','N','N',110,'N','Y',TO_DATE('2015-06-18 10:48:11','YYYY-MM-DD HH24:MI:SS'),'D','Table','Database Table information','N',10,'f7ca6a1b-4a96-48fe-938e-6784af276493','Y',212212,243) +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=0,IsDisplayed='N' WHERE AD_Field_ID=203825 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=70,IsDisplayed='Y' WHERE AD_Field_ID=203826 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=80,IsDisplayed='Y' WHERE AD_Field_ID=5228 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=90,IsDisplayed='Y' WHERE AD_Field_ID=12421 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=100,IsDisplayed='Y' WHERE AD_Field_ID=8371 +; + +-- Jun 18, 2015 10:49:23 AM IST +UPDATE AD_Field SET DisplayLogic='@TreeType@=''TL''',Updated=TO_DATE('2015-06-18 10:49:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203826 +; + + +SELECT register_migration_script('201506241206_IDEMPIERE-2675.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i2.1z/postgresql/201506241206_IDEMPIERE-2675.sql b/migration/i2.1z/postgresql/201506241206_IDEMPIERE-2675.sql new file mode 100644 index 0000000000..92394278b6 --- /dev/null +++ b/migration/i2.1z/postgresql/201506241206_IDEMPIERE-2675.sql @@ -0,0 +1,56 @@ + +-- Jun 18, 2015 10:47:07 AM IST +INSERT INTO AD_Column (SeqNoSelection,AD_Column_ID,IsAlwaysUpdateable,IsSyncDatabase,AD_Client_ID,AD_Org_ID,CreatedBy,Updated,UpdatedBy,EntityType,IsSecure,IsEncrypted,IsParent,IsMandatory,IsIdentifier,SeqNo,Help,Version,FieldLength,IsKey,IsTranslated,Created,IsUpdateable,IsAutocomplete,IsAllowLogging,IsAllowCopy,Description,ColumnName,Name,IsSelectionColumn,AD_Column_UU,IsActive,IsToolbarButton,FKConstraintType,AD_Element_ID,AD_Reference_ID,AD_Table_ID) VALUES (0,212212,'N','N',0,0,100,TO_TIMESTAMP('2015-06-18 10:47:06','YYYY-MM-DD HH24:MI:SS'),100,'D','N','N','N','N','N',0,'The Database Table provides the information of the table definition',0,10,'N','N',TO_TIMESTAMP('2015-06-18 10:47:06','YYYY-MM-DD HH24:MI:SS'),'Y','N','Y','Y','Database Table information','AD_Table_ID','Table','N','cd639a6d-243f-4737-80b7-e953534cafa6','Y','N','N',126,19,288) +; + +-- Jun 18, 2015 10:47:12 AM IST +UPDATE AD_Column SET FKConstraintType='N', FKConstraintName='ADTable_ADTree',Updated=TO_TIMESTAMP('2015-06-18 10:47:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=212212 +; + +-- Jun 18, 2015 10:47:12 AM IST +ALTER TABLE AD_Tree ADD COLUMN AD_Table_ID NUMERIC(10) DEFAULT NULL +; + +-- Jun 18, 2015 10:47:12 AM IST +ALTER TABLE AD_Tree ADD CONSTRAINT ADTable_ADTree FOREIGN KEY (AD_Table_ID) REFERENCES ad_table(ad_table_id) DEFERRABLE INITIALLY DEFERRED +; + +-- Jun 18, 2015 10:47:46 AM IST +INSERT INTO AD_Ref_List (AD_Ref_List_ID,CreatedBy,UpdatedBy,Created,Updated,EntityType,AD_Client_ID,AD_Org_ID,Description,Value,Name,IsActive,AD_Ref_List_UU,AD_Reference_ID) VALUES (200310,100,100,TO_TIMESTAMP('2015-06-18 10:47:45','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2015-06-18 10:47:45','YYYY-MM-DD HH24:MI:SS'),'D',0,0,'Custom Table','TL','Custom Table','Y','e3104c45-9a71-4ea1-bd24-9125d33f07db',120) +; + +-- Jun 18, 2015 10:48:11 AM IST +INSERT INTO AD_Field (ColumnSpan,AD_Field_ID,AD_Client_ID,CreatedBy,AD_Org_ID,Updated,UpdatedBy,IsHeading,IsDisplayed,IsFieldOnly,IsSameLine,IsDisplayedGrid,SeqNo,IsReadOnly,IsCentrallyMaintained,Created,EntityType,Name,IsEncrypted,DisplayLength,AD_Field_UU,IsActive,AD_Column_ID,AD_Tab_ID) VALUES (2,203825,0,100,0,TO_TIMESTAMP('2015-06-18 10:48:05','YYYY-MM-DD HH24:MI:SS'),100,'N','N','N','N','N',100,'N','Y',TO_TIMESTAMP('2015-06-18 10:48:05','YYYY-MM-DD HH24:MI:SS'),'D','AD_Tree_UU','N',36,'13075486-eba0-4882-8270-9205a2440b6f','Y',60514,243) +; + +-- Jun 18, 2015 10:48:11 AM IST +INSERT INTO AD_Field (ColumnSpan,AD_Field_ID,AD_Client_ID,CreatedBy,AD_Org_ID,Updated,UpdatedBy,IsHeading,Help,IsDisplayed,IsFieldOnly,IsSameLine,SeqNo,IsReadOnly,IsCentrallyMaintained,Created,EntityType,Name,Description,IsEncrypted,DisplayLength,AD_Field_UU,IsActive,AD_Column_ID,AD_Tab_ID) VALUES (2,203826,0,100,0,TO_TIMESTAMP('2015-06-18 10:48:11','YYYY-MM-DD HH24:MI:SS'),100,'N','The Database Table provides the information of the table definition','Y','N','N',110,'N','Y',TO_TIMESTAMP('2015-06-18 10:48:11','YYYY-MM-DD HH24:MI:SS'),'D','Table','Database Table information','N',10,'f7ca6a1b-4a96-48fe-938e-6784af276493','Y',212212,243) +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=0,IsDisplayed='N' WHERE AD_Field_ID=203825 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=70,IsDisplayed='Y' WHERE AD_Field_ID=203826 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=80,IsDisplayed='Y' WHERE AD_Field_ID=5228 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=90,IsDisplayed='Y' WHERE AD_Field_ID=12421 +; + +-- Jun 18, 2015 10:48:40 AM IST +UPDATE AD_Field SET SeqNo=100,IsDisplayed='Y' WHERE AD_Field_ID=8371 +; + +-- Jun 18, 2015 10:49:23 AM IST +UPDATE AD_Field SET DisplayLogic='@TreeType@=''TL''',Updated=TO_TIMESTAMP('2015-06-18 10:49:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203826 +; + + +SELECT register_migration_script('201506241206_IDEMPIERE-2675.sql') FROM dual +; diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_Tree.java b/org.adempiere.base/src/org/compiere/model/I_AD_Tree.java index d03a294ab6..c95954af9e 100644 --- a/org.adempiere.base/src/org/compiere/model/I_AD_Tree.java +++ b/org.adempiere.base/src/org/compiere/model/I_AD_Tree.java @@ -62,6 +62,21 @@ public interface I_AD_Tree */ public int getAD_Org_ID(); + /** Column name AD_Table_ID */ + public static final String COLUMNNAME_AD_Table_ID = "AD_Table_ID"; + + /** Set Table. + * Database Table information + */ + public void setAD_Table_ID (int AD_Table_ID); + + /** Get Table. + * Database Table information + */ + public int getAD_Table_ID(); + + public org.compiere.model.I_AD_Table getAD_Table() throws RuntimeException; + /** Column name AD_Tree_ID */ public static final String COLUMNNAME_AD_Tree_ID = "AD_Tree_ID"; diff --git a/org.adempiere.base/src/org/compiere/model/MTree.java b/org.adempiere.base/src/org/compiere/model/MTree.java index 669e751e78..f4a963e60b 100644 --- a/org.adempiere.base/src/org/compiere/model/MTree.java +++ b/org.adempiere.base/src/org/compiere/model/MTree.java @@ -159,6 +159,14 @@ public class MTree extends MTree_Base TreeType = TREETYPE_CMTemplate; else { + String tableName = keyColumnName.substring(0, keyColumnName.length() - 3); + String query = "SELECT tr.AD_Tree_ID FROM AD_Tree tr inner join AD_Table t on (tr.AD_Table_ID=t.AD_Table_ID) WHERE tr.AD_Client_ID=? AND tr.TreeType='" + + TREETYPE_Table + + " ' AND tr.IsActive='Y' AND tr.IsAllNodes='Y' AND t.TableName = ?"; + int treeID = DB.getSQLValue(null, query, Env.getAD_Client_ID(Env.getCtx()),tableName); + + if (treeID != -1) + return treeID; s_log.log(Level.SEVERE, "Could not map " + keyColumnName); return 0; } @@ -219,6 +227,11 @@ public class MTree extends MTree_Base else // IDEMPIERE 329 - nmicoud { String sourceTableName = getSourceTableName(getTreeType()); + if (sourceTableName == null) + { + if (getAD_Table_ID() > 0) + sourceTableName = MTable.getTableName(getCtx(), getAD_Table_ID()); + } sql = new StringBuffer("SELECT " + "tn.Node_ID,tn.Parent_ID,tn.SeqNo,st.IsActive " + "FROM ").append(sourceTableName).append(" st " @@ -449,13 +462,27 @@ public class MTree extends MTree_Base sqlNode.append("f.JSPURL"); sqlNode.append(" IS NOT NULL))"); } - } else if (isTreeDrivenByValue()) { + }else if(getAD_Table_ID() != 0) { + String tableName =MTable.getTableName(getCtx(), getAD_Table_ID()); + sqlNode.append("SELECT t.").append(tableName) + .append("_ID,"); + if (isTreeDrivenByValue()) + sqlNode.append("t.Value || ' - ' || t.Name,"); + else + sqlNode.append("t.Name,"); + + sqlNode.append("t.Description,t.IsSummary,").append(color) + .append(" FROM ").append(tableName).append(" t "); + if (!m_editable) + sqlNode.append(" WHERE t.IsActive='Y'"); + } else if (isTreeDrivenByValue()) { sqlNode.append("SELECT t.").append(columnNameX) .append("_ID, t.Value || ' - ' || t.Name, t.Description, t.IsSummary,").append(color) .append(" FROM ").append(fromClause); if (!m_editable) sqlNode.append(" WHERE t.IsActive='Y'"); - } else { + } + else { if (columnNameX == null) throw new IllegalArgumentException("Unknown TreeType=" + getTreeType()); sqlNode.append("SELECT t.").append(columnNameX) diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_Tree.java b/org.adempiere.base/src/org/compiere/model/X_AD_Tree.java index 79a0bc6fb8..eadb6607ee 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_Tree.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_Tree.java @@ -30,7 +30,7 @@ public class X_AD_Tree extends PO implements I_AD_Tree, I_Persistent /** * */ - private static final long serialVersionUID = 20150111L; + private static final long serialVersionUID = 20150618L; /** Standard Constructor */ public X_AD_Tree (Properties ctx, int AD_Tree_ID, String trxName) @@ -77,6 +77,34 @@ public class X_AD_Tree extends PO implements I_AD_Tree, I_Persistent return sb.toString(); } + public org.compiere.model.I_AD_Table getAD_Table() throws RuntimeException + { + return (org.compiere.model.I_AD_Table)MTable.get(getCtx(), org.compiere.model.I_AD_Table.Table_Name) + .getPO(getAD_Table_ID(), get_TrxName()); } + + /** Set Table. + @param AD_Table_ID + Database Table information + */ + public void setAD_Table_ID (int AD_Table_ID) + { + if (AD_Table_ID < 1) + set_Value (COLUMNNAME_AD_Table_ID, null); + else + set_Value (COLUMNNAME_AD_Table_ID, Integer.valueOf(AD_Table_ID)); + } + + /** Get Table. + @return Database Table information + */ + public int getAD_Table_ID () + { + Integer ii = (Integer)get_Value(COLUMNNAME_AD_Table_ID); + if (ii == null) + return 0; + return ii.intValue(); + } + /** Set Tree. @param AD_Tree_ID Identifies a Tree @@ -286,6 +314,8 @@ public class X_AD_Tree extends PO implements I_AD_Tree, I_Persistent public static final String TREETYPE_CMTemplate = "CT"; /** CM Media = CM */ public static final String TREETYPE_CMMedia = "CM"; + /** Table = TL */ + public static final String TREETYPE_Table = "TL"; /** Set Type | Area. @param TreeType Element this tree is built on (i.e Product, Business Partner)