--Hash:E577706F4D08BEA42041F9B05B5DD168

-- 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 = 948)
BEGIN
    PRINT N'Scripts_948.sql: la version 948 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 < 948
)
RAISERROR('Error : hay un script que no se ejecuto , debe ejecutarlo manualmente.', 20, -1) with log
--//

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

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

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


GO
IF OBJECT_ID(N'dbo.GetComisiones', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.GetComisiones AS RETURN 0;');
GO
ALTER PROCEDURE [dbo].[GetComisiones]
	@IdEmpresas NVARCHAR(1000) = '',
	@FechaIni NVARCHAR(10) = '',
	@FechaFin NVARCHAR(10) = '',
	@IdDocs NVARCHAR(1000) = '',
    @IdEmpleado  NVARCHAR(max) = '',
    @IdProducto INT = NULL,
    @IdCliente INT = NULL,
    @TipoComi INT,
    @esCont INT,
    @conDcto BIT=0,
	@Detallar BIT = 0,
	@conIva BIT=0,
	@sinRecaudo BIT=0,
	@IdEncab INT= NULL,
	@EsFactorMov INT=NULL,
	@TipoVend INT=1 ,
	@TipoValorComiVenta INT=1
AS
BEGIN
    
DECLARE

@FechaIniT DATETIME,
@FechaFinT DATETIME,
@ctrRecuado INT=-1,
@IdNotCre INT=15,
@conNotCre INT= NULL,
@SepCuenta nvarchar(50),
@CodCuenta nvarchar(50)='',
@CodAgrup nvarchar(50)=''


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET NOCOUNT ON;	

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

-- No incluir documentos sin recaudo
IF  @sinRecaudo=0 and @esCont=1
SET @ctrRecuado=0 

IF @IdNotCre NOT IN(select nstr from iter$charlist_to_tbl(@IdDocs,DEFAULT))
set @conNotCre=15


SELECT @SepCuenta = ValParametro FROM PARAMETROS WHERE CodParametro = 167

if @SepCuenta is not null
BEGIN
SELECT @CodAgrup=nstr from iter$charlist_to_tbl(@SepCuenta,DEFAULT) where listpos=1
SELECT @CodCuenta=nstr from iter$charlist_to_tbl(@SepCuenta,DEFAULT) where listpos=2
set @CodAgrup=replace(@CodAgrup,'*','')
END

SELECT IdEncab,PropIva,IdCuenta,IdEncabcont,ISNULL(Valor,0)Valor,Fecha,IdDocumento
into #tmpCont
FROM
(
	SELECT IdEncab, MAX(ISNULL(PropIva,0))as PropIva,MAX(IdCuenta) as IdCuenta,MAX(IdEncabcont)as IdEncabcont, SUM((Debito - Credito) * CASE WHEN Tipo = 1 THEN Factor ELSE - 1 END) as Valor,MAX(Fecha)as Fecha,MAX(IdDocumento)AS IdDocumento
	FROM
	(
		SELECT Enc.IdEncab, Enc.IdDocumento,Enc.IdPrefijo, EncCont.DocReferencia,Doc.CodDocumento,Enc.NumDocumento, Doc.CodDocumento + N' ' + ISNULL (Enc.IdPrefijo, N'') + CAST(Enc.NumDocumento AS NVARCHAR) + N' ' + ISNULL (EncCont.DocReferencia, N'') AS Descripcion, EncCont.Credito, EncCont.Debito, Enc.IdMoneda, EncCont.IdCliente, Enc.Fecha, CreditoIva as PropIva, tipo,Factor,EncCont.IdCuenta,IdEncabcont, CASE WHEN Doc.FactorInventario = 0 THEN 1 ELSE Doc.FactorInventario * - 1 END AS FactorInv
		FROM            
		(
			SELECT encCont.IdEncab, SUM(encCont.Credito) AS CreditoIva, SUM(encCont.Debito) AS DebitoIva
            FROM            
			dbo.Encabezados_Cont AS encCont INNER JOIN
			dbo.Cuentas AS Cuent ON encCont.IdCuenta = Cuent.IdCuenta
            WHERE        (Cuent.IdGrupoCuenta = 5)
            GROUP BY encCont.IdEncab
		) 
		AS q RIGHT OUTER JOIN
        dbo.Encabezados_Cont AS EncCont ON EncCont.IdEncab = q.IdEncab INNER JOIN
        dbo.Encabezados AS Enc ON EncCont.IdEncab = Enc.IdEncab INNER JOIN
        dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento INNER JOIN
		dbo.cuentas as cuen on cuen.IdCuenta=EncCont.IdCuenta INNER JOIN
        dbo.Cuentas_Tipos AS Cta_T ON cuen.IdCuentaTipo = Cta_T.IdCuentaTipo INNER JOIN
        dbo.Cuentas_Clases AS Cta_C ON Cta_T.IdClase = Cta_C.IdClase 
		WHERE  (CodCuenta=@CodCuenta or CodCuenta like @CodAgrup+'%' ) and (Enc.EsAnulado = 0) 
		--and EncCont.IdEncab not in (select IdEncab from VIdAbonaDoc_02) 
		and Fecha BETWEEN @FechaIniT AND @FechaFinT AND
		Enc.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND
		Enc.IdDocumento IN(select nstr from iter$charlist_to_tbl(@IdDocs,DEFAULT))
	)
	AS q
	GROUP by IdEncab
) AS q1


SELECT Enc.IdEncab, Enc.IdCliente1, CASE WHEN @TipoVend=2 THEN  Enc.IdClienteVend2 ELSE COALESCE (VEncMov.IdVendedorMov, Enc.IdClienteVend) END AS 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.EsFactorMov, VEncMov.IdLote, SUM(VEncMov.ValorImptoConsumoMov) AS TotalImptoConsumoMov, MAX(Doc.CodDocumento) AS CodDocumento, MAX(Doc.FactorInventario) AS FactorInventario, SUM(VEncMov.SubTotal)+SUM(VEncMov.SubIVA) as TotSubTotConIva
into #tmpVend
FROM            
dbo.Encabezados AS Enc INNER JOIN 
dbo.VMov_Factor AS VEncMov ON Enc.IdEncab = VEncMov.IdEncab INNER JOIN
dbo.Documentos AS Doc ON Enc.IdDocumento = Doc.IdDocumento
WHERE        
(Enc.EsAnulado = 0)
GROUP BY Enc.IdCliente1, 
CASE WHEN @TipoVend=2 THEN  Enc.IdClienteVend2 ELSE COALESCE (VEncMov.IdVendedorMov, Enc.IdClienteVend) END, 
Enc.IdEncab, 
VEncMov.IdInventario, 
VEncMov.IdCentroCosto, 
VEncMov.EsFactorMov, 
VEncMov.IdLote

--Crear tabla temporal de comisiones y agregar indice para incrementar rendimiento
--//
SELECT * INTO #VIdAbonaComisiones FROM VIdAbonaComisiones 
CREATE NONCLUSTERED INDEX [IX_#VIdAbonaComisiones] ON #VIdAbonaComisiones([IdEncab] ASC)
--//

SELECT q3.*,Cli2.Identificacion as Cli2Identificacion, 
Cli2.Nombres as Cli2Nombres,
Cli2.Apellidos as Cli2Apellidos, 
LTRIM(RTRIM(Cli2.Nombres + ' ' + Cli2.Apellidos)) AS Cli2NomCompleto,
Cli1.Identificacion as Cli1Identificacion, 
LTRIM(RTRIM(Cli1.Nombres + ' ' + Cli1.Apellidos)) AS Cli1NomCompleto,
NomAgrup1,NomPrefijo,NomSucursal,EmpresaNombre,
case when iditem=0 then '111' else iditem end IdItemFinal
from
(
SELECT 
IdClienteVend,
CASE WHEN @TipoComi in (5,3,7,9) THEN IdInventario ELSE NULL END IdInventario,
CASE WHEN @TipoComi in (5,3,7,9) THEN NombreInventario ELSE NULL END NombreInventario,
CASE WHEN @TipoComi=2 THEN IdAgrup1 ELSE NULL END IdAgrup1,
TotDcto,
TotIva,
TotSubTotSinDcto,
TotSubTotal,
TotCantConFactor,
TotValorUnitario,
MAX(ValorComisionVentas)ValorComisionVentas,
MAX(PorcComisionVentas)PorcComisionVentas,
MAX(ValorComisionRecaudo)ValorComisionRecaudo,
MAX(PorcComisionRecaudo)PorcComisionRecaudo,
MAX(ValorComisionRecaudoCont)ValorComiRecCont,
MAX(PorcComisionRecaudoCont)PorcComiRecCont,
(CASE WHEN @esCont=1 or @Detallar=1  THEN IdEncab ELSE NULL END)IdEncab,
(CASE WHEN @esCont=1  THEN IdCuenta ELSE NULL END)IdCuenta,
(CASE WHEN @esCont=1  THEN IdAbonaDoc ELSE NULL END)IdAbonaDoc,
ISNULL((CASE WHEN @esCont=1  THEN ISNULL(ValorRecaudo,ValorRecaudoSinAbona) ELSE NULL END),0)ValorRecaudo,
(CASE WHEN @esCont=1 or @Detallar=1 THEN CodDocumento ELSE NULL END)CodDocumento,
(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdEmpresa ELSE NULL END)IdEmpresa,
(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdPrefijo  ELSE NULL END)IdPrefijo,
(CASE WHEN @esCont=1 or @Detallar=1  THEN NumDocumento ELSE NULL END)NumDocumento,
(CASE WHEN @esCont=1 or @Detallar=1  THEN fecha ELSE NULL END)fecha,
(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi in(7,8,9,10)  THEN IdCliente1 ELSE NULL END)IdCliente1,
(CASE WHEN @TipoComi=11 THEN IdSucursal ELSE NULL END)IdSucursal,
@TipoComi as TipoComi,@TipoVend as TipoVend,
(CASE WHEN @TipoValorComiVenta=1 THEN MAX(ISNULL(PorcComisionVentas,0)) ELSE MAX(ISNULL(ValorComisionVentas,0)) END)ComisionVentasTotal,
(CASE WHEN @esCont=1 THEN max(ISNULL(IdItemRecaudoCont,'')) ELSE max(ISNULL(IdItemVentas,'')) END) AS IdItem
FROM
(
--	-- Consulta para hallar valores y porcentajes de comision
	SELECT 
	IdClienteVend,
	IdInventario,
	IdAgrup1, 
	(CodInventario+' '+NomInventario) AS NombreInventario,
	TotDcto,
	TotIva,
	TotSubTotSinDcto,
	TotSubTotal,
	TotCantConFactor,
	TotValorUnitario,
	IdEncab,
	ValorRecaudo,
	ValorRecaudoSinAbona,
	CodDocumento,
	NumDocumento,
	fecha,
	IdCuenta,
	IdAbonaDoc,
	IdPrefijo,
	IdCliente1,
	IdEmpresa,
	IdSucursal,
	CASE WHEN ValorBase between BaseEntreVentas and BaseHastaVentas THEN ValorComisionVentas ELSE 0 END AS ValorComisionVentas,
	CASE WHEN ValorBase between BaseEntreVentas and BaseHastaVentas THEN ValorBase*(PorcComisionVentas/100) ELSE 0 END AS PorcComisionVentas,
	CASE WHEN ValorBase between BaseEntreRecaudo and BaseHastaRecaudo THEN ValorComisionRecaudo ELSE 0 END as ValorComisionRecaudo,
	CASE WHEN ValorBase between BaseEntreRecaudo and BaseHastaRecaudo THEN ValorBase*(PorcComisionRecaudo/100) ELSE 0 END AS PorcComisionRecaudo,
	CASE WHEN ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0) between BaseEntreRecaudoCont and BaseHastaRecaudoCont then ValorComisionRecaudoCont ELSE 0 END as ValorComisionRecaudoCont,
	CASE WHEN ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0) between BaseEntreRecaudoCont and BaseHastaRecaudoCont then ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0)*(PorcComisionRecaudoCont/100) ELSE 0 END AS PorcComisionRecaudoCont,
	CASE WHEN ValorBase between BaseEntreVentas and BaseHastaVentas THEN IdItemVentas ELSE 0 END IdItemVentas,
	CASE WHEN ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0) between BaseEntreRecaudoCont and BaseHastaRecaudoCont THEN IdItemRecaudoCont ELSE 0 END IdItemRecaudoCont
	from
		(
--		 --Consulta para escoger los rangos correspondientes
		SELECT 
		q.*,
		COALESCE (Vcomi.BaseEntre,Vcomi3.BaseEntre) BaseEntreVentas,
		ISNULL (Vcomi.BaseHasta,Vcomi3.BaseHasta) BaseHastaVentas,
		ISNULL (Vcomi.PorcComision,Vcomi3.PorcComision) PorcComisionVentas,
		ISNULL (Vcomi.ValorComision,Vcomi3.ValorComision) ValorComisionVentas,
		ISNULL (Vcomi2.BaseEntre,Vcomi4.BaseEntre) BaseEntreRecaudo,
		ISNULL (Vcomi2.BaseHasta,Vcomi4.BaseHasta) BaseHastaRecaudo,
		ISNULL (Vcomi2.PorcComision,Vcomi4.PorcComision) PorcComisionRecaudo,
		ISNULL (Vcomi2.ValorComision,Vcomi4.ValorComision) ValorComisionRecaudo,
		ISNULL (Vcomi5.BaseEntre,Vcomi6.BaseEntre) BaseEntreRecaudoCont,
		ISNULL (Vcomi5.BaseHasta,Vcomi6.BaseHasta) BaseHastaRecaudoCont,
		ISNULL (Vcomi5.PorcComision,Vcomi6.PorcComision) PorcComisionRecaudoCont,
		ISNULL (Vcomi5.ValorComision,Vcomi6.ValorComision) ValorComisionRecaudoCont,
		ISNULL(Vcomi.IdItem,Vcomi3.IdItem)IdItemVentas,
		ISNULL(Vcomi5.IdItem,Vcomi6.IdItem)IdItemRecaudoCont,
		(CASE WHEN @conDcto=1  THEN TotSubTotSinDcto ELSE
		(CASE WHEN @conIva=1 THEN TotSubTotConIva ELSE TotSubTotal END)END)ValorBase
		
		FROM
		(
--			 --Consulta para Valores totales deacuerdo al tipo de comision
			SELECT 
			IdClienteVend,
			CASE WHEN @TipoComi in (5,3,7,9) THEN IdInventario ELSE NULL END IdInventario,
			CASE WHEN @TipoComi in (5,3,7,9) THEN NomInventario ELSE NULL END NomInventario,
			CASE WHEN @TipoComi in (5,3,7,9) THEN CodInventario ELSE NULL END CodInventario,
			CASE WHEN @TipoComi=2 THEN IdAgrup1 ELSE NULL END IdAgrup1,
			(CASE WHEN @esCont=1  THEN MAX(TotDcto) ELSE sum(TotDcto) END)TotDcto,
			(CASE WHEN @esCont=1 THEN MAX(TotIva) ELSE sum(TotIva) END)TotIva,
			(CASE WHEN @esCont=1 THEN MAX(TotSubTotSinDcto) ELSE sum(TotSubTotSinDcto) END)TotSubTotSinDcto,
			(CASE WHEN @esCont=1 THEN MAX(TotSubTotal) ELSE sum(TotSubTotal) END)TotSubTotal,
			(CASE WHEN @esCont=1 THEN MAX(TotCantConFactor) ELSE sum(TotCantConFactor) END)TotCantConFactor,
			(CASE WHEN @esCont=1 THEN MAX(TotValorUnitario) ELSE sum(TotValorUnitario) END)TotValorUnitario,
			(CASE WHEN @esCont=1 THEN MAX(TotSubTotConIva) ELSE sum(TotSubTotConIva) END)TotSubTotConIva,
			(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.IdEncab ELSE NULL END)IdEncab,
			(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdCuenta,tmpCont.IdCuenta) ELSE NULL END)IdCuenta,
			(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdAbonaDoc,tmpCont.IdEncabCont) ELSE NULL END)IdAbonaDoc,
			(CASE WHEN @esCont=1  THEN (CASE WHEN @conIva=1 THEN sum(ISNULL(VIdAbon.Credito,1) * ISNULL(VIdAbon.FactorInv,1) * ISNULL(VIdAbon.FactorSaldo,1)) ELSE sum((ISNULL(VIdAbon.Credito,0)-ISNULL(VIdAbon.PropIva,0))*ISNULL(VIdAbon.FactorInv,1) * ISNULL(VIdAbon.FactorSaldo,1)) END)ELSE NULL END)ValorRecaudo,
			(CASE WHEN @esCont=1 THEN (CASE WHEN @conIva=1 THEN  sum(ISNULL(tmpCont.Valor,0)) ELSE sum(ISNULL(tmpCont.Valor,0)-ISNULL(tmpCont.PropIva,0)) END)ELSE NULL END)ValorRecaudoSinAbona,
		   	(CASE WHEN @esCont=1 or @Detallar=1 THEN qc.CodDocumento END)CodDocumento,
			(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdPrefijo END)IdPrefijo,
			(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.NumDocumento ELSE NULL END)NumDocumento,
			(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.fecha ELSE NULL END)fecha,
			(CASE WHEN @esCont=1 or @Detallar=1 or  @TipoComi in(7,8,9,10)  THEN qc.IdCliente1 ELSE NULL END)IdCliente1,
			(CASE WHEN @TipoComi=11 THEN qc.IdSucursal END)IdSucursal,
			(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdEmpresa END)IdEmpresa
			FROM
			(
			SELECT 
				V1.IdClienteVend as IdClienteVend,
				CASE WHEN @TipoComi in (5,3,7,9) THEN V1.IdInventario ELSE NULL END IdInventario,
				CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.NomInventario ELSE null END NomInventario,
				CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.CodInventario ELSE null END CodInventario,
				CASE WHEN @TipoComi=2 THEN Inv.IdAgrup1 ELSE NULL END IdAgrup1,
				sum(-(V1.TotDcto)*(isnull(@EsFactorMov,FactorInventario))) AS TotDcto,
				sum(-(V1.TotIva)*(isnull(@EsFactorMov,FactorInventario))) AS TotIva,
				sum(-(V1.TotSubTotSinDcto)*(isnull(@EsFactorMov,FactorInventario)))AS TotSubTotSinDcto,
				sum(-(V1.TotSubTotal)*(isnull(@EsFactorMov,FactorInventario)))AS TotSubTotal,
				sum(-(V1.TotCantConFactor)*(isnull(@EsFactorMov,FactorInventario)))AS TotCantConFactor,
				sum(-(V1.TotValorUnitario)*(isnull(@EsFactorMov,FactorInventario)))AS TotValorUnitario,
				sum(-(V1.TotSubTotConIva)*(isnull(@EsFactorMov,FactorInventario)))AS TotSubTotConIva,
				Enc.IdEncab,
				Enc.IdDocumento,
				Enc.NumDocumento,
				Enc.IdPrefijo,CodDocumento,
				V1.IdCliente1 as IdCliente1,
				enc.Fecha,enc.IdEmpresa,enc.IdSucursal
			FROM 
				#tmpVend AS V1 INNER JOIN
				dbo.Encabezados AS Enc ON V1.IdEncab = Enc.IdEncab  INNER JOIN
				dbo.Inventarios AS Inv ON V1.IdInventario = Inv.IdInventario
				WHERE  
				Enc.IdEmpresa IN(select number from iter$simple_intlist_to_tbl(@IdEmpresas)) AND
				Enc.IdDocumento IN(select nstr from iter$charlist_to_tbl(@IdDocs,DEFAULT)) AND
				(@IdEmpleado is null OR V1.IdClienteVend IN(select number from iter$simple_intlist_to_tbl(isnull(@IdEmpleado,''))))AND
				(@IdProducto is null OR V1.IdInventario=@IdProducto)AND
			    (@IdCliente is null OR V1.IdCliente1=@IdCliente)AND
			    (Enc.Fecha BETWEEN @FechaIniT AND @FechaFinT OR  @esCont=1) AND
				(@IdEncab is null OR V1.IdEncab=@IdEncab)

			GROUP BY V1.IdClienteVend,Enc.IdEncab,Enc.IdDocumento,
				CodDocumento,Enc.NumDocumento,Enc.IdPrefijo,V1.IdCliente1,enc.Fecha,enc.IdEmpresa,enc.IdSucursal,
				(CASE WHEN @TipoComi in (5,3,7,9) THEN V1.IdInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.NomInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.CodInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.NomInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN Inv.CodInventario END),
				(CASE WHEN @TipoComi=2  THEN Inv.IdAgrup1 END)

			)qc 
			-- Join para incluir parte contable
				LEFT OUTER JOIN
				#VIdAbonaComisiones as VIdAbon ON qc.IdEncab = VIdAbon.IdEncab and @esCont=1
				LEFT OUTER JOIN
				#tmpCont as tmpCont ON qc.IdEncab = tmpCont.IdEncab and @esCont=1
			WHERE 
			ISNULL(VIdAbon.Fecha,@FechaFinT) BETWEEN @FechaIniT AND @FechaFinT	AND
			ISNULL(VIdAbon.IdDocumentoAbona,-1) <> ISNULL(@conNotCre,0) AND
			ISNULL(tmpCont.Fecha,@FechaFinT) BETWEEN @FechaIniT AND @FechaFinT	AND
			ISNULL(tmpCont.IdDocumento,-1) <> ISNULL(@conNotCre,0)
			
			GROUP BY IdClienteVend,
				(CASE WHEN @TipoComi in (5,3,7,9) THEN IdInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN NomInventario END),
				(CASE WHEN @TipoComi in (5,3,7,9) THEN CodInventario END),
				(CASE WHEN @TipoComi=2  THEN IdAgrup1 END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.IdEncab END),
				(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdAbonaDoc,tmpCont.IdEncabCont)END),
				(CASE WHEN @esCont=1  THEN ISNULL(VIdAbon.IdCuenta,tmpCont.IdCuenta) END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN qc.CodDocumento END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdEmpresa END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN qc.IdPrefijo END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.NumDocumento END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN qc.fecha END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi in(7,8,9,10)  THEN qc.IdCliente1 END),
				(CASE WHEN @TipoComi=11 THEN qc.IdSucursal END)

		) AS q 
			-- Join diferentes tipos de comision
			--JoinVentas
			left join dbo.VComisionPorCliVend Vcomi
			ON  ISNULL(Vcomi.IdTipo,1)=1 and Vcomi.EsEspecial=0 and (
	        (q.IdClienteVend=Vcomi.IdCliente and @TipoComi=4)
			or (q.IdClienteVend=Vcomi.IdCliente and q.IdInventario=Vcomi.IdInventario and q.IdCliente1=Vcomi.IdCliente2 and @TipoComi=7)
			or (q.IdCliente1=Vcomi.IdCliente2 and  @TipoComi=8)
			or (q.IdInventario=Vcomi.IdInventario and q.IdCliente1=Vcomi.IdCliente2 and @TipoComi=9 )
			or (q.IdClienteVend=Vcomi.IdCliente and q.IdCliente1=Vcomi.IdCliente2 and @TipoComi=10)
			or (q.IdClienteVend=Vcomi.IdCliente and q.IdInventario=Vcomi.IdInventario and @TipoComi=5 )
			or (q.IdAgrup1=Vcomi.IdAgrup1 and @TipoComi=2)
			or (q.IdInventario=Vcomi.IdInventario and @TipoComi=3)
			or (q.IdPrefijo=Vcomi.IdPrefijo and q.IdSucursal=Vcomi.IdSucursal and Vcomi.IdTipoVend=@TipoVend and @TipoComi=11 ))
			
			--Join Reacudo
			left join dbo.VComisionPorCliVend Vcomi2
			ON  ISNULL(Vcomi2.IdTipo,1)=1 and Vcomi2.EsEspecial=0 and (
	        (q.IdClienteVend=Vcomi2.IdCliente and @TipoComi=4)
			or (q.IdClienteVend=Vcomi2.IdCliente and q.IdInventario=Vcomi2.IdInventario and q.IdCliente1=Vcomi2.IdCliente2 and @TipoComi=7)
			or (q.IdCliente1=Vcomi2.IdCliente2 and  @TipoComi=8)
			or (q.IdInventario=Vcomi2.IdInventario and q.IdCliente1=Vcomi2.IdCliente2 and @TipoComi=9 )
			or (q.IdClienteVend=Vcomi2.IdCliente and q.IdCliente1=Vcomi2.IdCliente2 and @TipoComi=10)
			or (q.IdClienteVend=Vcomi2.IdCliente and q.IdInventario=Vcomi2.IdInventario and @TipoComi=5 )
			or (q.IdAgrup1=Vcomi2.IdAgrup1 and @TipoComi=2)
			or (q.IdInventario=Vcomi2.IdInventario and @TipoComi=3)
			or (q.IdPrefijo=Vcomi2.IdPrefijo and q.IdSucursal=Vcomi2.IdSucursal and Vcomi2.IdTipoVend=@TipoVend and @TipoComi=11 ))
			
		    --JoinVentas General
			inner join dbo.VComisionPorCliVend Vcomi3
			ON 
			Vcomi3.IdClase=@TipoComi and  ISNULL(Vcomi3.IdTipo,1)=1 and Vcomi3.EsEspecial=1
			
			--Join Reacudo General
			inner join dbo.VComisionPorCliVend Vcomi4
			ON 
			Vcomi4.IdClase=@TipoComi and ISNULL(Vcomi4.IdTipo,2)=2 and Vcomi4.EsEspecial=1

			--Parte contable
			left join dbo.VComisionPorCliVend Vcomi5
			ON (q.IdCuenta=Vcomi5.IdCuenta and @esCont=1)
			
			inner join dbo.VComisionPorCliVend Vcomi6
			ON (Vcomi6.IdClase=6)
			
			where 
			ISNULL(Vcomi3.IdTipo,1)=1 and ISNULL(Vcomi4.IdTipo,2)=2 AND
			ISNULL(ISNULL(ValorRecaudo,ValorRecaudoSinAbona),0)>@ctrRecuado
			)as q1
			)as q2
				group by IdClienteVend,TotDcto,TotIva,TotSubTotSinDcto,TotSubTotal,TotCantConFactor,TotValorUnitario,
				(CASE WHEN @TipoComi in (5,3,7,9)  THEN IdInventario END),(CASE WHEN @TipoComi in (5,3,7,9) THEN NombreInventario END),
				(CASE WHEN @TipoComi=2 THEN IdAgrup1 END),
				(CASE WHEN @esCont=1 or @Detallar=1  THEN IdEncab END),
				(CASE WHEN @esCont=1  THEN IdCuenta END),
				(CASE WHEN @esCont=1  THEN IdAbonaDoc END),
				(CASE WHEN @esCont=1  THEN ISNULL(ValorRecaudo,ValorRecaudoSinAbona) END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN CodDocumento END),
			    (CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdEmpresa END),
				(CASE WHEN @esCont=1 or @Detallar=1 or @TipoComi=11 THEN IdPrefijo END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN NumDocumento END),
				(CASE WHEN @esCont=1 or @Detallar=1 THEN fecha END),
				(CASE WHEN @esCont=1 or @Detallar=1 or  @TipoComi in(7,8,9,10)   THEN IdCliente1 END),
			    (CASE WHEN @TipoComi=11 THEN IdSucursal END)
				) as q3 LEFT JOIN
				dbo.VClientes2 AS Cli1 ON q3.IdCliente1 = Cli1.IdCliente  LEFT  JOIN
				dbo.VClientes2 AS Cli2 ON q3.IdClienteVend = Cli2.IdCliente LEFT  JOIN
				dbo.Inventarios_Agrup1 AS Inv_Agrup1 ON q3.IdAgrup1 = Inv_Agrup1.IdAgrup1 
				LEFT JOIN
				dbo.Empresas AS emp ON emp.IdEmpresa = q3.IdEmpresa  LEFT  JOIN
				dbo.Sucursales  AS suc ON suc.IdSucursal=q3.IdSucursal  LEFT  JOIN
				dbo.Prefijos as pref ON pref.IdPrefijo=q3.IdPrefijo



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

GO
PRINT N'Update complete.';


GO

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