-- Titulos a Receber a Prazo com Juros v-2

Select * FROM (

    SELECT
            se.codigo AS codigo_empresa,
            se.nome AS nome_empresa,
            p.codigo,
            p.nome,
            tf.numero_titulo,
            tf.data_emissao,
            (tf.data_emissao + 30) AS data_vencimento,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN (CURRENT_DATE - (tf.data_emissao + 30)) ELSE 0 END AS dias_atraso,
            tf.valor_principal,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN ROUND((((tf.valor_principal / 100) * :JurosMensal) / 30) * (CURRENT_DATE - (tf.data_emissao + 30)), 2)
            ELSE 0 END AS valor_juros,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN ROUND((((((tf.valor_principal / 100) * :JurosMensal) / 30) * (CURRENT_DATE - (tf.data_emissao + 30))) + tf.valor_principal), 2) 
            ELSE tf.valor_principal END AS valor_liquido
        FROM titulo_financeiro AS tf 
            INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
            INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
        WHERE tf.data_emissao BETWEEN :DataInicial AND :DataFinal
            AND (:IdClienteNaoObrigatorio = -1 OR p.id_pessoa = :IdClienteNaoObrigatorio)
            AND tf.pagar_receber = 2 --(2-Titulo a receber)
            AND tf.natureza_titulo = 201 --(201-Venda a Prazo)
            AND tf.tipo_titulo = 1 --(1-Original, 2-Residual, 3-Menbramento)
            AND	((tf.situacao IN (1,9)) --ABERTO OU RASCUNHO)
		        OR (CASE WHEN (tf.situacao = 7) --(AGRUPADO) 
				    THEN (
					    CASE WHEN ((select ttf.situacao from titulo_financeiro ttf where ttf.tipo_titulo = 3 and
					    tf.id_titulo_filho = ttf.id_titulo_financeiro limit 1) in (1,9)) --ABERTO OU RASCUNHO
						    THEN (true)
						    ELSE (false)
					    END)	
			    END))
        
        UNION ALL

    --RESIDUAL ABERTO
    SELECT
            se.codigo AS codigo_empresa,
            se.nome AS nome_empresa,
            p.codigo,
            p.nome,
            tf.numero_titulo,
            tf.data_emissao,
            (tf.data_emissao + 30) AS data_vencimento,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN (CURRENT_DATE - (tf.data_emissao + 30)) ELSE 0 END AS dias_atraso,
            tf.valor_principal,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN ROUND((((tf.valor_principal / 100) * :JurosMensal) / 30) * (CURRENT_DATE - (tf.data_emissao + 30)), 2)
            ELSE 0 END AS valor_juros,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN ROUND((((((tf.valor_principal / 100) * :JurosMensal) / 30) * (CURRENT_DATE - (tf.data_emissao + 30))) + tf.valor_principal), 2) 
            ELSE tf.valor_principal END AS valor_liquido
        FROM titulo_financeiro AS tf 
            INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
            INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
        WHERE tf.data_emissao BETWEEN :DataInicial AND :DataFinal
            AND (:IdClienteNaoObrigatorio = -1 OR p.id_pessoa = :IdClienteNaoObrigatorio)
            AND tf.pagar_receber = 2 --(2-Titulo a receber)
            AND tf.natureza_titulo = 201 --(201-Venda a Prazo)
            AND tf.tipo_titulo = 2 --(1-Original, 2-Residual, 3-Menbramento)
            AND	((tf.situacao IN (1,9))             -- ABERTO OU RASCUNHO 
		    OR (CASE WHEN (tf.situacao = 7) -- AGRUPADO 
				THEN (
					CASE WHEN ((select ttf.situacao from titulo_financeiro ttf where ttf.tipo_titulo = 3 and
					tf.id_titulo_filho = ttf.id_titulo_financeiro limit 1) in (1,9)) --ABERTO OU RASCUNHO
						THEN (true)
						ELSE (false)
					END)	
			END))

        UNION ALL

    --AGRUPAMENTO AGRUPADO ABERTO
    SELECT
            se.codigo AS codigo_empresa,
            se.nome AS nome_empresa,
            p.codigo,
            p.nome,
            tf.numero_titulo,
            tf.data_emissao,
            (tf.data_emissao + 30) AS data_vencimento,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN (CURRENT_DATE - (tf.data_emissao + 30)) ELSE 0 END AS dias_atraso,
            tf.valor_principal,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN ROUND((((tf.valor_principal / 100) * :JurosMensal) / 30) * (CURRENT_DATE - (tf.data_emissao + 30)), 2)
            ELSE 0 END AS valor_juros,
            CASE WHEN (CURRENT_DATE > (tf.data_emissao + 30)) THEN ROUND((((((tf.valor_principal / 100) * :JurosMensal) / 30) * (CURRENT_DATE - (tf.data_emissao + 30))) + tf.valor_principal), 2) 
            ELSE tf.valor_principal END AS valor_liquido
        FROM titulo_financeiro AS tf 
            INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
            INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
        WHERE tf.data_emissao BETWEEN :DataInicial AND :DataFinal
            AND (:IdClienteNaoObrigatorio = -1 OR p.id_pessoa = :IdClienteNaoObrigatorio)
            AND tf.pagar_receber = 2 --(2-Titulo a receber)
            AND	tf.natureza_titulo = 201            -- VENDA A PRAZO
            AND tf.tipo_titulo = 3		    -- Agrupamento
            AND	tf.situacao = 7
            AND	((select ttf.situacao from titulo_financeiro ttf where ttf.tipo_titulo = 3 and
	            tf.id_titulo_filho = ttf.id_titulo_financeiro limit 1) in (1,9)) --ABERTO OU RASCUNHO

) AS r
ORDER BY r.data_emissao