--Hash:534BBC046FD06250364B74E18D84F7C7

-- Bloqueo exclusivo por base de datos
--//
SET NOCOUNT ON;

DECLARE @__ZiurDbScriptLockResource NVARCHAR(200) = N'ZiurSoft:DbScriptLock:' + CAST(DB_ID() AS NVARCHAR(20));
DECLARE @__ZiurDbScriptLockResult INT;
EXEC @__ZiurDbScriptLockResult = sp_getapplock
    @Resource = @__ZiurDbScriptLockResource,
    @LockMode = N'Exclusive',
    @LockOwner = N'Session',
    @LockTimeout = 600000; -- 10 min

IF (@__ZiurDbScriptLockResult < 0)
BEGIN
    RAISERROR(N'No se pudo obtener el bloqueo exclusivo de actualizacion para esta base de datos.', 16, 1);
    SET NOEXEC ON;
END

/* Idempotencia a nivel de script: si la version ya existe, no ejecutar nada. */
IF EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 942)
BEGIN
    PRINT N'Scripts_942.sql: la version 942 ya esta aplicada. Se omite ejecucion.';
    EXEC sp_releaseapplock @Resource = @__ZiurDbScriptLockResource, @LockOwner = N'Session';
    SET NOEXEC ON;
END

SET XACT_ABORT ON;
GO

SET DATEFORMAT mdy;

--Validar que no existan scripts que no se hayan ejecutado
--//
IF EXISTS
(
	SELECT a.NumVersion + 1 AS HuecoInicio
	FROM ZiurVersiones a
	LEFT JOIN ZiurVersiones b ON a.NumVersion + 1 = b.NumVersion
	WHERE a.NumVersion>830 AND b.NumVersion IS NULL
	AND a.NumVersion + 1 < 942
)
RAISERROR('Error : hay un script que no se ejecuto , debe ejecutarlo manualmente.', 20, -1) with log
--//

--Colocar contenido de script diferencial aqui (Ziur.Database.publish.sql)

/*
 Plantilla de script anterior a la implementación							
--------------------------------------------------------------------------------------
 Este archivo contiene instrucciones de SQL que se ejecutarán antes del script de compilación	
 Use la sintaxis de SQLCMD para incluir un archivo en el script anterior a la implementación			
 Ejemplo:      :r .\miArchivo.sql								
 Use la sintaxis de SQLCMD para hacer referencia a una variable en el script anterior a la implementación		
 Ejemplo:      :setvar TableName miTabla							
               SELECT * FROM [$(TableName)]					
--------------------------------------------------------------------------------------
*/
GO

GO
PRINT N'Altering View [dbo].[VIdAbonaComisiones]...';


GO
IF OBJECT_ID(N'dbo.VIdAbonaComisiones', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VIdAbonaComisiones AS SELECT 1 AS Dummy;');
GO
ALTER VIEW VIdAbonaComisiones
AS
SELECT Enc2.IdEncab, Enc2.IdDocumento, EncCont1.IdAbonaDoc, EncCont1.Credito, EncCont1.Debito, Doc.CodDocumento, 
Enc2.IdPrefijo, Enc2.NumDocumento, EncCont1.DocReferencia, Enc2.IdMoneda, EncCont.IdCliente, 
Doc.CodDocumento + N' ' + COALESCE (Enc2.IdPrefijo, N'') + CAST(Enc2.NumDocumento AS NVARCHAR) + 
N' ' + COALESCE (EncCont.DocReferencia, N'') AS Descripcion,
EncCont1.IdCuenta, Enc.Fecha, 
Doc1.CodDocumento + N' ' + COALESCE (Enc.IdPrefijo, N'') + CAST(Enc.NumDocumento AS NVARCHAR) + 
N' ' + COALESCE (EncCont1.DocReferencia, N'') AS DescripcionAbona,
Enc.IdPrefijo AS PrefijoAbona, Enc.NumDocumento AS NumDocAbona, 
Doc1.IdDocumento AS IdDocumentoAbona,
CASE WHEN EncCont.Debito > 0 THEN EncCont1.Credito * CreditoIva / EncCont.Debito ELSE 0 END AS PropIva, 
CASE WHEN Doc1.FactorInventario = 0 THEN 1 ELSE Doc1.FactorInventario * - 1 END AS FactorInv, 
CASE WHEN Abon.Saldo >= 0 AND (Doc1.FactorInventario * - 1) = - 1 THEN 0 ELSE 1 END AS FactorSaldo,
CASE WHEN CAST(Enc.Fecha AS DATE) > CAST(EncCont.Vence AS DATE) THEN DATEDIFF(DAY, CAST(EncCont.Vence AS DATE) , CAST(Enc.Fecha AS DATE)) ELSE 0 END AS DiasMora
FROM (
    SELECT encCont.IdEncab, SUM(encCont.Credito) AS CreditoIva, SUM(encCont.Debito) AS DebitoIva
    FROM dbo.Encabezados_Cont AS encCont INNER JOIN
    dbo.Cuentas AS Cuent ON encCont.IdCuenta = Cuent.IdCuenta
    WHERE (Cuent.IdGrupoCuenta = 5)
    GROUP BY encCont.IdEncab
) AS q RIGHT OUTER JOIN
dbo.Encabezados_Cont AS EncCont ON EncCont.IdEncab = q.IdEncab INNER JOIN
dbo.Encabezados_Cont AS EncCont1 ON EncCont1.IdAbonaDoc = EncCont.IdEncabCont INNER JOIN
dbo.Cuentas AS Cta ON EncCont1.IdCuenta = Cta.IdCuenta INNER JOIN
dbo.Encabezados AS Enc ON EncCont1.IdEncab = Enc.IdEncab INNER JOIN
dbo.Encabezados AS Enc2 ON EncCont.IdEncab = Enc2.IdEncab AND Enc.IdEncab <> Enc2.IdEncab INNER JOIN
dbo.Documentos AS Doc ON Enc2.IdDocumento = Doc.IdDocumento INNER JOIN
dbo.Documentos AS Doc1 ON Enc.IdDocumento = Doc1.IdDocumento INNER JOIN
dbo.VIdAbonaDoc_02 AS Abon ON EncCont.IdEncabCont = Abon.IdEncabCont
WHERE (Cta.IdCuentaTipo IN (1, 2)) AND (Enc.EsAnulado = 0) AND (Enc2.EsAnulado = 0)
GO
PRINT N'Refreshing Procedure [dbo].[GetComisiones]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetComisiones]';


GO
PRINT N'Refreshing Procedure [dbo].[ComisionesPorDoc]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[ComisionesPorDoc]';


GO
	/*
	Plantilla de script posterior a la implementación							
	--------------------------------------------------------------------------------------
	 Este archivo contiene instrucciones de SQL que se anexarán al script de compilación.		
	 Use la sintaxis de SQLCMD para incluir un archivo en el script posterior a la implementación.			
	 Ejemplo:      :r .\miArchivo.sql								
	 Use la sintaxis de SQLCMD para hacer referencia a una variable en el script posterior a la implementación.		
	 Ejemplo:      :setvar TableName miTabla							
				   SELECT * FROM [$(TableName)]					
	--------------------------------------------------------------------------------------
	*/

	--Nuevo control para exportar un nuevo formato de informe de comisiones
	IF NOT EXISTS (SELECT * FROM Permisos_Controles WHERE IdControl = 1031)
	INSERT INTO Permisos_Controles
	(IdControl, NomControl)
	VALUES (1031, 'btnExcelFormatoDet')

	--Permisos para el nuevo de exportar excel
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt = 856973)
	INSERT INTO Permisos_ControlesPorInterface
	(IdControlInt, IdInterface, IdControl)
	VALUES (856973, 374, 1031)
	
GO
	--
GO

GO
PRINT N'Update complete.';


GO

--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 942)
BEGIN
INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (352, 942, 'Exportar excel detallado en comisiones por vendedor')
END
GO
GO
/* Liberar bloqueo exclusivo por base de datos */
DECLARE @__ZiurDbScriptLockResourceEnd NVARCHAR(200) = N'ZiurSoft:DbScriptLock:' + CAST(DB_ID() AS NVARCHAR(20));
EXEC sp_releaseapplock
    @Resource = @__ZiurDbScriptLockResourceEnd,
    @LockOwner = N'Session';
GO
