fix(sql): scripts temporales para prueba de duplicacion de stock

- fix_setpaymentstatusv2_commented.sql: bloque de stock duplicado comentado
- rollback_setpaymentstatusv2.sql: restaura funcion a estado original
- Nota explicativa incluida en el codigo de la funcion
This commit is contained in:
Consultoria AS
2026-06-10 09:03:24 -07:00
parent 411d517ba4
commit 1882fcab3d
2 changed files with 264 additions and 0 deletions

View File

@@ -0,0 +1,120 @@
-- ============================================================
-- ROLLBACK: Restaurar setpaymentstatusv2 a su estado original
-- Fecha: 2026-06-09
-- ============================================================
-- Usar este script SOLO si el fix temporal causa problemas
-- y se necesita restaurar el comportamiento anterior.
-- ============================================================
CREATE OR REPLACE FUNCTION public.setpaymentstatusv2(
expense integer,
status integer)
RETURNS integer
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
rows_updated INT := 0;
details RECORD;
approval int :=0;
BEGIN
SELECT id_approval_stat INTO approval FROM expenses where id_expense = expense;
IF(approval = 1 ) --si el gasto esta aprobado se procede al pago
THEN
-- Validar estados permitidos
IF status = 1 THEN
UPDATE payments
SET id_payment_status = status,
payment_date = CURRENT_DATE
WHERE id_expense = expense;
GET DIAGNOSTICS rows_updated = ROW_COUNT;
IF rows_updated = 0 THEN
RETURN -1;
END IF;
-- Procesar solo si existen movimientos de stock
IF EXISTS (
SELECT 1
FROM stock_movements st
INNER JOIN purchase_detail pd ON st.id_expense = pd.id_expense
WHERE pd.id_expense = expense
) THEN
-- se obtiene el id del detalle de la compra
--Ya no se necesita con el cambio nuevo
/*SELECT id_expense
INTO id_purchase_detail
FROM purchase_detail
WHERE id_expense = expense
LIMIT 1;*/
-- Actualizar movimiento
UPDATE stock_movements
SET date_st_mov = CURRENT_DATE
WHERE id_expense = expense;
-- Obtener id movimiento
--Ya no se necesita con el cambio nuevo
/*SELECT id_sto_mov
INTO id_stock_movement
FROM stock_movements
WHERE id_purchase_dt = id_purchase_detail
LIMIT 1;*/
-- Actualizar ajuste
UPDATE stock_adjusments
SET date_adjusment = CURRENT_DATE
WHERE id_expense = expense;
-- Actualizar stock
FOR details IN
SELECT id_product, quantity
FROM purchase_detail
WHERE id_expense = expense
LOOP
UPDATE stock
SET stock = stock + details.quantity
WHERE id_product = details.id_product;
END LOOP;
/*Cambio viejo
UPDATE stock
SET stock = stock + (
SELECT *
FROM purchase_detail
WHERE id_purchase_dt = id_purchase_detail
)
WHERE id_product = (
SELECT id_product
FROM purchase_detail
WHERE id_purchase_dt = id_purchase_detail
);*/
END IF;
RETURN status;
ELSIF status = 3 THEN
-- Actualizar pago
UPDATE payments
SET id_payment_status = status,
payment_date = CURRENT_DATE
WHERE id_expense = expense;
GET DIAGNOSTICS rows_updated = ROW_COUNT;
IF rows_updated = 0 THEN
RETURN -1;
END IF;
RETURN status;
ELSE
-- Status invalido
RETURN -2;
END IF;
ELSE
return -3; --si no esta aprobado o rechazado no se puede actualizar el pago
END IF;
END;
$BODY$;
-- Confirmacion
SELECT 'Funcion setpaymentstatusv2 restaurada a su estado original' AS resultado;