details: https://code.openbravo.com/erp/devel/pi/rev/def13514e4af changeset: 32798:def13514e4af user: Alvaro Ferraz <alvaro.ferraz <at> openbravo.com> date: Fri Sep 22 09:55:57 2017 +0200 summary: Fixes issue 36877: New Organization selector for Purchase Order Report
details: https://code.openbravo.com/erp/devel/pi/rev/2955207cac37 changeset: 32799:2955207cac37 user: Alvaro Ferraz <alvaro.ferraz <at> openbravo.com> date: Fri Sep 22 15:20:34 2017 +0200 summary: Related to issue 36877: Code review improvements Avoid in clause which can have problems in Oracle, and use exists clause instead. Check data access level from both process definition and report and process. Depending on data access level, selector will retrieve following organizations: - Organization: Role org access organizations. - All or Client/Organization: Role org access organizations + * organization. - System/Client: * organization. diffstat: src-db/database/sourcedata/AD_REFERENCE.xml | 12 + src-db/database/sourcedata/OBUIAPP_PARAMETER.xml | 2 +- src-db/database/sourcedata/OBUISEL_SELECTOR.xml | 16 + src/org/openbravo/erpCommon/info/ContextRoleDirectAccessibleOrganizations.java | 81 ++++++++++ 4 files changed, 110 insertions(+), 1 deletions(-) diffs (145 lines): diff -r f77ab92dd57f -r 2955207cac37 src-db/database/sourcedata/AD_REFERENCE.xml --- a/src-db/database/sourcedata/AD_REFERENCE.xml Fri Sep 22 15:22:49 2017 +0200 +++ b/src-db/database/sourcedata/AD_REFERENCE.xml Fri Sep 22 15:20:34 2017 +0200 @@ -4250,6 +4250,18 @@ <!--0588C365DDAC46079E9D6ABD652CB6E4--> <ISVALUEDISPLAYED><![CDATA[N]]></ISVALUEDISPLAYED> <!--0588C365DDAC46079E9D6ABD652CB6E4--></AD_REFERENCE> +<!--06AB6C4089ED49C387779E28E0359F8C--><AD_REFERENCE> +<!--06AB6C4089ED49C387779E28E0359F8C--> <AD_REFERENCE_ID><![CDATA[06AB6C4089ED49C387779E28E0359F8C]]></AD_REFERENCE_ID> +<!--06AB6C4089ED49C387779E28E0359F8C--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--06AB6C4089ED49C387779E28E0359F8C--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--06AB6C4089ED49C387779E28E0359F8C--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--06AB6C4089ED49C387779E28E0359F8C--> <NAME><![CDATA[Context Role Direct Accessible Organizations]]></NAME> +<!--06AB6C4089ED49C387779E28E0359F8C--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> +<!--06AB6C4089ED49C387779E28E0359F8C--> <ISBASEREFERENCE><![CDATA[N]]></ISBASEREFERENCE> +<!--06AB6C4089ED49C387779E28E0359F8C--> <PARENTREFERENCE_ID><![CDATA[95E2A8B50A254B2AAE6774B8C2F28120]]></PARENTREFERENCE_ID> +<!--06AB6C4089ED49C387779E28E0359F8C--> <ISVALUEDISPLAYED><![CDATA[N]]></ISVALUEDISPLAYED> +<!--06AB6C4089ED49C387779E28E0359F8C--></AD_REFERENCE> + <!--085E99751D2045AA9D4FA23F4B765B21--><AD_REFERENCE> <!--085E99751D2045AA9D4FA23F4B765B21--> <AD_REFERENCE_ID><![CDATA[085E99751D2045AA9D4FA23F4B765B21]]></AD_REFERENCE_ID> <!--085E99751D2045AA9D4FA23F4B765B21--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> diff -r f77ab92dd57f -r 2955207cac37 src-db/database/sourcedata/OBUIAPP_PARAMETER.xml --- a/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml Fri Sep 22 15:22:49 2017 +0200 +++ b/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml Fri Sep 22 15:20:34 2017 +0200 @@ -517,7 +517,7 @@ <!--3DBAFE673E004477AD1426381A44134A--> <HELP><![CDATA[An organization is a unit of your client or legal entity - examples are store, department. You can share data between organizations.]]></HELP> <!--3DBAFE673E004477AD1426381A44134A--> <SEQNO><![CDATA[10]]></SEQNO> <!--3DBAFE673E004477AD1426381A44134A--> <AD_REFERENCE_ID><![CDATA[95E2A8B50A254B2AAE6774B8C2F28120]]></AD_REFERENCE_ID> -<!--3DBAFE673E004477AD1426381A44134A--> <AD_REFERENCE_VALUE_ID><![CDATA[100A788331734AE8BCC87BA0AC9E3406]]></AD_REFERENCE_VALUE_ID> +<!--3DBAFE673E004477AD1426381A44134A--> <AD_REFERENCE_VALUE_ID><![CDATA[06AB6C4089ED49C387779E28E0359F8C]]></AD_REFERENCE_VALUE_ID> <!--3DBAFE673E004477AD1426381A44134A--> <COLUMNNAME><![CDATA[AD_Org_ID]]></COLUMNNAME> <!--3DBAFE673E004477AD1426381A44134A--> <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED> <!--3DBAFE673E004477AD1426381A44134A--> <FIELDLENGTH><![CDATA[32]]></FIELDLENGTH> diff -r f77ab92dd57f -r 2955207cac37 src-db/database/sourcedata/OBUISEL_SELECTOR.xml --- a/src-db/database/sourcedata/OBUISEL_SELECTOR.xml Fri Sep 22 15:22:49 2017 +0200 +++ b/src-db/database/sourcedata/OBUISEL_SELECTOR.xml Fri Sep 22 15:20:34 2017 +0200 @@ -1080,6 +1080,22 @@ <!--E65052A724B3451CA643A0CC355CEA40--> <CUSTOM_QUERY><![CDATA[N]]></CUSTOM_QUERY> <!--E65052A724B3451CA643A0CC355CEA40--></OBUISEL_SELECTOR> +<!--E80D7648BF3848BD9DD23B31287CC59B--><OBUISEL_SELECTOR> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <OBUISEL_SELECTOR_ID><![CDATA[E80D7648BF3848BD9DD23B31287CC59B]]></OBUISEL_SELECTOR_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <NAME><![CDATA[Context Role Direct Accessible Organizations]]></NAME> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <AD_REFERENCE_ID><![CDATA[06AB6C4089ED49C387779E28E0359F8C]]></AD_REFERENCE_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <AD_TABLE_ID><![CDATA[155]]></AD_TABLE_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <FILTER_EXPRESSION><![CDATA[OB.getFilterExpression("org.openbravo.erpCommon.info.ContextRoleDirectAccessibleOrganizations")]]></FILTER_EXPRESSION> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <OBCLKER_TEMPLATE_ID><![CDATA[9314DE8599AD44E7BFC4CC50699042AB]]></OBCLKER_TEMPLATE_ID> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <SUGGESTIONTEXTMATCHSTYLE><![CDATA[startsWith]]></SUGGESTIONTEXTMATCHSTYLE> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <POPUPTEXTMATCHSTYLE><![CDATA[startsWith]]></POPUPTEXTMATCHSTYLE> +<!--E80D7648BF3848BD9DD23B31287CC59B--> <CUSTOM_QUERY><![CDATA[N]]></CUSTOM_QUERY> +<!--E80D7648BF3848BD9DD23B31287CC59B--></OBUISEL_SELECTOR> + <!--E8F1B0721E104D07AAC532290C951C37--><OBUISEL_SELECTOR> <!--E8F1B0721E104D07AAC532290C951C37--> <OBUISEL_SELECTOR_ID><![CDATA[E8F1B0721E104D07AAC532290C951C37]]></OBUISEL_SELECTOR_ID> <!--E8F1B0721E104D07AAC532290C951C37--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> diff -r f77ab92dd57f -r 2955207cac37 src/org/openbravo/erpCommon/info/ContextRoleDirectAccessibleOrganizations.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/openbravo/erpCommon/info/ContextRoleDirectAccessibleOrganizations.java Fri Sep 22 15:20:34 2017 +0200 @@ -0,0 +1,81 @@ +/* + ************************************************************************* + * The contents of this file are subject to the Openbravo Public License + * Version 1.1 (the "License"), being the Mozilla Public License + * Version 1.1 with a permitted attribution clause; you may not use this + * file except in compliance with the License. You may obtain a copy of + * the License at http://www.openbravo.com/legal/license.html + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * The Original Code is Openbravo ERP. + * The Initial Developer of the Original Code is Openbravo SLU + * All portions are Copyright (C) 2017 Openbravo SLU + * All Rights Reserved. + * Contributor(s): ______________________________________. + ************************************************************************ + */ + +package org.openbravo.erpCommon.info; + +import java.util.Map; + +import org.openbravo.base.model.AccessLevel; +import org.openbravo.client.application.FilterExpression; +import org.openbravo.dal.core.OBContext; +import org.openbravo.dal.service.OBDal; + +/** + * Filter expression for the "Context Role Direct Accessible Organizations" reference. + * + * It filters the organizations to be displayed taking into account if their access has been + * explicitly defined for the role in the current context. It also takes into account if the access + * level of the process definition allows to include the organization '*'. + */ +public class ContextRoleDirectAccessibleOrganizations implements FilterExpression { + + @Override + public String getExpression(Map<String, String> requestMap) { + StringBuilder filterExpression = new StringBuilder(""); + filterExpression.append("exists (select 1 from ADRoleOrganization ro where ro.role.id = '" + + OBContext.getOBContext().getRole().getId() + "' and ro.organization.id = e.id)"); + + int accessLevel; + if (requestMap.containsKey("inpadProcessId")) { + accessLevel = getProcessAccessLevel(requestMap.get("inpadProcessId")); + } else if (requestMap.containsKey("_processDefinitionId")) { + accessLevel = getProcessDefinitionAccessLevel(requestMap.get("_processDefinitionId")); + } else { + return filterExpression.toString(); + } + + if (accessLevel == AccessLevel.ORGANIZATION.getDbValue()) { + filterExpression.append(" AND e.id <> '0'"); + } else if (accessLevel == AccessLevel.ALL.getDbValue() + || accessLevel == AccessLevel.CLIENT_ORGANIZATION.getDbValue()) { + filterExpression.append(" OR e.id = '0'"); + } else if (accessLevel == AccessLevel.SYSTEM_CLIENT.getDbValue()) { + filterExpression = new StringBuilder("e.id = '0'"); + } + return filterExpression.toString(); + } + + private int getProcessAccessLevel(String processId) { + org.openbravo.model.ad.ui.Process process = OBDal.getInstance().get( + org.openbravo.model.ad.ui.Process.class, processId); + if (process == null) { + return -1; + } + return Integer.parseInt(process.getDataAccessLevel()); + } + + private int getProcessDefinitionAccessLevel(String processDefinitionId) { + org.openbravo.client.application.Process processDefinition = OBDal.getInstance().get( + org.openbravo.client.application.Process.class, processDefinitionId); + if (processDefinition == null) { + return -1; + } + return Integer.parseInt(processDefinition.getDataAccessLevel()); + } +} ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits