IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'[CFJ_Producto_Facturado]') 
                   and type = 'FN')
BEGIN
    DROP FUNCTION [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

	IF  @pFlag_Tabla_Temp = 1
	    BEGIN
           SET @ReturnValue = (select count(*) from Z_CONTRATOS_FACTURADOS WHERE id_Cliente  = @pId_Cliente
                           AND Id_Producto = @pId_Producto)
        END
	  ELSE
	    BEGIN
            SET @ReturnValue = 0

    		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






























