From d410046b323fb524f7ad56ffa60687cf78d03d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20T=C3=A1mara=20Pati=C3=B1o?= Date: Fri, 8 Dec 2023 16:11:22 -0500 Subject: [PATCH] Permite filtrar por entidad como subestructura de. Closes #248 --- app/models/consaportante.rb | 9 ++++-- .../_filtro_ultima_entidad_nombre.html.erb | 17 +++++++---- ...itulo_tabla_ultima_entidad_nombre.html.erb | 2 +- db/structure.sql | 30 ++++++++++++++++++- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/app/models/consaportante.rb b/app/models/consaportante.rb index 050cfd2..beeaf8c 100644 --- a/app/models/consaportante.rb +++ b/app/models/consaportante.rb @@ -41,8 +41,13 @@ class Consaportante < ActiveRecord::Base where("unaccent(ultimo_celular_trabajo) ILIKE '%' || unaccent(?) || '%'", c) } - scope :filtro_ultima_entidad_nombre, lambda { |e| - where("unaccent(ultima_entidad_nombre) ILIKE '%' || unaccent(?) || '%'", e) + #scope :filtro_ultima_entidad_nombre, lambda { |e| + # where("unaccent(ultima_entidad_nombre) ILIKE '%' || unaccent(?) || '%'", e) + #} + + scope :filtro_ultima_entidad_nombre, lambda { |id| + where("ultima_entidad_id IN "\ + "(select entidadessubde(?))", id) } scope :filtro_ultimo_cargoestado, lambda { |cid| diff --git a/app/views/consaportantes/_filtro_ultima_entidad_nombre.html.erb b/app/views/consaportantes/_filtro_ultima_entidad_nombre.html.erb index 3fb0d87..39fb58a 100644 --- a/app/views/consaportantes/_filtro_ultima_entidad_nombre.html.erb +++ b/app/views/consaportantes/_filtro_ultima_entidad_nombre.html.erb @@ -1,8 +1,15 @@ -<%= f.input :busultima_entidad_nombre, - label: false, +<%= f.input :busultima_entidad_nombre, + collection: Msip::Orgsocial.where( + "id IN (SELECT DISTINCT subde_id FROM msip_orgsocial "\ + " WHERE subde_id IS NOT NULL)" + ), + label: false, + include_blank: true, + label_method: :presenta_nombre, + value_method: :id, + selected: Msip::ModeloHelper.poromision(params, :busultima_entidad_nombre), input_html: { - value: Msip::ModeloHelper::poromision(params, :busultima_entidad_nombre), - style: "min-width: 4em", - "data-enviarautomatico": "" + class: 'chosen-select', + 'data-enviarautomatico' => '' } %> diff --git a/app/views/consaportantes/_index_titulo_tabla_ultima_entidad_nombre.html.erb b/app/views/consaportantes/_index_titulo_tabla_ultima_entidad_nombre.html.erb index f6b9b43..455f69b 100644 --- a/app/views/consaportantes/_index_titulo_tabla_ultima_entidad_nombre.html.erb +++ b/app/views/consaportantes/_index_titulo_tabla_ultima_entidad_nombre.html.erb @@ -1 +1 @@ -Entidad subestructura de +Entidad como subestructura de diff --git a/db/structure.sql b/db/structure.sql index 02469f9..d8c9a60 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -9,6 +9,13 @@ SET xmloption = content; SET client_min_messages = warning; SET row_security = off; +-- +-- Name: public; Type: SCHEMA; Schema: -; Owner: - +-- + +-- *not* creating schema, since initdb creates it + + -- -- Name: es_co_utf_8; Type: COLLATION; Schema: public; Owner: - -- @@ -263,6 +270,26 @@ BEGIN END;$$; +-- +-- Name: entidadessubde(numeric); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION public.entidadessubde(entidad_id numeric) RETURNS SETOF numeric + LANGUAGE sql + AS $$ + WITH RECURSIVE supjer AS ( + SELECT o1.id, g1.nombre, o1.subde_id + FROM msip_orgsocial AS o1 + JOIN msip_grupoper AS g1 ON g1.id=o1.grupoper_id + WHERE o1.id=entidad_id + UNION SELECT o2.id, g2.nombre, o2.subde_id + FROM msip_orgsocial AS o2 + JOIN msip_grupoper AS g2 ON g2.id=o2.grupoper_id + INNER JOIN supjer AS s ON o2.subde_id=s.id) + SELECT id FROM supjer; + $$; + + -- -- Name: entidadessup(numeric); Type: FUNCTION; Schema: public; Owner: - -- @@ -13044,6 +13071,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20231205202418'), ('20231205205549'), ('20231205205600'), -('20231208162022'); +('20231208162022'), +('20231208203424');