diff --git a/migration/i4.1/oracle/201706242353_IDEMPIERE-3405.sql b/migration/i4.1/oracle/201706242353_IDEMPIERE-3405.sql new file mode 100644 index 0000000000..32e432ad06 --- /dev/null +++ b/migration/i4.1/oracle/201706242353_IDEMPIERE-3405.sql @@ -0,0 +1,43 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-3405 +-- Jun 24, 2017 11:48:25 PM CEST +UPDATE AD_Val_Rule SET Name='C_DocTypeTarget PO or SO',Updated=TO_DATE('2017-06-24 23:48:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +-- Jun 24, 2017 11:48:48 PM CEST +UPDATE AD_Val_Rule SET Description='Document Type for orders',Updated=TO_DATE('2017-06-24 23:48:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +-- Jun 24, 2017 11:49:44 PM CEST +INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Description,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200096,'C_DocType PO or SO','Document Type for orders','S','(C_DocType.DocBaseType IN (''SOO'', ''POO'') AND C_DocType.IsSOTrx=''@IsSOTrx@'' AND COALESCE(C_DocType.DocSubTypeSO,'' '')<>''RM'' AND C_DocType.AD_Client_ID=@#AD_Client_ID@) OR C_DocType_ID=0',0,0,'Y',TO_DATE('2017-06-24 23:49:43','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2017-06-24 23:49:43','YYYY-MM-DD HH24:MI:SS'),100,'D','7f54de3d-a0cb-4649-aeff-6c8dfa5bd991') +; + +-- Jun 24, 2017 11:50:01 PM CEST +UPDATE AD_Val_Rule SET Description='Target Document Type for orders',Updated=TO_DATE('2017-06-24 23:50:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +-- Jun 24, 2017 11:50:13 PM CEST +UPDATE AD_Val_Rule SET Name='C_DocTypeTarget AR/AP Invoices and Credit Memos', Description='Target Document Type AR/AP Invoice and Credit Memos',Updated=TO_DATE('2017-06-24 23:50:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=124 +; + +-- Jun 24, 2017 11:50:29 PM CEST +INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Description,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200097,'C_DocTypeTarget AR/AP Invoices and Credit Memos','Target Document Type AR/AP Invoice and Credit Memos','S','(C_DocType.DocBaseType IN (''ARI'', ''API'',''ARC'',''APC'') AND C_DocType.IsSOTrx=''@IsSOTrx@'' AND C_DocType.AD_Client_ID=@#AD_Client_ID@) OR C_DocType_ID=0',0,0,'Y',TO_DATE('2017-06-24 23:50:29','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2017-06-24 23:50:29','YYYY-MM-DD HH24:MI:SS'),100,'D','62aa64dd-3808-4871-954a-783b60943758') +; + +-- Jun 24, 2017 11:50:59 PM CEST +UPDATE AD_Column SET AD_Val_Rule_ID=200096,Updated=TO_DATE('2017-06-24 23:50:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2172 +; + +-- Jun 24, 2017 11:52:31 PM CEST +UPDATE AD_Val_Rule SET Name='C_DocType AR/AP Invoices and Credit Memos', Description='Document Type AR/AP Invoice and Credit Memos',Updated=TO_DATE('2017-06-24 23:52:31','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=200097 +; + +-- Jun 24, 2017 11:52:43 PM CEST +UPDATE AD_Column SET AD_Val_Rule_ID=200097,Updated=TO_DATE('2017-06-24 23:52:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=3493 +; + +SELECT register_migration_script('201706242353_IDEMPIERE-3405.sql') FROM dual +; + diff --git a/migration/i4.1/postgresql/201706242353_IDEMPIERE-3405.sql b/migration/i4.1/postgresql/201706242353_IDEMPIERE-3405.sql new file mode 100644 index 0000000000..2febd727dc --- /dev/null +++ b/migration/i4.1/postgresql/201706242353_IDEMPIERE-3405.sql @@ -0,0 +1,40 @@ +-- IDEMPIERE-3405 +-- Jun 24, 2017 11:48:25 PM CEST +UPDATE AD_Val_Rule SET Name='C_DocTypeTarget PO or SO',Updated=TO_TIMESTAMP('2017-06-24 23:48:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +-- Jun 24, 2017 11:48:48 PM CEST +UPDATE AD_Val_Rule SET Description='Document Type for orders',Updated=TO_TIMESTAMP('2017-06-24 23:48:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +-- Jun 24, 2017 11:49:44 PM CEST +INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Description,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200096,'C_DocType PO or SO','Document Type for orders','S','(C_DocType.DocBaseType IN (''SOO'', ''POO'') AND C_DocType.IsSOTrx=''@IsSOTrx@'' AND COALESCE(C_DocType.DocSubTypeSO,'' '')<>''RM'' AND C_DocType.AD_Client_ID=@#AD_Client_ID@) OR C_DocType_ID=0',0,0,'Y',TO_TIMESTAMP('2017-06-24 23:49:43','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2017-06-24 23:49:43','YYYY-MM-DD HH24:MI:SS'),100,'D','7f54de3d-a0cb-4649-aeff-6c8dfa5bd991') +; + +-- Jun 24, 2017 11:50:01 PM CEST +UPDATE AD_Val_Rule SET Description='Target Document Type for orders',Updated=TO_TIMESTAMP('2017-06-24 23:50:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +-- Jun 24, 2017 11:50:13 PM CEST +UPDATE AD_Val_Rule SET Name='C_DocTypeTarget AR/AP Invoices and Credit Memos', Description='Target Document Type AR/AP Invoice and Credit Memos',Updated=TO_TIMESTAMP('2017-06-24 23:50:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=124 +; + +-- Jun 24, 2017 11:50:29 PM CEST +INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Description,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200097,'C_DocTypeTarget AR/AP Invoices and Credit Memos','Target Document Type AR/AP Invoice and Credit Memos','S','(C_DocType.DocBaseType IN (''ARI'', ''API'',''ARC'',''APC'') AND C_DocType.IsSOTrx=''@IsSOTrx@'' AND C_DocType.AD_Client_ID=@#AD_Client_ID@) OR C_DocType_ID=0',0,0,'Y',TO_TIMESTAMP('2017-06-24 23:50:29','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2017-06-24 23:50:29','YYYY-MM-DD HH24:MI:SS'),100,'D','62aa64dd-3808-4871-954a-783b60943758') +; + +-- Jun 24, 2017 11:50:59 PM CEST +UPDATE AD_Column SET AD_Val_Rule_ID=200096,Updated=TO_TIMESTAMP('2017-06-24 23:50:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2172 +; + +-- Jun 24, 2017 11:52:31 PM CEST +UPDATE AD_Val_Rule SET Name='C_DocType AR/AP Invoices and Credit Memos', Description='Document Type AR/AP Invoice and Credit Memos',Updated=TO_TIMESTAMP('2017-06-24 23:52:31','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=200097 +; + +-- Jun 24, 2017 11:52:43 PM CEST +UPDATE AD_Column SET AD_Val_Rule_ID=200097,Updated=TO_TIMESTAMP('2017-06-24 23:52:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=3493 +; + +SELECT register_migration_script('201706242353_IDEMPIERE-3405.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/GridField.java b/org.adempiere.base/src/org/compiere/model/GridField.java index 7037e2a8b9..6e9a5eae0a 100644 --- a/org.adempiere.base/src/org/compiere/model/GridField.java +++ b/org.adempiere.base/src/org/compiere/model/GridField.java @@ -80,11 +80,10 @@ import org.idempiere.util.ParseSeq; public class GridField implements Serializable, Evaluatee, Cloneable { - /** * */ - private static final long serialVersionUID = -7739433012288022819L; + private static final long serialVersionUID = 2703129833179761682L; /** * Field Constructor. @@ -1069,6 +1068,7 @@ public class GridField */ public boolean validateValueNoDirect() { + refreshLookup(); // null if (m_value == null || m_value.toString().length() == 0) { @@ -1118,12 +1118,13 @@ public class GridField setValue(null, m_inserting); m_error = true; return false; - } // validateValue + } // validateValueNoDirect /** * Validate initial Field Value. Push direct value if it doesn't exist * Called from GridTab.setCurrentRow when inserting * @return true if valid + * @deprecated use validateValueNoDirect instead */ public boolean validateValue() { @@ -1166,7 +1167,7 @@ public class GridField setValue(null, m_inserting); m_error = true; return false; - } // validateValuePushDirect + } // validateValue /************************************************************************** * Is the Column Visible ? diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index c825a76a47..95aed98b71 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -1179,11 +1179,6 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable return retValue; setCurrentRow(m_currentRow + 1, true); - // check validity of defaults - for (GridField field : getFields()) { - field.refreshLookup(); - field.validateValueNoDirect(); - } // process all Callouts (no dependency check - assumed that settings are valid) for (int i = 0; i < getFieldCount(); i++) processCallout(getField(i)); @@ -2567,8 +2562,6 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { Object value = m_mTable.getValueAt(m_currentRow, i); mField.setValue(value, m_mTable.isInserting()); - if (m_mTable.isInserting()) // set invalid values to null - mField.validateValue(); if (mField.isKey()) keyCalloutDelayed = mField; } diff --git a/org.adempiere.base/src/org/compiere/model/GridTable.java b/org.adempiere.base/src/org/compiere/model/GridTable.java index 3d310a76f0..b8921594c2 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTable.java +++ b/org.adempiere.base/src/org/compiere/model/GridTable.java @@ -2618,11 +2618,17 @@ public class GridTable extends AbstractTableModel || (hasDocTypeTargetField && field.getColumnName().equals("C_DocType_ID")) || ! field.isAllowCopy()) { - rowData[i] = field.getDefault(); - field.setValue(rowData[i], m_inserting); + Object value = field.getDefault(); + field.setValue(value, m_inserting); + field.validateValueNoDirect(); + rowData[i] = field.getValue(); + } + else { + Object value = origData[i]; + field.setValue(value, m_inserting); + field.validateValueNoDirect(); + rowData[i] = field.getValue(); } - else - rowData[i] = origData[i]; } } else // new @@ -2630,8 +2636,10 @@ public class GridTable extends AbstractTableModel for (int i = 0; i < size; i++) { GridField field = (GridField)m_fields.get(i); - rowData[i] = field.getDefault(); - field.setValue(rowData[i], m_inserting); + Object value = field.getDefault(); + field.setValue(value, m_inserting); + field.validateValueNoDirect(); + rowData[i] = field.getValue(); } }