--Hash:9B2B25213C7172869574CD2B559B2CA7

-- 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 = 947)
BEGIN
    PRINT N'Scripts_947.sql: la version 947 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 < 947
)
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'Creating Table [dbo].[Encabezados_Numeracion]...';


GO
IF OBJECT_ID(N'dbo.Encabezados_Numeracion', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Encabezados_Numeracion] (
    [IdEncabNum]   INT           IDENTITY (1, 1) NOT NULL,
    [IdEmpresa]    INT           NOT NULL,
    [IdDocumento]  INT           NOT NULL,
    [IdPrefijo]    NVARCHAR (10) NULL,
    [NumDocumento] INT           NOT NULL,
    [SenAnulado]   INT           NOT NULL,
    CONSTRAINT [PK_EncNum] PRIMARY KEY NONCLUSTERED ([IdEncabNum] ASC) WITH (FILLFACTOR = 70)
);
END


GO
PRINT N'Creating Default Constraint unnamed constraint on [dbo].[Encabezados_Numeracion]...';


GO
IF OBJECT_ID(N'dbo.Encabezados_Numeracion', N'U') IS NOT NULL
AND NOT EXISTS (
    SELECT 1
    FROM sys.default_constraints dc
    INNER JOIN sys.columns c
        ON dc.parent_object_id = c.object_id
        AND dc.parent_column_id = c.column_id
    WHERE dc.parent_object_id = OBJECT_ID(N'dbo.Encabezados_Numeracion')
      AND c.name = N'NumDocumento'
)
BEGIN
ALTER TABLE [dbo].[Encabezados_Numeracion]
    ADD DEFAULT ((0)) FOR [NumDocumento];
END


GO
PRINT N'Creating Default Constraint unnamed constraint on [dbo].[Encabezados_Numeracion]...';


GO
IF OBJECT_ID(N'dbo.Encabezados_Numeracion', N'U') IS NOT NULL
AND NOT EXISTS (
    SELECT 1
    FROM sys.default_constraints dc
    INNER JOIN sys.columns c
        ON dc.parent_object_id = c.object_id
        AND dc.parent_column_id = c.column_id
    WHERE dc.parent_object_id = OBJECT_ID(N'dbo.Encabezados_Numeracion')
      AND c.name = N'SenAnulado'
)
BEGIN
ALTER TABLE [dbo].[Encabezados_Numeracion]
    ADD DEFAULT ((0)) FOR [SenAnulado];
END


GO
PRINT N'Creating Foreign Key [dbo].[FK_EncNum-Documentos]...';


GO
IF OBJECT_ID(N'dbo.Encabezados_Numeracion', N'U') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = N'FK_EncNum-Documentos' AND parent_object_id = OBJECT_ID(N'dbo.Encabezados_Numeracion'))
BEGIN
ALTER TABLE [dbo].[Encabezados_Numeracion] WITH NOCHECK
    ADD CONSTRAINT [FK_EncNum-Documentos] FOREIGN KEY ([IdDocumento]) REFERENCES [dbo].[Documentos] ([IdDocumento]);
END


GO
PRINT N'Creating Foreign Key [dbo].[FK_EncNum-Empresas]...';


GO
IF OBJECT_ID(N'dbo.Encabezados_Numeracion', N'U') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = N'FK_EncNum-Empresas' AND parent_object_id = OBJECT_ID(N'dbo.Encabezados_Numeracion'))
BEGIN
ALTER TABLE [dbo].[Encabezados_Numeracion] WITH NOCHECK
    ADD CONSTRAINT [FK_EncNum-Empresas] FOREIGN KEY ([IdEmpresa]) REFERENCES [dbo].[Empresas] ([IdEmpresa]) ON UPDATE CASCADE;
END


GO
PRINT N'Creating Foreign Key [dbo].[FK_EncNum-Prefijos]...';


GO
IF OBJECT_ID(N'dbo.Encabezados_Numeracion', N'U') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = N'FK_EncNum-Prefijos' AND parent_object_id = OBJECT_ID(N'dbo.Encabezados_Numeracion'))
BEGIN
ALTER TABLE [dbo].[Encabezados_Numeracion] WITH NOCHECK
    ADD CONSTRAINT [FK_EncNum-Prefijos] FOREIGN KEY ([IdPrefijo]) REFERENCES [dbo].[Prefijos] ([IdPrefijo]);
END


GO
PRINT N'Altering Trigger [dbo].[TRG_Numeracion]...';


GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
IF OBJECT_ID(N'dbo.TRG_Numeracion', N'TR') IS NULL AND OBJECT_ID(N'dbo.Encabezados', N'U') IS NOT NULL
    EXEC(N'CREATE TRIGGER dbo.TRG_Numeracion ON dbo.Encabezados AFTER INSERT AS RETURN;');
GO
ALTER TRIGGER TRG_Numeracion
   ON  Encabezados
   AFTER INSERT,DELETE,UPDATE
AS 
BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @IdEncab int
DECLARE @IdEmp int
DECLARE @Pref nvarchar(100)
DECLARE @IdDoc nvarchar(100)
DECLARE @NumNuevo int
DECLARE @NumLastSeq int
DECLARE @NumActual int
DECLARE @senAnulado bit
DECLARE @Anulados bit
DECLARE @senSequence int = 0
DECLARE @senAnuladoNum bit
DECLARE @rowsModified int = 0
DECLARE @senDeleted bit = 0

--indican si es una insercion, actualizacion o eliminacion
--//
DECLARE @in int, @de int
SELECT @in = COUNT(*) FROM inserted;
SELECT @de = COUNT(*) FROM deleted;
--//

IF (@in=0 and @de>0)
	--si es una operacion de eliminacion
	DECLARE curNums CURSOR LOCAL FOR
	SELECT IdEncab, IdEmpresa, IdPrefijo, IdDocumento, NumDocumento 
	FROM DELETED
ELSE
	--si es una operacion de insercion o actualizacion
	DECLARE curNums CURSOR LOCAL FOR
	SELECT IdEncab, IdEmpresa, IdPrefijo, IdDocumento, NumDocumento 
	FROM INSERTED


OPEN curNums
FETCH FROM curNums INTO @IdEncab, @IdEmp , @Pref , @IdDoc , @NumActual

--'Autonumerar Sin Anulados'
--//
SET @senAnulado = CAST((SELECT ValParametro FROM Parametros where CodParametro=46)AS BIT)

IF(@senAnulado=1)
	Set @Anulados=0
ELSE
	Set @Anulados= null
--//

WHILE @@FETCH_STATUS = 0
BEGIN
	SET @senDeleted = 0

	--insertar en tabla de secuencia sino existe un registro
	--//
	SELECT @NumLastSeq = NumDocumento, @senAnuladoNum = SenAnulado FROM Encabezados_Numeracion 
	WHERE 
	IdEmpresa = @IdEmp AND 
	IdDocumento = @IdDoc AND 
	COALESCE(IdPrefijo,'') = COALESCE(@Pref, '') 

	SET @rowsModified = @@ROWCOUNT

	--elimina el registro si se cambia la variable de esanulados en parametros
	--//
	IF (@rowsModified > 0 AND @senAnuladoNum <> @senAnulado)
	BEGIN
		DELETE FROM Encabezados_Numeracion 
		WHERE 
		IdEmpresa = @IdEmp AND 
		IdDocumento = @IdDoc AND 
		COALESCE(IdPrefijo,'') = COALESCE(@Pref, '') 
		SET @senDeleted = 1
	END
	--//

	--inicializa 
	IF (@rowsModified = 0 OR @senDeleted =1)
	BEGIN
		SELECT @NumLastSeq = COALESCE(MAX(NumDocumento),0)
		FROM Encabezados
		WHERE 
		IdEmpresa = @IdEmp AND
		IdDocumento = @IdDoc AND
		COALESCE(IdPrefijo,'') = COALESCE(@Pref, '') AND
		(@Anulados IS NULL OR EsAnulado = @Anulados)

		INSERT INTO Encabezados_Numeracion (IdEmpresa, IdDocumento, IdPrefijo, NumDocumento, SenAnulado)
		VALUES (@IdEmp, @IdDoc, @Pref, @NumLastSeq, @senAnulado)
	END
	--//

	SET @NumNuevo = @NumActual

	--> INSERTAR
	--//
	IF (@in>0 and @de=0)
	BEGIN
		IF @NumActual = 0
		BEGIN
			SET @NumNuevo = @NumLastSeq + 1
			SET @senSequence = 1
		END

		UPDATE Encabezados SET NumDocumento = @NumNuevo where IdEncab = @IdEncab
	END
	--//

	--> ACTUALIZAR
	--//
	IF (@in>0 and @de>0)
	BEGIN
		IF @NumActual > @NumLastSeq
		BEGIN
			SET @NumNuevo = @NumActual
			SET @senSequence = 1
		END
	END
	--//

	--> ELIMINAR
	--//
	IF (@in=0 and @de>0)
	BEGIN
		IF @NumActual = @NumLastSeq
		BEGIN
			SET @NumNuevo = @NumNuevo - 1
			SET @senSequence = 1
		END
	END
	--//

	IF (@senSequence = 1)
	BEGIN
		UPDATE Encabezados_Numeracion SET NumDocumento = @NumNuevo 
		WHERE 
		IdEmpresa = @IdEmp AND 
		IdDocumento = @IdDoc AND 
		COALESCE(IdPrefijo,'') = COALESCE(@Pref, '')
	END

	FETCH NEXT FROM curNums INTO @IdEncab, @IdEmp , @Pref , @IdDoc , @NumActual
END

CLOSE curNums
DEALLOCATE curNums

END
GO
PRINT N'Altering Procedure [dbo].[ActualizarAudit]...';


GO
IF OBJECT_ID(N'dbo.ActualizarAudit', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.ActualizarAudit AS RETURN 0;');
GO
ALTER PROCEDURE [dbo].[ActualizarAudit]

@Exito INT = 0 output

AS
BEGIN

	declare @rows INT = 0
	declare @batchSize INT = 500
	declare @minutesExpire INT = 1440
	declare @done bit = 0
	declare @lastRunDate DATETIME
	declare @lastRunString nvarchar(20)
	declare @difInMinutes INT

	--Proceso de bloqueo para evitar que se ejecute mas de 1 vez
	--//
	declare @nomProceso varchar(100) = 'ActualizarAudit'

	declare @Lock int
    exec @Lock = sp_getapplock @Resource = @nomProceso,
                               @LockMode = 'Exclusive',
							   @LockTimeout = '5000',
							   @LockOwner = 'Session'
    -- already locked by another process
	if (@Lock < 0)
	begin
		set @Exito = 1
		return;
	end
	--//

	if not exists(select * from Parametros where CodParametro = -30)
		INSERT INTO dbo.Parametros (CodParametro, NomParametro, ValParametro, Descripcion, Grupo, EsActivo, IdTipoControl)
		VALUES (-30, N'Calculo Auditoria', CONVERT(VARCHAR(20), DATEADD(minute ,-1*(@minutesExpire+60), GETDATE()), 120), N'Calculo Auditoria', N'Documentos', 1, 1)

	select @lastRunString =ValParametro from Parametros where CodParametro = -30

	set @lastRunDate = CONVERT(DATETIME, @lastRunString, 120)
	set @difInMinutes = DATEDIFF(minute, @lastRunDate, GETDATE())

	--sale del proceso si no ha pasado mas de @minutesExpire desde la ultima ejecucion
	--//
	if ( @difInMinutes < @minutesExpire)
	begin
		set @Exito = 1
		exec sp_releaseapplock @Resource = @nomProceso,
							   @LockOwner = 'Session'
		return;
	end
	--//

	--Auditoria Encabezados	
	--//
	select @rows = count(*) from dbo.Audit_Encabezados where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Encabezados
		SET AdNomEmpresa=emp.EmpresaNombre,
		AdNomCliente1= cli.Identificacion+'-'+cli.Nombre1+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomCliente1_Dir=CliDir.Direccion,
		AdNomCliente2=cli2.Identificacion+'-'+cli2.Nombre1+' '+COALESCE(cli2.Nombre2,'')+' '+COALESCE(cli2.Apellido1,'')+' '+COALESCE(cli2.Apellido2,''),
		AdNomClienteVend=cliVend.Identificacion+'-'+cliVend.Nombre1+' '+COALESCE(cliVend.Nombre2,'')+' '+COALESCE(cliVend.Apellido1,'')+' '+COALESCE(cliVend.Apellido2,''),
		AdNomMoneda=mon.NomMoneda1,
		AdNomFormaPago= form.NomFormaPago,
		AdNomAutomotor=Autom.Modelo,
		AdNomContacto=con.Nombres,
		AdNomDocumento=doc.NomDocumento,
		Sist_EsProcesado=1,
		AdNomEstado=Estado.NomEstado,
		AdNomClienteProp=cliProp.Identificacion+'-'+cliProp.Nombre1+' '+COALESCE(cliProp.Nombre2,'')+' '+COALESCE(cliProp.Apellido1,'')+' '+COALESCE(cliProp.Apellido2,''),
		AdNomInmueble=inmueble.Direccion,
		AdNomSucursal=sucursal.NomSucursal,
		AdNomMesa=NomMesa,
		AdNomClienteVend2=clivend2.Identificacion+'-'+clivend2.Nombre1+' '+COALESCE(clivend2.Nombre2,'')+' '+COALESCE(clivend2.Apellido1,'')+' '+COALESCE(clivend2.Apellido2,''),
		AdNomEstadoMesa=EstadoMes.NomEstado
		FROM dbo.Audit_Encabezados AS audEnc LEFT JOIN dbo.Clientes as cli 
		ON  audEnc.IdCliente1 = cli.IdCliente LEFT JOIN dbo.Clientes as cli2
		ON  audEnc.IdCliente2 = cli2.IdCliente LEFT JOIN dbo.Clientes as cliVend
		ON  audEnc.IdClienteVend = cliVend.IdCliente LEFT JOIN Empresas as emp
		ON audEnc.IdEmpresa = emp.IdEmpresa LEFT JOIN Clientes_Direcciones as CliDir
		ON audEnc.IdCliente1_IdDir=CliDir.IdClienteDir LEFT JOIN dbo.Monedas AS mon
		ON audEnc.IdMoneda = mon.IdMoneda LEFT JOIN dbo.FormasPago as form
		ON audEnc.IdFormaPago=form.IdFormaPago LEFT JOIN dbo.Reparacion_Automotores as Autom
		ON audEnc.IdAutomotor = Autom.IdAutomotor LEFT JOIN dbo.Clientes_Contactos AS con
		ON audEnc.IdContacto = con.IdContacto INNER JOIN dbo.Documentos as doc
		ON audEnc.IdDocumento=doc.IdDocumento LEFT JOIN dbo.Encabezados_Estados AS Estado
		ON audEnc.IdEstado=Estado.IdEstado LEFT JOIN dbo.Clientes as cliProp
		ON audEnc.IdClienteProp=cliProp.IdCliente LEFT JOIN dbo.PH_Inmuebles inmueble
		ON audEnc.IdInmueble=inmueble.IdInmueble  LEFT JOIN dbo.Sucursales sucursal
		ON audEnc.IdSucursal=sucursal.IdSucursal  LEFT JOIN dbo.Encabezados_Mesas Mesa
		ON audEnc.IdMesa=Mesa.IdMesa LEFT JOIN dbo.Clientes as clivend2
		ON audEnc.IdClienteVend2=clivend2.IdCliente LEFT JOIN dbo.Encabezados_Estados AS EstadoMes
		ON audEnc.IdEstadoMesa=EstadoMes.IdEstado
		where audEnc.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Encabezados Mov
	--//
	select @rows = count(*) from dbo.Audit_Encabezados_Mov where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Encabezados_Mov
		SET AdNomCliente= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomInventario=inv.CodInventario+'-'+inv.NomInventario,
		AdNomBodega= bod.NomBodega,
		AdNomLote=lot.CodLote+'-'+lot.NomLote,
		AdNomUnidad=uni.NomUnidad,
		AdNomCentroCosto=cent.NomCentroCosto,
		AdNomEncabMov2=inv2.CodInventario+'-'+inv2.NomInventario,
		Sist_EsProcesado=1,
		AdNomInmueble=inmueble.Direccion,
		AdNomEmpleado=Emple.Identificacion+'-'+Emple.Nombre1+' '+COALESCE(Emple.Nombre2,'')+' '+COALESCE(Emple.Apellido1,'')+' '+COALESCE(Emple.Apellido2,''),
		AdNomEncabMov3=inv3.CodInventario+'-'+inv3.NomInventario,
		AdNomMoneda=moneda.NomMoneda1,
		AdNomUnidad1=uni1.NomUnidad,
		AdNomVendedor=Vend.Identificacion+'-'+Vend.Nombre1+' '+COALESCE(Vend.Nombre2,'')+' '+COALESCE(Vend.Apellido1,'')+' '+COALESCE(Vend.Apellido2,''),
		AdNomRutaEncMov=ProProc.NomProceso+'-'+CAST(EncaRutPro.Orden AS nvarchar(20))+' '+'('+CAST(EncaRutPro.IdEncabMov AS nvarchar(20))+')'
		FROM dbo.Audit_Encabezados_Mov AS audEncMov LEFT JOIN dbo.Clientes as cli 
		ON audEncMov.IdCliente = cli.IdCliente LEFT JOIN dbo.Inventarios as inv
		ON audEncMov.IdInventario=inv.IdInventario LEFT JOIN dbo.Inventarios_Bodegas AS bod
		ON audEncMov.IdBodega = bod.IdBodega LEFT JOIN dbo.Inventarios_Lotes as lot
		ON audEncMov.IdLote=lot.IdLote LEFT JOIN dbo.Inventarios_Unidades as uni
		ON audEncMov.IdUnidad = uni.IdUnidad LEFT JOIN dbo.CentroCostos AS cent
		ON audEncMov.IdCentroCosto = cent.IdCentroCosto LEFT JOIN dbo.Encabezados_Mov  AS encMov
		ON audEncMov.IdEncabMov2=encMov.IdEncabMov LEFT JOIN dbo.Inventarios as inv2
		ON audEncMov.IdInventario=inv2.IdInventario  LEFT JOIN dbo.PH_Inmuebles inmueble
		ON audEncMov.IdInmueble=inmueble.IdInmueble   LEFT JOIN dbo.Clientes as Emple
		ON audEncMov.IdEmpleado=Emple.IdCliente LEFT JOIN dbo.Encabezados_Mov  AS encMov3
		ON audEncMov.IdEncabMov3=encMov.IdEncabMov LEFT JOIN dbo.Inventarios as inv3
		ON audEncMov.IdInventario=inv3.IdInventario LEFT JOIN dbo.Monedas moneda
		ON audEncMov.IdMoneda=moneda.IdMoneda LEFT JOIN dbo.Inventarios_Unidades as uni1
		ON audEncMov.IdUnidad1 = uni1.IdUnidad LEFT JOIN dbo.Clientes as Vend
		ON audEncMov.IdVendedor=Vend.IdCliente LEFT JOIN dbo.Encabezados_Mov_RutasProduccion as EncaRutPro
		ON audEncMov.IdRutaEncMov=EncaRutPro.IdRutaEncMov LEFT JOIN dbo.Produccion_Procesos as ProProc
		ON EncaRutPro.IdProceso=ProProc.IdProceso
		where audEncMov.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Encabezados Cont
	--//
	select @rows = count(*) from dbo.Audit_Encabezados_Cont where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Encabezados_Cont
		SET AdNomCliente= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomCuenta=cuen.CodCuenta+'-'+cuen.NomCuenta,
		AdNomClienteBanco=cli2.Identificacion+'-'+cli2.Nombre1+' '+COALESCE(cli2.Nombre2,'')+' '+COALESCE(cli2.Apellido1,'')+' '+COALESCE(cli2.Apellido2,''),
		AdNomCentroCosto=cent.NomCentroCosto,
		AdNomAbonaDoc=abonaDoc.Descripcion,
		AdNomAbonaCheque=abonaCheq.Descripcion,
		Sist_EsProcesado=1,
		AdNomEmpleado=Emple.Identificacion+'-'+Emple.Nombre1+' '+COALESCE(Emple.Nombre2,'')+' '+COALESCE(Emple.Apellido1,'')+' '+COALESCE(Emple.Apellido2,''),
		AdNomInmueble=inmueble.Direccion,
		AdNomMoneda=moneda.NomMoneda1,
		AdNomAbonaDocDet=abonaDocDet.Descripcion
		FROM dbo.Audit_Encabezados_Cont AS audEncCont LEFT JOIN dbo.Clientes as cli 
		ON audEncCont.IdCliente = cli.IdCliente LEFT JOIN dbo.Cuentas as cuen
		ON audEncCont.IdCuenta= cuen.IdCuenta LEFT JOIN dbo.Clientes as cli2
		ON audEncCont.IdClienteBanco = cli2.IdCliente LEFT JOIN dbo.CentroCostos AS cent
		ON audEncCont.IdCentroCosto = cent.IdCentroCosto LEFT JOIN VIdAbonaDoc_02 AS abonaDoc
		ON audEncCont.IdAbonaDoc=abonaDoc.IdEncabCont LEFT JOIN dbo.VIdAbonaCheque_02 AS abonaCheq
		ON audEncCont.IdAbonaCheque=abonaCheq.IdEncabCont  LEFT JOIN dbo.Clientes as Emple
		ON audEncCont.IdEmpleado=Emple.IdCliente  LEFT JOIN dbo.PH_Inmuebles inmueble
		ON audEncCont.IdInmueble=inmueble.IdInmueble  LEFT JOIN dbo.Monedas moneda
		ON audEncCont.IdMoneda=moneda.IdMoneda LEFT JOIN dbo.VIdAbonaDoc_02 AS abonaDocDet
		ON audEncCont.IdAbonaDocDet=abonaDocDet.IdEncabCont
		where audEncCont.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
	
	--AuditoriA Clientes
	--//
	select @rows = count(*) from dbo.Audit_Clientes where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Clientes
		SET AdNomTipoIdent=NomTipoIdent,AdNomCiudad=NomCiudad,AdNomTipoRegimen=NomTipoRegimen,
		AdNomVendedor=cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomAgrup1=NomAgrup1,AdNomAgrup2=NomAgrup2,AdNomAgrup3=NomAgrup3,AdNomZona1=NomZona1,AdNomZona2=NomZona2,AdNomZona3=NomZona3,AdNomLista=NomLista,AdNomPais=NomPais1,
		Sist_EsProcesado=1,AdNomActividad=NomActividad,AdNomRiesgo=NomRiesgo,AdNomCuentaCree=NomCuenta
		from dbo.Audit_Clientes AuditCli left join dbo.Clientes_TiposIdent Ident
		on AuditCli.IdTipoIdent=Ident.IdTipoIdent left join dbo.Ciudades Ciu
		on AuditCli.IdCiudad=Ciu.IdCiudad left join dbo.Clientes_TiposRegimen tipoReg
		on AuditCli.IdTipoRegimen=tipoReg.IdTipoRegimen left join dbo.Clientes cli
		on AuditCli.IdCliVendedor=cli.IdCliente left join dbo.Clientes_Agrup1 agrup1
		on AuditCli.IdAgrup1=agrup1.IdAgrup1 left join dbo.Clientes_Agrup2 agrup2
		on AuditCli.IdAgrup2=agrup2.IdAgrup2 left join dbo.Clientes_Agrup3 agrup3
		on AuditCli.IdAgrup3=agrup3.IdAgrup3 left join dbo.Clientes_Zona1 Zona1
		on AuditCli.IdZona1=Zona1.IdZona1 left join dbo.Clientes_Zona2 Zona2
		on AuditCli.IdZona2=Zona2.IdZona2 left join dbo.Clientes_Zona3 Zona3
		on AuditCli.IdZona3=Zona3.IdZona3 left join dbo.Inventarios_Listas List
		on AuditCli.IdLista=List.IdLista left join dbo.Paises Pais
		on AuditCli.IdPais=Pais.IdPais left join Empresas_ActividadesEcon Act
		on AuditCli.IdActividad=Act.IdActividad left join dbo.IFRS_Riesgos_Deterioro Riesgo
		on AuditCli.IdRiesgo=Riesgo.IdRiesgo left join dbo.Cuentas cuenta
		on AuditCli.IdCuentaCree=cuenta.IdCuenta
		where AuditCli.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
	
	--Auditoria Productos
	--//
	select @rows = count(*) from dbo.Audit_Inventarios where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Inventarios
		SET AdNomUnidad=unidad.NomUnidad,AdNomAgrup1=agrup1.NomAgrup1,AdNomAgrup2=agrup2.NomAgrup2,AdNomContab=NomContab,
		AdNomTipoInv=NomTipoInven,AdNomContCosto=NomContCosto,
		Sist_EsProcesado=1,AdNomRecursoPOS=Recurs.Descripcion,AdNomClasifImpto=Clasif.NomClasifImpto,
		AdNomUnidad1=unidad1.NomUnidad,AdNomProdAgrup1=ProAgp1.NomAgrup1,AdNomProdAgrup2=ProAgp2.NomAgrup2
		from dbo.Audit_Inventarios AuditInv left join dbo.Inventarios_Unidades unidad
		on AuditInv.IdUnidad=unidad.IdUnidad left join dbo.Inventarios_Agrup1 agrup1
		on AuditInv.IdAgrup1=agrup1.IdAgrup1 left join dbo.Inventarios_Agrup2 agrup2
		on AuditInv.IdAgrup2=agrup2.IdAgrup2 left join dbo.Contabilizaciones contab
		on AuditInv.IdContab=contab.IdContab left join  dbo.Inventarios_Tipos invTipo
		on AuditInv.IdTipoInv=invTipo.IdInvenTipo left join  dbo.Contabilizaciones_Costos conCosto
		on AuditInv.IdContCosto=conCosto.IdContCosto left join dbo.Inventarios_DocRecursos  Recurs
		on AuditInv.IdRecursoPOS=Recurs.IdRecurso  left join dbo.Inventarios_ClasifImpto  Clasif
		on AuditInv.IdClasifImpto=Clasif.IdClasifImpto left join dbo.Inventarios_Unidades unidad1
		on AuditInv.IdUnidad1=unidad1.IdUnidad left join dbo.Produccion_Agrup1 ProAgp1
		on AuditInv.IdProdAgrup1=ProAgp1.IdAgrup1 left join dbo.Produccion_Agrup2 ProAgp2
		on AuditInv.IdProdAgrup2=ProAgp2.IdAgrup2
		where AuditInv.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Cuentas
	--//
	select @rows = count(*) from dbo.Audit_Cuentas where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Cuentas
		SET AdNomCuentaTipo=NomCuentaTipo,AdNomClasif=NomClasif,AdNomGrupoCuenta=NomGrupoCuenta,AdNomTipoPuc=NomTipoPuc,
		Sist_EsProcesado=1
		from dbo.Audit_Cuentas AuditCuent left join dbo.Cuentas_Tipos cuenTipo
		on AuditCuent.IdCuentaTipo=cuenTipo.IdCuentaTipo left join dbo.Cuentas_Clasificacion clasif
		on AuditCuent.IdClasif=clasif.IdClasif left join dbo.Cuentas_Grupos grupo
		on AuditCuent.IdGrupoCuenta=grupo.IdGrupoCuenta left join dbo.Cuentas_TiposPuc tipoPuc
		on AuditCuent.IdTipoPuc=tipoPuc.IdTipoPuc
		where AuditCuent.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
		
	--Auditoria Prospectos
	--//
	select @rows = count(*) from dbo.Audit_ClientesProspectos where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_ClientesProspectos
		set AdNomcliente1= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomCiudad=ci.NomCiudad, AdNomEstado=cliprosest.NomEstado, AdNomGrupo=cliprosgrup.NomGrupo, AdNomMedio=cliprosmedios.NomMedio,AdNomProducto=cliprospro.NomProducto,
		AdNomClienteConv=cliconv.Identificacion+'-'+cliconv.Nombre1+' '+COALESCE(cliconv.Nombre2,'')+' '+COALESCE(cliconv.Apellido1,'')+' '+COALESCE(cliconv.Apellido2,''),
		Sist_EsProcesado=1,AdNomUsuario=Usu.NomUsuario,AdNomProductoComp=propComp.NomProductoComp,
		AdNomcliente2 = cli2.IdCliente
		from dbo.Audit_ClientesProspectos AuditPros left join dbo.Clientes cli
		on AuditPros.IdCliente1=cli.IdCliente left join dbo.Ciudades ci
		on AuditPros.IdCiudad=ci.IdCiudad left join dbo.Clientes_Prospectos_Estados cliprosest
		on AuditPros.IdEstado=cliprosest.IdEstado left join dbo.Clientes_Prospectos_Grupos cliprosgrup
		on AuditPros.IdGrupo=cliprosgrup.IdGrupo left join dbo.Clientes_Prospectos_Medios cliprosmedios
		on AuditPros.IdMedio=cliprosmedios.IdMedio left join dbo.Clientes_Prospectos_Productos cliprospro
		on AuditPros.IdProducto=cliprospro.IdProducto left join dbo.Clientes cliconv
		on AuditPros.IdClienteConv=cliconv.IdCliente left join dbo.Usuarios Usu
		on AuditPros.IdUsuario=Usu.IdUsuario left join dbo.Clientes_Prospectos_Productos_Comp propComp
		on AuditPros.IdProductoComp=propComp.IdProductoComp left join dbo.Clientes cli2
		on AuditPros.IdCliente2=cli2.IdCliente
		where AuditPros.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Auditoria Automotores
	--//
	select @rows = count(*) from dbo.Audit_Automotores where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Automotores
		SET AdNomMarca=NomMarca,AdNomAgrup=NomAgrup,AdNomUnidad=NomUnidad,AdNomServicio=NomInventario,
		AdNomCliente= cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		Sist_EsProcesado=1
		from [dbo].[Audit_Automotores] auditAut left join [dbo].[Reparacion_Marcas] Marca
		on auditAut.IdMarca=Marca.IdMarca left join [dbo].[Reparacion_Automotores_Agrup] Agrup
		on auditAut.IdAgrup=Agrup.IdAgrup left join [dbo].[Inventarios_Unidades] Uni
		on auditAut.IdUnidad=Uni.IdUnidad left join [dbo].[Inventarios] Inv
		on auditAut.IdServicio=Inv.IdInventario left join dbo.Clientes cli
		on auditAut.IdCliente=cli.IdCliente
		where auditAut.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

	--Mantenimientos Registros
	--//
	select @rows = count(*) from dbo.Audit_Mantenimientos_Registros where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Mantenimientos_Registros
		SET AdNomTipoMant=NomTipoMant,AdNomAutomotor=NomAutomotor,AdNomUnidad=NomUnidad,
		Sist_EsProcesado=1
		from [dbo].[Audit_Mantenimientos_Registros] AuditReg left join  [dbo].[Reparacion_Automotores_Mant_Tipos] tipo
		on AuditReg.IdTipoMant=tipo.IdTipoMant left join [dbo].[Reparacion_Automotores] autom
		on AuditReg.IdAutomotor=autom.IdAutomotor left join [dbo].[Inventarios_Unidades] Uni
		on AuditReg.IdUnidad=Uni.IdUnidad
		where AuditReg.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//
	
	--Auditoria Tickets
	--//
	select @rows = count(*) from dbo.Audit_Tickets where Sist_EsProcesado=0
	set @done = 0
	while (@done = 0 AND @rows > 0)
	begin
		UPDATE TOP (@batchSize) dbo.Audit_Tickets
		SET AdNomCliente=cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,''),
		AdNomAgrup1=agrup1.NomAgrup1,AdNomAgrup2=agrup2.NomAgrup2, AdNomEstado=NomEstado,
		AdNomResponsable=cli2.Identificacion+'-'+cli2.Nombre1+' '+COALESCE(cli2.Nombre2,'')+' '+COALESCE(cli2.Apellido1,'')+' '+COALESCE(cli2.Apellido2,''),
		Sist_EsProcesado=1
		from [dbo].[Audit_Tickets] as audiTicket inner join 
		Clientes as cli on audiTicket.IdCliente=cli.IdCliente left join
		[dbo].[Tickets_Agrup1] as agrup1 on audiTicket.IdAgrup1=agrup1.IdAgrup1 left join
		[dbo].[Tickets_Agrup2] as agrup2 on audiTicket.IdAgrup2=agrup2.IdAgrup2 inner join
		[dbo].[Tickets_Estados] as Estado on audiTicket.IdEstado= Estado.IdEstado inner join 
		Clientes as cli2 on audiTicket.IdResponsable=cli2.IdCliente
		where audiTicket.Sist_EsProcesado=0

		if @@rowcount < @batchSize SET @done = 1;
	end
	--//

  --Actualizar con la fecha del final de la actualizacion
  --//
  update Parametros set ValParametro = CONVERT(VARCHAR(20), GETDATE(), 120) where CodParametro = -30
  --//
	
  exec sp_releaseapplock @Resource = @nomProceso,
						 @LockOwner = 'Session'

  IF @@error <> 0 GOTO ERR_HANDLER

    set @Exito = 1
    return
    
ERR_HANDLER:
	set @Exito = 0
	exec sp_releaseapplock @Resource = @nomProceso,
						   @LockOwner = 'Session'

END
GO
PRINT N'Altering Procedure [dbo].[GetLibroAuxiliar]...';


GO

IF OBJECT_ID(N'dbo.GetLibroAuxiliar', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.GetLibroAuxiliar AS RETURN 0;');
GO
ALTER PROCEDURE [dbo].[GetLibroAuxiliar]
	@FechaIni NVARCHAR(10) = '',
	@FechaFin NVARCHAR(10) = '',
	@CuentaIni NVARCHAR(100)='',
	@CuentaFin NVARCHAR(100)='',
    @IdEmpresas NVARCHAR(1000) = '',
    @IdCliente INT = NULL,
    @SenAgrupCC BIT = 0,
    @IdCentroCosto INT = NULL,
    @EsNotGAAP BIT = NULL,
    @EsNotIFRS BIT = NULL,
	@EsAgrupIFRS BIT = NULL,
	@IdSucursal INT = NULL	

    
AS
BEGIN

DECLARE

@FechaIniT DATETIME,
@FechaFinT DATETIME,
@FechaIniT2 DATETIME,
@CuenIni NVARCHAR(100)='',
@CuenFin NVARCHAR(100)='',
@IdEmp NVARCHAR(1000) = '',
@IdCli INT = NULL,
@AgrupCC BIT = 0,
@IdCentroC INT = NULL,
@NotGAAP BIT = NULL,
@NotIFRS BIT = NULL,
@AgrupIFRS BIT = NULL,
@IdTipoPUC INT,
@IdSuc INT = NULL


SET NOCOUNT ON;	

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET @FechaIniT = CAST(CONVERT(DATETIME, @FechaIni, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)
SET @FechaIniT2 = DATEADD(DAY,-1,@FechaIniT)
SET @CuenIni=@CuentaIni
SET @CuenFin =@CuentaFin
SET @IdEmp =@IdEmpresas
SET @IdCli =@IdCliente
SET @AgrupCC=@SenAgrupCC
SET @IdCentroC=@IdCentroCosto
SET @NotGAAP=@EsNotGAAP
SET @NotIFRS=@NotIFRS
SET @AgrupIFRS =@AgrupIFRS
SET @IdSuc =@IdSucursal


SELECT @IdTipoPUC = ValParametro FROM PARAMETROS WHERE CodParametro = 1
IF @IdTipoPUC IS NULL
	SET @IdTipoPUC = 1

;WITH tempCuentas(CodCuenta,NomCuentaBase)
		as(
			select CodCuenta,
			MAX(NomCuenta)NomCuenta
			from
			(
			select CodCuenta,NomCuenta
			from cuentas
			where idtipoPuc=@IdTipoPUC
			)as q1
			group by CodCuenta
		)

SELECT
0 AS Orden,
YEAR(@FechaIniT2) AS Anno,
MONTH(@FechaIniT2) AS Mess,
CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0 then coalesce(CodCuentaIFRS,VSaldo1.CodCuenta) else VSaldo1.CodCuenta END AS CodCuenta,
CASE WHEN @EsAgrupIFRS=1 then VSaldo1.CodCuenta else CodCuentaIFRS END AS CodCuenta2,
Cta.NomCuenta,
CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0 then coalesce(cta.CodCuentaIFRS,VSaldo1.CodCuenta) + '-' + coalesce(cta.NomCuentaIFRS,Cta.NomCuenta)  else VSaldo1.CodCuenta + '-' + Cta.NomCuenta END AS DescripCuenta,
VSaldo1.IdCliente,
LTRIM(RTRIM(Cli.Apellidos + ' ' + Cli.Nombres)) AS NomTercero,
'SALDO INICIAL' AS MesLetras,
@FechaIniT2 AS Fecha,
VSaldo1.Debito AS Debito,
VSaldo1.Credito AS Credito,
VSaldo1.DebitoExt AS DebitoExt,
VSaldo1.CreditoExt AS CreditoExt,
'SALDO INICIAL' AS Nota,
'' AS DocRef, 
'' AS Doc,
'' AS Doc_FC, 
0 AS IdEncabCont,
Cta_C.Factor,
VSaldo1.IdEmpresa,
'' AS CodDocumento,
Cta.IdCuentaTipo,
NULL AS IdInventario,
0 AS IdAbonaDoc,
NULL AS IdAbonaDif,
Emp.EmpresaCodigo,
Cta_T.IdClase,
VSaldo1.IdCentroCosto,
CC.NomCentroCosto,
0 AS IdDocumento,
0 AS IdEncab,
null as RetencionBase,
null as RetencionPorc,
null as RetencionBaseCuenta,
cli.Identificacion,
null as NomEmpleado,
ciud.NomCiudad,
DebitoGAAP,
CreditoGAAP,
DebitoIFRS,
CreditoIFRS,
NULL AS CodCtaUgpp,
NULL AS NomCtaUgpp,
NULL AS NumDocumento,
NULL AS NomDocumento,
NULL AS IdSucursal
FROM
(
	SELECT
	Enc.IdEmpresa,
	Cta.IdCuenta, 
	Cta.CodCuenta,
	CASE WHEN @IdCli IS NULL THEN NULL ELSE Enc_C.IdCliente END AS IdCliente, 
	SUM(CASE WHEN Factor = 1 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS Debito,
	SUM(CASE WHEN Factor = - 1 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS Credito,

	SUM(CASE WHEN Factor = 1 THEN ([DebitoExt] - [CreditoExt]) * [Factor] ELSE 0 END) AS DebitoExt,
	SUM(CASE WHEN Factor = - 1 THEN ([DebitoExt] - [CreditoExt]) * [Factor] ELSE 0 END) AS CreditoExt,

	SUM(CASE WHEN Factor = 1 and Enc_C.EsNotGAAP=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS DebitoGAAP,
	SUM(CASE WHEN Factor = - 1 and Enc_C.EsNotGAAP=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS CreditoGAAP,

	SUM(CASE WHEN Factor = 1 and Enc_C.EsIFRS=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS DebitoIFRS,
	SUM(CASE WHEN Factor = - 1 and Enc_C.EsIFRS=0 THEN ([Debito] - [Credito]) * [Factor] ELSE 0 END) AS CreditoIFRS,
	--Enc_C.IdInventario,
	--Enc_C.IdAbonaDif,
	CASE WHEN @AgrupCC = 1 THEN Enc_C.IdCentroCosto ELSE NULL END AS IdCentroCosto
	FROM Encabezados_Cont AS Enc_C INNER JOIN Encabezados AS Enc ON Enc_C.IdEncab = Enc.IdEncab INNER JOIN Cuentas AS Cta ON Enc_C.IdCuenta = Cta.IdCuenta INNER JOIN Cuentas_Tipos AS Cta_T ON Cta.IdCuentaTipo = Cta_T.IdCuentaTipo INNER JOIN Cuentas_Clases AS Cta_C ON Cta_T.IdClase = Cta_C.IdClase
	WHERE
	Enc.Fecha < @FechaIniT AND
	Cta.CodCuenta Between @CuenIni And @CuenFin AND
	Debito - Credito <> 0 AND
	Enc.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND
	Enc.EsAnulado=0 and 
    (@NotGAAP is null OR Enc_C.EsNotGAAP =@NotGAAP) AND
    (@EsNotIFRS is null OR Enc_C.EsIFRS =@EsNotIFRS) AND
	(@IdSuc is null OR Enc.IdSucursal = @IdSuc)
	GROUP BY 
	Cta.IdCuenta, 
	CASE WHEN @IdCli IS NULL THEN NULL ELSE Enc_C.IdCliente END, 
	Cta.CodCuenta, 
	Enc.IdEmpresa, 
	--Enc_C.IdInventario, 
	--Enc_C.IdAbonaDif,
	CASE WHEN @AgrupCC = 1 THEN Enc_C.IdCentroCosto ELSE NULL END
)
VSaldo1 INNER JOIN
Empresas AS Emp ON VSaldo1.IdEmpresa = Emp.IdEmpresa INNER JOIN 
Cuentas AS Cta ON VSaldo1.IdCuenta = Cta.IdCuenta LEFT OUTER JOIN
VClientes2 AS Cli ON VSaldo1.IdCliente = Cli.IdCliente INNER JOIN
Cuentas_Tipos AS Cta_T ON Cta.IdCuentaTipo = Cta_T.IdCuentaTipo INNER JOIN
Cuentas_Clases AS Cta_C ON Cta_T.IdClase = Cta_C.IdClase LEFT OUTER JOIN
dbo.CentroCostos AS CC ON VSaldo1.IdCentroCosto = CC.IdCentroCosto LEFT OUTER JOIN
dbo.Ciudades as ciud ON ciud.IdCiudad=cli.idciudad
WHERE 

(@IdCli is null OR VSaldo1.IdCliente =@IdCli) AND
(@IdCentroC is null OR VSaldo1.IdCentroCosto =@IdCentroC) 

--COALESCE(VSaldo1.IdCliente,'') = COALESCE(@IdCli,COALESCE(VSaldo1.IdCliente,'')) AND
--COALESCE(VSaldo1.IdCentroCosto,'') = COALESCE(@IdCentroC,COALESCE(VSaldo1.IdCentroCosto,''))


UNION ALL

select Orden, Anno, Mess,
u.CodCuenta,
CodCuenta2,
NomCuenta,
DescripCuenta,
IdCliente, NomTercero, MesLetras, Fecha, Debito, Credito, DebitoExt, CreditoExt, Nota, DocRef, Doc, Doc_FC, IdEncabCont, Factor, IdEmpresa, CodDocumento, IdCuentaTipo, IdInventario, IdAbonaDoc, IdAbonaDif, EmpresaCodigo, IdClase, IdCentroCosto, NomCentroCosto,IdDocumento,IdEncab,
RetencionBase,RetencionPorc,RetencionBase as RetencionBaseCuenta,Identificacion,NomEmpleado,NomCiudad,
DebitoGAAP,
CreditoGAAP,
DebitoIFRS,
CreditoIFRS,
isnull(Cta3.CodCuenta+', ' ,'')+isnull(Cta4.CodCuenta,'')  as CodCtaUgpp,
isnull(Cta3.NomCuentaBase+', ' ,'')+isnull(Cta4.NomCuentaBase,'')  as NomCtaUgpp,
NumDocumento,NomDocumento,Sucursal
from
(
	SELECT Orden, Anno, Mess, 
		CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0 then coalesce(CodCuentaIFRS,CodCuenta) else CodCuenta END AS CodCuenta,
		CASE WHEN @EsAgrupIFRS=1 then CodCuenta else  CodCuentaIFRS END AS CodCuenta2,
		NomCuenta, 
		CASE WHEN @EsAgrupIFRS=1 and len(CodCuentaIFRS)>0  then coalesce(CodCuentaIFRS,CodCuenta) + '-' + coalesce(NomCuentaIFRS,NomCuenta)  else CodCuenta + '-' + NomCuenta END AS DescripCuenta,
		IdCliente, NomTercero, MesLetras, Fecha, Debito, Credito, DebitoExt, CreditoExt, Nota, DocRef, Doc, Doc_FC, IdEncabCont, Factor, IdEmpresa, CodDocumento, IdCuentaTipo, IdInventario, IdAbonaDoc, IdAbonaDif, EmpresaCodigo, IdClase, IdCentroCosto, NomCentroCosto,IdDocumento,IdEncab,
		case when coalesce(RetencionPorc,0)> 0 then abs(Debito-Credito)*100/RetencionPorc else 0 end RetencionBase,RetencionPorc,RetencionBase as RetencionBaseCuenta,Identificacion,NomEmpleado,NomCiudad,
		case when VMov1.EsNotGAAP=0 THEN  Debito else 0 end DebitoGAAP,
		case when VMov1.EsNotGAAP=0 THEN  Credito else 0 end  CreditoGAAP,
		case when VMov1.EsIFRS=0 THEN  Debito else 0 end DebitoIFRS,
		case when VMov1.EsIFRS=0 THEN  Credito else 0 end CreditoIFRS,
		NumDocumento,NomDocumento,Sucursal
	FROM vLibroAuxiliar_Mov VMov1
	WHERE
	VMov1.Fecha>=@FechaIniT AND VMov1.Fecha<=@FechaFinT AND
	VMov1.CodCuenta Between @CuenIni And @CuenFin AND
	VMov1.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND 

	(@IdCli is null OR VMov1.IdCliente =@IdCli) AND
	(@IdCentroC is null OR VMov1.IdCentroCosto =@IdCentroC) AND
	(@NotGAAP is null OR VMov1.EsNotGAAP =@NotGAAP) AND
	(@EsNotIFRS is null OR VMov1.EsIFRS =@EsNotIFRS) AND	
	(@IdSucursal is null OR VMov1.IdSucursal = @IdSuc) 
)as u
LEFT OUTER JOIN
	tempCuentas AS Cta3 ON SUBSTRING(u.CodCuenta,1,4) = Cta3.CodCuenta LEFT JOIN
	tempCuentas AS Cta4 ON SUBSTRING(u.CodCuenta,1,6) = Cta4.CodCuenta 

ORDER BY CodCuenta, Orden, Fecha

END
GO
PRINT N'Altering Procedure [dbo].[UsuariosRolesPerteneceSelect]...';


GO

IF OBJECT_ID(N'dbo.UsuariosRolesPerteneceSelect', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.UsuariosRolesPerteneceSelect AS RETURN 0;');
GO
ALTER PROCEDURE [dbo].[UsuariosRolesPerteneceSelect]
	@IdUsuarios nvarchar(500) = '',
	@Exito INT = 0 output
As
BEGIN
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT IdUsuario,IdRol FROM Usuarios_RolesPertenece us
	WHERE
	us.IdUsuario IN(select number from dbo.iter$simple_intlist_to_tbl(@IdUsuarios))

   
    IF @@error <> 0 GOTO ERR_HANDLER
    
    SET @Exito = 1
    RETURN
    
ERR_HANDLER:
  SET @Exito = 0
       
END
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)]					
	--------------------------------------------------------------------------------------
	*/
GO

GO
PRINT N'Checking existing data against newly created constraints';


--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 947)
BEGIN
INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (357, 947, 'Mejora autonumerico de encabezados')
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
