IDEMPIERE-67 ProcessedOn should not be copied by MOrder.copyFrom / IDEMPIERE-922 / IDEMPIERE-938 / Restored backward compatibility on copying AD_Org_ID

This commit is contained in:
Carlos Ruiz 2013-06-17 13:56:27 -05:00
parent 131a60a9de
commit 470202287c
9 changed files with 161 additions and 32 deletions

View File

@ -0,0 +1,32 @@
-- Backward compatibility with old PO copyValues method
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND ColumnName IN (
'Created',
'CreatedBy',
'Updated',
'UpdatedBy',
'IsActive',
'AD_Client_ID',
'AD_Org_ID',
'Processing'
);
-- new columns found to be problematic
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND ColumnName IN (
'ProcessedOn'
);
-- key columns
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND IsKey='Y';
-- virtual columns
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND ColumnSQL IS NOT NULL;
-- UUID columns
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND columnname = (SELECT tablename||'_UU' FROM ad_table t where t.ad_table_id=ad_column.ad_table_id);
-- allow copy of AD_Org_ID on field but not on column (for backward compatibility)
UPDATE AD_Field SET IsAllowCopy='Y' WHERE COALESCE(IsAllowCopy,'N')='N' AND AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE ColumnName = 'AD_Org_ID');
SELECT register_migration_script('201306171349_IDEMPIERE-67.sql') FROM dual
;

View File

@ -0,0 +1,32 @@
-- Backward compatibility with old PO copyValues method
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND ColumnName IN (
'Created',
'CreatedBy',
'Updated',
'UpdatedBy',
'IsActive',
'AD_Client_ID',
'AD_Org_ID',
'Processing'
);
-- new columns found to be problematic
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND ColumnName IN (
'ProcessedOn'
);
-- key columns
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND IsKey='Y';
-- virtual columns
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND ColumnSQL IS NOT NULL;
-- UUID columns
UPDATE AD_Column SET IsAllowCopy='N' WHERE IsAllowCopy='Y' AND columnname = (SELECT tablename||'_UU' FROM ad_table t where t.ad_table_id=ad_column.ad_table_id);
-- allow copy of AD_Org_ID on field but not on column (for backward compatibility)
UPDATE AD_Field SET IsAllowCopy='Y' WHERE COALESCE(IsAllowCopy,'N')='N' AND AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE ColumnName = 'AD_Org_ID');
SELECT register_migration_script('201306171349_IDEMPIERE-67.sql') FROM dual
;

View File

@ -119,7 +119,7 @@ public class ColumnEncryption extends SvrProcess {
int dt = column.getAD_Reference_ID();
// Can it be enabled?
if (column.isKey() || column.isParent() || column.isStandardColumn()
if (column.isKey() || column.isParent() || column.isStandardColumn() || column.isUUIDColumn()
|| column.isVirtualColumn() || column.isIdentifier()
|| column.isTranslated() || DisplayType.isLookup(dt)
|| DisplayType.isLOB(dt) || DisplayType.isDate(dt) || DisplayType.isNumeric(dt)

View File

@ -92,7 +92,7 @@ public class GridField
// Set Attributes
loadLookup();
setError(false);
} // MField
} // GridField
/** Value Object */
private GridFieldVO m_vo;
@ -106,7 +106,7 @@ public class GridField
*/
protected void dispose()
{
// log.fine( "MField.dispose = " + m_vo.ColumnName);
// log.fine( "GridField.dispose = " + m_vo.ColumnName);
m_propertyChangeListeners = null;
if (m_lookup != null)
m_lookup.dispose();
@ -1090,6 +1090,36 @@ public class GridField
* @return true if allow copy
*/
public boolean isAllowCopy() {
/* IDEMPIERE-67
* Extending MColumn.isStandardColumn
* Force some additional columns to forbid copy from the UI
*/
String colname = getColumnName();
if ( colname.equals("C_CashLine_ID")
|| colname.equals("C_Location_ID")
|| colname.equals("C_Payment_ID")
|| colname.equals("DocAction")
|| colname.equals("DocStatus")
|| colname.equals("DocumentNo")
|| colname.equals("EntityType")
|| colname.equals("GrandTotal")
|| colname.equals("IsAllocated")
|| colname.equals("IsApproved")
|| colname.equals("IsDelivered")
|| colname.equals("IsGenerated")
|| colname.equals("IsInvoiced")
|| colname.equals("IsPaid")
|| colname.equals("IsReconciled")
|| colname.equals("IsSelfService")
|| colname.equals("Line")
|| colname.equals("Posted")
|| colname.equals("Processed")
|| colname.equals("ProcessedOn")
|| colname.equals("TotalCr")
|| colname.equals("TotalDr")
|| colname.equals("TotalLines")
|| colname.startsWith("Ref_"))
return false;
return m_vo.IsAllowCopy;
}
/**
@ -1693,7 +1723,7 @@ public class GridField
*/
public String toStringX()
{
StringBuilder sb = new StringBuilder("MField[");
StringBuilder sb = new StringBuilder("GridField[");
sb.append(m_vo.ColumnName).append("=").append(m_value)
.append(",DisplayType=").append(getDisplayType())
.append("]");
@ -2011,4 +2041,4 @@ public class GridField
}
} // MField
} // GridField

View File

@ -533,7 +533,7 @@ public class GridTable extends AbstractTableModel
/**
* Get Column at index
* @param index index
* @return MField
* @return GridField
*/
protected GridField getField (int index)
{
@ -545,7 +545,7 @@ public class GridTable extends AbstractTableModel
/**
* Return Columns with Identifier (ColumnName)
* @param identifier column name
* @return MField
* @return GridField
*/
protected GridField getField (String identifier)
{
@ -564,7 +564,7 @@ public class GridTable extends AbstractTableModel
/**
* Get all Fields
* @return MFields
* @return GridFields
*/
public GridField[] getFields ()
{
@ -791,7 +791,7 @@ public class GridTable extends AbstractTableModel
*/
private void dispose()
{
// MFields
// GridFields
for (int i = 0; i < m_fields.size(); i++)
((GridField)m_fields.get(i)).dispose();
m_fields.clear();
@ -1183,7 +1183,7 @@ public class GridTable extends AbstractTableModel
} // setChanged
/**
* Set Value in data and update MField.
* Set Value in data and update GridField.
* (called directly or from JTable.editingStopped())
*
* @param value value to assign to cell
@ -1196,7 +1196,7 @@ public class GridTable extends AbstractTableModel
} // setValueAt
/**
* Set Value in data and update MField.
* Set Value in data and update GridField.
* (called directly or from JTable.editingStopped())
*
* @param value value to assign to cell
@ -1261,7 +1261,7 @@ public class GridTable extends AbstractTableModel
setDataAtRow(row, rowData);
// update Table
fireTableCellUpdated(row, col);
// update MField
// update GridField
GridField field = getField(col);
field.setValue(value, m_inserting);
// inform
@ -2530,18 +2530,28 @@ public class GridTable extends AbstractTableModel
// fill data
if (copyCurrent)
{
boolean hasDocTypeTargetField = (getField("C_DocTypeTarget_ID") != null);
Object[] origData = getDataAtRow(currentRow);
for (int i = 0; i < size; i++)
{
GridField field = (GridField)m_fields.get(i);
MColumn column = null;
if (field.getAD_Column_ID() > 0)
column = MColumn.get(m_ctx, field.getAD_Column_ID());
if (field.isVirtualColumn())
;
else if (field.isAllowCopy())
rowData[i] = origData[i];
else {
else if ( field.isKey() // KeyColumn
|| (column != null && column.isUUIDColumn()) // IDEMPIERE-67
|| (column != null && column.isStandardColumn() && !column.getColumnName().equals("AD_Org_ID")) // AD_Org_ID can be copied
// Bug [ 1807947 ]
|| (hasDocTypeTargetField && field.getColumnName().equals("C_DocType_ID"))
|| ! field.isAllowCopy())
{
rowData[i] = field.getDefault();
field.setValue(rowData[i], m_inserting);
}
else
rowData[i] = origData[i];
}
}
else // new
@ -3124,7 +3134,7 @@ public class GridTable extends AbstractTableModel
String columnName = null;
int displayType = 0;
// Types see also MField.createDefault
// Types see also GridField.createDefault
try
{
// get row data

View File

@ -47,7 +47,7 @@ public class MColumn extends X_AD_Column
/**
*
*/
private static final long serialVersionUID = -3366954463322356334L;
private static final long serialVersionUID = 2344447703630569514L;
/**
* Get MColumn from Cache
@ -150,6 +150,7 @@ public class MColumn extends X_AD_Column
if (columnName.equals("AD_Client_ID")
|| columnName.equals("AD_Org_ID")
|| columnName.equals("IsActive")
|| columnName.equals("Processing")
|| columnName.equals("Created")
|| columnName.equals("CreatedBy")
|| columnName.equals("Updated")
@ -159,6 +160,14 @@ public class MColumn extends X_AD_Column
return false;
} // isStandardColumn
/**
* Is UUID Column
* @return true for UUID column
*/
public boolean isUUIDColumn() {
return getColumnName().equals(PO.getUUIDColumnName(getAD_Table().getTableName()));
}
/**
* Is Virtual Column
* @return true if virtual column
@ -273,17 +282,18 @@ public class MColumn extends X_AD_Column
if (isAlwaysUpdateable() && !isUpdateable())
setIsAlwaysUpdateable(false);
// Encrypted
String colname = getColumnName();
if (isEncrypted())
{
int dt = getAD_Reference_ID();
if (isKey() || isParent() || isStandardColumn()
|| isVirtualColumn() || isIdentifier() || isTranslated()
|| isVirtualColumn() || isIdentifier() || isTranslated() || isUUIDColumn()
|| DisplayType.isLookup(dt) || DisplayType.isLOB(dt)
|| "DocumentNo".equalsIgnoreCase(getColumnName())
|| "Value".equalsIgnoreCase(getColumnName())
|| "Name".equalsIgnoreCase(getColumnName()))
|| "DocumentNo".equalsIgnoreCase(colname)
|| "Value".equalsIgnoreCase(colname)
|| "Name".equalsIgnoreCase(colname))
{
log.warning("Encryption not sensible - " + getColumnName());
log.warning("Encryption not sensible - " + colname);
setIsEncrypted(false);
}
}
@ -300,11 +310,10 @@ public class MColumn extends X_AD_Column
}
// Validations for IsAllowCopy - some columns must never be set as allowed copying
String colname = getColumnName();
if (isAllowCopy()) {
if ( isKey()
|| getColumnSQL() != null
|| colname.equals(PO.getUUIDColumnName(getAD_Table().getTableName()))
|| isVirtualColumn()
|| isUUIDColumn()
|| isStandardColumn()
)
setIsAllowCopy(false);

View File

@ -132,12 +132,17 @@ public class MField extends X_AD_Field
if (getIsAllowCopy() != null) {
MColumn column = (MColumn) getAD_Column();
if ( column.isKey()
|| column.getColumnSQL() != null
|| column.isStandardColumn()
|| column.isVirtualColumn()
|| column.isUUIDColumn()
|| (column.isStandardColumn() && !column.getColumnName().equals("AD_Org_ID")) // AD_Org_ID can be copied
)
setIsAllowCopy(null);
}
if (getIsAllowCopy() == null) { // IDEMPIERE-67
// By default allow copy of AD_Org_ID overwriting value
if (getAD_Column().getColumnName().equals("AD_Org_ID")) // AD_Org_ID can be copied
setIsAllowCopy("Y");
}
return true;
} // beforeSave

View File

@ -70,7 +70,7 @@ public class MRequestUpdate extends X_R_RequestUpdate
//
for (final MColumn col : MTable.get(getCtx(), Table_ID).getColumns(false))
{
if (col.isStandardColumn() || col.isKey() || col.isParent())
if (col.isStandardColumn() || col.isKey() || col.isParent() || col.isUUIDColumn() || col.isVirtualColumn())
continue;
final String columnName = col.getColumnName();
final int i = parent.get_ColumnIndex(columnName);

View File

@ -1232,9 +1232,14 @@ public abstract class PO
{
for (int i1 = 0; i1 < from.m_oldValues.length; i1++)
{
if (! from.p_info.isAllowCopy(i1))
continue;
String colName = from.p_info.getColumnName(i1);
MColumn column = MColumn.get(from.getCtx(), from.p_info.getAD_Column_ID(colName));
if ( column.isVirtualColumn()
|| column.isKey() // KeyColumn
|| column.isUUIDColumn() // IDEMPIERE-67
|| column.isStandardColumn()
|| ! column.isAllowCopy())
continue;
for (int i2 = 0; i2 < to.m_oldValues.length; i2++)
{
if (to.p_info.getColumnName(i2).equals(colName))
@ -1249,7 +1254,13 @@ public abstract class PO
{
for (int i = 0; i < from.m_oldValues.length; i++)
{
if (! from.p_info.isAllowCopy(i))
String colName = from.p_info.getColumnName(i);
MColumn column = MColumn.get(from.getCtx(), from.p_info.getAD_Column_ID(colName));
if ( column.isVirtualColumn()
|| column.isKey() // KeyColumn
|| column.isUUIDColumn()
|| column.isStandardColumn()
|| ! column.isAllowCopy())
continue;
to.m_newValues[i] = from.m_oldValues[i];
}