----------------- VENTA FACTURAS -----------------
-- Remueve del stock los items de una factura generada
-- Devuelve al stock los items de una factura anulada

-- USE market;
USE 4store;

DROP TRIGGER IF EXISTS venta_factura;

DELIMITER $$

CREATE TRIGGER venta_factura
AFTER UPDATE ON venta
FOR EACH ROW
BEGIN

DECLARE item_cantidad, item_producto_id, filas INT;
DECLARE contador INT DEFAULT 0;

DECLARE venta_items CURSOR FOR SELECT cantidad, producto_idproducto FROM detalleventa WHERE venta_idventa = OLD.idventa;
DECLARE contar_filas CURSOR FOR SELECT COUNT(*) AS numero_filas FROM detalleventa WHERE venta_idventa = OLD.idventa;

OPEN venta_items;
OPEN contar_filas;

FETCH contar_filas INTO filas;
SET contador = 0;

IF NEW.estado = 'ANULADA' THEN
	obtener_items: LOOP
		FETCH venta_items INTO item_cantidad, item_producto_id;
        UPDATE existencia SET existencia = existencia + item_cantidad WHERE producto_idproducto = item_producto_id AND sucursal_idsucursal = sucursal_idsucursal;
        SET contador = contador + 1;
        IF contador = filas THEN
			LEAVE obtener_items;
		END IF;
	END LOOP obtener_items;
END IF;

IF NEW.estado = 'FACTURADA' THEN
	obtener_items: LOOP
		FETCH venta_items INTO item_cantidad, item_producto_id;
        UPDATE existencia SET existencia = existencia - item_cantidad WHERE producto_idproducto = item_producto_id AND sucursal_idsucursal = sucursal_idsucursal;
        SET contador = contador + 1;
        IF contador = filas THEN
			LEAVE obtener_items;
		END IF;
	END LOOP obtener_items;
END IF;

END $$

DELIMITER ;


-- END ANULACION