/*
Run this script on:

        192.168.10.45\cmtex.BD_SPDV_CTU    -  This database will be modified

to synchronize it with:

        192.168.10.45\cmtex.BD_SPDV

You are recommended to back up your database before running this script

Script created by SQL Compare version 15.0.7.23280 from Red Gate Software Ltd at 02/02/2024 05:40:28 p. m.

*/
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_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) 
			AND CodigoBarra NOT IN (SELECT CodigoBarra FROM dbo.GRUPO_REGLAS WHERE EsExcepcion = 1 AND EsReferencia = 0)
			AND CodigoBarra NOT IN (SELECT CodigoBarra FROM dbo.INVENTARIO WHERE Referencia + CodigoMarca IN (
			                        SELECT CodigoBarra FROM dbo.GRUPO_REGLAS WHERE EsExcepcion = 1 AND EsReferencia = 1))
		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 CODIGOS_RECARGOS) 
			AND CodigoBarra NOT IN (SELECT CodigoBarra FROM dbo.GRUPO_REGLAS WHERE EsExcepcion = 1 AND EsReferencia = 0)
			AND CodigoBarra NOT IN (SELECT CodigoBarra FROM dbo.INVENTARIO WHERE Referencia + CodigoMarca IN (
			                        SELECT CodigoBarra FROM dbo.GRUPO_REGLAS WHERE EsExcepcion = 1 AND EsReferencia = 1))
EXEC PromocionesYOfertas_DevolverRemanente
END

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
