From daea95abbf03370010fa7de36aeaaf37a16c1d93 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 25 Mar 2010 04:34:27 +0000 Subject: [PATCH] Fix [1722226] - Usability - Record_ID = 0 on 9 tables can't be modified Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=1722226 --- base/src/org/compiere/model/GridTable.java | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/base/src/org/compiere/model/GridTable.java b/base/src/org/compiere/model/GridTable.java index b1c39f9a68..ded53ba763 100644 --- a/base/src/org/compiere/model/GridTable.java +++ b/base/src/org/compiere/model/GridTable.java @@ -1373,6 +1373,26 @@ private Object[] getDataAtRow(int row) // get updated row data Object[] rowData = getDataAtRow(m_rowChanged); + + // CarlosRuiz - globalqss - fix [1722226] - Usability - Record_ID = 0 on 9 tables can't be modified + boolean specialZeroUpdate = false; + if (!m_inserting // not inserting, updating a record + && manualCmd // in a manual way (pushing the save button) + && (Env.getAD_User_ID(m_ctx) == 0 || Env.getAD_User_ID(m_ctx) == 100) // user must know what is doing -> just allowed to System or SuperUser (Hardcoded) + && getKeyID(m_rowChanged) == 0) { // the record being changed has ID = 0 + String tablename = getTableName(); // just the allowed tables (HardCoded) + if (tablename.equals("AD_Org") || + tablename.equals("AD_ReportView") || + tablename.equals("AD_Role") || + tablename.equals("AD_System") || + tablename.equals("AD_User") || + tablename.equals("C_DocType") || + tablename.equals("GL_Category") || + tablename.equals("M_AttributeSet") || + tablename.equals("M_AttributeSetInstance")) { + specialZeroUpdate = true; + } + } // Check Mandatory String missingColumns = getMandatory(rowData); @@ -1391,7 +1411,7 @@ private Object[] getDataAtRow(int row) Record_ID = getKeyID(m_rowChanged); try { - if (!m_tableName.endsWith("_Trl")) // translation tables have no model + if (!m_tableName.endsWith("_Trl") && !specialZeroUpdate) // translation tables have no model return dataSavePO (Record_ID); } catch (Throwable e)