From 7892c54aa17132c45d3b4e6689a1bdd2462253aa Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 13 Aug 2020 12:20:59 +0200 Subject: [PATCH] IDEMPIERE-4386 setAD_User_ID() breaks when logged in as System user (#188) * IDEMPIERE-4386 setAD_User_ID() breaks when logged in as System user Allow saving Tab Customization for System user * IDEMPIERE-4386 setAD_User_ID() breaks when logged in as System user Fix copy/paste error * IDEMPIERE-4386 setAD_User_ID() breaks when logged in as System user Implement same suggestion on all the classes where setAD_User_ID must be allowed to explicitly set to System There were already two classes with the Override approach: MUserPreference and MUserRoles, so this commit is to apply the same approach to all the classes with same approach --- .../adempiere/model/MTabCustomization.java | 16 +++++++++++++- .../compiere/model/MDashboardPreference.java | 17 ++++++++++++++- .../org/compiere/model/MPasswordHistory.java | 18 +++++++++++++++- .../src/org/compiere/model/MPreference.java | 19 +++++++++++++++-- .../src/org/compiere/model/MUser.java | 7 +------ .../org/compiere/model/MUserPreference.java | 10 +++++++-- .../src/org/compiere/model/MUserQuery.java | 16 +++++++++++++- .../src/org/compiere/model/MUserRoles.java | 21 ++++++++++++------- .../adempiere/webui/adwindow/ADTabpanel.java | 4 ++-- .../webui/desktop/DashboardController.java | 4 ++-- .../webui/desktop/DefaultDesktop.java | 4 ++-- .../adempiere/webui/window/FindWindow.java | 4 ++-- .../org/adempiere/webui/window/WGadgets.java | 4 ++-- 13 files changed, 112 insertions(+), 32 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/model/MTabCustomization.java b/org.adempiere.base/src/org/adempiere/model/MTabCustomization.java index b2a3e9ed48..6fc84e3187 100644 --- a/org.adempiere.base/src/org/adempiere/model/MTabCustomization.java +++ b/org.adempiere.base/src/org/adempiere/model/MTabCustomization.java @@ -11,7 +11,7 @@ public class MTabCustomization extends X_AD_Tab_Customization { /** * */ - private static final long serialVersionUID = 786885789239156678L; + private static final long serialVersionUID = -4986336833193761507L; public MTabCustomization(Properties ctx, int AD_Tab_Customization_ID, String trxName) { super(ctx, AD_Tab_Customization_ID, trxName); @@ -85,4 +85,18 @@ public class MTabCustomization extends X_AD_Tab_Customization { return tabCust.save(); } // saveTabCustomization + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) + */ + @Override + public void setAD_User_ID (int AD_User_ID) + { + if (AD_User_ID == 0) + set_ValueNoCheck (COLUMNNAME_AD_User_ID, AD_User_ID); + else + super.setAD_User_ID(AD_User_ID); + } //setAD_User_ID + } diff --git a/org.adempiere.base/src/org/compiere/model/MDashboardPreference.java b/org.adempiere.base/src/org/compiere/model/MDashboardPreference.java index 4b41ae5741..ef71941a55 100644 --- a/org.adempiere.base/src/org/compiere/model/MDashboardPreference.java +++ b/org.adempiere.base/src/org/compiere/model/MDashboardPreference.java @@ -31,7 +31,7 @@ public class MDashboardPreference extends X_PA_DashboardPreference /** * */ - private static final long serialVersionUID = 7568476952229922042L; + private static final long serialVersionUID = -3887344231734476767L; public static int getForSessionColumnCount(boolean isShowInDashboard, int AD_User_ID, int AD_Role_ID) { @@ -104,4 +104,19 @@ public class MDashboardPreference extends X_PA_DashboardPreference { super (ctx, rs, trxName); } + + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) + */ + @Override + public void setAD_User_ID (int AD_User_ID) + { + if (AD_User_ID == 0) + set_ValueNoCheck (COLUMNNAME_AD_User_ID, AD_User_ID); + else + super.setAD_User_ID(AD_User_ID); + } //setAD_User_ID + } diff --git a/org.adempiere.base/src/org/compiere/model/MPasswordHistory.java b/org.adempiere.base/src/org/compiere/model/MPasswordHistory.java index 907d29f5e0..f2bce47d75 100644 --- a/org.adempiere.base/src/org/compiere/model/MPasswordHistory.java +++ b/org.adempiere.base/src/org/compiere/model/MPasswordHistory.java @@ -11,7 +11,7 @@ public class MPasswordHistory extends X_AD_Password_History { /** * */ - private static final long serialVersionUID = 8602148028134601856L; + private static final long serialVersionUID = -571685945938727000L; public MPasswordHistory(Properties ctx, int AD_Password_History_ID, String trxName) { @@ -49,4 +49,20 @@ public class MPasswordHistory extends X_AD_Password_History { return query.list(); } + + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) + http://wiki.idempiere.org/en/System_user + */ + @Override + public void setAD_User_ID (int AD_User_ID) + { + if (AD_User_ID == 0) + set_ValueNoCheck (COLUMNNAME_AD_User_ID, AD_User_ID); + else + super.setAD_User_ID(AD_User_ID); + } //setAD_User_ID + } diff --git a/org.adempiere.base/src/org/compiere/model/MPreference.java b/org.adempiere.base/src/org/compiere/model/MPreference.java index ec55df6d7c..6cf234e5eb 100644 --- a/org.adempiere.base/src/org/compiere/model/MPreference.java +++ b/org.adempiere.base/src/org/compiere/model/MPreference.java @@ -30,7 +30,8 @@ public class MPreference extends X_AD_Preference /** * */ - private static final long serialVersionUID = -5098559160325123593L; + private static final long serialVersionUID = -8935876328996934527L; + /** Null Indicator */ public static String NULL = "null"; @@ -103,5 +104,19 @@ public class MPreference extends X_AD_Preference .append ("]"); return sb.toString (); } // toString - + + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) + */ + @Override + public void setAD_User_ID (int AD_User_ID) + { + if (AD_User_ID == 0) + set_ValueNoCheck (COLUMNNAME_AD_User_ID, AD_User_ID); + else + super.setAD_User_ID(AD_User_ID); + } //setAD_User_ID + } // MPreference diff --git a/org.adempiere.base/src/org/compiere/model/MUser.java b/org.adempiere.base/src/org/compiere/model/MUser.java index 39dc432b47..9c4842d733 100644 --- a/org.adempiere.base/src/org/compiere/model/MUser.java +++ b/org.adempiere.base/src/org/compiere/model/MUser.java @@ -1092,12 +1092,7 @@ public class MUser extends X_AD_User MPasswordHistory passwordHistory = new MPasswordHistory(this.getCtx(), 0, this.get_TrxName()); passwordHistory.setSalt(this.getSalt()); passwordHistory.setPassword(this.getPassword()); - // http://wiki.idempiere.org/en/System_user - if (!this.is_new() && this.getAD_User_ID() == 0){ - passwordHistory.set_Value(MPasswordHistory.COLUMNNAME_AD_User_ID, 0); - }else{ - passwordHistory.setAD_User_ID(this.getAD_User_ID()); - } + passwordHistory.setAD_User_ID(this.getAD_User_ID()); passwordHistory.setDatePasswordChanged(this.getUpdated()); passwordHistory.saveEx(); } diff --git a/org.adempiere.base/src/org/compiere/model/MUserPreference.java b/org.adempiere.base/src/org/compiere/model/MUserPreference.java index 6de7ba1561..8344682714 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserPreference.java +++ b/org.adempiere.base/src/org/compiere/model/MUserPreference.java @@ -46,7 +46,13 @@ public class MUserPreference extends X_AD_UserPreference{ { super(ctx, rs, trxName); } //MUserPreference - + + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) + */ + @Override public void setAD_User_ID (int AD_User_ID) { if (AD_User_ID == 0) @@ -54,7 +60,7 @@ public class MUserPreference extends X_AD_UserPreference{ else super.setAD_User_ID(AD_User_ID); } //setAD_User_ID - + private static MUserPreference createUserPreferences(int AD_User_ID, int AD_Client_ID, String trxName){ MUserPreference preferences = new MUserPreference(Env.getCtx(), 0, trxName); preferences.setAD_User_ID(AD_User_ID); diff --git a/org.adempiere.base/src/org/compiere/model/MUserQuery.java b/org.adempiere.base/src/org/compiere/model/MUserQuery.java index fabbc73b2e..1ef7cdc72b 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserQuery.java +++ b/org.adempiere.base/src/org/compiere/model/MUserQuery.java @@ -38,7 +38,7 @@ public class MUserQuery extends X_AD_UserQuery /** * */ - private static final long serialVersionUID = -5640578235804864422L; + private static final long serialVersionUID = 488522350853249825L; /** * Get all active queries of client for Tab @@ -336,4 +336,18 @@ public class MUserQuery extends X_AD_UserQuery return true; } + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) + */ + @Override + public void setAD_User_ID (int AD_User_ID) + { + if (AD_User_ID == 0) + set_ValueNoCheck (COLUMNNAME_AD_User_ID, AD_User_ID); + else + super.setAD_User_ID(AD_User_ID); + } //setAD_User_ID + } // MUserQuery diff --git a/org.adempiere.base/src/org/compiere/model/MUserRoles.java b/org.adempiere.base/src/org/compiere/model/MUserRoles.java index 9521ecef3c..68a30541dd 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserRoles.java +++ b/org.adempiere.base/src/org/compiere/model/MUserRoles.java @@ -112,22 +112,27 @@ public class MUserRoles extends X_AD_User_Roles setAD_User_ID(AD_User_ID); setAD_Role_ID(AD_Role_ID); } // MUserRoles - - /** - * Set User/Contact. - * User within the system - Internal or Business Partner Contact - * @param AD_User_ID user + + /** Set User/Contact. + @param AD_User_ID + User within the system - Internal or Business Partner Contact + Overridden to allow saving System record (zero ID) */ + @Override public void setAD_User_ID (int AD_User_ID) { - set_ValueNoCheck ("AD_User_ID", Integer.valueOf(AD_User_ID)); - } // setAD_User_ID - + if (AD_User_ID == 0) + set_ValueNoCheck (COLUMNNAME_AD_User_ID, AD_User_ID); + else + super.setAD_User_ID(AD_User_ID); + } //setAD_User_ID + /** * Set Role. * Responsibility Role * @param AD_Role_ID role **/ + @Override public void setAD_Role_ID (int AD_Role_ID) { set_ValueNoCheck ("AD_Role_ID", Integer.valueOf(AD_Role_ID)); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index db37cebf80..355c7d7474 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -1276,7 +1276,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer if (preference == null || preference.getAD_Preference_ID() <= 0) { preference = new MPreference(Env.getCtx(), 0, null); preference.setAD_Window_ID(windowId); - preference.set_ValueOfColumn("AD_User_ID", userId); // required set_Value for System=0 user + preference.setAD_User_ID(userId); // allow System preference.setAttribute(adTabId+"|DetailPane.IsOpen"); } preference.setValue(value ? "Y" : "N"); @@ -1971,7 +1971,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer if (preference == null || preference.getAD_Preference_ID() <= 0) { preference = new MPreference(Env.getCtx(), 0, null); preference.setAD_Window_ID(windowId); - preference.set_ValueOfColumn("AD_User_ID", userId); // required set_Value for System=0 user + preference.setAD_User_ID(userId); preference.setAttribute(adTabId+"|"+attribute); } preference.setValue(value); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java index 1d18995526..a4df1d75dd 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java @@ -655,7 +655,7 @@ public class DashboardController implements EventListener { MDashboardPreference preference = new MDashboardPreference(Env.getCtx(), 0, null); preference.setAD_Org_ID(0); preference.setAD_Role_ID(AD_Role_ID); - preference.set_ValueNoCheck("AD_User_ID", AD_User_ID); + preference.setAD_User_ID(AD_User_ID); // allow System preference.setColumnNo(dc.getColumnNo()); preference.setIsCollapsedByDefault(dc.isCollapsedByDefault()); preference.setIsShowInDashboard(dc.isShowInDashboard()); @@ -682,7 +682,7 @@ public class DashboardController implements EventListener { MDashboardPreference preference = new MDashboardPreference(ctx,0, null); preference.setAD_Org_ID(0); preference.setAD_Role_ID(Env.getAD_Role_ID(ctx)); - preference.set_ValueNoCheck("AD_User_ID",Env.getAD_User_ID(ctx)); + preference.setAD_User_ID(Env.getAD_User_ID(ctx)); // allow System preference.setColumnNo(dcs[i].getColumnNo()); preference.setIsCollapsedByDefault(dcs[i].isCollapsedByDefault()); preference.setIsShowInDashboard(dcs[i].isShowInDashboard()); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java index 2a4ecc4f7f..aca4a9432b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DefaultDesktop.java @@ -469,7 +469,7 @@ public class DefaultDesktop extends TabbedDesktop implements MenuListener, Seria if ( preference == null || preference.getAD_Preference_ID() <= 0 ) { preference = new MPreference(Env.getCtx(), 0, null); - preference.set_ValueOfColumn("AD_User_ID", userId); // required set_Value for System=0 user + preference.setAD_User_ID(userId); // allow System preference.setAttribute("SideController.Width"); } preference.setValue(width); @@ -512,7 +512,7 @@ public class DefaultDesktop extends TabbedDesktop implements MenuListener, Seria if ( preference == null || preference.getAD_Preference_ID() <= 0 ) { preference = new MPreference(Env.getCtx(), 0, null); - preference.set_ValueOfColumn("AD_User_ID", userId); // required set_Value for System=0 user + preference.setAD_User_ID(userId); // allow System preference.setAttribute("HelpController.Width"); } preference.setValue(width); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index 2580beaba3..ac4b6900e9 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -1832,10 +1832,10 @@ public class FindWindow extends Window implements EventListener, ValueCha uq = new MUserQuery (Env.getCtx(), 0, null); uq.setName (name); uq.setAD_Tab_ID(m_AD_Tab_ID); //red1 UserQuery [ 1798539 ] taking in new field from Compiere - uq.set_ValueOfColumn("AD_User_ID", Env.getAD_User_ID(Env.getCtx())); // required set_Value for System=0 user + uq.setAD_User_ID(Env.getAD_User_ID(Env.getCtx())); // allow System } if (shareAllUsers) - uq.set_ValueOfColumn("AD_User_ID", null); + uq.setAD_User_ID(-1); // set to null } else if (code.length() <= 0){ // Delete the query if (uq == null) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java index dad87d73ba..455ee06bfa 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java @@ -395,7 +395,7 @@ public class WGadgets extends Window implements EventListener{ pre = new MDashboardPreference(Env.getCtx(), 0, null); pre.setAD_Org_ID(0); pre.setAD_Role_ID(AD_Role_ID); - pre.set_ValueNoCheck("AD_User_ID",AD_User_ID); + pre.setAD_User_ID(AD_User_ID); // allow System pre.setColumnNo(content.getColumnNo()); pre.setIsCollapsedByDefault(content.isCollapsedByDefault()); pre.setIsShowInDashboard(content.isShowInDashboard()); @@ -410,7 +410,7 @@ public class WGadgets extends Window implements EventListener{ pre = new MDashboardPreference(Env.getCtx(), 0, null); pre.setAD_Org_ID(0); pre.setAD_Role_ID(AD_Role_ID); - pre.set_ValueNoCheck("AD_User_ID",AD_User_ID); + pre.setAD_User_ID(AD_User_ID); // allow System pre.setColumnNo(content.getColumnNo()); pre.setIsCollapsedByDefault(content.isCollapsedByDefault()); pre.setIsShowInDashboard(content.isShowInDashboard());