ALTER PROCEDURE [dbo].[sp_venRankUniNeg]
(
 @codsuc int = 0 ,
 @fecini		date ,
 @fecfin		date,
 @cantidad int  ,
 @tipo nvarchar(10),
 @unineg int=0,
 @analisis int=0
 )
AS
SELECT
	CONVERT(VARCHAR, venEncabezado.coddoc) + '-' + CONVERT(VARCHAR, venEncabezado.numinv) AS totDoctos
   ,COALESCE(CASE venDocumentos.libro
		WHEN '+' THEN dbo.CalculoPretotDet(venEncabezado.descuentos, venEncabezado.subtotal, SUM(venDetalle.pretot))
		ELSE dbo.CalculoPretotDet(venEncabezado.descuentos, venEncabezado.subtotal, SUM(venDetalle.pretot)) * -1
	END, 0) AS ventaTotal
   ,COALESCE(CASE venDocumentos.libro
		WHEN '+' THEN venDetalle.cantidad
		ELSE venDetalle.cantidad * -1
	END, 0) AS unidadestotal
   ,COALESCE(venEncabezado.coddoc, 0) AS coddoc
   ,COALESCE(venEncabezado.grudoc, 0) AS grudoc
   ,COALESCE(venEncabezado.numinv, 0) AS numinv
   ,invArticulos.codbus
   ,invArticulos.nomart
   ,conUnidadNegocio.idUniNeg AS coduni
   ,conUnidadNegocio.descripcion AS nomuni INTO #A
FROM venEncabezado
INNER JOIN venDocumentos
	ON venEncabezado.grudoc = venDocumentos.grudoc
		AND venEncabezado.coddoc = venDocumentos.coddoc
INNER JOIN venDetalle
	ON venEncabezado.numinv = venDetalle.numinv
		AND venEncabezado.grudoc = venDetalle.grudoc
		AND venEncabezado.coddoc = venDetalle.coddoc
INNER JOIN invArticulos
	ON venDetalle.codbus = invArticulos.codbus
INNER JOIN conUnidadNegocio
--se cambia unidad de negocio del detalle al encabezado por que punto de ventas no guarda la unidad de negocio en el detalle.
--ON venDetalle.codcen = conUnidadNegocio.idUniNeg
	ON venEncabezado.codcen = conUnidadNegocio.idUniNeg
WHERE (venEncabezado.grudoc <> 50)
AND venEncabezado.estado <> 9
AND (venEncabezado.codloc = @codsuc
OR @codsuc = 0)
AND CONVERT(DATE, venEncabezado.fecdoc) BETWEEN @fecini AND @fecfin
AND (venDetalle.codcen = @unineg
OR @unineg = 0)
AND (venDetalle.codana = @analisis
OR @analisis = 0)
GROUP BY venEncabezado.numinv
		,venEncabezado.coddoc
		,venEncabezado.grudoc
		,invArticulos.codbus
		,venEncabezado.exento
		,venDocumentos.libro
		,invArticulos.nomart
		,venEncabezado.codsuc
		,venEncabezado.fecdoc
		,venDetalle.codbus
		,venEncabezado.monpar
		,venDetalle.cantidad
		,venDetalle.preuni
		,venEncabezado.descuentos
		,venEncabezado.subtotal
		,venDetalle.pretot
		,venEncabezado.monpar
		,conUnidadNegocio.idUniNeg
		,conUnidadNegocio.descripcion


IF @tipo = 'True'
BEGIN
SELECT TOP (@cantidad)
	coduni
   ,nomuni
   ,COUNT(DISTINCT totDoctos) AS totDoctos
   ,SUM(ventaTotal) AS ventaTotal
   ,SUM(unidadestotal) AS unidadestotal
   ,0 AS indice INTO #B
FROM #A
WHERE (coduni = @unineg or @unineg = 0)
GROUP BY coduni
		,nomuni
ORDER BY ventaTotal ASC

DELETE FROM #A
WHERE #A.coduni IN (SELECT
			#B.coduni
		FROM #B)

SELECT
	* INTO #D
FROM #B
UNION
SELECT
	''
   ,'OTROS'
   ,COUNT(DISTINCT totDoctos) AS totDoctos
   ,SUM(ventaTotal) AS ventaTotal
   ,SUM(unidadestotal) AS unidadestotal
   ,1
FROM #A
ORDER BY indice, ventaTotal ASC


SELECT
	coduni
   ,nomuni
   ,totDoctos
   ,ventaTotal
   ,unidadestotal
FROM #D
WHERE totdoctos > 0

END
ELSE
BEGIN
SELECT TOP (@cantidad)
	coduni
   ,nomuni
   ,COUNT(DISTINCT totDoctos) AS totDoctos
   ,SUM(ventaTotal) AS ventaTotal
   ,SUM(unidadestotal) AS unidadestotal
   ,0 AS indice INTO #C
FROM #A
WHERE (coduni = @unineg or @unineg = 0)
GROUP BY coduni
		,nomuni
ORDER BY ventaTotal DESC

DELETE FROM #A
WHERE #A.coduni IN (SELECT
			#C.coduni
		FROM #C)

SELECT
	* INTO #E
FROM #C
UNION
SELECT
	''
   ,'OTROS'
   ,COUNT(DISTINCT totDoctos) AS totDoctos
   ,SUM(ventaTotal) AS ventaTotal
   ,SUM(unidadestotal) AS unidadestotal
   ,1
FROM #A
ORDER BY indice, ventaTotal DESC

SELECT
	coduni
   ,nomuni
   ,totDoctos
   ,ventaTotal
   ,unidadestotal
FROM #E
WHERE totdoctos > 0
END