Advertisement
kuroshan1104

sp_lst_agua

Feb 3rd, 2025
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 2.94 KB | None | 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. IF mes < 10 THEN
  11.   SET vmes = CONCAT('0', mes);
  12. ELSE
  13.   SET vmes = mes;
  14. END IF;
  15.  
  16. SET vperiodo = CONCAT(anio, vmes);
  17.  
  18. IF mes = 1 THEN
  19.   SET li_mesp = 12;
  20.   SET li_aniop = anio - 1;
  21. ELSE
  22.   SET li_mesp = mes - 1;
  23.   SET li_aniop = anio;
  24. END IF;
  25.  
  26. SET lperiodop_int = li_aniop * 100 + li_mesp;
  27. SET vper = anio * 100 + mes;
  28.  
  29. -- Verificar si hay registros en p_lecturas para este periodo
  30. SELECT COUNT(idpuesto) INTO vverif
  31. FROM p_lecturas
  32. WHERE periodo = vperiodo AND tipo = aserv;
  33.  
  34. -- Si no hay registros en p_lecturas, hacer insert en g_recibo_cargos
  35. IF vverif = 0 THEN
  36.     IF (SELECT COUNT(*) FROM g_recibo_cargos WHERE idconcepto = 7 AND periodo = vperiodo) = 0 THEN
  37.         INSERT INTO g_recibo_cargos (`idconcepto`, `periodo`, `m_desague_carne`, `m_desague_otros`)
  38.         VALUES (7, vperiodo, 10, 5);
  39.     END IF;
  40. END IF;
  41.  
  42. -- Obtener solo puestos con idservicio = 2 y servicio activo
  43. SELECT
  44.   p.idpuesto,
  45.   p.codigo,
  46.   p.codigo_ant,
  47.   (SELECT idsocio FROM p_puesto_socio WHERE idpuesto = p.idpuesto AND activo = 1) AS idsocio,
  48.   f_g_nombres((SELECT idsocio FROM p_puesto_socio WHERE idpuesto = p.idpuesto AND activo = 1)) AS wnombres,
  49.  
  50.   -- ***Mantener lectura_ant siempre en 0***
  51.   0 AS lectura_ant,  
  52.  
  53.   -- ***Personalización única de lectura_actual***
  54.   CASE
  55.     WHEN p.idpuesto = 697 THEN 120  -- AQUI SE INGRESA LOS ID
  56.     WHEN p.idgiro IN (2,9,6) THEN 15
  57.         WHEN p.idgiro IN (13,14) THEN 25
  58.     ELSE 10
  59.   END AS lectura_actual,
  60.  
  61.   IFNULL(l.lectura_dif, 0) AS diferencia,
  62.   '' AS tension,
  63.   l.e_tipo AS tipo,
  64.   e_apublico AS e_apublico,
  65.   l.e_gastos AS gastos,
  66.   l.e_mant AS mant,
  67.   IFNULL(l.igv, 0) AS igv,
  68.   IFNULL(l.cargo, vfactor) AS cargo,
  69.   l.num_recibo,
  70.   0 AS sw,
  71.   1 AS a_tipo,
  72.   'M3' AS a_vol,
  73.   IFNULL(l.reposicion, 0) AS reposicion,
  74.   f_get_cargo_desague_periodo(vperiodo, p.idpuesto) AS m_desague,
  75.   f_get_giro(p.idgiro) AS giro
  76.  
  77. FROM p_puesto p
  78. JOIN p_puesto_servicio s ON p.idpuesto = s.idpuesto
  79.                           AND s.idservicio = 2   -- Solo listar puestos con idservicio = 2
  80.                           AND s.activo = 1       -- Solo si el servicio está activo
  81. LEFT JOIN p_lecturas l ON p.idpuesto = l.idpuesto AND l.periodo = vperiodo AND l.tipo = aserv
  82. WHERE p.activo = 1
  83. ORDER BY p.codigo;
  84.  
  85. -- **Si no existe un registro en cargo_fijo_agua, insertarlo UNA SOLA VEZ**
  86. IF NOT EXISTS (SELECT 1 FROM cargo_fijo_agua WHERE periodo = vperiodo) THEN
  87.     INSERT INTO cargo_fijo_agua (periodo_anio, periodo_mes, periodo, lect_ant, lect_act, lect_dif, tipo, cargo, activo)
  88.     SELECT anio, mes, vperiodo, 0,
  89.            CASE
  90.              WHEN 697 IS NOT NULL THEN 250
  91.              WHEN idgiro IN (2,9,6) THEN 15
  92.              ELSE 10
  93.            END,
  94.            0, 'A', 0, 1
  95.     FROM p_puesto
  96.     WHERE idpuesto = 697;
  97. END IF;
  98.  
  99. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement