-- =============================================
-- Author:        <Yonatan Gaete>
-- Create date:   <01-07-2024>
-- Description:   <Grabar cierre de toma de inventarios en Lotes y Series>
-- =============================================
CREATE PROCEDURE sp_invGrabarCierreTomaLotes
(
    @codbus AS VARCHAR(50),
    @serie AS VARCHAR(50),
    @lote AS VARCHAR(50),
    @fechaVencimiento AS DATE,
    @idLinea AS VARCHAR(50),
	@cantidad AS DECIMAL(18,2),
	@numDoc AS INT,
	@numlinDoc AS INT,
	@codBod AS INT
)
AS
BEGIN
	--Buscamos todos los registros que se ingresaron en la bodega indicada
	SELECT 
		L.* 
	INTO #A
	FROM invDetalleLotes L
		LEFT OUTER JOIN invEncabezado IE 
			ON IE.coddoc = L.codDoc 
				AND IE.numinv = L.numDoc	
	WHERE IE.codbod = @codBod
	UNION ALL
	SELECT
		L.*
	FROM invDetalleLotes L
		LEFT OUTER JOIN venEncabezado VE 
			ON VE.codsii = L.codDoc 
				AND VE.numinv = L.numDoc	
	WHERE VE.codbod = @codBod


    IF EXISTS (SELECT * FROM #A WHERE codbus = @codbus AND serie = @serie AND lote = @lote AND fechaVencimiento = @fechaVencimiento)
    BEGIN
        -- Acciones si el registro existe y cantidad es Positivo +
		DECLARE @cant INT
		SET @cant = (SELECT SUM(CASE tipo WHEN 0 THEN cantidad WHEN 1 THEN cantidad * -1 END) AS cantidad FROM #A WHERE codbus = @codbus AND serie = @serie AND lote = @lote AND fechaVencimiento = @fechaVencimiento)
		IF @cantidad > @cant
			BEGIN
				INSERT INTO invDetalleLotes ([tipo], [codbus], [serie], [lote], [fechaVencimiento], [idlinea], [cantidad], [codDoc], [numDoc], [numlinDoc])
				VALUES (0, @codbus, @serie, @lote, @fechaVencimiento, @idLinea, (@cantidad - @cant), 99, @numDoc, @numlinDoc);
			END
		-- Acciones si el registro existe y cantidad es Negativo -
		IF @cant > @cantidad
			BEGIN
				INSERT INTO invDetalleLotes ([tipo], [codbus], [serie], [lote], [fechaVencimiento], [idlinea], [cantidad], [codDoc], [numDoc], [numlinDoc])
				VALUES (1, @codbus, @serie, @lote, @fechaVencimiento, @idLinea, (@cant - @cantidad), 99, @numDoc, @numlinDoc);
			END
    END
    ELSE
    BEGIN
        -- Acciones si el registro no existe
        INSERT INTO invDetalleLotes ([tipo], [codbus], [serie], [lote], [fechaVencimiento], [idlinea], [cantidad], [codDoc], [numDoc], [numlinDoc])
		VALUES (0, @codbus, @serie, @lote, @fechaVencimiento, @idLinea, @cantidad, 99, @numDoc, @numlinDoc);
    END
END