udistrital / arka_cliente

:heavy_check_mark: Check: Cliente del Sistema de Gestión de Almacén e Inventarios ARKA II
MIT License
0 stars 0 forks source link

Codigos no coinciden en catalogo #924

Closed AlexFBP closed 1 year ago

AlexFBP commented 2 years ago

Consideraciones

AlexFBP commented 2 years ago

De acuerdo al modelo, debería de haber, por cada registro de subgrupo con tipo_nivel producto; un registro en cuentas_subgrupo que lo vincule con otro registro en subgrupo con tipo_nivel clase.

(Para el ambiente de pruebas, a la fecha de escribir este mensaje)

Identificación preliminar de la consistencia de los datos:

AlexFBP commented 2 years ago

Se traen los registros subgrupo de tipo producto, y "su" (posible) registro asociado en subgrupo_subgrupo

SELECT  
  S.id as s_id,
  S.codigo as s_codigo,
  SS.id as ss_id,
  SS.subgrupo_padre_id as padre_id,
  S_bis.codigo as codigo_padre
FROM catalogo.subgrupo S
FULL JOIN catalogo.subgrupo_subgrupo SS ON S.id = SS.subgrupo_hijo_id
INNER JOIN catalogo.tipo_nivel TN ON TN.id = S.tipo_nivel_id
FULL JOIN catalogo.subgrupo S_bis ON SS.subgrupo_padre_id = S_bis.id
WHERE
  TN.nombre = 'Producto'
ORDER BY S.id desc
-- LIMIT 20
;

Con esta se identifican los resultados que tienen (o no) un subgrupo padre (clase?) asociado y se obtuvieron estos datos, de los cuales se observa que son contados los registros en subgrupo_subgrupo que vinculan adecuadamente un producto con su clase

AlexFBP commented 2 years ago
  1. Hacer un select entre subgrupo y subgrupo, tales que el codigo de un registro de clase (cuyo tipo_nivel_id=4) sea con lo que empiece el código de otro registro de producto (cuyo tipo_nivel_id=5)
  2. Eliminar registros en subgrupo_subgrupo, tales que el subgrupo_hijo_id, en tipo_nivel_id.nombre corresponda a Producto (5) (se eliminarían 39024 registros a no ser que hayan agregado más)
  3. Con el resultado del select del paso 1, hacer insert en subgrupo_subgrupo, donde el subgrupo_padre_id es el subgrupo de la clase (cuyo tipo_nivel_id=4) y el subgrupo_hijo_id es el subgrupo del producto (cuyo tipo_nivel_id=5)
  4. Los registros en subgrupo de tipo producto producto (cuyo tipo_nivel_id=5) tales que, después de todo lo anterior sigan retornando NULL en el SQL de arriba, se podrían borrar
AlexFBP commented 2 years ago

Tuleap Respectivo a DBA

AlexFBP commented 2 years ago

Ajustado provisionalmente con https://github.com/udistrital/catalogo_elementos_crud/commit/fc17b7f463ceea8573ecb52bb78f3119a26f740d

Se recomienda a medio/largo plazo ajustar bodega de consumo para que no trabaje con productos desde la tabla elemento sino simplemente con elementos de la tabla subgrupo tales que el tipo_nivel corresponda a producto

Jeisson005 commented 2 years ago

Se ejecuta script para ajustar las relaciones según lo mencionado:

/*
 * Ajuste registros subgrupo_subgrupo productos
 * Jeisson P.
 * 23-05-2022
 * */

-- 1. Relación subgrupo clase y subgrupo producto
-- 49.201 registros
select s1.codigo, s2.codigo,* from subgrupo s1
join subgrupo s2 on s2.codigo like s1.codigo || '%'
where s1.tipo_nivel_id = 4 and s2.tipo_nivel_id = 5;

-- 2. Eliminación subgrupo_subgrupo
-- 39.024 registros
delete from subgrupo_subgrupo where id in (
select ss.id from subgrupo_subgrupo ss
join subgrupo s on s.id = ss.subgrupo_hijo_id
where s.tipo_nivel_id = 5);

-- 3. Insert subgrupo_subgrupo
-- 49.201 registros
insert into subgrupo_subgrupo(fecha_creacion, fecha_modificacion, activo, subgrupo_padre_id, subgrupo_hijo_id)
select now() fecha_creacion, now() fecha_modificacion, true activo, s1.id subgrupo_padre_id, s2.id subgrupo_hijo_id
from subgrupo s1
join subgrupo s2 on s2.codigo like s1.codigo || '%'
where s1.tipo_nivel_id = 4 and s2.tipo_nivel_id = 5;

-- 4. Borrado de subgrupos producto sin subgrupo clase
-- 54 registros
delete from subgrupo where id in (
select s.id from subgrupo s
left join subgrupo_subgrupo ss on s.id = ss.subgrupo_hijo_id
where s.tipo_nivel_id = 5 and ss.id is null);
AlexFBP commented 2 years ago

Ejecutando el primer bloque SQL, aparentemente ya se están retornando resultados coherentes Por otro lado, revirtiendo temporalmente y en local lo efectuado en https://github.com/udistrital/catalogo_elementos_crud/commit/fc17b7f463ceea8573ecb52bb78f3119a26f740d , se observa (a comparación de la imagen en la descripción de este Issue) que ya está entregando datos coherentes: image