IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.[CP_Cbtes_Lotes_Facturar]') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE dbo.[CP_Cbtes_Lotes_Facturar] 
END
GO


CREATE PROCEDURE [dbo].[CP_Cbtes_Lotes_Facturar]
	@pLote				VARCHAR(29),
	@pFecha				DATETIME,
	@pDescripcion		VARCHAR(50),
	@pId_Lote_Tipo		SMALLINT,
	@pFecha_Desde		DATETIME,
	@pFecha_Hasta		DATETIME,
	@pId_Tipo_Cont      INT,
	@pId_Usuario		INT,
	@pFiltrarTarjeta    Tinyint,
	@pFiltrarCliente    Tinyint,
	@pFiltrarCondPago   Tinyint,
	@pFiltrarTipoCbte   Tinyint,
	@pFiltrarCantCont   INT

AS 
BEGIN
SET NOCOUNT ON

/*Declaracion Variables Locales*/


DECLARE @pFlagUsarTrans			TINYINT
DECLARE @pModoDebug				TINYINT
DECLARE @pId_Contrato			INT
DECLARE @pFecha_QA				DATETIME
DECLARE @pFecha_Venc			DATETIME

DECLARE @Mensaje			VARCHAR(100)
		,@UltError			INT
		,@Id_Trans			INT
		,@Id_Cliente		INT
		,@Importe			DECIMAL(16,2)
		,@Email_Cob			VARCHAR(256)
		,@Id_Trans_Rec		INT
		,@CursorOpen        INT

DECLARE @Sql		VARCHAR(MAX)
DECLARE @SqlSaldo	VARCHAR(MAX)
DECLARE @SqlSelect	VARCHAR(MAX)
DECLARE @SqlFrom	VARCHAR(MAX)
DECLARE @SqlWhere	VARCHAR(MAX)
DECLARE @SqlGroup	VARCHAR(MAX)

DECLARE @Id_Contrato INT

DECLARE @pJson		VARCHAR(8000)

SET @pFlagUsarTrans	= 0		/*Con 1 Tira error*/
SET @pModoDebug		= 0
SET @pFecha_QA		= @pFecha_Desde
SET @pFecha_Venc	= @pFecha_Hasta


  CREATE TABLE #CONTRATOS_PROCESAR  (
			ID_CONTRATO INT )


  DECLARE @Respuesta Table (
				ErrorNumber		INT,
				ErrorSeverity	INT,
				ErrorState		INT,
				ErrorProcedure  VARCHAR(1000),
				ErrorLine		INT,
				ErrorMessage	VARCHAR(1000)
				)

	SET @SqlSelect = 'SELECT O.ID_CONTRATO'

	IF @pFiltrarCantCont > 0 
	   SET @SqlSelect = 'SELECT TOP ' + CAST(@pFiltrarCantCont AS VARCHAR(10)) + '  O.ID_CONTRATO'

	SET @SqlFrom = 'FROM Contratos O,Clientes C'

	SET @SqlWhere = '  WHERE O.Id_Tipo_Con = ' + CAST(@pId_Tipo_Cont AS VARCHAR(10)) + '
						 AND O.Id_Cliente = C.Id_Cliente 
                         AND C.Activo = 1  AND O.Activo = 1
	                     AND ( O.Fecha_Hasta >= '''+ CONVERT(VARCHAR(8),@pFecha_Desde+1,112) +'''
						     OR O.Fecha_Hasta IS NULL)
 	                     AND O.Fecha_Desde < '''+ CONVERT(VARCHAR(8),@pFecha_Hasta+1,112) +'''
						 AND (O.Fecha_Cob_Hasta < '''+ CONVERT(VARCHAR(8),@pFecha_Hasta+1,112) +'''
						     OR O.Fecha_Cob_Hasta IS NULL)
		                 AND EXISTS (SELECT P.Id_Contrato FROM Contratos_Prod P WHERE P.Id_Contrato = O.Id_Contrato 
						                   AND ISNULL(P.Flag_Facturable,0) <> 0 )'


     IF	@pFiltrarCondPago <> 0 
    	SET @SqlWhere = RTRIM(LTRIM(@SqlWhere)) + ' AND C.Id_Cond_Pago IN (SELECT CP.PTR FROM TagFile_ CP WHERE CP.USR = ' + CAST(@pId_Usuario AS VARCHAR(10)) + ' AND CP.TBL = 150)'
 
     IF	@pFiltrarTipoCbte <> 0 
		SET @SqlWhere = RTRIM(LTRIM(@SqlWhere)) + ' AND O.Id_tipo_cbte IN (SELECT CT.POS FROM TagFilePos_ CT WHERE CT.USR = ' + CAST(@pId_Usuario AS VARCHAR(10)) + ' AND CT.TBL = 120)'

     IF	@pFiltrarCliente <> 0 
		SET @SqlWhere = RTRIM(LTRIM(@SqlWhere)) + ' AND C.ID_CLIENTE IN (SELECT CP.PTR FROM TagFile_ CP WHERE CP.USR = ' + CAST(@pId_Usuario AS VARCHAR(10)) + ' AND CP.TBL = 400)'

     IF	@pFiltrarTarjeta <> 0 
	 	SET @SqlWhere = RTRIM(LTRIM(@SqlWhere)) + ' AND ( ISNULL(O.Id_Tarjeta,'') IN (SELECT TAR.POS FROM TagFilePos_ TAR WHERE TAR.USR = ' + CAST(@pId_Usuario AS VARCHAR(10)) + ' AND TAR.TBL = 210)
		                                                OR ISNULL(C.Id_Tarjeta,'') IN (SELECT TAR.POS FROM TagFilePos_ TAR WHERE TAR.USR = ' + CAST(@pId_Usuario AS VARCHAR(10)) + ' AND TAR.TBL = 210) )'
     

    SET  @SqlGroup	= 'ORDER BY O.ID_CLIENTE'

	SET @Sql = @SqlSelect +' '+ @SqlFrom + ' ' + @SqlWhere + ' ' + @SqlGroup
	PRINT @Sql

	
	INSERT INTO Cbtes_Lotes (Lote,Fecha,Descripcion,Id_Lote_Tipo,Flag_enProceso,Fecha_Inicio,Fecha_Desde,Fecha_Hasta,Observacion)
		VALUES (@pLote,@pFecha,@pDescripcion,@pId_Lote_Tipo,1,GETDATE(),@pFecha_Desde,@pFecha_Hasta,@Sql)

	

	INSERT INTO #CONTRATOS_PROCESAR
	   EXEC(@sql)

	DECLARE Cur_Facturar_Contratos CURSOR FOR
			   SELECT Id_Contrato FROM #CONTRATOS_PROCESAR 

	OPEN Cur_Facturar_Contratos 
	FETCH NEXT FROM Cur_Facturar_Contratos INTO @Id_Contrato
	WHILE @@FETCH_STATUS=0
	BEGIN
	    set @pId_Contrato = @Id_Contrato
		SET @pJson =	'{' +
						dbo.CF_Json_ParsearVariable('FlagUsarTrans', @pFlagUsarTrans, 'TINYINT') + ',' +
						dbo.CF_Json_ParsearVariable('ModoDebug', @pModoDebug, 'TINYINT') + ',' +
						dbo.CF_Json_ParsearVariable('Id_Contrato', @pId_Contrato, 'INT') + ',' +
						dbo.CF_Json_ParsearVariable('Id_Usuario', @pId_Usuario, 'SMALLINT') + ',' +
						dbo.CF_Json_ParsearVariable('Fecha', @pFecha, 'DATETIME') + ',' +
						dbo.CF_Json_ParsearVariable('Lote', @pLote, 'VARCHAR(20)') + ',' +
						dbo.CF_Json_ParsearVariable('Fecha_QA', @pFecha_QA, 'DATETIME') + ',' +
						dbo.CF_Json_ParsearVariable('Fecha_Venc', @pFecha_Venc, 'DATETIME') + ',' +
						dbo.CF_Json_ParsearVariable('Fecha_Rem_Desde', @pFecha_QA, 'DATETIME') + ',' +
						dbo.CF_Json_ParsearVariable('Fecha_Rem_Hasta', @pFecha_Venc, 'DATETIME') +
						'}'

		EXEC dbo.CPJ_Contrato_Facturar @pJson


		FETCH NEXT FROM Cur_Facturar_Contratos INTO @Id_Contrato
	END
	CLOSE Cur_Facturar_Contratos
	DEALLOCATE Cur_Facturar_Contratos

	DROP TABLE #CONTRATOS_PROCESAR
END

-- C:\Projects\CleverSoft\C10\Sql\Xsys-release 20200429v-CP_Cbtes_Lotes_Facturar
-- EXEC CP_Cbtes_Lotes_Facturar 'VICgab4','20201201','FUNDADORES PRUEBA VICgab4',1,'20201201','20201231',1,-1,0,0,0,0,0


