From 0b8488925d4566ede35e94624db5392b4c05d5b9 Mon Sep 17 00:00:00 2001 From: mguzman14 <mguzman@bgeo.es> Date: Thu, 23 Jan 2025 14:02:34 +0100 Subject: [PATCH] feat(widgets): add function to set widgets for check project according to user's role --- updates/40/40000/utils/dml.sql | 4 +- utils/fct/gw_fct_getwidgets_checkproject.sql | 83 ++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 utils/fct/gw_fct_getwidgets_checkproject.sql diff --git a/updates/40/40000/utils/dml.sql b/updates/40/40000/utils/dml.sql index 7a1fb3aef..1c290a0fc 100644 --- a/updates/40/40000/utils/dml.sql +++ b/updates/40/40000/utils/dml.sql @@ -1123,4 +1123,6 @@ UPDATE config_form_fields UPDATE config_form_fields SET widgetcontrols='{"saveValue":false, "onContextMenu":"Delete dscenario"}'::json - WHERE formtype='form_feature' AND tabname='tab_epa' AND columnname='remove_from_dscenario'; \ No newline at end of file + WHERE formtype='form_feature' AND tabname='tab_epa' AND columnname='remove_from_dscenario'; + +INSERT INTO sys_function (id, function_name, project_type, function_type, input_params, return_type, descript, sys_role, sample_query, "source") VALUES(3372, 'gw_fct_getwidgets_checkproject', 'utils', 'function', 'json', 'json', 'Set widgets to show in check project button according to user''s role.', 'role_basic', NULL, 'core'); diff --git a/utils/fct/gw_fct_getwidgets_checkproject.sql b/utils/fct/gw_fct_getwidgets_checkproject.sql new file mode 100644 index 000000000..ddd15b33f --- /dev/null +++ b/utils/fct/gw_fct_getwidgets_checkproject.sql @@ -0,0 +1,83 @@ +/* +This file is part of Giswater 3 +The program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +This version of Giswater is provided by Giswater Association +*/ + +-- FUNCTION CODE: 3372 + +CREATE OR REPLACE FUNCTION SCHEMA_NAME.gw_fct_getwidgets_checkproject(p_data json) + RETURNS json + LANGUAGE plpgsql +AS $function$ + +/*EXAMPLE + +SELECT SCHEMA_NAME.gw_fct_getrolewidgets($${"client":{"device":4, "infoType":1, "lang":"ES"},"data":{}}$$); + +*/ + +DECLARE +v_version TEXT; +v_role TEXT; +v_widget_verified TEXT; +v_widget_om TEXT; +v_widget_epa TEXT; +v_widget_plan TEXT; +v_widget_admin TEXT; + +-- return +v_return_widgets TEXT; +v_return JSON; + + +BEGIN + + -- set search path + SET search_path = "SCHEMA_NAME", public; + + -- get system data + SELECT giswater INTO v_version FROM sys_version ORDER BY id DESC LIMIT 1; + + -- get role of current user + SELECT role.rolname AS rol_asignado INTO v_role + FROM pg_auth_members m + JOIN pg_roles grantee ON m.member = grantee.oid + JOIN pg_roles role ON m.roleid = role.oid + WHERE grantee.rolname = current_user; + + -- check project + v_widget_verified = '{"widgetname":"verifiedExceptions", "label":"Take into account verified values:", "widgettype":"check","datatype":"boolean","layoutname":"grl_option_parameters","layoutorder":"1", "value":""}'; + v_widget_om = '{"widgetname":"omCheck", "label":"Check o%m data:", "widgettype":"check","datatype":"boolean","layoutname":"grl_option_parameters","layoutorder":"2", "value":""}'; + v_widget_epa = '{"widgetname":"epaCheck", "label":"Check EPA data:", "widgettype":"check","datatype":"boolean","layoutname":"grl_option_parameters","layoutorder":"3", "value":""}'; + v_widget_plan = '{"widgetname":"planCheck", "label":"Check plan data:", "widgettype":"check","datatype":"boolean","layoutname":"grl_option_parameters","layoutorder":"4", "value":""}'; + v_widget_admin = '{"widgetname":"adminCheck", "label":"Check admin data:", "widgettype":"check","datatype":"boolean","layoutname":"grl_option_parameters","layoutorder":"5", "value":""}'; + + IF v_role in ('role_basic', 'role_edit', 'role_om') THEN + + v_return_widgets = concat(v_widget_om); + + ELSIF v_role = 'role_epa' THEN + + v_return_widgets = concat(v_widget_om, ',', v_widget_epa); + + ELSIF v_role = 'role_plan' THEN + + v_return_widgets = concat(v_widget_om, ',', v_widget_epa, ',', v_widget_plan); + + ELSIF v_role = 'role_admin' THEN + + v_return_widgets = concat(v_widget_om, ',', v_widget_epa, ',', v_widget_plan, ',', v_widget_admin); + + END IF; + + -- Return + v_return = '{"status":"Accepted", "message":{"level":1, "text":"Widgets for check data sent correctly"}, "version":"'||v_version||'", + "body":{"form":{},"data":{"parameters":['||v_return_widgets||']}}}'; + + RETURN v_return; + +END; +$function$ +; +