SET NUMERIC_ROUNDABORT OFF
GO
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL Serializable
GO
BEGIN TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[PromocionesYOfertas_DescuentosMismoGrupo]'
GO



-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE  [dbo].[PromocionesYOfertas_DescuentosMismoGrupo]
	@ID_Regla			INT,															  
	@Lleve				INT,
	@Pague				INT,
	@PorcDesc			NUMERIC(5,2),
	@Grupo				INT,
	@Imprimir			VARCHAR(15),
	@TablaFacturacion	VARCHAR(50),
	@TablaResultado		VARCHAR(50),
	@convenio			VARCHAR(4),
	@PrecioValor		NUMERIC(24,2),
    @TipoRegla			INT
AS
BEGIN

DECLARE @CodigoBarra			VARCHAR(15)
DECLARE @TipoLista				VARCHAR(3)
DECLARE @PrecioLista			NUMERIC(24,4) 
DECLARE @Precio					NUMERIC(24,2) 
DECLARE @Cantidad				NUMERIC(24,4) 
DECLARE @Impuesto				NUMERIC(24,4) 
DECLARE @PorcentajeImpuesto		NUMERIC(24,2) 
DECLARE @PorcentajeDescuento	NUMERIC(5,2)
DECLARE @Costo					NUMERIC(24,2)
DECLARE @Regla					VARCHAR(50)
DECLARE @Item					NUMERIC(24,2)
DECLARE @ContadorReg			INT
DECLARE @ContadorInt			INT
DECLARE @Ciclo					INT
DECLARE @strSQL					VARCHAR(MAX)
DECLARE @NuevoPrecio			NUMERIC(24,2)
DECLARE @NvPorcDescuento		NUMERIC(5,2)
DECLARE @UltimaTasa             NUMERIC(24,2)


--Comprobar, eliminar y recrear tabla temporal
IF OBJECT_ID('tempdb..#TempFacturacion') IS NOT NULL 
	DROP TABLE #TempFacturacion

CREATE TABLE #TempFacturacion 
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2),
					Item INT 
					) ON [PRIMARY]	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacion ([CodigoBarra])
	CREATE NONCLUSTERED INDEX [IX_Item] ON #TempFacturacion ([Item]) 

-- Separacion de unidades 
DECLARE Cursor_Ofertas CURSOR
	FOR SELECT Temp.CodigoBarra, Temp.TipoLista, Temp.PrecioLista, Temp.Precio, Temp.Cantidad, Temp.Impuesto, Temp.PorcentajeImpuesto, Temp.Costo, Temp.PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA Temp
			INNER JOIN (SELECT CodigoBarra, IDGrupoRegla FROM dbo.fntPrendasGrupoRegla(@Grupo)) G ON G.CodigoBarra = Temp.CodigoBarra 
				AND G.IDGrupoRegla = @Grupo       
		ORDER BY Temp.Precio ASC, Temp.CodigoBarra ASC, Temp.Cantidad ASC
	
	SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  @Cantidad, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas  

--

SET @ContadorInt = 0
SET @Ciclo = 0
SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
WHILE @ContadorReg >= @Lleve
BEGIN
	SET @Ciclo = @Ciclo + 1

	SET @ContadorInt = @ContadorInt + 1

	IF @Ciclo <= @Pague
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = ISNULL(PrecioLista,0), 
					  @Precio = ISNULL(Precio,0), 
					  @Cantidad = ISNULL(Cantidad,0), 
					  @Impuesto = ISNULL(Impuesto,0), 
					  @PorcentajeImpuesto = ISNULL(PorcentajeImpuesto,0), 
					  @Costo = ISNULL(Costo,0), 
					  @PorcentajeDescuento = ISNULL(PorcentajeDescuento,0), 
					  @Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item DESC
    
		SET @strSQL = 'UPDATE ' + @TablaResultado + '
						SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
														AND TipoLista = ''R''  
														AND PrecioLista = ' + CAST(@Precio AS VARCHAR(24)) + '
														AND Precio = ' + CAST(@Precio AS VARCHAR(24)) + '
														AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
														AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
														AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
														AND PorcentajeDescuento = 0 
														AND Regla = ''' + @Imprimir + ''' 
														AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
		EXEC (@strSQL)

			IF @@ROWCOUNT = 0
			BEGIN 
				SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
				        ( CodigoBarra ,
				          TipoLista ,
				          PrecioLista ,
				          Precio ,
				          Cantidad ,
				          Impuesto ,
				          PorcentajeImpuesto ,
				          Costo ,
				          PorcentajeDescuento ,
				          Regla,
						  IDRegla
				        )
				VALUES  ( ''' + @CodigoBarra + ''', 
						  ''R'', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', ' +
				          '1, ' + 
				          CAST(@Impuesto AS VARCHAR(24)) + ', ' +
				          CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
				          CAST(@Costo AS VARCHAR(24)) + ', ' +
				          '0, 
						  ''' + @Imprimir + ''', ' +
						  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
				EXEC (@strSQL)
			END
	END 

	IF @Ciclo > @Pague AND @Ciclo <= @Lleve
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = Precio/100*@PorcDesc, 
					  @Precio = Precio, 
					  @Cantidad = Cantidad, 
					  @Impuesto = Impuesto, 
					  @PorcentajeImpuesto = PorcentajeImpuesto, 
					  @Costo = Costo, 
					  @PorcDesc = @PorcDesc, 
					  @Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item ASC

	IF @TipoRegla = 0 
		 BEGIN  
		   SET @NuevoPrecio = (@Precio - (@Precio * @PorcDesc / 100))
		   SET @NvPorcDescuento = @PorcDesc 
		 END
	ELSE
		 BEGIN
		   SET @UltimaTasa = (dbo.UltimaTasaCambio())
		   SET @NuevoPrecio = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (@Precio) ELSE @PrecioValor*@UltimaTasa  END )
		   SET @NvPorcDescuento = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (0) ELSE  ROUND(((@Precio-(@PrecioValor*@UltimaTasa))/@Precio)*100,2)   END )
		 END

		SET @strSQL = 'UPDATE ' + @TablaResultado + '
						SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
														AND TipoLista = ''R'' 
														AND PrecioLista = ' + CAST((@NuevoPrecio) AS VARCHAR(24)) + '
														AND Precio = ' + CAST(@Precio AS VARCHAR(24)) + '
														AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
														AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
														AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
														AND PorcentajeDescuento = ' + CAST(@NvPorcDescuento AS VARCHAR(24)) + '
														AND Regla = ''' + @Imprimir + ''' 
														AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
		EXEC (@strSQL)

			IF @@ROWCOUNT = 0
			BEGIN 
				SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
				        ( CodigoBarra ,
				          TipoLista ,
				          PrecioLista ,
				          Precio ,
				          Cantidad ,
				          Impuesto ,
				          PorcentajeImpuesto ,
				          Costo ,
				          PorcentajeDescuento ,
				          Regla,
						  IDRegla
				        )
				VALUES  ( ''' + @CodigoBarra + ''', 
						  ''R'', ' +
				          CAST((@NuevoPrecio) AS VARCHAR(24)) + ', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', 
						  1, ' + 
				          CAST(@Impuesto AS VARCHAR(24)) + ', ' +
				          CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
				          CAST(@Costo AS VARCHAR(24)) + ', ' +
				          CAST(@NvPorcDescuento AS VARCHAR(24)) + ', 
						  ''' + @Imprimir + ''', ' + 
						  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
				EXEC (@strSQL)
			END
	END
        
    DELETE FROM #TempFacturacion WHERE Item = @Item	

  			IF (@convenio = 1 OR  @convenio = 2)    AND @Ciclo = @Lleve--SOLO APLICAMOS UNA SOLA PROMOCION 
			   BEGIN
				  BREAK
			   END 

	IF @Ciclo >= @Lleve
	BEGIN 
		SET @Ciclo = 0
		SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
	END 
END

DELETE FROM #TempFacturacionPasoA WHERE CodigoBarra IN (SELECT CodigoBarra FROM dbo.fntPrendasGrupoRegla(@Grupo))

EXEC PromocionesYOfertas_DevolverRemanente

END

GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[PromocionesYOfertas_DescuentosDistintoGrupo]'
GO



-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE  [dbo].[PromocionesYOfertas_DescuentosDistintoGrupo]
	@ID_Regla			INT,															  
	@Lleve				INT,
	@Pague				INT,
	@PorcDesc			NUMERIC(5,2),
	@GrupoA				INT,
	@GrupoB				INT,
	@Imprimir			VARCHAR(15),
	@TablaFacturacion	VARCHAR(50),
	@TablaResultado		VARCHAR(50),
	@convenio			VARCHAR(4),
	@PrecioValor		NUMERIC(24,2),
    @TipoRegla			INT
AS
BEGIN

DECLARE @CodigoBarra			VARCHAR(15)
DECLARE @TipoLista				VARCHAR(3)
DECLARE @PrecioLista			NUMERIC(24,4) 
DECLARE @Precio					NUMERIC(24,2) 
DECLARE @Cantidad				NUMERIC(24,4) 
DECLARE @Impuesto				NUMERIC(24,4) 
DECLARE @PorcentajeImpuesto		NUMERIC(24,2) 
DECLARE @PorcentajeDescuento	NUMERIC(5,2)
DECLARE @Costo					NUMERIC(24,2)
DECLARE @Regla					VARCHAR(50)
DECLARE @Item					NUMERIC(24,2)

DECLARE @ContABC				INT
DECLARE @ContAC					INT
DECLARE @ContBC					INT
DECLARE @ContA					INT

DECLARE @ContadorReg			INT
DECLARE @ContadorInt			INT
DECLARE @Ciclo					INT
DECLARE @strSQL					VARCHAR(MAX)
DECLARE @NuevoPrecio			NUMERIC(24,2)
DECLARE @NvPorcDescuento		NUMERIC(5,2)
DECLARE @UltimaTasa				NUMERIC(24,2)

--Comprobar, eliminar y recrear tabla temporal
IF OBJECT_ID('tempdb..#TempFacturacion') IS NOT NULL 
	DROP TABLE #TempFacturacion

CREATE TABLE #TempFacturacion 
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2),
					Item INT,
					Agrupacion VARCHAR(1) 
					) ON [PRIMARY]	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacion ([CodigoBarra])
	CREATE NONCLUSTERED INDEX [IX_Item] ON #TempFacturacion ([Item]) 

	SET @Item = 0
-- Separacion de unidades
-- Grupo C: Comunes en Grupo A y B 
DECLARE Cursor_Ofertas CURSOR
	FOR SELECT Temp.CodigoBarra, Temp.TipoLista, Temp.PrecioLista, Temp.Precio, Temp.Cantidad, Temp.Impuesto, Temp.PorcentajeImpuesto, Temp.Costo, Temp.PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA Temp
		INNER JOIN 
		(
			SELECT A.CodigoBarra 
			FROM 
			(
				SELECT CodigoBarra 
				FROM 
				(
					SELECT CodigoBarra, IDGrupoRegla FROM fntPrendasGrupoRegla(@GrupoA)
				) X 
				WHERE IDGrupoRegla = @GrupoA
			) A
				INNER JOIN 
				(
					SELECT CodigoBarra 
					FROM 
					(
						SELECT CodigoBarra, IDGrupoRegla FROM fntPrendasGrupoRegla(@GrupoB)
					) Y 
					WHERE IDGrupoRegla = @GrupoB
				) B ON B.CodigoBarra = A.CodigoBarra
		) Cod ON Cod.CodigoBarra = Temp.CodigoBarra    
		ORDER BY Temp.Precio ASC, Temp.CodigoBarra ASC, Temp.Cantidad ASC
	
	--SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item, Agrupacion)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  1, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item,
					  'C'
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas  

-- Grupo A
DECLARE Cursor_Ofertas CURSOR
	FOR SELECT Temp.CodigoBarra, Temp.TipoLista, Temp.PrecioLista, Temp.Precio, Temp.Cantidad, Temp.Impuesto, Temp.PorcentajeImpuesto, Temp.Costo, Temp.PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA Temp
					INNER JOIN (SELECT A.CodigoBarra 
					FROM 
					(SELECT CodigoBarra, IDGrupoRegla FROM fntPrendasGrupoRegla(@GrupoA)) A 
					LEFT JOIN 
					(SELECT CodigoBarra, IDGrupoRegla FROM fntPrendasGrupoRegla(@GrupoB)) B ON B.CodigoBarra = A.CodigoBarra
					WHERE B.CodigoBarra IS NULL
					) Cod ON Cod.CodigoBarra = Temp.CodigoBarra       
		ORDER BY Temp.Precio ASC, 
				 Temp.CodigoBarra ASC, 
				 Temp.Cantidad ASC
	
	--SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item, Agrupacion)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  1, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item,
					  'A'	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas  

-- Grupo B
DECLARE Cursor_Ofertas CURSOR
	FOR SELECT Temp.CodigoBarra, Temp.TipoLista, Temp.PrecioLista, Temp.Precio, Temp.Cantidad, Temp.Impuesto, Temp.PorcentajeImpuesto, Temp.Costo, Temp.PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA Temp
			INNER JOIN (SELECT B.CodigoBarra 
						FROM 
						(SELECT CodigoBarra, IDGrupoRegla FROM fntPrendasGrupoRegla(@GrupoA)) A 
						RIGHT JOIN 
						(SELECT CodigoBarra, IDGrupoRegla FROM fntPrendasGrupoRegla(@GrupoB)) B ON B.CodigoBarra = A.CodigoBarra
						WHERE A.CodigoBarra IS NULL
						) Cod ON Cod.CodigoBarra = Temp.CodigoBarra      
		ORDER BY Temp.Precio ASC, 
				 Temp.CodigoBarra ASC, 
				 Temp.Cantidad ASC
	
	--SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item, Agrupacion)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  1, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item,
					  'B'	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas  

--

SET @ContABC = (SELECT COUNT(*) FROM #TempFacturacion)
SET @ContAC = (SELECT COUNT(*) FROM #TempFacturacion WHERE Agrupacion IN ('A','C'))
SET @ContBC = (SELECT COUNT(*) FROM #TempFacturacion WHERE Agrupacion IN ('B','C'))
SET @ContA = (SELECT COUNT(*) FROM #TempFacturacion WHERE Agrupacion = 'A')

SET @ContadorInt = 0
SET @Ciclo = 0

WHILE (@ContABC >= @Lleve) AND (@ContAC >= @Pague) AND (@ContBC >= @Lleve - @Pague)
BEGIN
	SET @Ciclo = @Ciclo + 1

	SET @ContadorInt = @ContadorInt + 1

	IF @Ciclo <= @Pague
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = ISNULL(PrecioLista,0), 
					  @Precio = ISNULL(Precio,0), 
					  @Cantidad = ISNULL(Cantidad,0), 
					  @Impuesto = ISNULL(Impuesto,0), 
					  @PorcentajeImpuesto = ISNULL(PorcentajeImpuesto,0), 
					  @Costo = ISNULL(Costo,0), 
					  @PorcentajeDescuento = ISNULL(PorcentajeDescuento,0), 
					  @Item = Item 
		FROM #TempFacturacion
		WHERE Agrupacion IN ('A','C') 
		ORDER BY Precio DESC
				   
		SET @strSQL = 'UPDATE ' + @TablaResultado + '
						SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
														AND TipoLista = ''R''  
														AND PrecioLista = ' + CAST(@Precio AS VARCHAR(24)) + '
														AND Precio = ' + CAST(@Precio AS VARCHAR(24)) + '
														AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
														AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
														AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
														AND PorcentajeDescuento = 0 
														AND Regla = ''' + @Imprimir + ''' 
														AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
		EXEC (@strSQL)

			IF @@ROWCOUNT = 0
			BEGIN 
				SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
				        ( CodigoBarra ,
				          TipoLista ,
				          PrecioLista ,
				          Precio ,
				          Cantidad ,
				          Impuesto ,
				          PorcentajeImpuesto ,
				          Costo ,
				          PorcentajeDescuento ,
				          Regla,
						  IDRegla
				        )
				VALUES  ( ''' + @CodigoBarra + ''', 
						  ''R'', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', ' +
				          '1, ' + 
				          CAST(@Impuesto AS VARCHAR(24)) + ', ' +
				          CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
				          CAST(@Costo AS VARCHAR(24)) + ', ' +
				          '0, 
						  ''' + @Imprimir + ''', ' +
						  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
				EXEC (@strSQL)
			END
	END 

	DELETE FROM #TempFacturacion WHERE Item = @Item	

	IF @Ciclo > @Pague AND @Ciclo <= @Lleve
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = Precio/100*@PorcDesc, 
					  @Precio = Precio, 
					  @Cantidad = Cantidad, 
					  @Impuesto = Impuesto, 
					  @PorcentajeImpuesto = PorcentajeImpuesto, 
					  @Costo = Costo, 
					  @PorcDesc = @PorcDesc, 
					  @Item = Item 
		FROM #TempFacturacion 
		WHERE Agrupacion IN ('B','C') 
		ORDER BY Precio ASC

	IF @TipoRegla = 0 
		 BEGIN  
		   SET @NuevoPrecio = (@Precio - (@Precio * @PorcDesc / 100))
		   SET @NvPorcDescuento = @PorcDesc 
		 END
	ELSE
		 BEGIN
		   SET @UltimaTasa = (dbo.UltimaTasaCambio())
		   SET @NuevoPrecio = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (@Precio) ELSE @PrecioValor*@UltimaTasa  END )
		   SET @NvPorcDescuento = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (0) ELSE  ROUND(((@Precio-(@PrecioValor*@UltimaTasa))/@Precio)*100,2)   END )
		 END

		SET @strSQL = 'UPDATE ' + @TablaResultado + '
						SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
														AND TipoLista = ''R'' 
														AND PrecioLista = ' + CAST((@NuevoPrecio) AS VARCHAR(24)) + '
														AND Precio = ' + CAST(@Precio AS VARCHAR(24)) + '
														AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
														AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
														AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
														AND PorcentajeDescuento = ' + CAST(@NvPorcDescuento AS VARCHAR(24)) + '
														AND Regla = ''' + @Imprimir + ''' 
														AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
		EXEC (@strSQL)

			IF @@ROWCOUNT = 0
			BEGIN 
				SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
				        ( CodigoBarra ,
				          TipoLista ,
				          PrecioLista ,
				          Precio ,
				          Cantidad ,
				          Impuesto ,
				          PorcentajeImpuesto ,
				          Costo ,
				          PorcentajeDescuento ,
				          Regla,
						  IDRegla
				        )
				VALUES  ( ''' + @CodigoBarra + ''', 
						  ''R'', ' +
				          CAST((@NuevoPrecio) AS VARCHAR(24)) + ', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', 
						  1, ' + 
				          CAST(@Impuesto AS VARCHAR(24)) + ', ' +
				          CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
				          CAST(@Costo AS VARCHAR(24)) + ', ' +
				          CAST(@NvPorcDescuento AS VARCHAR(24)) + ', 
						  ''' + @Imprimir + ''', ' + 
						  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
				EXEC (@strSQL)
			END
	END
        
    DELETE FROM #TempFacturacion WHERE Item = @Item	

  	IF (@convenio = 1 OR  @convenio = 2)    AND @Ciclo = @Lleve--SOLO APLICAMOS UNA SOLA PROMOCION 
	   BEGIN
		  BREAK
	   END 

	IF @Ciclo >= @Lleve
	BEGIN 
		SET @Ciclo = 0
		SET @ContABC = (SELECT COUNT(*) FROM #TempFacturacion)
		SET @ContAC = (SELECT COUNT(*) FROM #TempFacturacion WHERE Agrupacion IN ('A','C'))
		SET @ContBC = (SELECT COUNT(*) FROM #TempFacturacion WHERE Agrupacion IN ('B','C'))
		SET @ContA = (SELECT COUNT(*) FROM #TempFacturacion WHERE Agrupacion = 'A')
	END 
END

--DELETE FROM #TempFacturacionPasoA WHERE CodigoBarra IN (SELECT CodigoBarra FROM dbo.GRUPO_REGLAS WHERE IDGrupoRegla IN (@GrupoA,@GrupoB))
DELETE FROM #TempFacturacionPasoA WHERE CodigoBarra IN 
(
	SELECT CodigoBarra FROM fntPrendasGrupoRegla(@GrupoA)
	UNION
	SELECT CodigoBarra FROM fntPrendasGrupoRegla(@GrupoB)
)

EXEC PromocionesYOfertas_DevolverRemanente

END

GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[PromocionesYOfertas_DescuentoGeneralMismoGrupo]'
GO

ALTER PROCEDURE  [dbo].[PromocionesYOfertas_DescuentoGeneralMismoGrupo] 
	@ID_Regla			INT,															  
	@Lleve				INT,
	@Pague				INT,
	@PorcDesc			NUMERIC(5,2),
	@Grupo				INT,
	@Imprimir			VARCHAR(15),
	@TablaFacturacion	VARCHAR(50),
	@TablaResultado		VARCHAR(50),
	@convenio			VARCHAR(4),
	@PrecioValor		NUMERIC(24,2),
    @TipoRegla			INT
AS
BEGIN

DECLARE @CodigoBarra			VARCHAR(15)
DECLARE @TipoLista				VARCHAR(3)
DECLARE @PrecioLista			NUMERIC(24,4) 
DECLARE @Precio					NUMERIC(24,2) 
DECLARE @Cantidad				NUMERIC(24,4) 
DECLARE @Impuesto				NUMERIC(24,4) 
DECLARE @PorcentajeImpuesto		NUMERIC(24,2) 
DECLARE @PorcentajeDescuento	NUMERIC(5,2)
DECLARE @Costo					NUMERIC(24,2)
DECLARE @Regla					VARCHAR(50)
DECLARE @Item					NUMERIC(24,2)
DECLARE @ContadorReg			INT
DECLARE @ContadorInt			INT
DECLARE @Ciclo					INT
DECLARE @strSQL					VARCHAR(MAX)
DECLARE @NuevoPrecio			NUMERIC(24,2)
DECLARE @NvPorcDescuento		NUMERIC(5,2)
DECLARE @UltimaTasa				NUMERIC(24,2)

--Comprobar, eliminar y recrear tabla temporal
IF OBJECT_ID('tempdb..#TempFacturacion') IS NOT NULL 
	DROP TABLE #TempFacturacion

CREATE TABLE #TempFacturacion 
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2),
					Item INT 
					) ON [PRIMARY]	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacion ([CodigoBarra])
	CREATE NONCLUSTERED INDEX [IX_Item] ON #TempFacturacion ([Item]) 

-- Separacion de unidades 
DECLARE Cursor_Ofertas CURSOR
	FOR 
		SELECT CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA
		WHERE CodigoBarra NOT IN (SELECT CodigoBarra FROM CODIGOS_RECARGOS)
		ORDER BY Precio ASC, 
				 CodigoBarra ASC, 
				 Cantidad ASC
	
	SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  @Cantidad, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas  

--

SET @ContadorInt = 0
SET @Ciclo = 0
SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
WHILE @ContadorReg >= @Lleve
BEGIN
	SET @Ciclo = @Ciclo + 1

	SET @ContadorInt = @ContadorInt + 1

	IF @Ciclo <= @Pague
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = ISNULL(PrecioLista,0), 
					  @Precio = ISNULL(Precio,0), 
					  @Cantidad = ISNULL(Cantidad,0), 
					  @Impuesto = ISNULL(Impuesto,0), 
					  @PorcentajeImpuesto = ISNULL(PorcentajeImpuesto,0), 
					  @Costo = ISNULL(Costo,0), 
					  @PorcentajeDescuento = ISNULL(PorcentajeDescuento,0), 
					  @Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item DESC

		 IF NOT EXISTS( select codigobarra FROM [dbo].[CODIGOS_RECARGOS] WHERE codigobarra= @CodigoBarra)    
	        BEGIN
				SET @strSQL = 'UPDATE ' + @TablaResultado + '
								SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
																AND TipoLista = ''R''  
																AND PrecioLista = ' + CAST(@Precio AS VARCHAR(24)) + '
																AND Precio = ' + CAST(@Precio AS VARCHAR(24)) + '
																AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
																AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
																AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
																AND PorcentajeDescuento = 0 
																AND Regla = ''' + @Imprimir + ''' 
																AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
				EXEC (@strSQL)

					IF @@ROWCOUNT = 0
					BEGIN 
						SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
								( CodigoBarra ,
								  TipoLista ,
								  PrecioLista ,
								  Precio ,
								  Cantidad ,
								  Impuesto ,
								  PorcentajeImpuesto ,
								  Costo ,
								  PorcentajeDescuento ,
								  Regla,
								  IDRegla
								)
						VALUES  ( ''' + @CodigoBarra + ''', 
								  ''R'', ' +
								  CAST(@Precio AS VARCHAR(24)) + ', ' +
								  CAST(@Precio AS VARCHAR(24)) + ', ' +
								  '1, ' + 
								  CAST(@Impuesto AS VARCHAR(24)) + ', ' +
								  CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
								  CAST(@Costo AS VARCHAR(24)) + ', ' +
								  '0, 
								  ''' + @Imprimir + ''', ' +
								  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
						EXEC (@strSQL)
				END
		END
	END 

	IF @Ciclo > @Pague AND @Ciclo <= @Lleve
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = Precio/100*@PorcDesc, 
					  @Precio = Precio, 
					  @Cantidad = Cantidad, 
					  @Impuesto = Impuesto, 
					  @PorcentajeImpuesto = PorcentajeImpuesto, 
					  @Costo = Costo, 
					  @PorcDesc = @PorcDesc, 
					  @Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item ASC

	IF @TipoRegla = 0 
		 BEGIN  
		   SET @NuevoPrecio = (@Precio - (@Precio * @PorcDesc / 100))
		   SET @NvPorcDescuento = @PorcDesc 
		 END
	ELSE
		 BEGIN
		   SET @UltimaTasa = (dbo.UltimaTasaCambio())
		   SET @NuevoPrecio = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (@Precio) ELSE @PrecioValor*@UltimaTasa  END )
		   SET @NvPorcDescuento = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (0) ELSE  ROUND(((@Precio-(@PrecioValor*@UltimaTasa))/@Precio)*100,2)   END )
		 END

		 IF NOT EXISTS(select codigobarra FROM [dbo].[CODIGOS_RECARGOS] WHERE codigobarra= @CodigoBarra)
		    BEGIN
				SET @strSQL = 'UPDATE ' + @TablaResultado + '
								SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
																AND TipoLista = ''R'' 
		         												AND PrecioLista = ' + CAST(@NuevoPrecio AS VARCHAR(24)) + '
																AND Precio = ' + CAST(@Precio AS VARCHAR(24)) + '
																AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
																AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
																AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
																AND PorcentajeDescuento = ' + CAST(@NvPorcDescuento AS VARCHAR(24)) + '
																AND Regla = ''' + @Imprimir + ''' 
																AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
				EXEC (@strSQL)

					IF @@ROWCOUNT = 0
					BEGIN 
						SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
								( CodigoBarra ,
								  TipoLista ,
								  PrecioLista ,
								  Precio ,
								  Cantidad ,
								  Impuesto ,
								  PorcentajeImpuesto ,
								  Costo ,
								  PorcentajeDescuento ,
								  Regla,
								  IDRegla
								)
						VALUES  ( ''' + @CodigoBarra + ''', 
								  ''R'', ' +
        						  CASE WHEN  @TipoRegla = 0  THEN  
		     					  CAST(@NuevoPrecio AS VARCHAR(24)) 
			    				  ELSE  CAST(@PrecioValor AS VARCHAR(24))  END + ', ' +
								  CAST(@Precio AS VARCHAR(24)) + ', 
								  1, ' + 
								  CAST(@Impuesto AS VARCHAR(24)) + ', ' +
								  CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
								  CAST(@Costo AS VARCHAR(24)) + ', ' +
								  CAST(@NvPorcDescuento AS VARCHAR(24)) + ', 
								  ''' + @Imprimir + ''', ' + 
								  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
						EXEC (@strSQL)
					END
			END
	END
        
    DELETE FROM #TempFacturacion WHERE Item = @Item	

	IF @Ciclo >= @Lleve
	BEGIN 
		SET @Ciclo = 0
		SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
	END 
END
DELETE FROM #TempFacturacionPasoA  WHERE CodigoBarra NOT IN (SELECT CodigoBarra FROM [dbo].[CODIGOS_RECARGOS])
EXEC PromocionesYOfertas_DevolverRemanente
END

GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[PromocionesYOfertas_DescuentoGeneralEnSiMismo]'
GO



ALTER PROCEDURE  [dbo].[PromocionesYOfertas_DescuentoGeneralEnSiMismo] 
	@ID_Regla			INT,	
	@Lleve				INT,
	@Pague				INT,
	@PorcDesc			NUMERIC(5,2),
	@Grupo				INT,
	@Imprimir			VARCHAR(15),
	@TablaFacturacion	VARCHAR(50),
	@TablaResultado		VARCHAR(50),
	@convenio			VARCHAR(4),
	@PrecioValor		NUMERIC(24,2),
    @TipoRegla			INT
AS
BEGIN

DECLARE @CodigoBarra			VARCHAR(15)
DECLARE @TipoLista				VARCHAR(3)
DECLARE @PrecioLista			NUMERIC(24,4) 
DECLARE @Precio					NUMERIC(24,2) 
DECLARE @Cantidad				NUMERIC(24,4) 
DECLARE @Impuesto				NUMERIC(24,4) 
DECLARE @PorcentajeImpuesto		NUMERIC(24,2) 
DECLARE @PorcentajeDescuento	NUMERIC(5,2)
DECLARE @Costo					NUMERIC(24,2) 
DECLARE @Regla					VARCHAR(50)
DECLARE @Item					NUMERIC(24,2)
DECLARE @ContadorReg			INT
DECLARE @ContadorInt			INT
DECLARE @Ciclo					INT
DECLARE @strSQL					VARCHAR(MAX)
DECLARE @NuevoPrecio			NUMERIC(24,2)
DECLARE @NvPorcDescuento		NUMERIC(5,2)
DECLARE @UltimaTasa			    NUMERIC(24,2)

--Comprobar, eliminar y recrear tabla temporal
IF OBJECT_ID('tempdb..#TempFacturacion') IS NOT NULL 
	DROP TABLE #TempFacturacion

CREATE TABLE #TempFacturacion 
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2),
					Item INT 
					) ON [PRIMARY]	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacion ([CodigoBarra])
	CREATE NONCLUSTERED INDEX [IX_Item] ON #TempFacturacion ([Item])  

-- Separacion de unidades 
DECLARE Cursor_Ofertas CURSOR
	FOR SELECT CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA 
		ORDER BY Precio ASC, 
				 CodigoBarra ASC, 
				 Cantidad ASC
	
	SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  @Cantidad, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas   

--

SET @ContadorInt = 0
SET @Ciclo = 0
SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
WHILE @ContadorReg >= @Lleve
BEGIN
	SET @Ciclo = @Ciclo + 1

	SET @ContadorInt = @ContadorInt + 1

	IF @Ciclo <= @PAGUE AND @Pague = @Lleve
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = ISNULL(PrecioLista,0), 
					  @Precio = ISNULL(Precio,0), 
					  @Cantidad = ISNULL(Cantidad,0), 
					  @Impuesto = ISNULL(Impuesto,0), 
					  @PorcentajeImpuesto = ISNULL(PorcentajeImpuesto,0), 
					  @Costo = ISNULL(Costo,0), 
					  @PorcentajeDescuento = ISNULL(PorcentajeDescuento,0), 
					  @Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item DESC

	IF @TipoRegla = 0 
		 BEGIN  
		   SET @NuevoPrecio = (@Precio - (@Precio * @PorcDesc / 100))
		   SET @NvPorcDescuento = @PorcDesc 
		 END
	ELSE
		 BEGIN
		   SET @UltimaTasa = (dbo.UltimaTasaCambio())
		   SET @NuevoPrecio = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (@Precio) ELSE @PrecioValor*@UltimaTasa  END )
		   SET @NvPorcDescuento = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (0) ELSE  ROUND(((@Precio-(@PrecioValor*@UltimaTasa))/@Precio)*100,2)   END )
		 END
		 
		 
    IF NOT EXISTS( select codigobarra FROM [dbo].[CODIGOS_RECARGOS] WHERE codigobarra= @CodigoBarra)
	   BEGIN
		SET @strSQL = 'UPDATE ' + @TablaResultado + '
						SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
														AND TipoLista = ''R'' 
														AND PrecioLista = ' + CAST(@NuevoPrecio AS VARCHAR(24)) +  '
														AND Precio = ' + CAST(@Precio AS VARCHAR(24)) +  '
														AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
														AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
														AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
														AND PorcentajeDescuento = ' + CAST(@NvPorcDescuento AS VARCHAR(24)) + '
														AND Regla = ''' + @Imprimir + ''' 
														AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
		EXEC (@strSQL)

			IF @@ROWCOUNT = 0
			BEGIN  
				SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
				        ( CodigoBarra ,
				          TipoLista ,
				          PrecioLista ,
				          Precio ,
				          Cantidad ,
				          Impuesto ,
				          PorcentajeImpuesto ,
				          Costo ,
				          PorcentajeDescuento ,
				          Regla,
						  IDRegla
				        )
				VALUES  ( ''' + @CodigoBarra + ''', 
						  ''R'', ' +
				          CAST(@NuevoPrecio AS VARCHAR(24)) + ', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', 
						  1, ' + 
				          CAST(@Impuesto AS VARCHAR(24)) + ', ' +
				          CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
				          CAST(@Costo AS VARCHAR(24)) + ', ' +
				          CAST(@NvPorcDescuento AS VARCHAR(24)) + ', 
						  ''' + @Imprimir + ''', ' + 
						  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
				EXEC (@strSQL)
			END
		END
	END 
        
    DELETE FROM #TempFacturacion WHERE Item = @Item	

	IF @Ciclo >= @Lleve
	BEGIN 
		SET @Ciclo = 0
		SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
	END 
END

DELETE FROM #TempFacturacionPasoA WHERE CodigoBarra NOT IN (SELECT CodigoBarra FROM [dbo].[CODIGOS_RECARGOS])

EXEC PromocionesYOfertas_DevolverRemanente

END


GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[PromocionesYOfertas_DescuentoEnSiMismo]'
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE  [dbo].[PromocionesYOfertas_DescuentoEnSiMismo] 
	@ID_Regla			INT,	
	@Lleve				INT,
	@Pague				INT,
	@PorcDesc			NUMERIC(5,2),
	@Grupo				INT,
	@Imprimir			VARCHAR(15),
	@TablaFacturacion	VARCHAR(50),
	@TablaResultado		VARCHAR(50),
	@convenio			VARCHAR(4),
	@PrecioValor		NUMERIC(24,2),
    @TipoRegla			INT
AS
BEGIN

DECLARE @CodigoBarra			VARCHAR(15)
DECLARE @TipoLista				VARCHAR(3)
DECLARE @PrecioLista			NUMERIC(24,4) 
DECLARE @Precio					NUMERIC(24,2) 
DECLARE @Cantidad				NUMERIC(24,4) 
DECLARE @Impuesto				NUMERIC(24,4) 
DECLARE @PorcentajeImpuesto		NUMERIC(24,2) 
DECLARE @PorcentajeDescuento	NUMERIC(24,2)
DECLARE @Costo					NUMERIC(24,2) 
DECLARE @Regla					VARCHAR(50)
DECLARE @Item					NUMERIC(24,2)
DECLARE @ContadorReg			INT
DECLARE @ContadorInt			INT
DECLARE @Ciclo					INT
DECLARE @strSQL					VARCHAR(MAX)
DECLARE @NuevoPrecio			NUMERIC(24,2)
DECLARE @NvPorcDescuento		NUMERIC(5,2)
DECLARE @UltimaTasa				NUMERIC(24,2)

--Comprobar, eliminar y recrear tabla temporal
IF OBJECT_ID('tempdb..#TempFacturacion') IS NOT NULL 
	DROP TABLE #TempFacturacion

CREATE TABLE #TempFacturacion 
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2),
					Item INT 
					) ON [PRIMARY]	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacion ([CodigoBarra])
	CREATE NONCLUSTERED INDEX [IX_Item] ON #TempFacturacion ([Item])  

-- Separacion de unidades 
DECLARE Cursor_Ofertas CURSOR
	FOR 
		SELECT Temp.CodigoBarra, Temp.TipoLista, Temp.PrecioLista, Temp.Precio, Temp.Cantidad, Temp.Impuesto, Temp.PorcentajeImpuesto, Temp.Costo, Temp.PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA Temp
			INNER JOIN (SELECT CodigoBarra, IDGrupoRegla FROM dbo.fntPrendasGrupoRegla(@Grupo)) G ON G.CodigoBarra = Temp.CodigoBarra 
				AND G.IDGrupoRegla = @Grupo  
		ORDER BY Temp.Precio ASC, Temp.CodigoBarra ASC, Temp.Cantidad ASC	
	SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)			
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  @Cantidad, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas   

--

SET @ContadorInt = 0
SET @Ciclo = 0
SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
WHILE @ContadorReg >= @Lleve
BEGIN
	SET @Ciclo = @Ciclo + 1

	SET @ContadorInt = @ContadorInt + 1

	IF @Ciclo <= @PAGUE AND @Pague = @Lleve
	BEGIN
		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
					  @TipoLista = TipoLista, 
					  @PrecioLista = ISNULL(PrecioLista,0), 
					  @Precio = ISNULL(Precio,0), 
					  @Cantidad = ISNULL(Cantidad,0), 
					  @Impuesto = ISNULL(Impuesto,0), 
					  @PorcentajeImpuesto = ISNULL(PorcentajeImpuesto,0), 
					  @Costo = ISNULL(Costo,0), 
					  @PorcentajeDescuento = ISNULL(PorcentajeDescuento,0), 
					  @Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item DESC
    
	IF @TipoRegla = 0 
		 BEGIN  
		   SET @NuevoPrecio = (@Precio - (@Precio * @PorcDesc / 100))
		   SET @NvPorcDescuento = @PorcDesc 
		 END
	ELSE
		 BEGIN
		   SET @UltimaTasa = (dbo.UltimaTasaCambio())
		   SET @NuevoPrecio = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (@Precio) ELSE @PrecioValor*@UltimaTasa  END )
		   SET @NvPorcDescuento = (CASE WHEN  @Precio < @PrecioValor*@UltimaTasa  THEN  (0) ELSE  ROUND(((@Precio-(@PrecioValor*@UltimaTasa))/@Precio)*100,2)   END )
		 END

		SET @strSQL = 'UPDATE ' + @TablaResultado + '
						SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
														AND TipoLista = ''R'' 
														AND PrecioLista = ' + CAST(@NuevoPrecio AS VARCHAR(24)) +  '
														AND Precio = ' + CAST(@Precio AS VARCHAR(24)) +  '
														AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
														AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
														AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
														AND PorcentajeDescuento = ' + CAST(@NvPorcDescuento AS VARCHAR(24)) + '
														AND Regla = ''' + @Imprimir + ''' 
														AND IDRegla = ' + CAST(@ID_Regla AS VARCHAR(24))
		
		EXEC (@strSQL)

			IF @@ROWCOUNT = 0
			BEGIN 
				SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
				        ( CodigoBarra ,
				          TipoLista ,
				          PrecioLista ,
				          Precio ,
				          Cantidad ,
				          Impuesto ,
				          PorcentajeImpuesto ,
				          Costo ,
				          PorcentajeDescuento ,
				          Regla,
						  IDRegla
				        )
				VALUES  ( ''' + @CodigoBarra + ''', 
						  ''R'', ' +
						  CAST(@NuevoPrecio AS VARCHAR(24)) + ', ' +
				          CAST(@Precio AS VARCHAR(24)) + ', 
						  1, ' + 
				          CAST(@Impuesto AS VARCHAR(24)) + ', ' +
				          CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
				          CAST(@Costo AS VARCHAR(24)) + ', ' +
				          CAST(@NvPorcDescuento AS VARCHAR(24)) + ', 
						  ''' + @Imprimir + ''', ' + 
						  CAST(@ID_Regla AS VARCHAR(24)) + ')' 
				EXEC (@strSQL)				
			END
	END 
        
    DELETE FROM #TempFacturacion WHERE Item = @Item	

  			IF (@convenio = 1 OR  @convenio = 2)  AND  @Ciclo = @PAGUE  --SOLO APLICAMOS UNA SOLA PROMOCION 
			   BEGIN

				  BREAK
			   END 

	IF @Ciclo >= @Lleve
	BEGIN 
		SET @Ciclo = 0
		SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
	END 
END

DELETE FROM #TempFacturacionPasoA WHERE CodigoBarra IN (SELECT CodigoBarra FROM dbo.fntPrendasGrupoRegla(@Grupo))

EXEC PromocionesYOfertas_DevolverRemanente

END
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[REFERENCIAS_MAYORISTAS]'
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[REFERENCIAS_MAYORISTAS]
(
[ID] [bigint] NOT NULL,
[Codigo] [varchar] (18) COLLATE Modern_Spanish_CI_AS NOT NULL,
[EsReferencia] [tinyint] NULL,
[EsExcepcion] [tinyint] NULL,
[PorcentajeDescuento] [decimal] (5, 2) NULL,
[FechaCreacion] [datetime] NOT NULL CONSTRAINT [DF_REFERENCIAS_MAYORISTAS_FechaCreacion] DEFAULT (getdate()),
[Cantidad] [int] NOT NULL
)
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[PromocionesYOfertas_Descuento_MAYORISTAS]'
GO
CREATE PROCEDURE  [dbo].[PromocionesYOfertas_Descuento_MAYORISTAS] 
	@CodReferencia		VARCHAR(18),
	@EsReferencia		INT, 
	@Lleve  			INT,
	@Descuento			NUMERIC(24,2),
	@TablaFacturacion VARCHAR(50),
	@TablaResultado VARCHAR(50)
AS
BEGIN

DECLARE @CodigoBarra			VARCHAR(15)
DECLARE @TipoLista				VARCHAR(3)
DECLARE @PrecioLista			NUMERIC(24,4) 
DECLARE @Precio					NUMERIC(24,2) 
DECLARE @Cantidad				NUMERIC(24,4) 
DECLARE @Impuesto				NUMERIC(24,4) 
DECLARE @PorcentajeImpuesto		NUMERIC(24,2) 
DECLARE @PorcentajeDescuento	NUMERIC(5,2)
DECLARE @Costo					NUMERIC(24,2) 
DECLARE @Item					NUMERIC(24,2)
DECLARE @ContadorReg			INT
DECLARE @ContadorInt			INT
DECLARE @Ciclo					INT
DECLARE @strSQL					VARCHAR(MAX)
DECLARE @NuevoPrecio			NUMERIC(24,2)
DECLARE @UltimaTasa			    NUMERIC(24,2)
DECLARE @Imprimir				VARCHAR(10)

--Comprobar, eliminar y recrear tabla temporal
IF OBJECT_ID('tempdb..#TempFacturacion') IS NOT NULL 
	DROP TABLE #TempFacturacion

CREATE TABLE #TempFacturacion 
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2),
					Item INT 
					) ON [PRIMARY]	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacion ([CodigoBarra])
	CREATE NONCLUSTERED INDEX [IX_Item] ON #TempFacturacion ([Item])  

-- Separacion de unidades 

	IF @EsReferencia = 1
	BEGIN
		DECLARE Cursor_Ofertas CURSOR FOR 
		SELECT CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA
		WHERE CodigoBarra IN (SELECT CodigoBarra FROM dbo.INVENTARIO WHERE Referencia+CodigoMarca = @CodReferencia)
			AND CodigoBarra NOT IN (SELECT Codigo FROM dbo.REFERENCIAS_MAYORISTAS WHERE EsExcepcion = 1)
		ORDER BY Precio ASC, 
				 CodigoBarra ASC, 
				 Cantidad ASC
	END 

	IF @EsReferencia = 0
	BEGIN
		DECLARE Cursor_Ofertas CURSOR FOR 
		SELECT CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento
		FROM dbo.#TempFacturacionPasoA
		WHERE CodigoBarra = @CodReferencia
			AND CodigoBarra NOT IN (SELECT Codigo FROM dbo.REFERENCIAS_MAYORISTAS WHERE EsExcepcion = 1)
		ORDER BY Precio ASC, 
				 CodigoBarra ASC, 
				 Cantidad ASC
	END 
	
	SET @Imprimir = 'MAYORISTA'

	SET @Item = 0

	OPEN Cursor_Ofertas 
	FETCH NEXT FROM Cursor_Ofertas
	INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    
	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @Cantidad > 0 
		BEGIN 
			SET @Item = (@Item + 1)
			INSERT INTO #TempFacturacion
			        (CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento, Item)
			VALUES  ( 
					  @CodigoBarra, 
					  @TipoLista, 
					  @PrecioLista, 
					  @Precio, 
					  @Cantidad, 
					  @Impuesto, 
					  @PorcentajeImpuesto, 
					  @Costo, 
					  @PorcentajeDescuento,
					  @Item	
			         )
			SET @Cantidad = (@Cantidad - 1)
		END
		FETCH NEXT FROM Cursor_Ofertas
		INTO @CodigoBarra, @TipoLista, @PrecioLista, @Precio, @Cantidad, @Impuesto, @PorcentajeImpuesto, @Costo, @PorcentajeDescuento
    END
CLOSE Cursor_Ofertas  
DEALLOCATE Cursor_Ofertas   

--

SET @ContadorInt = 0
SET @Ciclo = 0
SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)
IF @ContadorReg >= @Lleve
BEGIN
	WHILE @ContadorReg >= 1
	BEGIN 
		SET @Ciclo = @Ciclo + 1

		SET @ContadorInt = @ContadorInt + 1

		SELECT TOP(1) @CodigoBarra = CodigoBarra, 
						@TipoLista = TipoLista, 
						@PrecioLista = ISNULL(PrecioLista,0), 
						@Precio = ISNULL(Precio,0), 
						@Cantidad = ISNULL(Cantidad,0), 
						@Impuesto = ISNULL(Impuesto,0), 
						@PorcentajeImpuesto = ISNULL(PorcentajeImpuesto,0), 
						@Costo = ISNULL(Costo,0), 
						@PorcentajeDescuento = ISNULL(PorcentajeDescuento,0), 
						@Item = Item 
		FROM #TempFacturacion 
		ORDER BY Item DESC

        SET @NuevoPrecio = (@Precio - (@Precio * @Descuento / 100))		 
		 
		IF NOT EXISTS( select codigobarra FROM [dbo].[CODIGOS_RECARGOS] WHERE codigobarra= @CodigoBarra)
		   BEGIN
			SET @strSQL = 'UPDATE ' + @TablaResultado + '
							SET Cantidad = Cantidad + 1 WHERE CodigoBarra = ''' + @CodigoBarra + '''
															AND TipoLista = ''T'' 
															AND PrecioLista = ' + CAST(@NuevoPrecio AS VARCHAR(24)) +  '
															AND Precio = ' + CAST(@Precio AS VARCHAR(24)) +  '
															AND Impuesto = ' + CAST(@Impuesto AS VARCHAR(24)) + '
															AND PorcentajeImpuesto = ' + CAST(@PorcentajeImpuesto AS VARCHAR(24)) + '
															AND Costo = ' + CAST(@Costo AS VARCHAR(24)) + '
															AND PorcentajeDescuento = ' + CAST(@Descuento AS VARCHAR(24)) + '
															AND Regla = ''' + @Imprimir + ''' 
															AND IDRegla = ' + CAST(0 AS VARCHAR(24))
			EXEC (@strSQL)

				IF @@ROWCOUNT = 0
				BEGIN  
					SET @strSQL = 'INSERT INTO ' + @TablaResultado + '
							( CodigoBarra ,
							  TipoLista ,
							  PrecioLista ,
							  Precio ,
							  Cantidad ,
							  Impuesto ,
							  PorcentajeImpuesto ,
							  Costo ,
							  PorcentajeDescuento ,
							  Regla,
							  IDRegla
							)
					VALUES  ( ''' + @CodigoBarra + ''', 
							  ''T'', ' +
							  CAST(@NuevoPrecio AS VARCHAR(24)) + ', ' +
							  CAST(@Precio AS VARCHAR(24)) + ', 
							  1, ' + 
							  CAST(@Impuesto AS VARCHAR(24)) + ', ' +
							  CAST(@PorcentajeImpuesto AS VARCHAR(24)) + ', ' +
							  CAST(@Costo AS VARCHAR(24)) + ', ' +
							  CAST(@Descuento AS VARCHAR(24)) + ', 
							  ''' + @Imprimir + ''', ' + 
							  CAST(0 AS VARCHAR(24)) + ')' 
					EXEC (@strSQL)
				END
			END
		
        
		DELETE FROM #TempFacturacion WHERE Item = @Item	

		SET @ContadorReg = (SELECT COUNT(*) FROM #TempFacturacion)

	END 
END

IF @EsReferencia = 1
BEGIN
	DELETE FROM #TempFacturacionPasoA
	WHERE CodigoBarra IN (SELECT CodigoBarra FROM dbo.INVENTARIO WHERE Referencia+CodigoMarca = @CodReferencia)
END 

IF @EsReferencia = 0
BEGIN
	DELETE FROM #TempFacturacionPasoA
	WHERE CodigoBarra = @CodReferencia
END 

EXEC PromocionesYOfertas_DevolverRemanente

END
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Altering [dbo].[PromocionesYOfertas_SelectorDeReglas]'
GO
-- Batch submitted through debugger: SQLQuery1.sql|7|0|C:\Users\srbor\AppData\Local\Temp\~vs11D1.sql
ALTER PROCEDURE  [dbo].[PromocionesYOfertas_SelectorDeReglas] 
	@TablaFacturacion VARCHAR(50),
	@TablaResultado VARCHAR(50),
	@Convenio VARCHAR(4),
	@EsCredito VARCHAR(1),
	@EsMayorista VARCHAR(1) = NULL,
	@Grupo INT = NULL
AS
BEGIN

DECLARE @ID_Regla			INT
DECLARE @Prioridad_Regla	INT
DECLARE @Regla_Lleve		INT
DECLARE @Regla_Pague		INT
DECLARE @Regla_Descuento	NUMERIC(24,2)
DECLARE @Regla_IDGrupoA		INT
DECLARE @Regla_IDGrupoB		INT
DECLARE @DescuentoGeneral	INT
DECLARE @Regla_Imprimir		VARCHAR(15)
DECLARE @strSQL				VARCHAR(MAX)
DECLARE @DiaSemana			VARCHAR(15)
DECLARE @PrecioValor		NUMERIC(24,2)
DECLARE @TipoRegla			INT

DECLARE @CodReferencia		VARCHAR(18)
DECLARE @EsReferencia		INT 
DECLARE @Cantidad			INT 
DECLARE @Orden				BIGINT
DECLARE @Codigo				VARCHAR(18)
DECLARE @Descuento			NUMERIC(24,2)

SET @DiaSemana = (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(DATENAME(dw,GETDATE()),'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u')) 

	IF OBJECT_ID('tempdb..#TempFacturacionPasoA') IS NOT NULL 
		DROP TABLE #TempFacturacionPasoA

	CREATE TABLE #TempFacturacionPasoA
					(
					CodigoBarra VARCHAR(15), 
					TipoLista  VARCHAR(3), 
					PrecioLista NUMERIC(24,4), 
					Precio NUMERIC(24,2), 
					Cantidad NUMERIC(24,4), 
					Impuesto NUMERIC(24,4), 
					PorcentajeImpuesto NUMERIC(24,2), 
					Costo NUMERIC(24,2), 
					PorcentajeDescuento NUMERIC(5,2)
					) ON [PRIMARY]
	
	CREATE NONCLUSTERED INDEX [IX_CodigoBarra] ON #TempFacturacionPasoA ([CodigoBarra])	

	SET @strSQL =  'INSERT INTO #TempFacturacionPasoA
						(CodigoBarra, TipoLista, PrecioLista, Precio, Cantidad, Impuesto, PorcentajeImpuesto, Costo, PorcentajeDescuento)
					SELECT CodigoBarra, 
						   TipoLista, 
						   PrecioLista, 
						   Precio, 
						   Cantidad, 
						   Impuesto, 
						   PorcentajeImpuesto, 
						   Costo, 
						   PorcentajeDescuento
					FROM ' + @TablaFacturacion			 
	EXEC (@strSQL)
	
	
	IF @EsMayorista = 'S'
	BEGIN
		EXEC dbo.PromocionesYOfertas_DescuentoCatalogo 0,
														0,
														0,
														0,
														0,
														'',
														@TablaFacturacion, 
														@TablaResultado,
														'',
														0,
														0
		
    END

	IF @convenio <> '0'
	  BEGIN 
	     EXEC  dbo.PromocionesYOfertas_SelectorDeReglas_Convenios @TablaFacturacion,
														           @TablaResultado,
																   @convenio
	  END 
	
	SET @convenio = '0'

	IF @Grupo IS NULL OR @Grupo = 0
	BEGIN
		SET @strSQL = 'DECLARE Cursor_OrdenDeReglas CURSOR
						FOR	SELECT DISTINCT R.ID, R.Prioridad
							FROM dbo.#TempFacturacionPasoA 
								INNER JOIN 
								(
									SELECT CodigoBarra, IDGrupoRegla
									FROM dbo.GRUPO_REGLAS 
									WHERE EsReferencia = 0
										AND EsExcepcion =0
									UNION
									SELECT INV.CodigoBarra, GR.IDGrupoRegla
									FROM dbo.GRUPO_REGLAS GR	
										INNER JOIN INVENTARIO INV ON LTRIM(RTRIM(INV.Referencia)) + LTRIM(RTRIM(INV.CodigoMarca)) = GR.CodigoBarra 
											AND GR.EsReferencia = 1
											AND EsExcepcion =0
									UNION
									SELECT CodigoBarra, IDGrupoRegla
									FROM
									(
										SELECT I.CodigoBarra
										--SELECT *
										FROM dbo.INVENTARIO AS I
											LEFT JOIN dbo.GRUPO_REGLAS AS GR ON GR.CodigoBarra = LTRIM(RTRIM(I.Referencia)) + LTRIM(RTRIM(I.CodigoMarca)) 
												AND GR.EsReferencia =1
												AND GR.EsExcepcion =1
										WHERE GR.ID IS NULL
									)AS RES,
									(
										SELECT IDGrupoRegla
										FROM GRUPO_REGLAS
										WHERE EsReferencia =1
											AND EsExcepcion =1
										GROUP BY IDGrupoRegla
									) AS RES1
									UNION
									SELECT CodigoBarra, IDGrupoRegla
									FROM
									(
										SELECT I.CodigoBarra
										--SELECT *
										FROM dbo.INVENTARIO AS I
											LEFT JOIN dbo.GRUPO_REGLAS AS GR ON GR.CodigoBarra = I.CodigoBarra
												AND GR.EsReferencia =0
												AND GR.EsExcepcion =1
										WHERE GR.ID IS NULL
									)AS RES,
									(
										SELECT IDGrupoRegla
										FROM GRUPO_REGLAS
										WHERE EsReferencia =0
											AND EsExcepcion =1
									) AS RES1
								) G ON G.CodigoBarra = #TempFacturacionPasoA.CodigoBarra 
									OR G.CodigoBarra = ''+++''
								INNER JOIN dbo.Reglas R ON R.ProductosActivan = G.IDGrupoRegla
							WHERE (Activa = 1)
								AND CONVERT(CHAR,GETDATE(),112) BETWEEN CONVERT(CHAR,FechaInicio,112) AND CONVERT(CHAR,FechaFin,112)
								AND CONVERT(CHAR,GETDATE(),108) >= CONVERT(CHAR,HoraInicio,108)
								AND CONVERT(CHAR,GETDATE(),108) <= CONVERT(CHAR,HoraFin,108)
								AND '+ CAST(@DiaSemana AS VARCHAR(15)) + ' = 1
							ORDER BY R.Prioridad ASC '

	END
	ELSE
	BEGIN
		SET @strSQL = 'DECLARE Cursor_OrdenDeReglas CURSOR
						FOR	SELECT DISTINCT R.ID, R.Prioridad
							FROM dbo.REGLAS R
							WHERE (Activa = 1)
								AND CONVERT(CHAR,GETDATE(),112) BETWEEN CONVERT(CHAR,FechaInicio,112) AND CONVERT(CHAR,FechaFin,112)
								AND CONVERT(CHAR,GETDATE(),108) >= CONVERT(CHAR,HoraInicio,108)
								AND CONVERT(CHAR,GETDATE(),108) <= CONVERT(CHAR,HoraFin,108)
								AND '+ CAST(@DiaSemana AS VARCHAR(15)) + ' = 1
								AND R.ProductosActivan = ' + CAST(@Grupo AS VARCHAR(50)) +
							' ORDER BY R.Prioridad ASC '
	END	
	
	EXEC (@strSQL)
	
	OPEN Cursor_OrdenDeReglas 
	FETCH NEXT FROM Cursor_OrdenDeReglas
	INTO @ID_Regla, @Prioridad_Regla

	WHILE @@FETCH_STATUS = 0
	BEGIN
		SET @DescuentoGeneral = 0
		SELECT @Regla_Lleve = Lleve,
			   @Regla_Pague = Pague,
			   @Regla_Descuento = PorcDescuento,
			   @Regla_IDGrupoA = ProductosActivan,
			   @Regla_IDGrupoB = ProductosAfectados,
			   @Regla_Imprimir = Imprimir,
			   @PrecioValor=Precio,
			   @tipoRegla=tipo
		FROM dbo.Reglas	
		WHERE ID = @ID_Regla

		SET @DescuentoGeneral = (SELECT COUNT(*) FROM GRUPO_REGLAS WHERE IDGrupoRegla = @Regla_IDGrupoA AND CodigoBarra = '+++')	

		IF (@Regla_Lleve = @Regla_Pague) AND (@Regla_IDGrupoA = @Regla_IDGrupoB) AND (@DescuentoGeneral <> 0) 
		BEGIN 
			EXEC dbo.PromocionesYOfertas_DescuentoGeneralEnSiMismo @ID_Regla,		
																   @Regla_Lleve,
																   @Regla_Pague,
  																   @Regla_Descuento,
														           @Regla_IDGrupoA,
														           @Regla_Imprimir,
														           @TablaFacturacion,
														           @TablaResultado,
																   @convenio,
																   @PrecioValor,
																   @tipoRegla
		END

		IF (@Regla_Lleve <> @Regla_Pague) AND (@Regla_IDGrupoA = @Regla_IDGrupoB) AND (@DescuentoGeneral <> 0) 
		BEGIN
			EXEC dbo.PromocionesYOfertas_DescuentoGeneralMismoGrupo @ID_Regla,			
																	@Regla_Lleve,
																	@Regla_Pague,
  																	@Regla_Descuento,
																	@Regla_IDGrupoA,
																	@Regla_Imprimir,
																	@TablaFacturacion,
																	@TablaResultado,
																	@convenio,
																	@PrecioValor,
																	@tipoRegla
		END
		
		IF (@Regla_Lleve <> @Regla_Pague) AND (@Regla_IDGrupoA = @Regla_IDGrupoB) AND (@DescuentoGeneral = 0) 
		BEGIN
			EXEC dbo.PromocionesYOfertas_DescuentosMismoGrupo @ID_Regla,			
															  @Regla_Lleve,
															  @Regla_Pague,
  															  @Regla_Descuento,
															  @Regla_IDGrupoA,
															  @Regla_Imprimir,
															  @TablaFacturacion,
															  @TablaResultado,
															  @convenio,
															  @PrecioValor,
															  @tipoRegla
		END

		IF (@Regla_Lleve <> @Regla_Pague) AND (@Regla_IDGrupoA <> @Regla_IDGrupoB) AND (@DescuentoGeneral = 0) 
		BEGIN
			EXEC dbo.PromocionesYOfertas_DescuentosDistintoGrupo @ID_Regla,
																 @Regla_Lleve,
																 @Regla_Pague,
																 @Regla_Descuento,
																 @Regla_IDGrupoA,
																 @Regla_IDGrupoB,
																 @Regla_Imprimir,
																 @TablaFacturacion,
																 @TablaResultado,
																 @convenio,
																 @PrecioValor,
																 @tipoRegla
		END
		
		IF (@Regla_Lleve = @Regla_Pague) AND (@Regla_IDGrupoA = @Regla_IDGrupoB) AND (@DescuentoGeneral = 0)
		BEGIN
			EXEC dbo.PromocionesYOfertas_DescuentoEnSiMismo @ID_Regla, 
															@Regla_Lleve,
															@Regla_Pague,
															@Regla_Descuento,
															@Regla_IDGrupoA,
															@Regla_Imprimir,
															@TablaFacturacion,
															@TablaResultado,
															@convenio,
															@PrecioValor,
															@tipoRegla

		END

		FETCH NEXT FROM Cursor_OrdenDeReglas
		INTO @ID_Regla, @Prioridad_Regla
    END
	 
	CLOSE Cursor_OrdenDeReglas  
	DEALLOCATE Cursor_OrdenDeReglas 
	
	IF EXISTS(SELECT Codigo FROM dbo.REFERENCIAS_MAYORISTAS WHERE Codigo = '+++')
	BEGIN 
		DECLARE Cursor_OrdenDeRegla CURSOR	FOR
		SELECT DISTINCT LISTA.Ref AS Codigo, RM.EsReferencia, RM.Cantidad, RM.PorcentajeDescuento
		FROM dbo.REFERENCIAS_MAYORISTAS RM 
			INNER JOIN (SELECT F.CodigoBarra, F.TipoLista, F.PrecioLista, F.Precio, F.Cantidad,F.Impuesto,F.PorcentajeImpuesto, F.Costo, F.PorcentajeDescuento, I.Referencia+I.CodigoMarca AS Ref
						FROM #TempFacturacionPasoA F
							INNER JOIN dbo.INVENTARIO I ON I.CodigoBarra = F.CodigoBarra) LISTA ON RM.Codigo = '+++' /*AND RM.EsReferencia = 1*/ AND RM.EsExcepcion = 0
		WHERE LISTA.Ref NOT IN (SELECT Codigo FROM dbo.REFERENCIAS_MAYORISTAS WHERE EsExcepcion = 1 OR EsReferencia = 1)
		UNION
		SELECT RM.Codigo, RM.EsReferencia, RM.Cantidad, RM.PorcentajeDescuento
		FROM dbo.REFERENCIAS_MAYORISTAS RM 
			INNER JOIN (SELECT F.CodigoBarra, F.TipoLista, F.PrecioLista, F.Precio, F.Cantidad,F.Impuesto,F.PorcentajeImpuesto, F.Costo, F.PorcentajeDescuento, I.Referencia+I.CodigoMarca AS Ref
						FROM #TempFacturacionPasoA F
							INNER JOIN dbo.INVENTARIO I ON I.CodigoBarra = F.CodigoBarra) LISTA ON LISTA.Ref = RM.Codigo AND RM.EsReferencia = 1 AND RM.EsExcepcion = 0
		UNION 
		SELECT RM.Codigo, RM.EsReferencia, RM.Cantidad, RM.PorcentajeDescuento
		FROM dbo.REFERENCIAS_MAYORISTAS RM 
			INNER JOIN (SELECT F.CodigoBarra, F.TipoLista, F.PrecioLista, F.Precio, F.Cantidad,F.Impuesto,F.PorcentajeImpuesto, F.Costo, F.PorcentajeDescuento, I.Referencia+I.CodigoMarca AS Ref
						FROM #TempFacturacionPasoA F
							INNER JOIN dbo.INVENTARIO I ON I.CodigoBarra = F.CodigoBarra) LISTA ON LISTA.CodigoBarra = RM.Codigo AND RM.EsReferencia = 0 AND RM.EsExcepcion = 0
		GROUP BY RM.Codigo,
				 RM.EsReferencia,
				 RM.Cantidad,
				 RM.PorcentajeDescuento
	END

	IF NOT EXISTS(SELECT Codigo FROM dbo.REFERENCIAS_MAYORISTAS WHERE Codigo = '+++')
	BEGIN 
		DECLARE Cursor_OrdenDeRegla CURSOR	FOR
		SELECT RM.Codigo, RM.EsReferencia, RM.Cantidad, RM.PorcentajeDescuento
		FROM dbo.REFERENCIAS_MAYORISTAS RM 
			INNER JOIN (SELECT F.CodigoBarra, F.TipoLista, F.PrecioLista, F.Precio, F.Cantidad,F.Impuesto,F.PorcentajeImpuesto, F.Costo, F.PorcentajeDescuento, I.Referencia+I.CodigoMarca AS Ref
						FROM #TempFacturacionPasoA F
							INNER JOIN dbo.INVENTARIO I ON I.CodigoBarra = F.CodigoBarra) LISTA ON LISTA.Ref = RM.Codigo AND RM.EsReferencia = 1 AND RM.EsExcepcion = 0
		UNION 
		SELECT RM.Codigo, RM.EsReferencia, RM.Cantidad, RM.PorcentajeDescuento
		FROM dbo.REFERENCIAS_MAYORISTAS RM 
			INNER JOIN (SELECT F.CodigoBarra, F.TipoLista, F.PrecioLista, F.Precio, F.Cantidad,F.Impuesto,F.PorcentajeImpuesto, F.Costo, F.PorcentajeDescuento, I.Referencia+I.CodigoMarca AS Ref
						FROM #TempFacturacionPasoA F
							INNER JOIN dbo.INVENTARIO I ON I.CodigoBarra = F.CodigoBarra) LISTA ON LISTA.CodigoBarra = RM.Codigo AND RM.EsReferencia = 0 AND RM.EsExcepcion = 0
		GROUP BY RM.Codigo,
				 RM.EsReferencia,
				 RM.Cantidad,
				 RM.PorcentajeDescuento
	END 
		   	 	
	OPEN Cursor_OrdenDeRegla 
	FETCH NEXT FROM Cursor_OrdenDeRegla
	INTO @CodReferencia, @EsReferencia, @Cantidad, @Descuento

	WHILE @@FETCH_STATUS = 0
	BEGIN		
		EXEC dbo.PromocionesYOfertas_Descuento_MAYORISTAS @CodReferencia, @EsReferencia, @Cantidad, @Descuento, @TablaFacturacion, @TablaResultado 
		FETCH NEXT FROM Cursor_OrdenDeRegla
		INTO @CodReferencia, @EsReferencia, @Cantidad, @Descuento
    END
	 
	CLOSE Cursor_OrdenDeRegla 
	DEALLOCATE Cursor_OrdenDeRegla 

	EXEC dbo.PromocionesYOfertas_InsertarRestosFacturacion @TablaResultado	
	
END

SET @strSQL =  'SELECT R.CodigoBarra, I.Nombre, R.Precio, R.Cantidad, R.PrecioLista, (R.Precio-R.PrecioLista) AS Descuento, R.Cantidad*(R.Precio-R.PrecioLista) AS TotalDescuento,
					(R.PrecioLista*R.PorcentajeImpuesto/100) AS Impuesto, R.Cantidad*(R.PrecioLista*R.PorcentajeImpuesto/100) AS TotalImpuesto, R.PorcentajeImpuesto, I.CostoPromedio AS Costo,
					(I.CostoPromedio*R.Cantidad) AS TotalCosto, I.Referencia, I.CodigoMarca, R.PorcentajeDescuento, R.Regla, R.IDRegla, R.TipoLista
				FROM ' + @TablaResultado + ' R 
					LEFT JOIN dbo.Reglas RE ON R.IDRegla = RE.ID
					INNER JOIN dbo.INVENTARIO I ON I.CodigoBarra = R.CodigoBarra'
EXEC (@strSQL)

GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
COMMIT TRANSACTION
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
-- This statement writes to the SQL Server Log so SQL Monitor can show this deployment.
IF HAS_PERMS_BY_NAME(N'sys.xp_logevent', N'OBJECT', N'EXECUTE') = 1
BEGIN
    DECLARE @databaseName AS nvarchar(2048), @eventMessage AS nvarchar(2048)
    SET @databaseName = REPLACE(REPLACE(DB_NAME(), N'\', N'\\'), N'"', N'\"')
    SET @eventMessage = N'Redgate SQL Compare: { "deployment": { "description": "Redgate SQL Compare deployed to ' + @databaseName + N'", "database": "' + @databaseName + N'" }}'
    EXECUTE sys.xp_logevent 55000, @eventMessage
END
GO
DECLARE @Success AS BIT
SET @Success = 1
SET NOEXEC OFF
IF (@Success = 1) PRINT 'The database update succeeded'
ELSE BEGIN
	IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
	PRINT 'The database update failed'
END
GO
