IDEMPIERE-4304 Saved Query duplicates if use to save after sharing (#81)

* IDEMPIERE-4304 Saved Query duplicates if use to save after sharing

* IDEMPIERE-4304 Saved Query duplicates if use to save after sharing - Replaced JDBC call for Query
This commit is contained in:
Diego Ruiz 2020-05-23 00:23:42 +02:00 committed by GitHub
parent 89faa3ac49
commit 4eac03ba0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 10 deletions

View File

@ -38,7 +38,7 @@ public class MUserQuery extends X_AD_UserQuery
/**
*
*/
private static final long serialVersionUID = -3606227368868305024L;
private static final long serialVersionUID = -5640578235804864422L;
/**
* Get all active queries of client for Tab
@ -250,6 +250,26 @@ public class MUserQuery extends X_AD_UserQuery
}
return retValue;
} // get
/**
* Get Specific Tab Query
* Private or globall
* @param ctx context
* @param AD_Tab_ID tab
* @param name name
* @return query or null
*/
public static MUserQuery getUserQueryByName(Properties ctx, int AD_Tab_ID, String name)
{
String sqlWhere = " AD_Client_ID=? AND AD_Tab_ID=? AND UPPER(Name) LIKE ? "
+ "AND (AD_User_ID = ? OR AD_User_ID IS NULL) ";
return new Query(ctx, Table_Name, sqlWhere, null)
.setParameters(Env.getAD_Client_ID (ctx), AD_Tab_ID, name.toUpperCase(), Env.getAD_User_ID(ctx))
.setOnlyActiveRecords(true)
.setOrderBy("Name")
.first();
} // getUserQueryByName
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MUserQuery.class);
@ -289,5 +309,31 @@ public class MUserQuery extends X_AD_UserQuery
}
return true;
}
/**
* Returns true if the current user can save the query privately
* @return
*/
public boolean userCanSave() {
if (getAD_Client_ID() != Env.getAD_Client_ID(Env.getCtx()) || //Cannot modify a query from another client (e.g. System)
getAD_User_ID() != Env.getAD_User_ID(Env.getCtx()) || //Cannot save a query from a different user
get_Value(COLUMNNAME_AD_User_ID) == null) //Cannot save privately (user-specific) an already existing global query
return false;
return true;
}
/**
* Returns true if the current users has permission
* to share or modify the query globally
* @return
*/
public boolean userCanShare() {
if (!MRole.PREFERENCETYPE_Client.equals(MRole.getDefault().getPreferenceType()) || //Share button only works for roles with preference level = Client
getAD_Client_ID() != Env.getAD_Client_ID(Env.getCtx())) //Cannot modify a query from another client (e.g. System)
return false;
return true;
}
} // MUserQuery

View File

@ -1368,6 +1368,8 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
} else {
cmd_saveSimple(true, shareAllUsers);
}
if (shareAllUsers)
btnSave.setDisabled(true);
}
}
// Confirm panel actions
@ -1477,14 +1479,8 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
}
else {
MUserQuery uq = userQueries[index-1];
// If global query do not allow other users to save the query
if (uq.getAD_User_ID() != Env.getAD_User_ID(Env.getCtx())) {
if (!MRole.PREFERENCETYPE_Client.equals(MRole.getDefault().getPreferenceType()) ||
uq.getAD_Client_ID() != Env.getAD_Client_ID(Env.getCtx())) {
btnSave.setDisabled(true);
btnShare.setDisabled(true);
}
}
btnSave.setDisabled(!uq.userCanSave());
btnShare.setDisabled(!uq.userCanShare());
parseUserQuery(userQueries[index-1]);
}
}
@ -1829,7 +1825,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
code.append( (Object) historyCombo.getSelectedItem().getValue());
}
MUserQuery uq = MUserQuery.get(Env.getCtx(), m_AD_Tab_ID, name);
MUserQuery uq = MUserQuery.getUserQueryByName(Env.getCtx(), m_AD_Tab_ID, name);
if (code.length() > 0) { // New or updated
if (uq == null) // Create a new record
{