Advertisement
kuroshan1104

sp_lst_agua FINAL FILTRO CODIGO

Feb 8th, 2025
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 3.63 KB | Source Code | 0 0
  1. BEGIN
  2.  
  3. DECLARE li_aniop INT;
  4. DECLARE li_mesp INT;
  5. DECLARE lperiodop_int INT;
  6. DECLARE vper INT;
  7. DECLARE vverif INT;
  8. DECLARE vperiodo, vmes CHAR(20);
  9.  
  10. -- Formatear el mes para mantener dos dígitos
  11. IF mes < 10 THEN
  12.   SET vmes = CONCAT('0', mes);
  13. ELSE
  14.   SET vmes = CAST(mes AS CHAR);
  15. END IF;
  16.  
  17. SET vperiodo = CONCAT(anio, vmes);
  18.  
  19. -- Calcular el periodo anterior
  20. IF mes = 1 THEN
  21.   SET li_mesp = 12;
  22.   SET li_aniop = anio - 1;
  23. ELSE
  24.   SET li_mesp = mes - 1;
  25.   SET li_aniop = anio;
  26. END IF;
  27.  
  28. SET lperiodop_int = li_aniop * 100 + li_mesp;
  29. SET vper = anio * 100 + mes;
  30.  
  31. -- Verificar si hay registros en p_lecturas para este periodo
  32. SELECT COUNT(idpuesto) INTO vverif
  33. FROM p_lecturas
  34. WHERE periodo = vperiodo AND tipo = aserv;
  35.  
  36. -- Si no hay registros en p_lecturas, insertar en g_recibo_cargos
  37. IF vverif = 0 THEN
  38.     IF (SELECT COUNT(*) FROM g_recibo_cargos WHERE idconcepto = 7 AND periodo = vperiodo) = 0 THEN
  39.         INSERT INTO g_recibo_cargos (`idconcepto`, `periodo`, `m_desague_carne`, `m_desague_otros`)
  40.         VALUES (7, vperiodo, 10, 5);
  41.     END IF;    
  42. END IF;
  43.  
  44. -- Seleccionar puestos con servicio activo de agua (idservicio = 2)
  45. SELECT
  46.   p.idpuesto,
  47.   p.codigo,
  48.   p.codigo_ant,
  49.   (SELECT idsocio FROM p_puesto_socio WHERE idpuesto = p.idpuesto AND activo = 1 LIMIT 1) AS idsocio,
  50.   f_g_nombres((SELECT idsocio FROM p_puesto_socio WHERE idpuesto = p.idpuesto AND activo = 1 LIMIT 1)) AS wnombres,
  51.  
  52.   -- Mantener lectura_ant siempre en 0
  53.   0 AS lectura_ant,  
  54.  
  55.   -- Personalización única de lectura_actual basada en el código
  56.   CASE
  57.     WHEN p.codigo = 'c0903c' THEN 28
  58.     WHEN p.codigo IN ('j0407a', 'm0419a') THEN 10
  59.     WHEN p.codigo IN ('a0108b', 'c1105b', 'c1507b', 'g0704b', 'h0506b', 'i0801b', 'a1101c', 'j0325a', 'j0513a', 'j0617a') THEN 15
  60.     WHEN p.idgiro IN (2, 9, 6) THEN 15
  61.     WHEN p.idgiro IN (13, 14) THEN 25
  62.     ELSE 10
  63.   END AS lectura_actual,
  64.  
  65.   IFNULL(l.lectura_dif, 0) AS diferencia,
  66.   '' AS tension,
  67.   l.e_tipo AS tipo,
  68.   l.e_apublico AS e_apublico,
  69.   l.e_gastos AS gastos,
  70.   l.e_mant AS mant,
  71.   IFNULL(l.igv, 0) AS igv,
  72.   IFNULL(l.cargo, vfactor) AS cargo,
  73.   l.num_recibo,
  74.   0 AS sw,
  75.   1 AS a_tipo,
  76.   'M3' AS a_vol,
  77.   IFNULL(l.reposicion, 0) AS reposicion,
  78.   f_get_cargo_desague_periodo(vperiodo, p.idpuesto) AS m_desague,
  79.   f_get_giro(p.idgiro) AS giro
  80.  
  81. FROM p_puesto p
  82. JOIN p_puesto_servicio s ON p.idpuesto = s.idpuesto
  83.                           AND s.idservicio = 2   -- Solo listar puestos con idservicio = 2
  84.                           AND s.activo = 1       -- Solo si el servicio está activo
  85. LEFT JOIN p_lecturas l ON p.idpuesto = l.idpuesto AND l.periodo = vperiodo AND l.tipo = aserv
  86. WHERE p.activo = 1
  87. ORDER BY p.codigo;
  88.  
  89. -- Insertar en cargo_fijo_agua si no existe un registro para el periodo
  90. IF NOT EXISTS (SELECT 1 FROM cargo_fijo_agua WHERE periodo = vperiodo) THEN
  91.     INSERT INTO cargo_fijo_agua (periodo_anio, periodo_mes, periodo, lect_ant, lect_act, lect_dif, tipo, cargo, activo)
  92.     SELECT anio, mes, vperiodo, 0,
  93.            CASE
  94.                                 WHEN p.codigo = 'c0903c' THEN 28
  95.                                 WHEN p.codigo IN ('j0407a', 'm0419a') THEN 10
  96.                                 WHEN p.codigo IN ('a0108b', 'c1105b', 'c1507b', 'g0704b', 'h0506b', 'i0801b', 'a1101c', 'j0325a', 'j0513a', 'j0617a') THEN 15
  97.                                 WHEN p.idgiro IN (2, 9, 6) THEN 15
  98.                                 WHEN p.idgiro IN (13, 14) THEN 25
  99.              ELSE 10
  100.            END,
  101.            0, 'A', 0, 1
  102.     FROM p_puesto p
  103.     WHERE p.codigo IN ('c0903c', 'j0407a', 'm0419a', 'a0108b', 'c1105b', 'c1507b', 'g0704b', 'h0506b', 'i0801b', 'a1101c', 'j0325a', 'j0513a', 'j0617a')
  104.     LIMIT 1;  -- Para evitar inserciones múltiples
  105. END IF;
  106.  
  107. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement