Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BEGIN
- DECLARE li_aniop INT;
- DECLARE li_mesp INT;
- DECLARE lperiodop_int INT;
- DECLARE vper INT;
- DECLARE vverif INT;
- DECLARE vperiodo, vmes CHAR(20);
- -- Formatear el mes para mantener dos dígitos
- IF mes < 10 THEN
- SET vmes = CONCAT('0', mes);
- ELSE
- SET vmes = CAST(mes AS CHAR);
- END IF;
- SET vperiodo = CONCAT(anio, vmes);
- -- Calcular el periodo anterior
- IF mes = 1 THEN
- SET li_mesp = 12;
- SET li_aniop = anio - 1;
- ELSE
- SET li_mesp = mes - 1;
- SET li_aniop = anio;
- END IF;
- SET lperiodop_int = li_aniop * 100 + li_mesp;
- SET vper = anio * 100 + mes;
- -- Verificar si hay registros en p_lecturas para este periodo
- SELECT COUNT(idpuesto) INTO vverif
- FROM p_lecturas
- WHERE periodo = vperiodo AND tipo = aserv;
- -- Si no hay registros en p_lecturas, insertar en g_recibo_cargos
- IF vverif = 0 THEN
- IF (SELECT COUNT(*) FROM g_recibo_cargos WHERE idconcepto = 7 AND periodo = vperiodo) = 0 THEN
- INSERT INTO g_recibo_cargos (`idconcepto`, `periodo`, `m_desague_carne`, `m_desague_otros`)
- VALUES (7, vperiodo, 10, 5);
- END IF;
- END IF;
- -- Seleccionar puestos con servicio activo de agua (idservicio = 2)
- SELECT
- p.idpuesto,
- p.codigo,
- p.codigo_ant,
- (SELECT idsocio FROM p_puesto_socio WHERE idpuesto = p.idpuesto AND activo = 1 LIMIT 1) AS idsocio,
- f_g_nombres((SELECT idsocio FROM p_puesto_socio WHERE idpuesto = p.idpuesto AND activo = 1 LIMIT 1)) AS wnombres,
- -- Mantener lectura_ant siempre en 0
- 0 AS lectura_ant,
- -- Personalización única de lectura_actual basada en el código
- CASE
- WHEN p.codigo = 'c0903c' THEN 28
- WHEN p.codigo IN ('j0407a', 'm0419a') THEN 10
- WHEN p.codigo IN ('a0108b', 'c1105b', 'c1507b', 'g0704b', 'h0506b', 'i0801b', 'a1101c', 'j0325a', 'j0513a', 'j0617a') THEN 15
- WHEN p.idgiro IN (2, 9, 6) THEN 15
- WHEN p.idgiro IN (13, 14) THEN 25
- ELSE 10
- END AS lectura_actual,
- IFNULL(l.lectura_dif, 0) AS diferencia,
- '' AS tension,
- l.e_tipo AS tipo,
- l.e_apublico AS e_apublico,
- l.e_gastos AS gastos,
- l.e_mant AS mant,
- IFNULL(l.igv, 0) AS igv,
- IFNULL(l.cargo, vfactor) AS cargo,
- l.num_recibo,
- 0 AS sw,
- 1 AS a_tipo,
- 'M3' AS a_vol,
- IFNULL(l.reposicion, 0) AS reposicion,
- f_get_cargo_desague_periodo(vperiodo, p.idpuesto) AS m_desague,
- f_get_giro(p.idgiro) AS giro
- FROM p_puesto p
- JOIN p_puesto_servicio s ON p.idpuesto = s.idpuesto
- AND s.idservicio = 2 -- Solo listar puestos con idservicio = 2
- AND s.activo = 1 -- Solo si el servicio está activo
- LEFT JOIN p_lecturas l ON p.idpuesto = l.idpuesto AND l.periodo = vperiodo AND l.tipo = aserv
- WHERE p.activo = 1
- ORDER BY p.codigo;
- -- Insertar en cargo_fijo_agua si no existe un registro para el periodo
- IF NOT EXISTS (SELECT 1 FROM cargo_fijo_agua WHERE periodo = vperiodo) THEN
- INSERT INTO cargo_fijo_agua (periodo_anio, periodo_mes, periodo, lect_ant, lect_act, lect_dif, tipo, cargo, activo)
- SELECT anio, mes, vperiodo, 0,
- CASE
- WHEN p.codigo = 'c0903c' THEN 28
- WHEN p.codigo IN ('j0407a', 'm0419a') THEN 10
- WHEN p.codigo IN ('a0108b', 'c1105b', 'c1507b', 'g0704b', 'h0506b', 'i0801b', 'a1101c', 'j0325a', 'j0513a', 'j0617a') THEN 15
- WHEN p.idgiro IN (2, 9, 6) THEN 15
- WHEN p.idgiro IN (13, 14) THEN 25
- ELSE 10
- END,
- 0, 'A', 0, 1
- FROM p_puesto p
- WHERE p.codigo IN ('c0903c', 'j0407a', 'm0419a', 'a0108b', 'c1105b', 'c1507b', 'g0704b', 'h0506b', 'i0801b', 'a1101c', 'j0325a', 'j0513a', 'j0617a')
- LIMIT 1; -- Para evitar inserciones múltiples
- END IF;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement