--Hash:8A796F130EB526A6B2D257E43AFEEB84

-- 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 = 961)
BEGIN
    PRINT N'Scripts_961.sql: la version 961 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 < 961
)
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
PRINT N'Dropping Index [dbo].[VInventarios_CostoPromedio_00].[IX_CostoProm]...';


GO
DROP INDEX [IX_CostoProm]
    ON [dbo].[VInventarios_CostoPromedio_00];


GO
PRINT N'Removing schema binding from [dbo].[VInventarios_CostoPromedio_00]...';
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 OBJECT_ID(N'dbo.Encabezados_Mov', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Encabezados_Mov', N'NumOrdenServicio') IS NULL
BEGIN
    ALTER TABLE [dbo].[Encabezados_Mov]
        ADD [NumOrdenServicio] NVARCHAR (20) NULL;
END


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


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


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


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


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]...';
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].[VInventarios_Existencia_Recursos]...';


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


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].[VCostoPromedio_Cruces]...';


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


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


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


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


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


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].[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
EXECUTE sp_refreshsqlmodule N'[dbo].[CostoPromedioPorInventario_v2]';


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


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


GO
PRINT N'Altering Procedure [dbo].[GetVentasAgrupadoPorCliVend]...';
IF OBJECT_ID(N'dbo.GetVentasAgrupadoPorCliVend', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GetVentasAgrupadoPorCliVend] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetVentasAgrupadoPorCliVend]
	@IdEmpresas NVARCHAR(1000) = '',
	@FechaIni NVARCHAR(10) =  '',
	@FechaFin NVARCHAR(10) = '',
	@IdDocs NVARCHAR(1000) = '',
    @IdEmpleado NVARCHAR(1000) = '',
    @IdProducto INT = NULL,
    @IdCliente INT = NULL,
    @EsAgrupCentro BIT=0,
    @EsKit BIT=0,
    @IdCentroCosto INT = NULL,
	@IdSucursal INT = NULL,
	@IdDir INT = NULL,
    @EsAgrupDoc BIT=0,
	@IdBodega NVARCHAR(1000) = ''

AS
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON;	

DECLARE

@FechaIniT DATETIME,
@FechaFinT DATETIME


SET @FechaIniT = CAST(CONVERT(DATETIME, @FechaIni, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFinT = CAST(CONVERT(DATETIME, @FechaFin, 103) + ' 23:59:59' AS DATETIME)


;with tmpMov(ValorTRM, IdEncabMov,IdEncab,IdInventario,IdBodega,IdLote,Cantidad,CantConFactor,CantidadFisica,IdUnidad,FactorCantidad,FactorMovim, ValorUnitario,ValorUnitarioExt,ValorIva,ValorImptoConsumo,TotalMov, IdCliente, Vence, IdCentroCosto, Dcto, EsIvaAlCosto, EsVisible, ValorDctoUnit, SubTotal, SubTotalSinDcto, ValorDcto, SubIVA, EsFactorMov, ValorImptoConsumoMov, IdClienteVend, IdCliente1, IdDocumento, IdClienteVend2, IdCliente1_IdDir, NumDocumento, IdPrefijo, Fecha, IdAutomotor, Dimensiones, Peso, IdEmpleado, NumOrdenServicio)
as
(
    SELECT EncMov.ValorTRM,
    IdEncabMov,
    EncMov.IdEncab,
    EncMov.IdInventario,
    IdBodega,
    IdLote,
    Cantidad,
    Cantidad * FactorCantidad AS CantConFactor,
    CantidadFisica,
    EncMov.IdUnidad,
    FactorCantidad,
    FactorMovim,
    ValorUnitario,
    ValorUnitarioExt,
    EncMov.ValorIva,
    EncMov.ValorImptoConsumo,
    TotalMov,
    IdCliente,
    EncMov.Vence,
    IdCentroCosto,
    Dcto,
    EncMov.EsIvaAlCosto,
    EsVisible,
    ValorUnitario * Dcto / 100 AS ValorDctoUnit,
    (Cantidad * FactorCantidad * ValorUnitario) * (1 - Dcto / 100) AS SubTotal,
    Cantidad * FactorCantidad * ValorUnitario AS SubTotalSinDcto,
    Cantidad * FactorCantidad * ValorUnitario * Dcto / 100 AS ValorDcto,
    (Cantidad * FactorCantidad * ValorUnitario) * (1 - Dcto / 100) * EncMov.ValorIva / 100 AS SubIVA,
    inv.EsFactorMov,
    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,
    COALESCE(IdVendedor, IdClienteVend) AS IdClienteVend,
    IdCliente1,
    IdDocumento,
    IdClienteVend2,
    IdCliente1_IdDir,
    NumDocumento,
    IdPrefijo,
    Fecha,
    IdAutomotor,
    cantidad * FactorCantidad * (EncMov.CantDim1 * EncMov.CantDim2 * EncMov.CantDim3) AS Dimensiones,
    (cantidad * FactorCantidad * EncMov.CantDim4) AS Peso,
    EncMov.IdEmpleado,
    EncMov.NumOrdenServicio

    FROM dbo.Encabezados_Mov AS EncMov
    INNER JOIN dbo.Inventarios inv ON EncMov.IdInventario = inv.IdInventario
    INNER JOIN dbo.Encabezados Enc ON Enc.IdEncab = EncMov.IdEncab

    WHERE (EsVisible = 1)
    AND (inv.EsFactorMov IN (1, 2))
    AND Enc.EsAnulado = 0
    AND Enc.IdEmpresa IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdEmpresas))
    AND Enc.Fecha BETWEEN @FechaIniT AND @FechaFinT
    AND Enc.IdDocumento IN (SELECT nstr FROM iter$charlist_to_tbl(@IdDocs, DEFAULT))
    AND (@IdProducto IS NULL OR EncMov.IdInventario = @IdProducto)
    AND (@IdCliente IS NULL OR IdCliente1 = @IdCliente)
    AND (@IdCentroCosto IS NULL OR IdCentroCosto = @IdCentroCosto)
    AND (@IdSucursal IS NULL OR Enc.IdSucursal = @IdSucursal)
    AND (@IdDir IS NULL OR Enc.IdCliente1_IdDir = @IdDir)
    AND (@IdEmpleado IS NULL OR IdClienteVend IN (SELECT number FROM iter$simple_intlist_to_tbl(COALESCE(@IdEmpleado, '0'))))
    AND (LEN(@IdBodega) = 0 OR EncMov.IdBodega IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdBodega)))

    UNION ALL

    SELECT EncMov.ValorTRM,
    EncMov.IdEncabMov,
    EncMov.IdEncab,
    EncMov.IdInventario,
    EncMov.IdBodega,
    EncMov.IdLote,
    EncMov.Cantidad,
    EncMov.Cantidad * EncMov.FactorCantidad AS CantConFactor,
    EncMov.CantidadFisica,
    EncMov.IdUnidad,
    EncMov.FactorCantidad,
    EncMov.FactorMovim,
    EncMov.ValorUnitario,
    EncMov.ValorUnitarioExt,
    EncMov.ValorIva,
    EncMov.ValorImptoConsumo,
    EncMov.TotalMov,
    EncMov.IdCliente,
    EncMov.Vence,
    EncMov.IdCentroCosto,
    EncMov.Dcto,
    EncMov.EsIvaAlCosto,
    EncMov.EsVisible,
    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 inv.EsFactorMov = 2 THEN 3 ELSE inv.EsFactorMov END EsFactorMov,
    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,
    COALESCE(EncMov.IdVendedor, IdClienteVend) AS IdClienteVend,
    IdCliente1,
    IdDocumento,
    IdClienteVend2,
    IdCliente1_IdDir,
    NumDocumento,
    IdPrefijo,
    Fecha,
    IdAutomotor,
    (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.CantDim1 * EncMov.CantDim2 * EncMov.CantDim3) AS Dimensiones,
    (EncMov.Cantidad * EncMov.FactorCantidad * EncMov.CantDim4) AS Peso,
    EncMov.IdEmpleado,
    EncMov.NumOrdenServicio

    FROM dbo.Encabezados_Mov AS EncMov
    INNER JOIN Encabezados_Mov AS EncMov1 ON EncMov.IdEncabMov2 = EncMov1.IdEncabMov
    INNER JOIN dbo.Inventarios inv ON EncMov1.IdInventario = inv.IdInventario
    INNER JOIN dbo.Encabezados Enc ON Enc.IdEncab = EncMov.IdEncab

    WHERE EncMov.IdInventario <> EncMov1.IdInventario
    AND (inv.EsFactorMov IN (0, 2))
    AND Enc.EsAnulado = 0
    AND Enc.IdEmpresa IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdEmpresas))
    AND Enc.Fecha BETWEEN @FechaIniT AND @FechaFinT
    AND Enc.IdDocumento IN (SELECT nstr FROM iter$charlist_to_tbl(@IdDocs, DEFAULT))
    AND (@IdProducto IS NULL OR EncMov.IdInventario = @IdProducto)
    AND (@IdCliente IS NULL OR IdCliente1 = @IdCliente)
    AND (@IdCentroCosto IS NULL OR EncMov.IdCentroCosto = @IdCentroCosto)
    AND (@IdSucursal IS NULL OR Enc.IdSucursal = @IdSucursal)
    AND (@IdDir IS NULL OR Enc.IdCliente1_IdDir = @IdDir)
    AND (@IdEmpleado IS NULL OR IdClienteVend IN (SELECT number FROM iter$simple_intlist_to_tbl(COALESCE(@IdEmpleado, '0'))))
    AND (LEN(@IdBodega) = 0 OR EncMov.IdBodega IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdBodega))) 
),

--cte tmpAgrup
tmpAgrup(IdEncab, IdCliente1, IdClienteVend, IdInventario, TotDcto, TotIva, TotSubTotSinDcto, TotSubTotal, TotCantConFactor, TotValorUnitario, IdCentroCosto, IdLote, TotalImptoConsumoMov, NumDocumento, IdPrefijo, Fecha, FactorInventario, IdDocumento, IdClienteVend2, IdCliente1_IdDir, CodDocumento, ValorTRM, IdAutomotor, TotDimensiones, TotPeso, IdEmpleado, NumOrdenServicio)
as
(
    SELECT IdEncab,
    IdCliente1,
    IdClienteVend,
    VEncMov.IdInventario,
    SUM(VEncMov.ValorDcto) AS TotDcto,
    SUM(VEncMov.SubIVA) AS TotIva,
    SUM(VEncMov.SubTotalSinDcto) AS TotSubTotSinDcto,
    SUM(VEncMov.SubTotal) AS TotSubTotal,
    SUM(VEncMov.CantConFactor) AS TotCantConFactor,
    SUM(VEncMov.ValorUnitario) AS TotValorUnitario,
    VEncMov.IdCentroCosto,
    VEncMov.IdLote,
    SUM(VEncMov.ValorImptoConsumoMov) AS TotalImptoConsumoMov,
    NumDocumento,
    IdPrefijo,
    Fecha,
    FactorInventario,
    VEncMov.IdDocumento,
    IdClienteVend2,
    IdCliente1_IdDir,
    CodDocumento,
    MAX(ValorTRM),
    MAX(IdAutomotor),
    SUM(VEncMov.Dimensiones) AS TotDimensiones,
    SUM(VEncMov.Peso) AS TotPeso,
    VEncMov.IdEmpleado,
    VEncMov.NumOrdenServicio

    FROM tmpMov AS VEncMov
    INNER JOIN dbo.Documentos AS Doc ON VEncMov.IdDocumento = Doc.IdDocumento
    WHERE 
    EsFactorMov <> (CASE WHEN @esKit = 0 THEN 2 ELSE 3 END)
    
    GROUP BY IdCliente1,
    IdClienteVend,
    IdEncab,
    VEncMov.IdDocumento,
    IdClienteVend2,
    IdCliente1_IdDir,
    CodDocumento,
    NumDocumento,
    IdPrefijo,
    Fecha,
    FactorInventario,
    IdCentroCosto,
    IdInventario,
    VEncMov.IdLote,
    VEncMov.IdEmpleado,
    VEncMov.NumOrdenServicio
),

--cte tmpCosto
tmpCosto(IdEncab, IdInventario, IdLote, CostoProm, CantidadTotal)
as
(
    SELECT IdEncab,
    IdInventario,
    IdLote,
    CostoTotal / CantidadTotal AS CostoProm,
    CantidadTotal
    FROM 
    (
        SELECT EncMov.IdEncab,
        EncMov.IdInventario,
        EncMov.IdLote,
        SUM(EncMov.Cantidad * EncProm.CostoProm) AS CostoTotal,
        SUM(EncMov.Cantidad) AS CantidadTotal,
        MAX(EncProm.Orden) AS OrdenMax 
        FROM dbo.Encabezados_Mov_CostoProm AS EncProm
        INNER JOIN dbo.Encabezados_Mov AS EncMov ON EncProm.IdEncabMov = EncMov.IdEncabMov
        INNER JOIN dbo.Encabezados AS Enc ON Enc.IdEncab = EncMov.IdEncab 
        WHERE (EncMov.Cantidad > 0)
        GROUP BY EncMov.IdEncab,
        EncMov.IdInventario,
        EncMov.IdLote
    ) AS q
),

--cte tmpCostoCruce
tmpCostoCruce( IdEncab, IdInventario, IdLote,CostoProm,CantidadTotal)
as
(
    SELECT q1.IdEncab,
    IdInventario,
    IdLote,
    CostoTotal / CantidadTotal AS CostoProm,
    CantidadTotal
    FROM 
    (
        SELECT IdEncab,
        IdInventario,
        IdLote,
        SUM(Cantidad * CostoProm) AS CostoTotal,
        SUM(Cantidad) AS CantidadTotal,
        MAX(Orden) AS OrdenMax 
        FROM 
        (
            SELECT VCruce.IdEncab,
            EncMov.IdInventario,
            EncMov.IdLote,
            EncMov.Cantidad,
            EncProm.CostoProm,
            EncProm.Orden 
            FROM dbo.VCruces_Origen AS VCruce
            INNER JOIN dbo.Encabezados_Mov AS EncMov ON EncMov.IdEncabMov = VCruce.IdEncabMov2
            AND EncMov.IdEncabMov <> VCruce.IdEncabMov1
            INNER JOIN dbo.Encabezados_Mov_CostoProm AS EncProm ON EncProm.IdEncabMov = EncMov.IdEncabMov
            UNION ALL
            SELECT VCruce.IdEncab,
            EncMov.IdInventario,
            EncMov.IdLote,
            EncMov.Cantidad,
            EncProm.CostoProm,
            EncProm.Orden 
            FROM dbo.VCruces_Origen AS VCruce
            INNER JOIN dbo.Encabezados_Mov AS EncMov ON EncMov.IdEncabMov2 = VCruce.IdEncabMov2
            AND EncMov.IdEncabMov2 <> VCruce.IdEncabMov1
            INNER JOIN dbo.Encabezados_Mov_CostoProm AS EncProm ON EncProm.IdEncabMov = EncMov.IdEncabMov
        ) AS q
        GROUP BY IdEncab,
        IdInventario,
        IdLote
    ) AS q1 
),

--cte tmp
tmp (IdCliente1, IdClienteVend, IdEncab,IdDocumento,IdClienteVend2,IdCliente1_IdDir,CodDocumento,NumDocumento,IdPrefijo,Fecha, ValorTRM, IdCentroCosto,IdInventario,TotDcto,TotIva,TotalImptoConsumo,TotSubTotSinDcto,TotSubTotal,TotSubTotalConIva,TotCantConFactor, TotValorUnitario,CostoProm,CantidadTotal,FactorInventario,IdAutomotor, TotDimensiones, TotPeso, IdEmpleado, NumOrdenServicio)
as
(
    SELECT IdCliente1,
    IdClienteVend,
    IdEncab,
    IdDocumento,
    IdClienteVend2,
    IdCliente1_IdDir,
    CodDocumento,
    NumDocumento,
    IdPrefijo,
    Fecha,
    MAX(ValorTRM),
    CASE WHEN @EsAgrupCentro = 1 THEN q.IdCentroCosto ELSE NULL END AS IdCentroCosto,
    CASE WHEN @EsAgrupDoc = 0 THEN q.IdInventario ELSE NULL END AS IdInventario,
    SUM(ISNULL(TotDcto, 0)) TotDcto,
    SUM(ISNULL(TotIva, 0)) TotIva,
    SUM(ISNULL(TotalImptoConsumo, 0)) TotalImptoConsumo,
    SUM(ISNULL(TotSubTotSinDcto, 0)) TotSubTotSinDcto,
    SUM(ISNULL(TotSubTotal, 0)) TotSubTotal,
    SUM(ISNULL(TotSubTotalConIva, 0)) TotSubTotalConIva,
    SUM(ISNULL(TotCantConFactor, 0)) TotCantConFactor,
    SUM(ISNULL(TotValorUnitario, 0)) TotValorUnitario,
    SUM(ISNULL(q.CostoProm, 0)) CostoProm,
    SUM(ISNULL(CantidadTotal, 0)) CantidadTotal,
    FactorInventario,
    MAX(ISNULL(IdAutomotor, 0)) IdAutomotor,
    SUM(ISNULL(TotDimensiones, 0)) TotDimensiones,
    SUM(ISNULL(TotPeso, 0)) TotPeso,
    IdEmpleado, 
    NumOrdenServicio
    FROM 
    (
        SELECT V1.IdCliente1,
        V1.IdClienteVend,
        V1.IdInventario,
        V1.IdEncab,
        V1.IdDocumento,
        IdClienteVend2,
        IdCliente1_IdDir,
        IdCentroCosto,
        CodDocumento,
        NumDocumento,
        IdPrefijo,
        Fecha,
        ValorTRM,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotDcto) * (FactorInventario) ELSE V1.TotDcto END AS TotDcto,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotIva) * (FactorInventario) ELSE V1.TotIva END AS TotIva,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotalImptoConsumoMov) * (FactorInventario) ELSE V1.TotalImptoConsumoMov END AS TotalImptoConsumo,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotSubTotSinDcto) * (FactorInventario) ELSE V1.TotSubTotSinDcto END AS TotSubTotSinDcto,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotSubTotal) * (FactorInventario) ELSE V1.TotSubTotal END AS TotSubTotal,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotSubTotal + V1.TotIva + V1.TotalImptoConsumoMov) * (FactorInventario)ELSE V1.TotSubTotal + V1.TotIva + V1.TotalImptoConsumoMov END AS TotSubTotalConIva,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotCantConFactor) * (FactorInventario) ELSE V1.TotCantConFactor END AS TotCantConFactor,
        CASE WHEN FactorInventario <> 0 THEN -(V1.TotValorUnitario) * (FactorInventario) ELSE V1.TotValorUnitario END AS TotValorUnitario,
        (COALESCE(costPromInv.CostoProm, costPromInv2.CostoProm) * COALESCE(costPromInv.CantidadTotal, costPromInv2.CantidadTotal)) AS CostoProm,
        COALESCE(costPromInv.CantidadTotal, costPromInv2.CantidadTotal) AS CantidadTotal,
        FactorInventario,
        IdAutomotor,
        TotDimensiones,
        TotPeso,
        IdEmpleado, 
        NumOrdenServicio
        FROM tmpAgrup AS V1
        LEFT JOIN tmpCosto AS costPromInv ON V1.IdEncab = costPromInv.IdEncab
        AND V1.IdInventario = costPromInv.IdInventario
        LEFT JOIN tmpCostoCruce costPromInv2 ON V1.IdEncab = costPromInv2.IdEncab
        AND V1.IdInventario = costPromInv2.IdInventario 
        WHERE (COALESCE(costPromInv.CostoProm, costPromInv2.CostoProm) IS NULL
        OR COALESCE(V1.IdLote, 0) = COALESCE(costPromInv2.IdLote, 0)
        OR COALESCE(V1.IdLote, 0) = COALESCE(costPromInv.IdLote, 0))
    ) AS q
    GROUP BY q.IdCliente1,
    q.IdClienteVend,
    q.IdEncab,
    q.idDocumento,
    IdClienteVend2,
    IdCliente1_IdDir,
    CodDocumento,
    NumDocumento,
    IdPrefijo,
    Fecha,
    FactorInventario,
    CASE WHEN @EsAgrupCentro = 1 THEN q.IdCentroCosto ELSE NULL END,
    CASE WHEN @EsAgrupDoc = 0 THEN q.IdInventario ELSE NULL END,
    IdEmpleado, 
    NumOrdenServicio

),

--cte tempTerceros
tempTerceros(IdEncab,Cliente)
as
(
    SELECT IdEncab,
    cli1.Identificacion + '-' + LTRIM(RTRIM(cli1.Nombres + ' ' + cli1.Apellidos)) Cliente
    FROM [dbo].[Encabezados_Clientes] encab
    INNER JOIN VClientes2 AS cli1 ON encab.IdCliente = cli1.IdCliente
),

--cte tempTercerosFinal
tempTercerosFinal(IdEncab,Cliente)
as
(
    SELECT DISTINCT idencab,
    STUFF((SELECT DISTINCT ', ' + CAST(cli.Cliente AS NVARCHAR(MAX)) FROM tempTerceros cli WHERE cli.idEncab = cli1.IdEncab FOR XML PATH ('')), 1, 1, '') AS IdUsuarios
    FROM tempTerceros cli1 
)

--CONSULTA FINAL
SELECT 
Cli2.Identificacion AS Cli2Identificacion, 
Cli1.Identificacion AS Cli1Identificacion, 
Cli1.Nombres AS Cli1Nombres, 
Cli1.Apellidos AS Cli1Apellidos, 
LTRIM(RTRIM(Cli1.Nombres + ' ' + Cli1.Apellidos)) AS Cli1NomCompleto, 
Cli2.Nombres AS Cli2Nombres, 
Cli2.Apellidos AS Cli2Apellidos, 
LTRIM(RTRIM(Cli2.Nombres + ' ' + Cli2.Apellidos)) AS Cli2NomCompleto, 
LTRIM(RTRIM(CliVend2.Nombres + ' ' + CliVend2.Apellidos)) AS CliVend2NomCompleto, 
Inv.CodInventario, 
Inv.NomInventario, 
Inv.CodInventario + N' ' + Inv.NomInventario AS NomInvCompleto,
TotDcto,
'TotDctoExt' = CASE WHEN ValorTRM = 0 THEN 0 ELSE (TotDcto / ValorTRM) END,
TotalImptoConsumo,
'TotalImptoConsumoExt' = CASE WHEN ValorTRM = 0 THEN 0 ELSE  (TotalImptoConsumo / ValorTRM) END,
TotIva,
'TotIvaExt' = CASE WHEN  ValorTRM = 0 THEN 0 ELSE  (TotIva / ValorTRM) END,
TotSubTotSinDcto,
'TotSubTotSinDctoExt' = CASE WHEN  ValorTRM = 0 THEN 0 ELSE  (TotSubTotSinDcto / ValorTRM) END,
TotSubTotal,
'TotSubTotalExt' = CASE WHEN ValorTRM = 0 THEN 0 ELSE (TotSubTotal / ValorTRM) END,
TotSubTotalConIva,
'TotSubTotalConIvaExt' = CASE WHEN ValorTRM = 0 THEN 0 ELSE (TotSubTotalConIva / ValorTRM) END,
TotCantConFactor,
TotValorUnitario,
'TotValorUnitarioExt' = CASE WHEN ValorTRM = 0 THEN 0 ELSE (TotValorUnitario / ValorTRM) END,
TotDimensiones,
TotPeso,
CodDocumento, 
NumDocumento,
IdPrefijo,
RTRIM(LTRIM(CodDocumento + ' ' + COALESCE(IdPrefijo,''))) + ' ' + CAST(NumDocumento AS NVARCHAR(200)) AS DescripDoc,
Fecha,
Inv_Agrup1.CodigoAgrup1,
Inv_Agrup1.NomAgrup1,
Inv_Agrup2.CodigoAgrup2,
Inv_Agrup2.NomAgrup2,
NomCentroCosto,
ciud.NomCiudad as NomCiudadCli,
CostoProm,
'CostoPromExt' = CASE WHEN ValorTRM = 0 THEN 0 ELSE (CostoProm / ValorTRM ) END,
CantidadTotal,
Cli1.CodigoInterno as CodigoInternoCli,
Cli2.CodigoInterno as CodigoInternoVend,
dirCli1.IdCiudad as CodigoCiudadir,
cliAgrup1.IdAgrup1 as CodigoAgrupCli,
cliAgrup1.NomAgrup1 as NomAgrupCli,
dirCli1.Direccion as DireccionPrincipal,
dirCli1.NomCiudad as CiudadDir,
case when FactorInventario=1 then 1 else 0 end TipoVenta,
FactorInventario,CodigoBarras,
cast(coalesce(dirCli1.Nota,'') as nvarchar(20))+'-'+ coalesce(dirCli1.NomCiudad,'') +'-'+ dirCli1.Direccion as DirCompleta,
NomZona1,
autom.IdAutomotor+'-'+NomAutomotor as Automotor,
autom.NumPlaca+'-'+marca.NomMarca as PlacaAutomotor,
CliAuto.Identificacion AS CliAutoIdentificacion,
LTRIM(RTRIM(CliAuto.Nombres + ' ' + CliAuto.Apellidos)) AS CliAutoNomCompleto,
terc.Cliente as Terceros,
--Empleados
CliEmp.Identificacion AS CliEmpIdentificacion, 
CliEmp.Nombres AS CliEmpNombres, 
CliEmp.Apellidos AS CliEmpApellidos, 
LTRIM(RTRIM(CliEmp.Nombres + ' ' + CliEmp.Apellidos)) AS CliEmpNomCompleto,
tmp.NumOrdenServicio
FROM tmp
INNER JOIN dbo.VClientes2 AS Cli1 ON tmp.IdCliente1 = Cli1.IdCliente 
LEFT JOIN dbo.Inventarios AS Inv ON tmp.IdInventario = Inv.IdInventario 
LEFT JOIN dbo.Ciudades AS ciud ON Cli1.IdCiudad = ciud.IdCiudad 
LEFT JOIN dbo.Inventarios_Agrup2 AS Inv_Agrup2 ON Inv.IdAgrup2 = Inv_Agrup2.IdAgrup2 
LEFT JOIN dbo.Inventarios_Agrup1 AS Inv_Agrup1 ON Inv.IdAgrup1 = Inv_Agrup1.IdAgrup1 
LEFT JOIN dbo.CentroCostos AS centCost ON tmp.IdCentroCosto = centCost.IdCentroCosto 
LEFT JOIN dbo.VClientes2 AS Cli2 ON tmp.IdClienteVend = Cli2.IdCliente 
LEFT JOIN dbo.VClientes2 AS CliVend2 ON tmp.IdClienteVend2 = CliVend2.IdCliente 
LEFT JOIN [dbo].[VClientesDir_DetFin] as dirCli1 on tmp.IdCliente1_IdDir=dirCli1.IdClienteDir 
LEFT JOIN [dbo].[Clientes_Agrup1] as cliAgrup1 on Cli1.IdAgrup1=cliAgrup1.IdAgrup1 
LEFT JOIN [dbo].[Clientes_Zona1] as zona1 on zona1.IdZona1=Cli1.IdZona1 
LEFT JOIN [dbo].[Reparacion_Automotores] AS autom on tmp.IdAutomotor=autom.IdAutomotor 
LEFT JOIN [dbo].[Reparacion_Marcas] AS marca on marca.IdMarca=autom.IdMarca 
LEFT JOIN dbo.VClientes2 AS CliAuto ON autom.IdCliente = CliAuto.IdCliente 
LEFT JOIN tempTercerosFinal AS terc on terc.IdEncab=tmp.IdEncab
LEFT JOIN dbo.VClientes2 AS CliEmp ON tmp.IdEmpleado = CliEmp.IdCliente 

ORDER BY Cli2.Identificacion,Cli1.Identificacion 
OPTION(RECOMPILE)

END
GO
PRINT N'Refreshing Function [dbo].[ufnContabilizacion_Normal]...';


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


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].[CrucesDocumentosInsertar]...';


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


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].[CopiarDocumentos]...';


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


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


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


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].[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].[GetMovimientosFactElec]...';


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


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].[GenerarFormulaPorInventario]...';


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


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


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


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

	--incluir campos de num orden de servicio
	--//
	IF NOT EXISTS(SELECT * FROM Documentos WHERE MovCamposDisp like '%NumOrdenServicio%' and EsMov=1 and EsCont=1)
	   UPDATE Documentos SET MovCamposDisp = MovCamposDisp + ',NumOrdenServicio' WHERE EsMov=1 and EsCont=1
GO
	--//


	--Nuevo control para Numero Orden de Servicio
	IF NOT EXISTS (SELECT * FROM Permisos_Controles WHERE IdControl = 1032)
	INSERT INTO Permisos_Controles
	(IdControl, NomControl)
	VALUES (1032, 'NumOrdenServicio')

	--Permisos para el nuevo campo de Num Orden de servicio
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856975)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856975,1, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856976)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856976,2, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856977)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856977,15, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856978)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856978,16, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856979)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856979,17, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856980)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856980,18, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856981)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856981,22, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856982)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856982,41, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856983)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856983,42, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856984)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856984,44, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856985)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856985,46, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856986)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856986,47, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856987)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856987,48, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856988)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856988,50, 1032)
	IF NOT EXISTS (SELECT * FROM Permisos_ControlesPorInterface WHERE IdControlInt =856989)
		INSERT INTO Permisos_ControlesPorInterface 
		(IdControlInt, IdInterface, IdControl)
		VALUES (856989,51, 1032)
GO

GO
PRINT N'Update complete.';


GO



--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 961)
BEGIN
    INSERT INTO dbo.ZiurVersiones (IdVersion, NumVersion, Descripcion)
    VALUES (371, 961, 'Desarrollo OS en mov inventarios');
END
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
