--Hash:921626607CE0F78D2E21E0DE683CDFAE

-- 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 = 949)
BEGIN
    PRINT N'Scripts_949.sql: la version 949 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 < 949
)
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)

GO
/*
 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'Rename refactoring operation with key d2dcecef-eca7-4d8f-a308-7d6a7781eb56 is skipped, element [dbo].[Impuestos_SaludablesRangos].[Id] (SqlSimpleColumn) will not be renamed to IdImptoSaludable';


GO
PRINT N'Rename refactoring operation with key 46e4add2-2fa7-4b7e-b5ef-b56d0e6a9f2d is skipped, element [dbo].[Impuestos_SaludablesValores].[IdImptoSaludable] (SqlSimpleColumn) will not be renamed to IdValor';


GO
PRINT N'Dropping Index [dbo].[VInventarios_CostoPromedio_00].[IX_CostoProm]...';


GO
IF OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00', N'V') IS NOT NULL
AND EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_CostoProm' AND object_id = OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00'))
BEGIN
DROP INDEX [IX_CostoProm]
    ON [dbo].[VInventarios_CostoPromedio_00];
END


GO
PRINT N'Removing schema binding from [dbo].[VInventarios_CostoPromedio_00]...';


GO
IF OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VInventarios_CostoPromedio_00 AS SELECT 1 AS Dummy;');
GO
ALTER VIEW [dbo].[VInventarios_CostoPromedio_00]
AS
SELECT EncMov.IdInventario,
       EncMovCP.Orden,
       EncMov.IdEncabMov,
       Enc.IdEncab,
       EncMovCP.CostoProm,
       EncMovCP.CantAcum,
       EncMovCP.CostoAcum
FROM   dbo.Encabezados AS Enc
       INNER JOIN
       dbo.Encabezados_Mov AS EncMov
       ON Enc.IdEncab = EncMov.IdEncab
       INNER JOIN
       dbo.Encabezados_Mov_CostoProm AS EncMovCP
       ON EncMov.IdEncabMov = EncMovCP.IdEncabMov
WHERE  (NOT (EncMovCP.Orden IS NULL));


GO
PRINT N'Altering Table [dbo].[Encabezados_Mov]...';


GO
IF COL_LENGTH(N'dbo.Encabezados_Mov', N'ImptoSaludableValor') IS NULL
BEGIN
ALTER TABLE [dbo].[Encabezados_Mov]
    ADD [ImptoSaludableValor] NUMERIC (28, 6) DEFAULT 0 NOT NULL;
END

IF COL_LENGTH(N'dbo.Encabezados_Mov', N'ImptoSaludableTipo') IS NULL
BEGIN
ALTER TABLE [dbo].[Encabezados_Mov]
    ADD [ImptoSaludableTipo] SMALLINT DEFAULT 0 NOT NULL;
END


GO
PRINT N'Altering Table [dbo].[Inventarios]...';


GO
IF COL_LENGTH(N'dbo.Inventarios', N'ImptoSaludableValor') IS NULL
BEGIN
ALTER TABLE [dbo].[Inventarios]
    ADD [ImptoSaludableValor] NUMERIC (28, 6) DEFAULT 0 NOT NULL;
END

IF COL_LENGTH(N'dbo.Inventarios', N'ImptoSaludableTipo') IS NULL
BEGIN
ALTER TABLE [dbo].[Inventarios]
    ADD [ImptoSaludableTipo] SMALLINT DEFAULT 0 NOT NULL;
END

IF COL_LENGTH(N'dbo.Inventarios', N'ImptoSaludableEs') IS NULL
BEGIN
ALTER TABLE [dbo].[Inventarios]
    ADD [ImptoSaludableEs] BIT DEFAULT 0 NOT NULL;
END

IF COL_LENGTH(N'dbo.Inventarios', N'ImptoSaludableTotal') IS NULL
BEGIN
ALTER TABLE [dbo].[Inventarios]
    ADD [ImptoSaludableTotal] NUMERIC (28, 6) DEFAULT 0 NOT NULL;
END

IF COL_LENGTH(N'dbo.Inventarios', N'ImptoSaludableParte') IS NULL
BEGIN
ALTER TABLE [dbo].[Inventarios]
    ADD [ImptoSaludableParte] NUMERIC (28, 6) DEFAULT 0 NOT NULL;
END


GO
PRINT N'Creating Table [dbo].[Impuestos_SaludablesValores]...';


GO
IF OBJECT_ID(N'dbo.Impuestos_SaludablesValores', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[Impuestos_SaludablesValores] (
    [IdValor]  INT             NOT NULL,
    [IdTipo]   SMALLINT        NOT NULL,
    [RangoIni] NUMERIC (28, 6) NOT NULL,
    [RangoFin] NUMERIC (28, 6) NOT NULL,
    [FechaIni] DATE            NOT NULL,
    [FechaFin] DATE            NOT NULL,
    [Valor]    NUMERIC (28, 6) NOT NULL,
    [EsActivo] BIT             NOT NULL,
    PRIMARY KEY CLUSTERED ([IdValor] ASC)
);
END


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


GO
IF OBJECT_ID(N'dbo.Impuestos_SaludablesValores', 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.Impuestos_SaludablesValores')
      AND c.name = N'EsActivo'
)
BEGIN
ALTER TABLE [dbo].[Impuestos_SaludablesValores]
    ADD DEFAULT 1 FOR [EsActivo];
END


GO
PRINT N'Refreshing View [dbo].[VClientesPuntos]...';


GO
IF OBJECT_ID(N'dbo.VClientesPuntos', N'V') IS NOT NULL
    EXECUTE sp_refreshsqlmodule N'[dbo].[VClientesPuntos]';


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


GO
IF OBJECT_ID(N'dbo.VContab_EncMov', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VContab_EncMov AS SELECT 1 AS Dummy;');
GO
ALTER VIEW dbo.VContab_EncMov
AS
SELECT        EncMov.IdEncabMov, EncMov.IdEncab, EncMov.IdInventario, EncMov.IdBodega, EncMov.IdLote, EncMov.Cantidad, EncMov.ValorTRM, 
                         EncMov.Cantidad * EncMov.FactorCantidad AS CantConFactor, EncMov.CantidadFisica, EncMov.IdUnidad, EncMov.FactorCantidad, EncMov.FactorMovim, 
                         EncMov.ValorUnitario, EncMov.ValorUnitarioExt, EncMov.ValorIva, EncMov.TipoImptoConsumo, COALESCE (EncMov.ValorImptoConsumo, 0) AS ValorImptoConsumo, 
                         EncMov.TotalMov, EncMov.IdCliente, EncMov.Vence, EncMov.IdCentroCosto, EncMov.Dcto, EncMov.EsIvaAlCosto, 
                         EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDctoUnit, (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100)
                         AS SubTotal, EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario AS SubTotalSinDcto, 
                         EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDcto, 
                         (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * EncMov.ValorIva / 100 AS SubIVA, 
                         CASE WHEN EncMov.TipoImptoConsumo = 0 THEN 1 ELSE 0 END AS FactorImpoConsPorc, 
                         CASE WHEN EncMov.TipoImptoConsumo = 1 THEN 1 ELSE 0 END AS FactorImpoConsValor, EncMov.ValorTRM AS Expr1, EncMov.IdMoneda, 
                         CASE WHEN EncMov.ValorIva = 0 THEN (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) ELSE 0 END AS SubTotExento,
                         CASE WHEN EncMov.ValorIva > 0 THEN (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) ELSE 0 END AS SubTotGravado,
                         ValorPuntos,
                         (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * EncMov.FactorImpuesto AS SubTotal2,
                         EncMov.ImptoSaludableTipo, 
                         EncMov.ImptoSaludableValor, 
                         CASE WHEN EncMov.ImptoSaludableTipo = 0 THEN 1 ELSE 0 END AS ImptoSaludableFactorPorc, 
                         CASE WHEN EncMov.ImptoSaludableTipo = 1 THEN 1 ELSE 0 END AS ImptoSaludableFactorValor
FROM            dbo.Encabezados_Mov AS EncMov INNER JOIN
                         dbo.Encabezados AS Enc ON EncMov.IdEncab = Enc.IdEncab
WHERE        (Enc.FinanDebe = 0 AND EncMov.EsVisible = 1) OR (Enc.FinanDebe = 1 AND EncMov.FactorMovim=0)
GO
PRINT N'Refreshing View [dbo].[VCostoProm_Historico_Agrup]...';


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


GO
PRINT N'Refreshing View [dbo].[VCostoPromedio]...';


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


GO
PRINT N'Refreshing View [dbo].[VCruces_Origen]...';


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


GO
PRINT N'Refreshing View [dbo].[VCruces_Sumas]...';


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


GO
PRINT N'Refreshing View [dbo].[VCruces_TodosDocs]...';


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


GO
PRINT N'Refreshing View [dbo].[VIngresoProducto]...';


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


GO
PRINT N'Adding schema binding to [dbo].[VInventarios_CostoPromedio_00]...';


GO

IF OBJECT_ID(N'dbo.VInventarios_CostoPromedio_00', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VInventarios_CostoPromedio_00 AS SELECT 1 AS Dummy;');
GO
ALTER VIEW VInventarios_CostoPromedio_00
with schemabinding 
AS
SELECT     EncMov.IdInventario, EncMovCP.Orden, EncMov.IdEncabMov, Enc.IdEncab, EncMovCP.CostoProm, EncMovCP.CantAcum, EncMovCP.CostoAcum
FROM         dbo.Encabezados AS Enc INNER JOIN
                      dbo.Encabezados_Mov AS EncMov ON Enc.IdEncab = EncMov.IdEncab INNER JOIN
                      dbo.Encabezados_Mov_CostoProm AS EncMovCP ON EncMov.IdEncabMov = EncMovCP.IdEncabMov
WHERE     (NOT (EncMovCP.Orden IS NULL))
GO
PRINT N'Creating Index [dbo].[VInventarios_CostoPromedio_00].[IX_CostoProm]...';


GO
CREATE UNIQUE CLUSTERED INDEX [IX_CostoProm]
    ON [dbo].[VInventarios_CostoPromedio_00]([IdInventario] ASC, [Orden] ASC, [IdEncabMov] ASC);


GO
PRINT N'Refreshing View [dbo].[VInventarios_Existencia]...';


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


GO
PRINT N'Refreshing View [dbo].[VInventariosHistoricoCosto]...';


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


GO
PRINT N'Refreshing View [dbo].[VInventariosLotesCons01]...';


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


GO
PRINT N'Refreshing View [dbo].[VInvExistPorLote]...';


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


GO
PRINT N'Refreshing View [dbo].[VMov_Factor]...';


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


GO
PRINT N'Refreshing View [dbo].[VProduccion]...';


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


GO
PRINT N'Refreshing View [dbo].[VSeriales]...';


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


GO
PRINT N'Refreshing View [dbo].[VSesionesSaldos]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc____Totales]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TRMPromedio]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc_00]...';


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


GO
PRINT N'Refreshing View [dbo].[VTot_EncMov]...';


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


GO
PRINT N'Refreshing View [dbo].[VCruces_Agrup]...';


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


GO
PRINT N'Refreshing View [dbo].[VInventariosLotesCons02]...';


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


GO
PRINT N'Refreshing View [dbo].[VAgrupadoPorCliVend_01]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TotPorCuentas_00]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TotPorCuentas_Fin]...';


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


GO
PRINT N'Refreshing View [dbo].[VActivos_FijosContables]...';


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


GO
PRINT N'Refreshing View [dbo].[VActivosFijos]...';


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


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


GO
IF OBJECT_ID(N'dbo.VInventarios', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VInventarios AS SELECT 1 AS Dummy;');
GO
ALTER VIEW dbo.VInventarios
AS
SELECT        dbo.Inventarios.IdInventario, dbo.Inventarios.CodInventario, dbo.Inventarios.CodigoBarras, dbo.Inventarios.NomInventario, dbo.Inventarios.EsActivo, dbo.Inventarios.EsEspecial, q.CantMaxima, q.CantMinima, q.PuntoReorden, 
                         dbo.Inventarios.IdUnidad, dbo.Inventarios.ValorIva, dbo.Inventarios.IdAgrup1, dbo.Inventarios.IdAgrup2, dbo.Inventarios.Observacion, dbo.Inventarios.IdContab, dbo.Inventarios.IdTipoInv, dbo.Inventarios.EsFactSinExistencia, 
                         dbo.Inventarios.EsIvaAlCosto, dbo.Inventarios.ValorImptoConsumo, dbo.Inventarios.ValorUtilidadEst, dbo.Inventarios.IdContCosto, dbo.Inventarios.EsSerialRequerido, dbo.Inventarios.TipoVentaKit, 
                         dbo.Inventarios.IdRecursoPOS, dbo.Inventarios_Unidades.NomUnidad, dbo.Inventarios_Unidades.IdTipoUnidad, dbo.Inventarios_Especial.Especial_01, dbo.Inventarios_Especial.Especial_03, 
                         dbo.Inventarios_Especial.Especial_02, dbo.Inventarios_Especial.Especial_04, dbo.Inventarios_Especial.Especial_05, dbo.Inventarios_Especial.Especial_06, dbo.Inventarios_Especial.Especial_07, 
                         dbo.Inventarios_Especial.Especial_08, dbo.Inventarios_Especial.Especial_09, dbo.Inventarios_Especial.Especial_10, dbo.Inventarios_Especial.Especial_11, dbo.Inventarios_Especial.Especial_12, 
                         dbo.Inventarios_Especial.Especial_13, dbo.Inventarios_Especial.Especial_14, dbo.Inventarios_Especial.Especial_15, dbo.Inventarios_Especial.Especial_16, dbo.Inventarios_Especial.Especial_17, 
                         dbo.Inventarios_Especial.Especial_18, dbo.Inventarios_Especial.Especial_19, dbo.Inventarios_Especial.Especial_20, dbo.Inventarios.IdClasifImpto, dbo.Inventarios.EsFactorMov, dbo.Inventarios.EsImptoNalCons, 
                         dbo.Inventarios.TipoImptoConsumo, dbo.Inventarios.EsIvaIncluido, Inventarios_Unidades_1.IdTipoUnidad AS IdTipoUnidad1, Inventarios_Unidades_1.NomUnidad AS NomUnidad1, dbo.Inventarios.EsKitConSerial, 
                         dbo.Inventarios.IdUnidad1, dbo.Inventarios_Agrup1.CodigoAgrup1, dbo.Inventarios_Agrup1.NomAgrup1, dbo.Inventarios_Agrup2.CodigoAgrup2, dbo.Inventarios_Agrup2.NomAgrup2, COALESCE (dbo.Inventarios.FactorEscala, 
                         dbo.Inventarios_Unidades.FactorEscala) AS FactorEscala, COALESCE (dbo.Inventarios.FactorEscala1, Inventarios_Unidades_1.FactorEscala) AS FactorEscala1, dbo.Inventarios.EsNoBalanza, dbo.Inventarios.EsControlado, 
                         dbo.Inventarios.CantDim1, dbo.Inventarios.CantDim3, dbo.Inventarios.CantDim2, dbo.Inventarios.CantDim4, dbo.Inventarios.EsPuntosAcumulados, dbo.Inventarios.PuntosAcumuladosValor, dbo.Inventarios.PuntosAcumuladosPuntos, 
                         dbo.Inventarios.EsPuntosRedimir, dbo.Inventarios.PuntosRedimir, dbo.Inventarios.ImptoSaludableValor, dbo.Inventarios.ImptoSaludableTipo, dbo.Inventarios.ImptoSaludableEs
FROM            (SELECT        IdInventario, MAX(CantMaxima) AS CantMaxima, MIN(CantMinima) AS CantMinima, MAX(PuntoReorden) AS PuntoReorden
                          FROM            dbo.Inventarios_MaximosYMinimos AS maxi
                          WHERE        (EsPrincipal = 1)
                          GROUP BY IdInventario) AS q RIGHT OUTER JOIN
                         dbo.Inventarios ON q.IdInventario = dbo.Inventarios.IdInventario INNER JOIN
                         dbo.Inventarios_Unidades ON dbo.Inventarios.IdUnidad = dbo.Inventarios_Unidades.IdUnidad LEFT OUTER JOIN
                         dbo.Inventarios_Agrup2 ON dbo.Inventarios.IdAgrup2 = dbo.Inventarios_Agrup2.IdAgrup2 LEFT OUTER JOIN
                         dbo.Inventarios_Agrup1 ON dbo.Inventarios.IdAgrup1 = dbo.Inventarios_Agrup1.IdAgrup1 LEFT OUTER JOIN
                         dbo.Inventarios_Unidades AS Inventarios_Unidades_1 ON dbo.Inventarios.IdUnidad1 = Inventarios_Unidades_1.IdUnidad LEFT OUTER JOIN
                         dbo.Inventarios_Especial ON dbo.Inventarios.IdInventario = dbo.Inventarios_Especial.IdInventario
GO
PRINT N'Refreshing View [dbo].[VInventariosImagen]...';


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


GO
PRINT N'Refreshing View [dbo].[VNominaFactura]...';


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


GO
PRINT N'Refreshing View [dbo].[VRips_Encabezados]...';


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


GO
PRINT N'Refreshing View [dbo].[VItemsPos]...';


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


GO
PRINT N'Refreshing View [dbo].[VItemsPosImagen]...';


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


GO
PRINT N'Refreshing View [dbo].[VCostoPromedio_Cruces]...';


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


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


GO
IF OBJECT_ID(N'dbo.VEncabezadosMov', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VEncabezadosMov AS SELECT 1 AS Dummy;');
GO
ALTER VIEW dbo.VEncabezadosMov
AS
SELECT IdEncabMov,
       IdEncab,
       IdInventario,
       IdBodega,
       IdLote,
       Cantidad,
       IdUnidad,
       ValorUnitario,
       IVAporc,
       NotaMov,
       NomInventario,
       CodInventario,
       NomBodega,
       NomLote,
       NombresClienteMov,
       NombresEmpleadoMov,
       NomCentroCostoMov,
       VenceMov,
       TotalMov,
       ValorImptoConsumo,
       FactorCantidad,
       Dcto,
       IdCentroCostoMov,
       CodLote,
       EspecialInv_01,
       EspecialInv_02,
       EspecialInv_03,
       EspecialInv_04,
       EspecialInv_05,
       EspecialInv_06,
       EspecialInv_07,
       EspecialInv_08,
       EspecialInv_09,
       EspecialInv_10,
       EspecialInv_11,
       EspecialInv_12,
       EspecialInv_13,
       EspecialInv_14,
       EspecialInv_15,
       EspecialInv_16,
       EspecialInv_17,
       EspecialInv_18,
       EspecialInv_19,
       EspecialInv_20,
       NumSerial,
       IdEncabMov2,
       EsVisible,
       TotalMovCalExt AS TotalMovExt,
       ValorUnitarioExt,
       DocCruce,
       Abreviatura,
       EspecialMov_01,
       EspecialMov_02,
       EspecialMov_03,
       EspecialMov_04,
       EspecialMov_05,
       EspecialMov_06,
       EspecialMov_07,
       EspecialMov_08,
       EspecialMov_09,
       EspecialMov_10,
       EspecialMov_12,
       EspecialMov_11,
       EspecialMov_13,
       EspecialMov_14,
       EspecialMov_15,
       EspecialMov_16,
       EspecialMov_17,
       EspecialMov_18,
       EspecialMov_19,
       EspecialMov_20,
       NomUnidad,
       NumPlacaMov,
       NumChasisMov,
       NumMotorMov,
       ColorMov,
       KilometrajeMov,
       ModeloMov,
       IdMarcaMov,
       NomMarcaMov,
       VenceLote,
       IdClasifImpto,
       FactorMovim,
       IdCliente,
       IdInmueble,
       PeriodoIni,
       CostoPromCosto,
       CostoPromCant,
       CostoPromValor,
       FinanNumCuotas,
       FinanInteres,
       FinanAporte,
       PeriodoFin,
       FechaIniActividad,
       FechaFinActividad,
       IdEmpleado,
       SubTotalSinDcto,
       ValorDcto,
       ValorIva,
       ValorImptoConsumoMov,
       TipoImptoConsumo,
       SubTotalSinDcto + ValorImptoConsumoMov + ImptoSaludableValorMov AS TotalMovCal,
       SubTotalSinDcto - ValorDcto AS SubTotalMov,
       ValorUnitario - ValorDctoUnitario AS ValorUnitarioConDcto,
       SubTotalSinDcto - ValorDcto + ValorIva + ValorImptoConsumoMov + ImptoSaludableValorMov AS TotalMovMasIva, 
       CASE WHEN (qMov.Cantidad * qMov.FactorCantidad) > 0 THEN (SubTotalSinDcto - ValorDcto + ValorIva + ValorImptoConsumoMov + ImptoSaludableValorMov) / (qMov.Cantidad * qMov.FactorCantidad) ELSE 0 END AS ValorUnitConIva,
       Recurso AS ImagenInv,
       IdEncabMov3,
       CodigoBarras,
       NomAgrup1,
       NomAgrup2,
       EsRevisado,
       CantidadIni,
       CantidadFin,
       CantidadDcto,
       NotaDcto,
       IdUnidad1,
       NomUnidad1,
       Cantidad1,
       NomTipoInven AS TipoInv,
       EsExcluir,
       ValorUnitarioUnidad,
       FactorCantidad1,
       FactorCantidad2,
       NomTalla,
       TallaAgrup1,
       TallaAgrup2,
       TallaAgrup3,
       FactorCantidad3,
       FactorCantidad4,
       ValorComision,
       SubTotalSinDctoExt,
       ValorDctoExt,
       SubTotalSinDctoExt - ValorDctoExt AS SubTotalMovExt,
       ImptoSaludableValor,
       ImptoSaludableTipo,
       ImptoSaludableValorMov
FROM
(
    SELECT EncMov.IdEncabMov,
           EncMov.IdEncab,
           EncMov.IdInventario,
           EncMov.IdBodega,
           EncMov.IdLote,
           EncMov.Cantidad,
           EncMov.IdUnidad,
           EncMov.ValorUnitario,
           EncMov.ValorIva AS IVAporc,
           EncMov.Nota AS NotaMov,
           Inv.NomInventario,
           Inv.CodInventario,
           InvBod.NomBodega,
           InvLot.NomLote,
           COALESCE(Cli.Nombre1, N'') + N' ' + COALESCE(Cli.Nombre2, N'') + N' ' + COALESCE(Cli.Apellido1, N'') + N' ' + COALESCE(Cli.Apellido2, N'') AS NombresClienteMov,
           COALESCE(Cli2.Nombre1, N'') + N' ' + COALESCE(Cli2.Nombre2, N'') + N' ' + COALESCE(Cli2.Apellido1, N'')  + N' ' + COALESCE(Cli2.Apellido2, N'') AS NombresEmpleadoMov,
           CCosto.NomCentroCosto AS NomCentroCostoMov,
           EncMov.Vence AS VenceMov,
           EncMov.TotalMov,
           EncMov.ValorImptoConsumo,
           EncMov.FactorCantidad,
           EncMov.Dcto,
           CCosto.IdCentroCosto AS IdCentroCostoMov,
           InvLot.CodLote,
           InvEsp.Especial_01 AS EspecialInv_01,
           InvEsp.Especial_02 AS EspecialInv_02,
           InvEsp.Especial_03 AS EspecialInv_03,
           InvEsp.Especial_04 AS EspecialInv_04,
           InvEsp.Especial_05 AS EspecialInv_05,
           InvEsp.Especial_06 AS EspecialInv_06,
           InvEsp.Especial_07 AS EspecialInv_07,
           InvEsp.Especial_08 AS EspecialInv_08,
           InvEsp.Especial_09 AS EspecialInv_09,
           InvEsp.Especial_10 AS EspecialInv_10,
           InvEsp.Especial_11 AS EspecialInv_11,
           InvEsp.Especial_12 AS EspecialInv_12,
           InvEsp.Especial_13 AS EspecialInv_13,
           InvEsp.Especial_14 AS EspecialInv_14,
           InvEsp.Especial_15 AS EspecialInv_15,
           InvEsp.Especial_16 AS EspecialInv_16,
           InvEsp.Especial_17 AS EspecialInv_17,
           InvEsp.Especial_18 AS EspecialInv_18,
           InvEsp.Especial_19 AS EspecialInv_19,
           InvEsp.Especial_20 AS EspecialInv_20,
           EncMov.NumSerial,
           EncMov.IdEncabMov2,
           EncMov.EsVisible,
           EncMov.Cantidad * EncMov.ValorUnitarioExt AS TotalMovCalExt,
           EncMov.ValorUnitarioExt,
           VCruc.DescripcionDocs AS DocCruce,
           InvBod.Abreviatura,
           MovEsp.Especial_01 AS EspecialMov_01,
           MovEsp.Especial_02 AS EspecialMov_02,
           MovEsp.Especial_03 AS EspecialMov_03,
           MovEsp.Especial_04 AS EspecialMov_04,
           MovEsp.Especial_05 AS EspecialMov_05,
           MovEsp.Especial_06 AS EspecialMov_06,
           MovEsp.Especial_07 AS EspecialMov_07,
           MovEsp.Especial_08 AS EspecialMov_08,
           MovEsp.Especial_09 AS EspecialMov_09,
           MovEsp.Especial_10 AS EspecialMov_10,
           MovEsp.Especial_12 AS EspecialMov_12,
           MovEsp.Especial_11 AS EspecialMov_11,
           MovEsp.Especial_13 AS EspecialMov_13,
           MovEsp.Especial_14 AS EspecialMov_14,
           MovEsp.Especial_15 AS EspecialMov_15,
           MovEsp.Especial_16 AS EspecialMov_16,
           MovEsp.Especial_17 AS EspecialMov_17,
           MovEsp.Especial_18 AS EspecialMov_18,
           MovEsp.Especial_19 AS EspecialMov_19,
           MovEsp.Especial_20 AS EspecialMov_20,
           Uni.NomUnidad,
           RepAuto.NumPlaca AS NumPlacaMov,
           RepAuto.NumChasis AS NumChasisMov,
           RepAuto.NumMotor AS NumMotorMov,
           RepAuto.Color AS ColorMov,
           RepAuto.Kilometraje AS KilometrajeMov,
           RepAuto.Modelo AS ModeloMov,
           RepAuto.IdMarca AS IdMarcaMov,
           RepMarc.NomMarca AS NomMarcaMov,
           CONVERT(VARCHAR(10), InvLot.FechaVence, 110) AS VenceLote,
           Inv.IdClasifImpto,
           EncMov.FactorMovim,
           EncMov.IdCliente,
           EncMov.IdInmueble,
           EncMov.PeriodoIni,
           EncMov.CostoPromCosto,
           EncMov.CostoPromCant,
           EncMov.CostoPromValor,
           EncMov.FinanNumCuotas,
           EncMov.FinanInteres,
           EncMov.FinanAporte,
           EncMov.PeriodoFin,
           EncMov.FechaIniActividad,
           EncMov.FechaFinActividad,
           EncMov.IdEmpleado,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario AS SubTotalSinDcto,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDcto,
           EncMov.ValorUnitario * EncMov.Dcto / 100 AS ValorDctoUnitario,
           (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * (EncMov.ValorIva / 100) * EncMov.FactorImpuesto AS ValorIva,
           CASE WHEN EncMov.TipoImptoConsumo = 1 THEN (EncMov.Cantidad * EncMov.FactorCantidad) * COALESCE(EncMov.ValorImptoConsumo, 0) ELSE (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * COALESCE(EncMov.ValorImptoConsumo, 0) / 100 END AS ValorImptoConsumoMov,
           EncMov.TipoImptoConsumo,
           Rec.Recurso,
           EncMov.IdEncabMov3,
           Inv.CodigoBarras,
           invAgrup1.NomAgrup1,
           invAgrup2.NomAgrup2,
           EncMov.EsRevisado,
           EncMov.CantidadIni,
           EncMov.CantidadFin,
           EncMov.CantidadDcto,
           EncMov.NotaDcto,
           EncMov.IdUnidad1,
           Uni1.NomUnidad AS NomUnidad1,
           COALESCE(EncMov.Cantidad1, EncMov.Cantidad * Uni.FactorEscala / Uni1.FactorEscala) AS Cantidad1,
           Invtipos.NomTipoInven,
           EncMov.EsExcluir,
           EncMov.ValorUnitario * EncMov.FactorCantidad AS ValorUnitarioUnidad,
           EncMov.CantDim1 AS FactorCantidad1,
           EncMov.CantDim2 AS FactorCantidad2,
           Talla.NomTalla,
           Talla.Agrup1 AS TallaAgrup1,
           Talla.Agrup2 AS TallaAgrup2,
           Talla.Agrup3 AS TallaAgrup3,
           EncMov.ValorComision,
           EncMov.CantDim3 AS FactorCantidad3,
           EncMov.CantDim4 AS FactorCantidad4,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitarioExt AS SubTotalSinDctoExt,
           EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitarioExt * EncMov.Dcto / 100 AS ValorDctoExt,
           EncMov.ImptoSaludableValor,
           EncMov.ImptoSaludableTipo,
           CASE WHEN EncMov.ImptoSaludableTipo = 1 THEN (EncMov.Cantidad * EncMov.FactorCantidad) * COALESCE(EncMov.ImptoSaludableValor, 0) ELSE (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.ValorUnitario) * (1 - EncMov.Dcto / 100) * COALESCE(EncMov.ImptoSaludableValor, 0) / 100 END AS ImptoSaludableValorMov
    FROM dbo.Inventarios_Lotes AS InvLot
        RIGHT OUTER JOIN dbo.Clientes AS Cli
            RIGHT OUTER JOIN dbo.Encabezados_Mov AS EncMov
                INNER JOIN dbo.Inventarios_Bodegas AS InvBod
                    ON EncMov.IdBodega = InvBod.IdBodega
                INNER JOIN dbo.Inventarios AS Inv
                    ON EncMov.IdInventario = Inv.IdInventario
                LEFT OUTER JOIN dbo.Clientes AS Cli2
                    ON EncMov.IdEmpleado = Cli2.IdCliente
                ON Cli.IdCliente = EncMov.IdCliente
            ON InvLot.IdLote = EncMov.IdLote
        LEFT OUTER JOIN dbo.Reparacion_Automotores AS RepAuto
            ON EncMov.NumSerial = RepAuto.IdAutomotor
               AND EncMov.IdTipoReg = 1
        LEFT OUTER JOIN dbo.Reparacion_Marcas AS RepMarc
            ON RepAuto.IdMarca = RepMarc.IdMarca
        LEFT OUTER JOIN dbo.Inventarios_Unidades AS Uni
            ON EncMov.IdUnidad = Uni.IdUnidad
        LEFT OUTER JOIN dbo.Encabezados_MovEspecial AS MovEsp
            ON EncMov.IdEncabMov = MovEsp.IdEncabMov
        LEFT OUTER JOIN dbo.Inventarios_Especial AS InvEsp
            ON Inv.IdInventario = InvEsp.IdInventario
        LEFT OUTER JOIN dbo.CentroCostos AS CCosto
            ON EncMov.IdCentroCosto = CCosto.IdCentroCosto
        LEFT OUTER JOIN dbo.VCruces_Agrup AS VCruc
            ON EncMov.IdEncabMov = VCruc.IdEncabMov1
        LEFT OUTER JOIN dbo.Parametros_Recursos AS Rec
            ON Inv.IdRecursoPOS = Rec.IdRecurso
        LEFT OUTER JOIN dbo.Inventarios_Agrup1 AS invAgrup1
            ON invAgrup1.IdAgrup1 = Inv.IdAgrup1
        LEFT OUTER JOIN dbo.Inventarios_Agrup2 AS invAgrup2
            ON invAgrup2.IdAgrup2 = Inv.IdAgrup2
        LEFT OUTER JOIN dbo.Inventarios_Unidades AS Uni1
            ON EncMov.IdUnidad1 = Uni1.IdUnidad
        INNER JOIN dbo.Inventarios_Tipos AS Invtipos
            ON Inv.IdTipoInv = Invtipos.IdInvenTipo
        LEFT OUTER JOIN dbo.Inventarios_Colores_Tallas AS Talla
            ON EncMov.NumSerial = Talla.CodTalla
               AND EncMov.IdTipoReg = 2
) AS qMov
GO
PRINT N'Altering View [dbo].[VMovimientosFactElectronica]...';


GO
IF OBJECT_ID(N'dbo.VMovimientosFactElectronica', N'V') IS NULL
    EXEC(N'CREATE VIEW dbo.VMovimientosFactElectronica AS SELECT 1 AS Dummy;');
GO
ALTER VIEW [dbo].[VMovimientosFactElectronica]
	AS 
	
SELECT 
CAST(1 AS bigint) AS numLineas,
VEncMov.IdEncab,
VEncMov.IdEncabMov,
VEncMov.IdInventario,
VEncMov.Cantidad,
VEncMov.FactorCantidad,
VEncMov.FactorCantidad4,
VEncMov.NomInventario,
VEncMov.ValorUnitario,
VEncMov.CodInventario,
Mon.Abrev AS CodMoneda,
VEncMov.IVAporc,
VencMov.ValorIva,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.ValorIva / EncMov.ValorTRM END ValorIvaExt,		
VEncMov.TipoImptoConsumo,
VEncMov.ValorImptoConsumo,
VEncMov.ValorImptoConsumoMov,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.ValorImptoConsumoMov / EncMov.ValorTRM END ValorImptoConsumoMovExt,	
CASE WHEN VEncMov.SubTotalMov = 0 or VEncMov.SubTotalMov = NULL then 0 ELSE (VEncMov.ValorImptoConsumo * 100 / VEncMov.SubTotalMov) * 100 END PorcentajeImpCon,
VEncMov.Dcto,
CASE WHEN VEncMov.Dcto <> 0 THEN VEncMov.Dcto / 100 END AS DctoFactor,
VEncMov.ValorDcto,
VEncMov.ValorDctoExt,
VEncMov.SubTotalSinDcto,
VEncMov.SubTotalSinDctoExt,
VEncMov.TotalMovCal,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.TotalMovCal / EncMov.ValorTRM END TotalMovCalExt,	
VEncMov.SubTotalMov,
VEncMov.SubTotalMovExt,
VEncMov.ValorUnitarioConDcto,
VEncMov.TotalMovMasIva,
VEncMov.ValorUnitConIva,
VEncMov.NotaMov,
VEncMov.EsVisible,

--Unidades de medida
--
InvUniDIAN.IdUnidadDIAN,
InvUniDIAN.CodUnidadDIAN,
InvUniDIAN.NomUnidadDIAN,
InvUni.IdUnidad,
InvUni.Abreviatura AS AbrevMedida,
--

ClasUNSPSC.CodUNSPSC,
EncMov.Nota AS NotaLinea,
VEncMov.NomAgrup1,
VEncMov.NomAgrup2,
VEncMov.ValorUnitarioUnidad,
VEncMov.ValorUnitarioExt,
VEncMov.Cantidad * VEncMov.ValorUnitarioUnidad - VEncMov.ValorDcto + VEncMov.ValorImptoConsumo + VEncMov.ValorIva + VEncMov.ImptoSaludableValor AS PrecioTotal,
VEncMov.NomLote,
VEncMov.VenceMov,
VEncMov.ImptoSaludableTipo,
VEncMov.ImptoSaludableValor,
VEncMov.ImptoSaludableValorMov,
CASE WHEN EncMov.ValorTRM <> 0 THEN VEncMov.ImptoSaludableValorMov / EncMov.ValorTRM END ImptoSaludableValorMovExt,	
CASE WHEN VEncMov.SubTotalMov = 0 or VEncMov.SubTotalMov = NULL then 0 ELSE (VEncMov.ImptoSaludableValor * 100 / VEncMov.SubTotalMov) * 100 END ImptoSaludablePorcentaje

FROM dbo.Inventarios_Unidades_DIAN AS InvUniDIAN RIGHT OUTER JOIN
dbo.Inventarios_Unidades AS InvUni ON InvUniDIAN.IdUnidadDIAN = InvUni.IdUnidadDIAN RIGHT OUTER JOIN
dbo.VEncabezadosMov AS VEncMov INNER JOIN
dbo.Encabezados_Mov AS EncMov ON VEncMov.IdEncabMov = EncMov.IdEncabMov LEFT OUTER JOIN
dbo.Monedas AS Mon ON EncMov.IdMoneda = Mon.IdMoneda INNER JOIN
dbo.Inventarios AS Inv ON Inv.IdInventario = EncMov.IdInventario ON InvUni.IdUnidad = EncMov.IdUnidad LEFT OUTER JOIN
dbo.FacturacionElectronica_ClasificacionUNSPSC AS ClasUNSPSC ON ClasUNSPSC.IdUNSPSC = Inv.FeIdUNSPSC
GO
PRINT N'Refreshing View [dbo].[VEncabezados]...';


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


GO
PRINT N'Refreshing View [dbo].[VEncabezadosMov_Det]...';


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


GO
PRINT N'Refreshing View [dbo].[VInventarios_Existencia_Recursos]...';


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


GO
PRINT N'Refreshing View [dbo].[VEncabezadoFactElectronica]...';


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


GO
PRINT N'Refreshing View [dbo].[VEncabezadosCont_Det]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc_01]...';


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


GO
PRINT N'Refreshing View [dbo].[VCierresDocs]...';


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


GO
PRINT N'Refreshing View [dbo].[VCierresDocsCont]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc____TotRetes_Fin]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc_01_01]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc_02]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc_03]...';


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


GO
PRINT N'Refreshing View [dbo].[VContabDoc_Fin]...';


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


GO
PRINT N'Refreshing Function [dbo].[CostoPromedioPorInventario_v2]...';


GO
IF OBJECT_ID(N'dbo.CostoPromedioPorInventario_v2', N'FN') IS NOT NULL OR OBJECT_ID(N'dbo.CostoPromedioPorInventario_v2', N'IF') IS NOT NULL OR OBJECT_ID(N'dbo.CostoPromedioPorInventario_v2', N'TF') IS NOT NULL
    EXECUTE sp_refreshsqlmodule N'[dbo].[CostoPromedioPorInventario_v2]';


GO
PRINT N'Refreshing Function [dbo].[CostoPromedioPorInventario]...';


GO
IF OBJECT_ID(N'dbo.CostoPromedioPorInventario', N'FN') IS NOT NULL OR OBJECT_ID(N'dbo.CostoPromedioPorInventario', N'IF') IS NOT NULL OR OBJECT_ID(N'dbo.CostoPromedioPorInventario', N'TF') IS NOT NULL
    EXECUTE sp_refreshsqlmodule N'[dbo].[CostoPromedioPorInventario]';


GO
PRINT N'Altering Function [dbo].[ufnContabilizacion_Normal]...';


GO
IF OBJECT_ID(N'dbo.ufnContabilizacion_Normal', N'TF') IS NULL AND OBJECT_ID(N'dbo.ufnContabilizacion_Normal', N'IF') IS NULL
    EXEC(N'CREATE FUNCTION dbo.ufnContabilizacion_Normal(@IdEncab INT) RETURNS @t TABLE (Dummy INT) AS BEGIN RETURN; END');
GO
ALTER FUNCTION [dbo].[ufnContabilizacion_Normal] (@IdEncab INT)
RETURNS @RetContab TABLE 
(
    IdEncab INT NOT NULL, 
    IdCuenta INT NULL, 
    IdInvActivoFijo INT NULL, 
    IdGrupoCuenta INT NULL, 
    IdCuentaTipo INT NOT NULL,
    SumDebitos NUMERIC(28,6) NOT NULL,
	SumCreditos NUMERIC(28,6) NOT NULL,
	C_IdCliente INT NOT NULL,
	TotCtaBase NUMERIC(28,6) NULL,
	TotCtaPorc NUMERIC(28,6) NULL,
	C_Vence DATETIME NULL, 
	C_IdCentroCosto INT NULL
)
AS

BEGIN

DECLARE @IdEncabT int
DECLARE @cte_VContabDoc_00 TABLE 
(
	IdEncab INT, 
	IdContab INT, 
	IdDocumento INT, 
	IdTipoRegimen INT, 
	IdInventario INT, 
	IdTipoInv INT, 
	CantConFactor NUMERIC(24,8), 
	ValorUnitario NUMERIC(24,8), 
	ValorIva NUMERIC(28,6), 
	SubTotal NUMERIC(24,8), 
	SubTotal2 NUMERIC(24,8), 
	ValorDcto NUMERIC(24,8), 
	C_ImptoConsumo NUMERIC(24,8),
	C_ImptoSaludable NUMERIC(24,8),
	IdCentroCosto INT, 
	Vence DATETIME, 
	VenceEnc DATETIME, 
	C_DctoDev SMALLINT, 
	C_AplicaICA BIT, 
	C_AplicaIVA BIT, 
	C_IdCliente INT, 
	C_AutoRetiene BIT, 
	EsNoHaceRete BIT, 
	EsCree BIT, 
	ValorTarifaCree NUMERIC(28,6), 
	IdCuentaCree INT, 
	ValorTarifaCree_CD NUMERIC(28,6), 
	EsExcluirRetencion BIT, 
	ValorTarifaICA NUMERIC(28,6), 
	FactorReteIca SMALLINT,
	IdClienteProp INT
)

SET @IdEncabT = @IdEncab

;WITH

cte_VContabDoc_Ini (IdEncab, IdInventario, IdCliente, IdCentroCosto, Vence, ValorIva, ValorDcto, CantConFactor, ValorUnitario, SubTotal, SubTotal2, C_ImptoConsumo, C_ImptoSaludable)
AS
(
	SELECT 
		IdEncab, 
		IdInventario, 
		IdCliente, 
		IdCentroCosto, 
		Vence, 
		ValorIva, 
		SUM(ValorDcto), 
		SUM(CantConFactor) AS CantConFactor, 
		SUM(ValorUnitario) AS ValorUnitario,
		SUM(SubTotal) AS SubTotal,
		SUM(SubTotal2) AS SubTotal2,
		SUM(CASE WHEN TipoImptoConsumo = 0 THEN SubTotal * (COALESCE (ValorImptoConsumo, 0) / 100) ELSE CantConFactor * COALESCE (ValorImptoConsumo, 0) END) AS C_ImptoConsumo,
		SUM(CASE WHEN ImptoSaludableTipo = 0 THEN SubTotal * (COALESCE (ImptoSaludableValor, 0) / 100) ELSE CantConFactor * COALESCE (ImptoSaludableValor, 0) END) AS C_ImptoSaludable
	FROM VContab_EncMov AS VEnc_M
	WHERE IdEncab = @IdEncabT
	GROUP BY IdEncab, IdInventario, IdCliente, IdCentroCosto, Vence, ValorIva
),

cte_VContabDoc_00 (IdEncab, IdContab, IdDocumento, IdTipoRegimen, IdInventario, IdTipoInv, CantConFactor, ValorUnitario, ValorIva, SubTotal, SubTotal2, ValorDcto, C_ImptoConsumo, C_ImptoSaludable, IdCentroCosto, Vence, VenceEnc, C_DctoDev, C_AplicaICA, C_AplicaIVA, C_IdCliente, C_AutoRetiene, EsNoHaceRete, EsCree, ValorTarifaCree, IdCuentaCree, ValorTarifaCree_CD, EsExcluirRetencion, ValorTarifaICA, FactorReteIca,IdClienteProp)
AS
(
	SELECT 
		Enc.IdEncab, 
		Inv.IdContab, 
		Enc.IdDocumento, 
		Cli_Enc.IdTipoRegimen, 
		VEnc_M.IdInventario, 
		Inv.IdTipoInv, 
		VEnc_M.CantConFactor, 
		VEnc_M.ValorUnitario, 
		VEnc_M.ValorIva,
		VEnc_M.SubTotal, 
		VEnc_M.SubTotal2, 
		VEnc_M.ValorDcto, 
		VEnc_M.C_ImptoConsumo, 
		VEnc_M.C_ImptoSaludable,
		VEnc_M.IdCentroCosto, 
		CASE WHEN FinanDebe = 0 THEN Enc.Vence ELSE VEnc_M.Vence END AS Vence, 
		Enc.Vence AS VenceEnc, 
		Doc.ContabDcto AS C_DctoDev, 
		CASE WHEN Doc.AgruparClientes2 = 1 THEN Cli_Enc.EsReteIca ELSE Cli_Enc_M.EsReteIca END AS C_AplicaICA, 
		~ Emp.EsExentoIVA AS C_AplicaIVA, 
		CASE WHEN Doc.AgruparClientes2 = 1 THEN Cli_Enc.IdCliente ELSE Cli_Enc_M.IdCliente END AS C_IdCliente, 
		Cli_Enc.EsAutoRetenedor AS C_AutoRetiene, 
		Emp.EsNoHaceRete,
		Cli_Enc.EsCree,
		CASE WHEN Enc.IdDocumento = 2 THEN COALESCE (ActivEmp.ValorTarifaCree, 0) ELSE COALESCE (ActivCli.ValorTarifaCree, 0) END AS ValorTarifaCree, 
		Cli_Enc.IdCuentaCree,
		COALESCE (ActivEmp.ValorTarifaCree_Pers, ActivEmp.ValorTarifaCree) AS ValorTarifaCree_CD,
		Doc.EsExcluirRetencion,
		CASE WHEN Doc.AgruparClientes2 = 1 THEN Cli_Enc.TarifaIca ELSE Cli_Enc_M.TarifaIca END AS ValorTarifaICA,
		Doc.FactorReteIca as FactorReteIca,
		IdClienteProp
	FROM            
		dbo.Encabezados AS Enc INNER JOIN
		dbo.Clientes AS Cli_Enc ON Enc.IdCliente1 = Cli_Enc.IdCliente INNER JOIN
		dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento INNER JOIN
		cte_VContabDoc_Ini AS VEnc_M ON Enc.IdEncab = VEnc_M.IdEncab INNER JOIN
		dbo.Inventarios AS Inv ON VEnc_M.IdInventario = Inv.IdInventario INNER JOIN
		dbo.Empresas AS Emp ON Enc.IdEmpresa = Emp.IdEmpresa LEFT OUTER JOIN
		dbo.Empresas_ActividadesEcon AS ActivEmp ON Emp.EmpresaIdActivEconPrinc = ActivEmp.IdActividad LEFT OUTER JOIN
		dbo.Clientes AS Cli_Enc_M ON VEnc_M.IdCliente = Cli_Enc_M.IdCliente LEFT OUTER JOIN
		dbo.Empresas_ActividadesEcon AS ActivCli ON Cli_Enc.IdActividad = ActivCli.IdActividad
	WHERE Enc.IdEncab = @IdEncabT
)

INSERT INTO @cte_VContabDoc_00 (IdEncab, IdContab, IdDocumento, IdTipoRegimen, IdInventario, IdTipoInv, CantConFactor, ValorUnitario, ValorIva, SubTotal, SubTotal2, ValorDcto, C_ImptoConsumo, C_ImptoSaludable, IdCentroCosto, Vence, VenceEnc, C_DctoDev, C_AplicaICA, C_AplicaIVA, C_IdCliente, C_AutoRetiene, EsNoHaceRete, EsCree, ValorTarifaCree, IdCuentaCree, ValorTarifaCree_CD, EsExcluirRetencion, ValorTarifaICA, FactorReteIca,IdClienteProp)
SELECT IdEncab, IdContab, IdDocumento, IdTipoRegimen, IdInventario, IdTipoInv, CantConFactor, ValorUnitario, ValorIva, SubTotal, SubTotal2, ValorDcto, C_ImptoConsumo, C_ImptoSaludable, IdCentroCosto, Vence, VenceEnc, C_DctoDev, C_AplicaICA, C_AplicaIVA, C_IdCliente, C_AutoRetiene, EsNoHaceRete, EsCree, ValorTarifaCree, IdCuentaCree, ValorTarifaCree_CD, EsExcluirRetencion, ValorTarifaICA, FactorReteIca,IdClienteProp
FROM cte_VContabDoc_00

;WITH 

cte_TotPorCuentasFin (IdEncab, IdCuenta, TotCtaValor, TotCtaBase, TotCtaPorc, TotPorCuenta, TotFactorCtaPorc)
AS
(
	SELECT q1.IdEncab, 
	q1.IdCuenta, 
	CASE WHEN q1.TotPorCuenta > COALESCE (Cta.ValorBase, 0) THEN q1.TotPorCuenta * Cta.ValorPorcentaje / 100 ELSE 0 END AS TotCtaValor, 
	CASE WHEN q1.TotPorCuenta > Cta.ValorBase THEN Cta.ValorBase ELSE 0 END AS TotCtaBase, 
	CASE WHEN q1.TotPorCuenta > Cta.ValorBase THEN Cta.ValorPorcentaje / 100 ELSE 0 END AS TotCtaPorc, 
	q1.TotPorCuenta,
	CASE WHEN q1.TotPorCuenta > Cta.ValorBase THEN 1 ELSE 0 END AS TotFactorCtaPorc
	FROM
	(
		SELECT r1.IdEncab, Cont_Det.IdCuenta, SUM(r1.SubTotal) AS TotPorCuenta
		FROM 
		(
			SELECT IdEncab, IdContab, IdDocumento, IdTipoRegimen, SUM(SubTotal) AS SubTotal
			FROM @cte_VContabDoc_00
			GROUP BY IdEncab, IdContab, IdDocumento, IdTipoRegimen
		) as r1 INNER JOIN dbo.Contabilizaciones_Det AS Cont_Det ON r1.IdContab = Cont_Det.IdContab AND r1.IdDocumento = Cont_Det.IdDocumento AND r1.IdTipoRegimen = Cont_Det.IdTipoRegimen
		GROUP BY r1.IdEncab, Cont_Det.IdCuenta
	) AS q1 INNER JOIN dbo.Cuentas AS Cta ON q1.IdCuenta = Cta.IdCuenta
) ,

cte_VContabDoc_01 (IdEncab, IdContab, IdInventario, IdInvActivoFijo, IdCuenta, CodCuenta, NomCuenta, CantConFactor, ValorIva, ValorDcto, SubTotal, IdGrupoCuenta, IdCuentaTipo, IdManejo, C_IdCliente, C_AplicaICA, C_DctoDev, C_SubTotal, C_SubTotalSinDcto, C_SubTotalDcto, C_ContDcto, C_TesoreriaIni, C_TesoreriaFactor, C_ReteFuente, C_ReteFuente_CREE, C_Iva, C_ReteIva, C_ReteIca, C_ReteIvaRSC, C_ReteIvaRSD, C_Porcentaje, C_ImptoConsumo, C_ImptoSaludable, C_IvaTotal, C_BaseRetNormal, C_Vence, C_VenceAll, C_IdCentroCosto, C_IdCentroCostoAgrup, TotCtaBase, TotCtaPorc, C_AutoReteCREE_C, C_AutoReteCREE_D)
AS
(
	SELECT T.IdEncab, 
	T.IdContab, 
	T.IdInventario, 
	CASE WHEN Cta.IdCuentaTipo = 6 AND T.IdTipoInv = 3 THEN T.IdInventario ELSE NULL END AS IdInvActivoFijo, 
	CASE WHEN Cta.IdGrupoCuenta = 30 THEN COALESCE (T.IdCuentaCree, Cont_D.IdCuenta) ELSE Cont_D.IdCuenta END AS IdCuenta, 
	Cta.CodCuenta, 
	Cta.NomCuenta, 
	T.CantConFactor, 
	T.ValorIva, 
	T.ValorDcto, 
	T.SubTotal, 
	Cta.IdGrupoCuenta, 
	Cta.IdCuentaTipo, 
	Cont_D.IdManejo, 
	CASE WHEN ISNULL(Cont_D.IdTipo,0) = 1 THEN ISNULL(T.IdClienteProp,C_IdCliente) ELSE T.C_IdCliente END AS C_IdCliente, 
	T.C_AplicaICA, 
	T.C_DctoDev, 
	CASE WHEN Cta.IdGrupoCuenta = 1 THEN T.SubTotal ELSE 0 END AS C_SubTotal, 
	CASE WHEN Cta.IdGrupoCuenta = 1 AND T.C_DctoDev = 0 THEN T.SubTotal ELSE 0 END AS C_SubTotalSinDcto, 
	CASE WHEN Cta.IdGrupoCuenta = 1 AND T.C_DctoDev = - 1 THEN T.CantConFactor * T.ValorUnitario ELSE 0 END AS C_SubTotalDcto, 
	CASE WHEN Cta.IdGrupoCuenta = 1 AND T.C_DctoDev = - 1 AND (Cta.IdCuentaTipo = 22 OR Cta.IdCuentaTipo = 23) THEN T.CantConFactor * T.ValorDcto ELSE 0 END AS C_ContDcto, 
	CASE WHEN Cta.IdGrupoCuenta = 2 THEN T.SubTotal + T.SubTotal2 * ValorIva / 100 + T.C_ImptoConsumo + T.C_ImptoSaludable ELSE 0 END AS C_TesoreriaIni, 
	CASE WHEN Cta.IdGrupoCuenta = 2 THEN 1 ELSE 0 END AS C_TesoreriaFactor, 
	CASE WHEN Cta.IdGrupoCuenta = 4 THEN T.SubTotal2 * Tot.TotCtaPorc ELSE 0 END * CASE WHEN ((T.IdDocumento = 1 AND 
							 CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 (T.IdDocumento = 15 AND CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 (T.IdDocumento = 16 AND CAST(T.C_AutoRetiene AS INT) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 ((T.IdDocumento = 2 AND CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 (T.IdDocumento = 44 AND CONVERT(INT, T.C_AutoRetiene) * CONVERT(INT, ~ T.EsExcluirRetencion) = 1) OR
							 T.EsNoHaceRete = 1)) THEN 0 ELSE 1 END AS C_ReteFuente, 
	CASE WHEN Cta.IdGrupoCuenta = 30 THEN T.SubTotal * T.ValorTarifaCree / 100 ELSE 0 END * CASE WHEN T.EsCree = 1 THEN 1 ELSE 0 END AS C_ReteFuente_CREE, 
	CASE WHEN Cta.IdGrupoCuenta = 5 THEN (T.SubTotal2 * T.ValorIva / 100) * T.C_AplicaIVA ELSE 0 END AS C_Iva, 
	CASE WHEN Cta.IdGrupoCuenta = 6 THEN (T.SubTotal2 * Tot.TotCtaPorc * T.ValorIva / 100) * T.C_AplicaIVA ELSE 0 END AS C_ReteIva, 
	CASE WHEN Cta.IdGrupoCuenta = 7 THEN ( CASE WHEN T.FactorReteIca = 0 THEN T.C_AplicaICA * (T.SubTotal2 * Tot.TotCtaPorc) ELSE T.C_AplicaICA * (CASE WHEN T.ValorTarifaICA IS NULL THEN T.SubTotal2 * Tot.TotCtaPorc ELSE T.SubTotal2 * Tot.TotFactorCtaPorc * (T.ValorTarifaICA /100) END) END) ELSE 0 END AS C_ReteIca,
	CASE WHEN Cta.IdGrupoCuenta = 10 THEN (T.SubTotal * Tot.TotCtaPorc) * T.C_AplicaIVA ELSE 0 END AS C_ReteIvaRSC, 
	CASE WHEN Cta.IdGrupoCuenta = 9 THEN (T.SubTotal * Tot.TotCtaPorc)  * T.C_AplicaIVA ELSE 0 END AS C_ReteIvaRSD, 
	CASE WHEN Cta.IdGrupoCuenta = 5 THEN Cta.ValorPorcentaje ELSE 0 END AS C_Porcentaje, 
	CASE WHEN Cta.IdGrupoCuenta = 11 THEN T.C_ImptoConsumo ELSE 0 END AS C_ImptoConsumo, 
	CASE WHEN Cta.IdGrupoCuenta = 35 THEN T.C_ImptoSaludable ELSE 0 END AS C_ImptoSaludable, 
	T.SubTotal * T.ValorIva / 100 AS C_IvaTotal, 
	CASE WHEN Cta.IdGrupoCuenta = 5 THEN T.SubTotal WHEN Cta_G.EsRetencion = 1 THEN T.SubTotal * Tot.TotPorCuenta ELSE 0 END AS C_BaseRetNormal, 
	CASE WHEN Cta.IdGrupoCuenta = 2 THEN T.Vence ELSE NULL END AS C_Vence, 
	T.Vence AS C_VenceAll, 
	T.IdCentroCosto AS C_IdCentroCosto, 
	CASE WHEN Cta.EsIncluirCC = 1 THEN IdCentroCosto ELSE NULL END AS C_IdCentroCostoAgrup, 
	Tot.TotCtaBase,

	--Tot.TotCtaPorc,
	CASE WHEN Cta.IdGrupoCuenta = 7 AND T.FactorReteIca = 1 AND T.C_AplicaICA = 1 AND T.ValorTarifaICA IS NOT NULL THEN T.ValorTarifaICA/100 ELSE Tot.TotCtaPorc END AS TotCtaPorc,

	CASE WHEN Cta.IdGrupoCuenta = 33 THEN T.SubTotal * T.ValorTarifaCree_CD / 100 ELSE 0 END AS C_AutoReteCREE_C, 
	CASE WHEN Cta.IdGrupoCuenta = 34 THEN T.SubTotal * T.ValorTarifaCree_CD / 100 ELSE 0 END AS C_AutoReteCREE_D
	FROM            
		@cte_VContabDoc_00 AS T INNER JOIN
		dbo.Contabilizaciones_Det AS Cont_D ON T.IdContab = Cont_D.IdContab AND T.IdTipoRegimen = Cont_D.IdTipoRegimen AND T.IdDocumento = Cont_D.IdDocumento INNER JOIN
		dbo.Cuentas AS Cta ON Cont_D.IdCuenta = Cta.IdCuenta INNER JOIN
		dbo.Cuentas_Tipos AS Cta_Tip ON Cta.IdCuentaTipo = Cta_Tip.IdCuentaTipo INNER JOIN
		dbo.Cuentas_Clases AS Cta_Clase ON Cta_Tip.IdClase = Cta_Clase.IdClase INNER JOIN
		cte_TotPorCuentasFin AS Tot ON T.IdEncab = Tot.IdEncab AND Cont_D.IdCuenta = Tot.IdCuenta LEFT OUTER JOIN
		dbo.Cuentas_Grupos AS Cta_G ON Cta.IdGrupoCuenta = Cta_G.IdGrupoCuenta
),


cte_TotReteFin(IdEncab, IdJoin, MinFecha, IdInventario, C_IdCentroCosto, SumReteFuente, SumReteIva, SumReteIca, SumReteIvaRSC, SumReteFuente_CREE, SumReteFuente_CREE_C, SumReteFuente_CREE_D)
AS
(
	SELECT IdEncab, 
	CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N'') AS IdJoin, 
	COALESCE (CONVERT(char(8), MIN(C_VenceAll), 112), N'') AS MinFecha, 
	IdInventario, 
	C_IdCentroCosto, 
	SUM(C_ReteFuente) AS SumReteFuente, 
	SUM(C_ReteIva) AS SumReteIva, 
	SUM(C_ReteIca) AS SumReteIca, 
	SUM(C_ReteIvaRSC) AS SumReteIvaRSC, 
	SUM(C_ReteFuente_CREE) AS SumReteFuente_CREE, 
	SUM(C_AutoReteCREE_C) AS SumReteFuente_CREE_C, 
	SUM(C_AutoReteCREE_D) AS SumReteFuente_CREE_D
	FROM cte_VContabDoc_01
	GROUP BY IdEncab, IdInventario, C_IdCentroCosto, CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N'')
),

cte_VContabDoc_01_01 (IdEncab, IdJoin, IdContab, IdInventario, IdInvActivoFijo, IdCuenta, IdGrupoCuenta, IdCuentaTipo, C_IdCliente, C_IdCentroCosto, C_IdCentroCostoAgrup, C_VenceAll, C_Vence, C_TesoreriaFactor, TotCtaBase, TotCtaPorc, IdManejo, C_SubTotal, C_Iva, C_ReteFuente, C_ReteFuente_CREE, C_ReteIva, C_ReteIca, C_ReteIvaRSC, C_ReteIvaRSD, C_ImptoConsumo, C_ImptoSaludable, C_AutoReteCREE_C, C_AutoReteCREE_D, C_TesoreriaIni, FechaYYYYmmdd)
AS
(
	SELECT        
		IdEncab, 
		CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N'') AS IdJoin, 
		IdContab, 
		IdInventario, 
		IdInvActivoFijo, 
		IdCuenta, 
		IdGrupoCuenta, 
		IdCuentaTipo, 
		C_IdCliente, 
		C_IdCentroCosto, 
		C_IdCentroCostoAgrup, 
		C_VenceAll, 
		C_Vence, 
		MAX(C_TesoreriaFactor) AS C_TesoreriaFactor, 
		MAX(TotCtaBase) AS TotCtaBase, 
		MAX(TotCtaPorc) AS TotCtaPorc, 
		MAX(IdManejo) AS IdManejo, 
		SUM(C_SubTotal) AS C_SubTotal, 
		SUM(C_Iva) AS C_Iva, 
		SUM(C_ReteFuente) AS C_ReteFuente, 
		SUM(C_ReteFuente_CREE) AS C_ReteFuente_CREE, 
		SUM(C_ReteIva) AS C_ReteIva, 
		SUM(C_ReteIca) AS C_ReteIca, 
		SUM(C_ReteIvaRSC) AS C_ReteIvaRSC, 
		SUM(C_ReteIvaRSD) AS C_ReteIvaRSD, 
		SUM(C_ImptoConsumo) AS C_ImptoConsumo, 
		SUM(C_ImptoSaludable) AS C_ImptoSaludable, 
		SUM(C_AutoReteCREE_C) AS C_AutoReteCREE_C, 
		SUM(C_AutoReteCREE_D) AS C_AutoReteCREE_D, 
		SUM(C_TesoreriaIni) AS C_TesoreriaIni, 
		COALESCE (CONVERT(char(8), C_VenceAll, 112), N'') AS FechaYYYYmmdd
	FROM
		cte_VContabDoc_01
	GROUP BY IdEncab, IdContab, IdInventario, IdCuenta, C_IdCentroCosto, C_IdCliente, C_VenceAll, CAST(IdInventario AS NVARCHAR(100)) + N' -' + COALESCE (CAST(C_IdCentroCosto AS NVARCHAR(100)), N''), C_Vence, COALESCE (CONVERT(char(8), C_VenceAll, 112), N''), IdGrupoCuenta, IdCuentaTipo, C_IdCentroCostoAgrup, IdInvActivoFijo
)

INSERT INTO @RetContab
SELECT IdEncab, IdCuenta, IdInvActivoFijo, IdGrupoCuenta, IdCuentaTipo, SUM(CASE WHEN IdManejo = 1 THEN ISNULL(C_Total,0) ELSE 0 END) AS SumDebitos, SUM(CASE WHEN IdManejo = 2 THEN ISNULL(C_Total,0) ELSE 0 END) AS SumCreditos, C_IdCliente, TotCtaBase, TotCtaPorc, C_Vence, C_IdCentroCostoAgrup AS C_IdCentroCosto
FROM  
(
	SELECT IdEncab, IdContab, IdInventario, IdInvActivoFijo, IdCuenta, IdGrupoCuenta, IdCuentaTipo, C_IdCliente, C_Vence, C_SubTotal, C_Iva, C_ReteFuente, C_ReteFuente_CREE, C_AutoReteCREE_C, C_AutoReteCREE_D, C_ReteIca, C_ReteIva, C_ReteIvaRSC, C_ReteIvaRSD, C_ImptoConsumo, C_ImptoSaludable, C_Tesoreria, C_SubTotal + C_Iva + C_ReteFuente + C_ReteFuente_CREE + C_AutoReteCREE_C + C_AutoReteCREE_D + C_ReteIca + C_ReteIva + C_ReteIvaRSC + C_ReteIvaRSD + C_ImptoConsumo + C_ImptoSaludable + C_Tesoreria AS C_Total, C_IdCentroCosto, C_IdCentroCostoAgrup, TotCtaBase, TotCtaPorc, IdManejo
	FROM  
	(
		SELECT T.IdEncab, T.IdContab, T.IdInventario, T.IdInvActivoFijo, T.IdCuenta, T.IdGrupoCuenta, T.IdCuentaTipo, T.C_IdCliente, T.C_IdCentroCosto, T.C_IdCentroCostoAgrup, T.C_Vence, T.IdManejo, T.C_SubTotal, T.C_Iva, T.C_ReteFuente, T.C_ReteFuente_CREE, T.C_AutoReteCREE_C, T.C_AutoReteCREE_D, T.C_ReteIva, T.C_ReteIca, T.C_ReteIvaRSC, T.C_ReteIvaRSD, T.C_ImptoConsumo, T.C_ImptoSaludable, (T.C_TesoreriaIni - (CASE WHEN MinFecha <> FechaYYYYMMdd THEN 0 ELSE 1 END) * (TotRet.SumReteFuente + TotRet.SumReteIva + TotRet.SumReteIca + TotRet.SumReteFuente_CREE)) * T.C_TesoreriaFactor AS C_Tesoreria, T.TotCtaBase, T.TotCtaPorc
		FROM cte_VContabDoc_01_01 AS T INNER JOIN cte_TotReteFin AS TotRet ON T.IdEncab = TotRet.IdEncab AND T.IdJoin = TotRet.IdJoin
	) u
) t
GROUP BY IdEncab, IdCuenta, C_IdCliente, TotCtaBase, TotCtaPorc, C_Vence, C_IdCentroCostoAgrup, IdGrupoCuenta, IdCuentaTipo, IdInvActivoFijo


RETURN;




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


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

    @IdEncabBasado INT,
	@IdMoneda INT,
	@Fecha datetime,
	@FechaVence datetime,
	@IdDocumento INT,
	@IdCliente1 INT,
	@IdCliente2 INT,
	@IdClienteVend INT=NULL, 
	@IdEncab nvarchar(100) = '',
	@Nota NVARCHAR(max)=NULL,
	@IdEncabMov nvarchar(100) = '',
	@SumCantidad numeric(24,8)= 0,
	@IdUnidad int= 0,
	@FactorCantidad numeric(28,6)= 0,
	@FactorMovim INT,
	@NotaMov NVARCHAR(600)=NULL,
	@IdBodegaTras INT,
	@InfoUsuario NVARCHAR(100),
	@IdServicio INT=Null,
	@CantidadSer numeric(24,8)= 0,
	@FactorCantidad1 numeric(24,8)= 0,
	@FactorCantidad2 numeric(24,8)= 0,
	@ValorUnit numeric(24,8)= 0,
	@EsVisible BIT = NULL,
	@Exito INT = 0 OUTPUT,
	@IdEncabNuevo INT = 0 OUTPUT,
	@IdMovNuevo INT = 0 OUTPUT
	
AS
BEGIN

	DECLARE 
	@Ident nvarchar(500),
	@IdCliente int,
	@IdInv int,
	@factMov int=null,
	@IdDocOrigen int=0,
	@IdDocCruc int=0,
    @CopiarEspc BIT= NULL,
    @ChildReg int=0,
	@EsInsertSubProductos INT = 0
	
    
    exec CrearContextoUsuario @InfoUsuario
	
	SET @CopiarEspc=(SELECT ValParametro FROM Parametros WHERE CodParametro=55)
	
	IF @IdEncab=''
	BEGIN
	INSERT INTO Encabezados(IdEmpresa, IdDocumento, IdPrefijo, NumDocumento, NumDocumentoExt, Fecha, Vence, IdCliente1, IdCliente1_IdDir, IdCliente2, IdClienteVend, IdMoneda, Nota, IdFormaPago, NomPc, EsAnulado, EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, FinanNumCuotas, FinanInteres, FinanFechaIni, FinanDebe, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago)
	SELECT IdEmpresa, @IdDocumento, IdPrefijo, 0, NumDocumentoExt, @Fecha, @FechaVence, @IdCliente1, IdCliente1_IdDir, @IdCliente2, IdClienteVend, @IdMoneda, @Nota, IdFormaPago, NomPc, 0, 0, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, FinanNumCuotas, FinanInteres, FinanFechaIni, FinanDebe, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago
	FROM encabezados
	WHERE IdEncab=@IdEncabBasado
	SET @IdEncab = IDENT_CURRENT('Encabezados') 
	SET @IdEncabNuevo= @IdEncab
	SET @IdDocCruc=@IdDocumento 
	
	IF @IdDocumento=2 AND @IdClienteVend IS NULL
	UPDATE Encabezados
	SET IdClienteVend=(SELECT IdCliVendedor FROM dbo.Clientes WHERE IdCliente=@IdCliente1)
	WHERE IdEncab=@IdEncabNuevo
	
	IF @CopiarEspc IS NOT NULL
    INSERT INTO dbo.EncabezadosEspecial (IdEncab, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40)
    SELECT @IdEncabNuevo, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40   
	FROM EncabezadosEspecial
	WHERE IdEncab =(SELECT MAX(IdEncab) FROM Encabezados_Mov WHERE IdEncabMov=@IdEncabMov)
	END

	IF @IdEncab<>''
	BEGIN
	SET @IdDocCruc=(SELECT IdDocumento FROM Encabezados WHERE IdEncab=@IdEncab)
	END
	
	SELECT @IdCliente=IdCliente1 FROM Encabezados WHERE IdEncab=@IdEncab
	
	IF @FactorMovim<>0
	 SET @FactorMovim = (SELECT MIN(FactorMovim) FROM Encabezados_Mov WHERE IdEncabMov=@IdEncabMov)
	
	SET @IdInv=(SELECT IdInventario FROM  Encabezados_Mov WHERE IdEncabMov=@IdEncabMov)
	
	SET @IdDocOrigen=(SELECT IdDocumento FROM Encabezados_Mov mov INNER JOIN Encabezados enc ON mov.IdEncab=enc.IdEncab 
					  WHERE IdEncabMov=@IdEncabMov)
	
	SET @ChildReg=(SELECT COUNT(*) FROM dbo.Encabezados_Mov WHERE IdEncabMov2=@IdEncabMov AND IdInventario=@IdInv)
	
    IF @IdDocCruc=2 AND @IdDocOrigen=9
		SET @factMov=@FactorMovim
		
	IF @IdDocCruc=46 AND @IdDocOrigen=9
		SET @factMov=@FactorMovim

	IF @IdDocCruc=2 AND @IdDocOrigen=39
		SET @factMov=@FactorMovim
		
		
	IF @IdDocCruc=15 AND @IdDocOrigen=2 AND @ChildReg=0 
		 SET @FactorMovim=1
	 
	IF @IdDocCruc=15 AND @IdDocOrigen=2
		 SET @factMov=1
		 
		 
	-- Condiciones para orden de taller	 
	IF (@IdDocCruc=9 OR @IdDocCruc=2) AND @IdDocOrigen=43 AND @ChildReg=0 
		 SET @FactorMovim=1
		 
	IF (@IdDocCruc=9 OR @IdDocCruc=2)AND  @IdDocOrigen=43
		 SET @factMov=1
		 
	-- Condiciones para orden de produccion
	IF @IdDocCruc=45
		 SET @FactorMovim=-1
		 
	-- Parametro para insertar o no lo registros hijos (SUBPRODUCTOS)
	SELECT @EsInsertSubProductos = EsInsertSubProductos
	FROM Documentos
	WHERE IdDocumento = @IdDocCruc;

	BEGIN TRANSACTION CrearCruc;
	
		INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,CantDim4,EsVisible,NumSerial,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
		SELECT @IdEncab,IdInventario,IdBodega,IdLote,@SumCantidad,CantidadFisica,@IdUnidad,@FactorCantidad,@FactorMovim,@ValorUnit,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,@IdCliente,COALESCE(@NotaMov,Nota),Vence,IdCentroCosto,Dcto,EsIvaAlCosto,CantDim4,
		case when @IdDocOrigen=24 then 1 else ISNULL(@EsVisible,EsVisible) end, NumSerial,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
		FROM  Encabezados_Mov Enc_Mov
		WHERE Enc_Mov.IdEncabMov=@IdEncabMov
	    
		SET @Ident= IDENT_CURRENT('Encabezados_Mov')
		SET @IdMovNuevo=@Ident
		-- Validacion para relizar el cruce especial entre factura de venta y remision 
		--IF @IdDocCruc=9 and @IdDocOrigen=2
		--EXEC dbo.DocsCrucesInsertar @IdEncabMov,@Ident,-1
		--ELSE
		EXEC dbo.DocsCrucesInsertar @Ident,@IdEncabMov,-1
		
		--Genera registros hijos (SUBPRODUCTOS) a documentos diferentes de ingreso producto terminado
		IF @IdDocCruc<>22 AND @EsInsertSubProductos = 1
			INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,IdEncabMov2,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
			SELECT @IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,COALESCE(@factMov,FactorMovim),ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,@IdCliente,COALESCE(@NotaMov,Nota),Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,@Ident,IdUnidad1,Cantidad1,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
			FROM  Encabezados_Mov Enc_Mov
			WHERE Enc_Mov.IdEncabMov2=@IdEncabMov

		--Insertar registros en traslado interno
		IF @IdDocCruc=45
		INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,IdUnidad1,Cantidad1,IdEncabMov3,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
		SELECT IdEncab,IdInventario,coalesce(@IdBodegaTras,IdBodega),IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,1,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,NumSerial,IdUnidad1,Cantidad1,@Ident,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
		FROM  Encabezados_Mov Enc_Mov
		WHERE Enc_Mov.IdEncabMov=@Ident

		-- Insertar registro de servicio asociado al cruce con factores cantidad
		if @IdServicio IS NOT NULL
		INSERT INTO Encabezados_Mov (IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,CantDim1,CantDim2,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
		SELECT IdEncab,@IdServicio,IdBodega,IdLote,@CantidadSer,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim,ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov,IdCliente,Nota,Vence,IdCentroCosto,Dcto,EsIvaAlCosto,EsVisible,@FactorCantidad1,@FactorCantidad2,ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
		FROM  Encabezados_Mov Enc_Mov
		WHERE Enc_Mov.IdEncabMov=@Ident
	
	COMMIT TRAN CrearCruc;
	
    IF @@error <> 0 GOTO ERR_HANDLER
    
    SET @Exito = 1
    RETURN
    
ERR_HANDLER:
  SET @Exito = 0
       
END
GO
PRINT N'Altering Procedure [dbo].[CopiarDocumentos]...';


GO

IF OBJECT_ID(N'CopiarDocumentos', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE CopiarDocumentos AS RETURN 0;');
GO
ALTER PROCEDURE CopiarDocumentos
	@IdEncabBasado INT,
	@IdMoneda INT,
	@Nota NVARCHAR(max)= null,
	@Fecha datetime,
	@FechaVence datetime,
	@IdDocumento INT,
	@IdCliente1 INT,
	@IdCliente2 INT,
	@EsVisible BIT=NULL,
	@IdEncabPago INT=0,
	@InfoUsuario NVARCHAR(100)='0,--BASEDATOS--',
	@Exito INT = 0 output,
	@IdEncabNuevo INT = 0 output,
	@IdEncabMov_string nvarchar(max) = '',
	@IdClienteVend INT=NULL,
	@EsCont BIT = 0
As

DECLARE

 @CopiarEspc BIT= NULL

BEGIN
	--Información Usuario
	exec CrearContextoUsuario @InfoUsuario
	
	SET @CopiarEspc=(SELECT ValParametro FROM Parametros WHERE CodParametro=55)
	INSERT INTO Encabezados(IdEmpresa, IdDocumento, IdPrefijo, NumDocumento, NumDocumentoExt, Fecha, Vence, IdCliente1, IdCliente1_IdDir, IdCliente2, IdClienteVend, IdMoneda, Nota, IdFormaPago, NomPc, EsAnulado, EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago)
	SELECT IdEmpresa, @IdDocumento, IdPrefijo, 0, NumDocumentoExt, @Fecha, @FechaVence, @IdCliente1, IdCliente1_IdDir, @IdCliente2, IdClienteVend, @IdMoneda, @Nota, IdFormaPago, NomPc, 0, 0, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdEstado, IdClienteProp, IdInmueble, IdSucursal, IdMesa, ValorTRM, ValorNegoc, CantMin, ValorPago
	FROM encabezados
	WHERE IdEncab=@IdEncabBasado

	SET @IdEncabNuevo = IDENT_CURRENT('Encabezados')
	
	IF @IdDocumento=2 and @IdClienteVend is null
	UPDATE Encabezados
	SET IdClienteVend=(SELECT IdCliVendedor FROM dbo.Clientes WHERE IdCliente=@IdCliente1)
	WHERE IdEncab=@IdEncabNuevo
	
	IF @EsCont=0
	INSERT INTO Encabezados_Mov (IdEncab, IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, IdCliente, Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce,CantDim4,IdEncabMov2,IdUnidad1,Cantidad1, ValorTRM, IdMoneda, IdEncabMov3, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo)
    SELECT @IdEncabNuevo,IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, IdCliente, Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto,coalesce(@EsVisible,EsVisible), EsImpreso, EsRevisado, EsExcluirCruce, CantDim4,
    CASE WHEN @IdEncabPago>0 then IdEncabMov else NULL end as IdEncabMov2,IdUnidad1,Cantidad1, ValorTRM, IdMoneda, IdEncabMov, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
    FROM Encabezados_Mov
    WHERE
    IdEncabMov IN(select number from dbo.iter$simple_intlist_to_tbl(@IdEncabMov_string))
    
    IF @EsCont=1
    INSERT INTO dbo.Encabezados_Cont (IdEncab, IdCuenta, Debito, Credito, Nota, IdCliente, IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, Vence, IdCentroCosto, IdAbonaDoc, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado, IdEncabMov, IdEncabContAgrup, DebitoExt, CreditoExt)
    SELECT @IdEncabNuevo, IdCuenta, Debito, Credito, Nota, IdCliente, IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, Vence, IdCentroCosto, IdAbonaDoc, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado, IdEncabMov, IdEncabContAgrup, DebitoExt, CreditoExt
    FROM Encabezados_Cont
    WHERE
    IdEncabCont IN(select number from dbo.iter$simple_intlist_to_tbl(@IdEncabMov_string))
   
    IF @CopiarEspc IS NOT NULL
	BEGIN
		INSERT INTO dbo.EncabezadosEspecial (IdEncab, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10,Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40)
		SELECT @IdEncabNuevo, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20, Especial_21, Especial_22, Especial_23, Especial_24, Especial_25, Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, Especial_31, Especial_32, Especial_33, Especial_34, Especial_35, Especial_36, Especial_37, Especial_38, Especial_39, Especial_40   
		FROM EncabezadosEspecial
		WHERE IdEncab =(select max(IdEncab) from Encabezados_Mov where IdEncabMov IN(select number from dbo.iter$simple_intlist_to_tbl(@IdEncabMov_string)))
	
		-- Inventarios Especiales
		INSERT INTO Encabezados_MovEspecial(IdEncabMov, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20)
		SELECT  IdEncabMovNuevo, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05, Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, Especial_11, Especial_12, Especial_13, Especial_14, Especial_15, Especial_16, Especial_17, Especial_18, Especial_19, Especial_20
		FROM 
		(
			SELECT mov.IdEncabMov as IdEncabMovNuevo, esp.IdEncabMov, mov.IdEncab, esp.Especial_01, esp.Especial_02, esp.Especial_03, esp.Especial_04, esp.Especial_05, esp.Especial_06, esp.Especial_07, esp.Especial_08, esp.Especial_09, esp.Especial_10, esp.Especial_11, esp.Especial_12, esp.Especial_13, esp.Especial_14, esp.Especial_15, esp.Especial_16,esp. Especial_17, esp.Especial_18, esp.Especial_19, esp.Especial_20  
			FROM 
				Encabezados_Mov mov INNER JOIN Encabezados_MovEspecial esp ON esp.IdEncabMov = mov.IdEncabMov3
			WHERE IdEncab = @IdEncabNuevo
		)temp	
	END

	UPDATE Encabezados_Mov
	SET IdEncabMov3 = NULL
	WHERE IdEncab = @IdEncabNuevo

    IF @@error <> 0 GOTO ERR_HANDLER
    
    SET @Exito = 1
    RETURN
    
ERR_HANDLER:
  SET @Exito = 0
       
END
GO
PRINT N'Altering Procedure [dbo].[CopiarDocumentosBasados]...';


GO


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

@IdEncabStr NVARCHAR(1000),
@IdCliente INT,
@IdElaboro INT,
@IdPrefijo NVARCHAR(50),
@Fecha NVARCHAR(20) = NULL,
@IdDocumento INT=NULL,
@FechaVence NVARCHAR(20) = NULL,
@Nota NVARCHAR(1000),
@InfoUsuario NVARCHAR(100)='0,--BASEDATOS--',
@Exito INT output

AS
BEGIN

 /*	OPERACION DE COPIAR ARCHIVOS */
  
 IF @IdEncabStr LIKE '%,'
	SET @IdEncabStr = SUBSTRING(@IdEncabStr,0,LEN(@IdEncabStr))
 
 DECLARE @InsertedIdEncabs	   TABLE (id INT, idPas INT)
 DECLARE @InsertedIdEncabMovs  TABLE (id INT, idE INT, idPas INT, idPasE INT)
 DECLARE @IdPas INT
 DECLARE @FechaT DATETIME, @esMov bit=null,@Escont bit=null
 DECLARE @FechaVenceT DATETIME
		 
 IF (@Fecha IS NOT NULL)
	SET @FechaT = CAST(CONVERT(DATETIME, @Fecha, 103) + ' 00:00:00' AS DATETIME)

IF (@FechaVence IS NOT NULL)
	SET @FechaVenceT = CAST(CONVERT(DATETIME, @FechaVence, 103) + ' 23:59:59' AS DATETIME)
	--Procedimiento para Usuario Auditoria
    exec CrearContextoUsuario @InfoUsuario

	IF(@IdDocumento is not null)
	BEGIN
		select @esMov=EsMov from Documentos where IdDocumento=@IdDocumento
		select @Escont=EsCont from Documentos where IdDocumento=@IdDocumento
	END 



ALTER INDEX XI_NumeracionUnica ON [dbo].[Encabezados]
DISABLE;	
 
 --Insertar los Nuevos Encabezados
 --//
 INSERT INTO Encabezados
  (IdEmpresa, IdDocumento, 
   IdPrefijo, 
   NumDocumento, NumDocumentoExt, 
   Fecha, Vence, 
   IdCliente1, 
   IdCliente1_IdDir, 
   IdCliente2, 
   IdClienteVend, IdMoneda, Nota, IdFormaPago, NomPc,EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdSucursal, IdMesa, ValorTRM)
	OUTPUT inserted.IdEncab, 1
	INTO @InsertedIdEncabs
 SELECT 
  IdEmpresa, COALESCE(@IdDocumento,IdDocumento), 
  CASE WHEN COALESCE(@IdPrefijo, '-1') = '-1' THEN IdPrefijo ELSE @IdPrefijo END, 
  0, NumDocumentoExt, 
  CASE WHEN @Fecha IS NULL THEN Fecha ELSE @FechaT END AS Fecha, 
  CASE WHEN @FechaVence IS NULL THEN Vence ELSE @FechaVenceT END AS Vence, 
  CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente1 ELSE @IdCliente END, 
  IdCliente1_IdDir,
  CASE WHEN COALESCE(@IdElaboro, -1) = -1 THEN IdCliente2 ELSE @IdElaboro END,
  IdClienteVend, IdMoneda,
  CASE WHEN @Nota IS NULL THEN Nota ELSE @Nota END, 
  IdFormaPago, NomPc, EsBloqueado, EsRevisado, EsImpreso, IdAutomotor, IdContacto, IdTipo, FechaIni, FechaFin, IdSucursal, IdMesa, ValorTRM
 FROM Encabezados
 WHERE IdEncab IN (select  number from iter$simple_intlist_to_tbl(@IdEncabStr))
 ORDER BY Encabezados.IdEncab
 --// 

 ALTER INDEX XI_NumeracionUnica ON [dbo].[Encabezados]
REBUILD;
 
 --Relaciona IdEncab Nuevos con IdEncab Bases
 --//
 UPDATE @InsertedIdEncabs
 SET idPas = q.idPas
 FROM @InsertedIdEncabs ins INNER JOIN
	(SELECT q1.id, q2.number as idPas, q1.x, q2.x as xPas
	 FROM	
	 (SELECT id, ROW_NUMBER() over(order by id) as x
	  FROM @InsertedIdEncabs) q1 INNER JOIN
	 (SELECT number, ROW_NUMBER() over(order by number) as x 
	  FROM iter$simple_intlist_to_tbl(@IdEncabStr)) as q2
 	  ON q1.x = q2.x) as q ON q.id = ins.id
 --//
 
 --	Setea la Direccion con el IdClienteDir del Nuevo IdCliente
 --//
 IF COALESCE(@IdCliente, -1) <> -1
 BEGIN
  
  UPDATE Encabezados 
  SET [IdCliente1_IdDir] = 
  (SELECT MIN(cliDir.IdClienteDir)
   FROM Encabezados enc INNER JOIN @InsertedIdEncabs ins ON enc.IdEncab = ins.id 
						INNER JOIN VClientesDir cliDir ON Encabezados.IdCliente1 = cliDir.IdCliente)
  WHERE	IdEncab IN (select id from @InsertedIdEncabs)
    
 END
 --//
 


 -- Insertar Los Nuevos Encabezados_Mov
 --//
 IF COALESCE(@esMov,1)=1
 BEGIN
 
	 -- Inserta Los Encabezados_Mov que no son Hijos
	 --//
	 INSERT INTO Encabezados_Mov
	 (IdEncab, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 IdCliente, 
	 Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, IdEncabMov2,
	 CantDim4, ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
	 )
		OUTPUT inserted.IdEncabMov, inserted.IdEncab, 1, 1
		INTO @InsertedIdEncabMovs
	 SELECT 
	 ins.id, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente ELSE @IdCliente END, 
	 Nota, CASE WHEN @FechaVenceT IS NULL THEN Vence ELSE @FechaVenceT END AS Vence, 
	 IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, IdEncabMov2,
	 CantDim4, ValorTRM, IdMoneda, TipoImptoConsumo, IdTipoReg, ImptoSaludableValor, ImptoSaludableTipo
	 FROM Encabezados_Mov encMov INNER JOIN @InsertedIdEncabs ins
	 ON	  encMov.IdEncab = ins.idPas AND encMov.IdEncabMov2 IS NULL
	 ORDER BY encMov.IdEncabMov
	 --//
	 
	 -- Relaciona IdEncabMov Nuevos con IdEncabMov Base Incluyendo IdEncab
	 --// 
	 UPDATE @InsertedIdEncabMovs
	 SET idPas = q.idPas,
		 idPasE = q.idPasE
	 FROM @InsertedIdEncabMovs ins INNER JOIN
	 (SELECT q1.id,q1.idE,q2.IdEncabMov as idPas, q2.IdEncab as idPasE
	  FROM
	  (SELECT id, idE, ROW_NUMBER() over(order by id) as x
	   FROM @InsertedIdEncabMovs) AS q1 INNER JOIN 
	  (SELECT encMov.IdEncabMov, encMov.IdEncab, ROW_NUMBER() over(order by encMov.IdEncabMov)as x
	   FROM Encabezados_Mov encMov INNER JOIN @InsertedIdEncabs ins
	   ON encMov.IdEncab = ins.idPas AND encMov.IdEncabMov2 IS NULL) q2
	  ON q1.x = q2.x) q ON q.id = ins.id
	 --//
	 
	 -- Inserta Los Encabezados_Mov que son Hijos
	 --//
	 INSERT INTO Encabezados_Mov
	 (IdEncab, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 IdCliente, 
	 Nota, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, 
	 IdEncabMov2)
	 SELECT 
	 ins.idE, 
	 IdInventario, IdBodega, IdLote, Cantidad, CantidadFisica, IdUnidad, FactorCantidad, FactorMovim, ValorUnitario, ValorUnitarioExt, ValorIva, ValorImptoConsumo, TotalMov, 
	 CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente ELSE @IdCliente END, 
	 Nota,  CASE WHEN @FechaVenceT IS NULL THEN Vence ELSE @FechaVenceT END AS Vence, 
	 IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, EsImpreso, EsRevisado, EsExcluirCruce, CostoPromValor, CostoPromCosto, CostoPromCant, NumSerial, 
	 ins.id
	 FROM Encabezados_Mov encMov INNER JOIN @InsertedIdEncabMovs ins
	 ON	  encMov.IdEncab = ins.idPasE AND encMov.IdEncabMov2 = ins.idPas
	 ORDER BY encMov.IdEncabMov
	 --//
 END	
 --//
 
 -- Insertar Los Nuevos Encabezados_Cont
 --//
  IF COALESCE(@Escont,1)=1
 BEGIN
	 INSERT INTO Encabezados_Cont
	 (IdEncab, 
	  IdCuenta, Debito, Credito, Nota, 
	  IdCliente, 
	  IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, Vence, IdCentroCosto, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado,
	  DebitoExt, CreditoExt)
	 SELECT 
	  ins.id, 
	  IdCuenta, Debito, Credito, Nota, 
	  CASE WHEN COALESCE(@IdCliente, -1) = -1 THEN IdCliente ELSE @IdCliente END, 
	  IdClienteBanco, IdInventario, DocReferencia, RetencionBase, RetencionPorc, 
	  CASE WHEN @FechaVenceT IS NULL THEN Vence ELSE @FechaVenceT END AS Vence,
	  IdCentroCosto, IdAbonaDif, IdAbonaCheque, EsRevisado, EsDeducible, IdEmpleado,
	  DebitoExt, CreditoExt
	 FROM Encabezados_Cont encCont INNER JOIN @InsertedIdEncabs ins
	 ON	  encCont.IdEncab = ins.idPas
	 --//
	 END

		INSERT INTO EncabezadosEspecial
		(IdEncab, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05,
		Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, 
		Especial_11, Especial_12, Especial_13, Especial_14, Especial_15,
		Especial_16, Especial_17, Especial_18, Especial_19, Especial_20,
		Especial_21, Especial_22, Especial_23, Especial_24, Especial_25,
		Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, 
		Especial_31, Especial_32, Especial_33, Especial_34, Especial_35,
		Especial_36, Especial_37, Especial_38, Especial_39, Especial_40)
		SELECT id, Especial_01, Especial_02, Especial_03, Especial_04, Especial_05,
		Especial_06, Especial_07, Especial_08, Especial_09, Especial_10, 
		Especial_11, Especial_12, Especial_13, Especial_14, Especial_15,
		Especial_16, Especial_17, Especial_18, Especial_19, Especial_20,
		Especial_21, Especial_22, Especial_23, Especial_24, Especial_25,
		Especial_26, Especial_27, Especial_28, Especial_29, Especial_30, 
		Especial_31, Especial_32, Especial_33, Especial_34, Especial_35,
		Especial_36, Especial_37, Especial_38, Especial_39, Especial_40
		FROM EncabezadosEspecial enew INNER JOIN @InsertedIdEncabs ins
		ON ins.idPas=enew.IdEncab

	 /*	OPERACION EJECUTADA EXITOSAMENTE */
	 SET @Exito = 1 
	 Select IdEncab, IdDocumento From 
	 @InsertedIdEncabs ins INNER JOIN Encabezados enc
	 ON ins.id = enc.IdEncab


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


GO
IF OBJECT_ID(N'dbo.GetMovimientosFactElec', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.GetMovimientosFactElec AS RETURN 0;');
GO
ALTER PROCEDURE [dbo].[GetMovimientosFactElec]
	@idEncab int
AS
BEGIN


	SELECT  
	ROW_NUMBER()OVER(PARTITION BY VEncMov.IdEncab ORDER BY VEncMov.IdEncabMov) AS numLineas, VEncMov.IdEncab, VEncMov.IdEncabMov, VEncMov.IdInventario, VEncMov.Cantidad, VEncMov.FactorCantidad, VEncMov.NomInventario, VEncMov.ValorUnitario, VEncMov.CodInventario, VEncMov.CodMoneda, VEncMov.IVAporc, VEncMov.ValorIva, ValorIvaExt, VEncMov.TipoImptoConsumo, VEncMov.ValorImptoConsumo, VEncMov.ValorImptoConsumoMov, VEncMov.ValorImptoConsumoMovExt, VEncMov.PorcentajeImpCon, VEncMov.Dcto, VEncMov.DctoFactor, VEncMov.ValorDcto, ValorDctoExt, VEncMov.SubTotalSinDcto, VEncMov.SubTotalSinDctoExt, VEncMov.TotalMovCal, VEncMov.TotalMovCalExt, VEncMov.SubTotalMov, VEncMov.SubTotalMovExt, VEncMov.ValorUnitarioConDcto, VEncMov.TotalMovMasIva, VEncMov.ValorUnitConIva, VEncMov.NotaMov, VEncMov.EsVisible, VEncMov.IdUnidadDIAN, VEncMov.CodUnidadDIAN, VEncMov.NomUnidadDIAN, VEncMov.CodUNSPSC, VEncMov.NotaLinea, VEncMov.NomAgrup1, VEncMov.NomAgrup2, VEncMov.ValorUnitarioUnidad, ValorUnitarioExt,
	  VEncMov.PrecioTotal, (Cantidad * ValorUnitarioExt - ValorDctoExt + ValorImptoConsumo + ValorIvaExt + ImptoSaludableValor) AS PrecioTotalExt, VEncMov.NomLote, VEncMov.VenceMov, VEncMov.FactorCantidad4,
	  VEncMov.ImptoSaludableTipo, VEncMov.ImptoSaludableValor, VEncMov.ImptoSaludableValorMov, VEncMov.ImptoSaludableValorMovExt

FROM VMovimientosFactElectronica AS VEncMov
WHERE VEncMov.IdEncab = @idEncab
END
GO
PRINT N'Refreshing Procedure [dbo].[TrasladarTerceros]...';


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


GO
-- Refactoring step to update target server with deployed transaction logs
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'd2dcecef-eca7-4d8f-a308-7d6a7781eb56')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('d2dcecef-eca7-4d8f-a308-7d6a7781eb56')
IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '46e4add2-2fa7-4b7e-b5ef-b56d0e6a9f2d')
INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('46e4add2-2fa7-4b7e-b5ef-b56d0e6a9f2d')

GO

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

	/*
	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)]					
	--------------------------------------------------------------------------------------
	*/

	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%ImptoSaludableValor%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',ImptoSaludableValor' WHERE EsMov=1 and EsCont=1

	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%ImptoSaludableTipo%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',ImptoSaludableTipo' WHERE EsMov=1 and EsCont=1

	if not exists(select * from Cuentas_Grupos where IdGrupoCuenta = 35)
		insert into Cuentas_Grupos(IdGrupoCuenta, NomGrupoCuenta, EsRetencion)
		values(35,'Impuesto Saludable',0)

	--Valores para impuestos saludables
	--//
	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 1)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (1, 0, 0, 0, '2023-01-01', '2023-12-31', 10, 1)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 2)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (2, 0, 0, 0, '2024-01-01', '2024-12-31', 15, 0)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 3)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (3, 1, 0, 6, '2023-01-01', '2023-12-31', 0, 1)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 4)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (4, 1, 6, 10, '2023-01-01', '2023-12-31', 18, 1)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 5)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (5, 1, 10, 999999, '2023-01-01', '2023-12-31', 35, 1)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 6)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (6, 1, 0, 6, '2024-01-01', '2024-12-31', 0, 0)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 7)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (7, 1, 6, 10, '2024-01-01', '2024-12-31', 28, 0)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 8)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (8, 1, 10, 999999, '2024-01-01', '2024-12-31', 55, 0)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 9)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (9, 1, 0, 5, '2025-01-01', '2025-12-31', 0, 0)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 10)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (10, 1, 5, 9, '2025-01-01', '2025-12-31', 38, 0)

	IF NOT EXISTS(SELECT * FROM Impuestos_SaludablesValores WHERE IdValor = 11)
		INSERT INTO Impuestos_SaludablesValores (IdValor, IdTipo, RangoIni, RangoFin, FechaIni, FechaFin, Valor, EsActivo)
		VALUES (11, 1, 9, 999999, '2025-01-01', '2025-12-31', 65, 0)
GO

GO
PRINT N'Update complete.';


GO

--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 949)
BEGIN
INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (359, 949, 'Impuesto saludable')
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
