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:
120
scripts_sql/rollback_setpaymentstatusv2.sql
Normal file
120
scripts_sql/rollback_setpaymentstatusv2.sql
Normal 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;
|
||||
Reference in New Issue
Block a user