IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.CFJ_Producto_Facturado') 
                   and type = 'FN')
BEGIN
    DROP FUNCTION dbo.CFJ_Producto_Facturado
END
GO

CREATE FUNCTION [dbo].[CFJ_Producto_Facturado] (@pJson VARCHAR(8000))
RETURNS TINYINT
AS
BEGIN
	/*Variables recibidas por parámetro a traves del JSON*/
	DECLARE @pId_Cliente			INT
	DECLARE @pId_Producto			VARCHAR(14)
	DECLARE @pId_Tiempo				CHAR(3)
	DECLARE @pFecha					DATETIME
	DECLARE @pRefacturar			TINYINT
	DECLARE @pFlag_Tabla_Temp       TINYINT

	SET @pId_Cliente				= ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Cliente')), 0)
	SET @pId_Producto				= ISNULL(CONVERT(VARCHAR(14), dbo.CF_JSON_VALUE(@pJson,'Id_Producto')), '')
	SET @pId_Tiempo					= ISNULL(CONVERT(VARCHAR(14), dbo.CF_JSON_VALUE(@pJson,'Id_Tiempo')), '')
	SET @pFecha						= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha')),GETDATE())
	SET @pRefacturar				= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Refacturar')), 0)
	SET @pFlag_Tabla_Temp		    = ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_Tabla_Temp')), 0)

	/*FIN Variables recibidas por parámetro a traves del JSON*/

	IF ISNULL(@pRefacturar,0) <> 0 RETURN 0    --se refacturo no controlo nada

	DECLARE @Cantidad		INT
	DECLARE @Tipo			CHAR(1)
	DECLARE @CantCiclos		INT
	DECLARE @Flag_Mes		TINYINT
	DECLARE @Flag_Periodo	TINYINT
	DECLARE @ReturnValue	INT

	SET @ReturnValue = 0

	IF @pFlag_Tabla_Temp = 1 AND OBJECT_ID (N'Z_CONTRATOS_FACTURADOS', N'U') IS NOT NULL 
	BEGIN
        SET @ReturnValue = (select count(*) from Z_CONTRATOS_FACTURADOS WHERE id_Cliente  = @pId_Cliente AND Id_Producto = @pId_Producto)
    END

	IF(ISNULL(@ReturnValue,0) = 0)
	BEGIN
    	IF ISNULL(@pId_Tiempo,'') <> ''   --por defecto se toma mensual
		BEGIN

			SELECT @Cantidad = Cantidad , @Tipo = Tipo FROM Tab_Uni_Tiempo WHERE Id_Tiempo = @pId_Tiempo
			IF ISNULL(@Cantidad,0) = 0 SET @Cantidad = 1

			IF @Tipo = 'A'
				SELECT @CantCiclos = ISNULL(  DATEDIFF(yy,MAX(i.Fecha_QA),@pFecha) ,9999999) 
						FROM Cbtes_Items i, Cbtes c , Cbtes_Tipos T 
						WHERE c.id_trans = i.id_trans 
								AND T.Id_Tipo_Cbte = C.Id_Tipo_Cbte 
								AND ((c.Comprobante_Nro = 0 AND c.Id_Estado_Cbte = 3) OR c.Id_Estado_Cbte NOT IN (0,3))
								AND (T.Compromete_Factura = 1 OR T.Compromete_Remitos = 1)
								AND I.Id_Cliente = @pId_Cliente
								AND i.Id_Producto = @pId_Producto
			ELSE IF @Tipo = 'D'
				SELECT @CantCiclos = ISNULL(  DATEDIFF(dd,MAX(i.Fecha_QA),@pFecha) ,9999999) 
						FROM Cbtes_Items i, Cbtes c , Cbtes_Tipos T 
						WHERE c.id_trans = i.id_trans 
								AND T.Id_Tipo_Cbte = C.Id_Tipo_Cbte 
								AND ((c.Comprobante_Nro = 0 AND c.Id_Estado_Cbte = 3) OR c.Id_Estado_Cbte NOT IN (0,3))
								AND (T.Compromete_Factura = 1 OR T.Compromete_Remitos = 1)
								AND I.Id_Cliente = @pId_Cliente
								AND i.Id_Producto = @pId_Producto	
			ELSE		
				SELECT @CantCiclos = ISNULL(  DATEDIFF(mm,MAX(i.Fecha_QA),@pFecha) ,9999999) 
						FROM Cbtes_Items i, Cbtes c , Cbtes_Tipos T 
						WHERE c.id_trans = i.id_trans 
								AND T.Id_Tipo_Cbte = C.Id_Tipo_Cbte 
								AND ((c.Comprobante_Nro = 0 AND c.Id_Estado_Cbte = 3) OR c.Id_Estado_Cbte NOT IN (0,3))
								AND (T.Compromete_Factura = 1 OR T.Compromete_Remitos = 1)
								AND I.Id_Cliente = @pId_Cliente
								AND i.Id_Producto = @pId_Producto	

			IF @CantCiclos < @Cantidad SET @ReturnValue = 1
		END
		ELSE   --IF ISNULL(@pId_Tiempo,'') <> ''   -
		BEGIN
			SELECT @Flag_Mes = Flag_Mes, @Flag_Periodo = Flag_Periodo FROM Productos WHERE Id_Producto = @pId_Producto

			IF @Flag_Mes = 1 OR @Flag_Periodo = 1
					SELECT  @ReturnValue = COUNT(*) FROM Cbtes_Items i, Cbtes c , Cbtes_Tipos T 
							WHERE c.id_trans = i.id_trans 
										AND T.Id_Tipo_Cbte = C.Id_Tipo_Cbte 
										AND ((c.Comprobante_Nro = 0 AND c.Id_Estado_Cbte = 3) 
										OR c.Id_Estado_Cbte NOT IN (0,3))
										AND (T.Compromete_Factura = 1 OR T.Compromete_Remitos = 1)
										AND ISNULL(I.Id_Cliente,C.ID_CLIENTE) = @pId_Cliente
										AND i.Id_Producto = @pId_Producto
										AND DATEPART(yy,i.Fecha_QA) = DATEPART(yy,@pFecha) 
										AND DATEPART(mm,i.Fecha_QA) = DATEPART(mm,@pFecha) 
	
		END
    END

	RETURN ISNULL(@ReturnValue,0)
END





























