-- StoreProcedure {lancamentocc_integra()} Versao {088} Esquema {padrao} Descricao {Grava integracao conta corrente}
-- ------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.lancamentocc_integra()
RETURNS trigger AS

$BODY$

DECLARE
 --Variaveis
   dia                   double precision;
   mes                   double precision;
   ano                   double precision;
   ultimoVcto            DATE;
   emissao               DATE;
   vencimento            DATE;
   valorCCsaldo          NUMERIC(14,2); -- Valor Total lcto
   valorTotalLcto        NUMERIC(14,2); -- Valor Total lcto
   valorPA               NUMERIC(14,2); -- Valor da PArcela
   valorComissao         NUMERIC(14,2); -- Valor da Comissao pelo recebimento
   pjurosmora            NUMERIC(14,6); -- (%)Juros Mora
   pmulta                NUMERIC(14,6); -- (%)multa por atraso
   pacrescimo            NUMERIC(14,6); -- (%)acrescimo
   ncarencia             NUMERIC( 4,0); -- (%)carencia
   totParcelas           NUMERIC(14,2);
   qtdeParcelas          integer;
   Receber_Pagar         CHAR(1);
   aCampos               character varying[];
   aDados                character varying[];
   aCamposCl             character varying[];
   aDadosCl              character varying[];
   sCampos               VARCHAR;
   sDados                VARCHAR;
   
 
 --Faturamento
   d11_perc_comissao     NUMERIC(14,5); 
   d12_natureza          CHAR(1); --Natureza: Entrada/Saida
   d13_tipo_docto        CHAR(1); --Tipo Docto: Nota Fiscal/Pedido/Orcamento
   d14_calcularICMS      CHAR(1); --Calcular ICMS: Sim/Nao
   d15_calcularIPI       CHAR(1); --Calcular IPI: Sim/Nao
   d16_calcularFUNRURAL  CHAR(1); --Calcular FUNRURAL: Sim/Nao
   d17_CFOP              VARCHAR; --Classificacao Fiscal(CFOP) da transacao
   d18_usarCFOP          CHAR(1); --Usar classificacao fiscal(CFOP) do:(1-Cadastro de Transacao/2-Cadastro do produtos
   d19_devolucao         CHAR(1); --devolucao de mercadorias (Sim - Nao)
   d115_NFE              CHAR(1); --Nota Fiscal Eletronica: (Sim/Nao)
 --Estoque 
   d26_atualiza_estoque  CHAR(1); --Atualiza estouque:(Sim/Nao)
   d27_tipo_mvto         CHAR(1); --Tipo de Movimento :0-Normal/1-Consignacao - Envio/ ...
   d28_alterarCM         CHAR(1); --Alterar Custo Medio : Sim/Nao
   d29_alterrrCUC        CHAR(1); --Alterar Custo Ultima compra: Sim/Nao
   d210_checarestoque    CHAR(1); --Checar Estoque: 0-Checar saldo negativo/1-Vetar saida com saldo negativo 
 --Financeiro              
   d49_lancarCRP         CHAR(1); --Lancar contas a receber/pagar: Sim/Nao
   d48_GerarCHPD         CHAR(1); --Gerar CHPD: Sim/Nao
   D419_BaixaCHPD        CHAR(1); --Gerar CHPD: Sim/Nao
   d410_atualizarsaldoCC CHAR(1); --Atualizar saldo do C/C: Sim/Nao
   d411_tipolcto         CHAR(1); --Tipo lancamento: 0-Normal/1-Transferencia
   d412_natureza         CHAR(1); --Natureza: Creditol/Debito
   d413_comissao         CHAR(1); --Comissao: 0-Creditar comissao/1-Debitar comissao/2-Nao comissionar
   d414_conciliar        CHAR(1); --Conciliar automatico: Sim/Nao
   d423_gerar_fatura     CHAR(1); --Gerar Fatura: R/P=Receber/Pagar)
   d424_CondPgto         INTEGER; --Gerar Fatura: Condicção de Pgto)
--Classificacao Gerencial
   d71_codigoclasse1      VARCHAR(5); --Codigo classificacacao gerencial 1
   d72_codigoclasse2      VARCHAR(5); --Codigo classificacacao gerencial 2
   d73_codigoclasse3      VARCHAR(5); --Codigo classificacacao gerencial 3  
   
   r_transacao      RECORD;
   r_tipocobranca   RECORD;
   r_parameters     RECORD;  
   r_baixa          RECORD;
   r_classes        RECORD;
   r_financ_rpbaixa RECORD;
   r_cc_transf      RECORD;
   r_unidade        RECORD; -- Cadastro de unidade p/ sincronizacao
   r_detail_sync    RECORD; -- Cadastro de faixas para sincronizacao
   r_condpgto       RECORD; -- Condicao de pgto
   r_condpgtop      RECORD; -- Condicao de pgto - parcelas
   r_contem_Baixa      RECORD; -- Total RP

   v_retorna        boolean;
BEGIN
    IF TG_OP = 'DELETE'  THEN
	-- LOOP 
	   FOR r_transacao IN SELECT * FROM view_transacao WHERE codigo_transacao = OLD.fat_transacao_id ORDER BY diretiva LOOP
	       --RAISE NOTICE 'Propriedade:% (%)',  r_transacao.diretiva, r_transacao.propriedade;
	    -- diretiva/Regra 11 -( (%) Comissao vendedores) 
	       IF r_transacao.diretiva = 11 THEN
		   
		  d11_perc_comissao = CAST(r_transacao.propriedade AS DECIMAL(14,5));
	       END IF; 

	    -- diretiva/Regra 12 - ( Natureza: Entrada/Saida) 
	       IF r_transacao.diretiva = 12 THEN
		      d12_natureza = substring(r_transacao.propriedade from 1 for 1);
	       END IF; 

	    -- diretiva/Regra 13 - ( Tipo Docto: Nota Fiscao/Pedido/Orcamento) 
	       IF r_transacao.diretiva = 13 THEN
		      d13_tipo_docto = substring(r_transacao.propriedade from 1 for 1);
	       END IF;

	    -- diretiva/Regra 14 - ( Calcular ICMS: Sim/Nao) 
	       IF r_transacao.diretiva = 14 THEN
		  d14_calcularICMS = substring(r_transacao.propriedade from 1 for 1);
	       END IF;  
		
	    -- diretiva/Regra 15 - ( Calcular IPI: Sim/Nao) 
	       IF r_transacao.diretiva = 15 THEN
		  d15_calcularIPI = substring(r_transacao.propriedade from 1 for 1);
	       END IF; 
	       
	    -- diretiva/Regra 16 - ( Calcular FUNRURAL: Sim/Nao) 
	       IF r_transacao.diretiva = 16 THEN
		  d16_calcularFUNRURAL = substring(r_transacao.propriedade from 1 for 1);
	       END IF;   

	    -- diretiva/Regra 17 - ( Classificacao Fiscal(CFOP)) 
	       IF r_transacao.diretiva = 17 THEN
		  d17_CFOP = Trim(both ' ' from r_transacao.propriedade);
	       END IF;  

	    -- diretiva/Regra 18 - ( Usar classificacao fiscal(CFOP) do:(1-Cadastro de Transacao/2-Cadastro do produtos ) 
	       IF r_transacao.diretiva = 18 THEN
		  d18_usarCFOP = substring(r_transacao.propriedade from 1 for 1);
	       END IF;  
		-- diretiva/Regra 19 - (Devolucao:( Sim/Nao ) 
	       IF r_transacao.diretiva = 19 THEN
		      d19_devolucao = substring(r_transacao.propriedade from 1 for 1);
	       END IF;  
	     -- diretiva/Regra 115 - (Nota Fiscal Eletronica: Sim/Nao) 
	       IF r_transacao.diretiva = 115 THEN
		  d115_NFE = substring(r_transacao.propriedade from 1 for 1);
	       END IF;   
	    -- diretiva/Regra 26 - ( Atualiza estoque: Sim/Nao.) 
	       IF r_transacao.diretiva = 26 THEN
		  d26_atualiza_estoque = substring(r_transacao.propriedade from 1 for 1);
	       END IF;        
		-- diretiva/Regra 27 - ( Tipo de Movimentacao: 0-Normal/1-Consignacao - Envio/ ...) 
	       IF r_transacao.diretiva = 27 THEN
		  d27_tipo_mvto = substring(r_transacao.propriedade from 1 for 1);
	       END IF;  
	       
		-- diretiva/Regra 28 - ( Alterar Custo Medio: Sim/Nao) 
	       IF r_transacao.diretiva = 28 THEN
		  d28_alterarCM = substring(r_transacao.propriedade from 1 for 1) ;
	       END IF;  

		-- diretiva/Regra 29 - ( Alterar Custo Ultima compra: Sim/Nao) 
	       IF r_transacao.diretiva = 29 THEN
		  d29_alterrrCUC = substring(r_transacao.propriedade from 1 for 1) ;
	       END IF;  
	    -- diretiva/Regra 210 - ( Checar Saldo Negativo:  0-Checar saldo negativo/1-Vetar saida com saldo negativo) 
	       IF r_transacao.diretiva = 210 THEN
		  d210_checarestoque = substring(r_transacao.propriedade from 1 for 1) ;
	       END IF;  
	    -- diretiva/Regra 48 - ( Gerar Cheque Pre: Sim/Nao) 
	       IF r_transacao.diretiva = 48 THEN
			  d48_GerarCHPD =  substring(r_transacao.propriedade from 1 for 1);
	       END IF;  
	       
		-- diretiva/Regra 49 - ( Lancar contas a receber/pagar: Sim/Nao) 
	       IF r_transacao.diretiva = 49 THEN
		 d49_lancarCRP =  substring(r_transacao.propriedade from 1 for 1);
	       END IF;       
	    -- diretiva/Regra 71 - ( -codigo classificacacao gerencial 1 ) 
	       IF r_transacao.diretiva = 71 THEN
		 d71_codigoclasse1 =  r_transacao.propriedade;
	       END IF; 
	    -- diretiva/Regra 72 - ( -codigo classificacacao gerencial 2 ) 
	       IF r_transacao.diretiva = 72 THEN
		 	  d72_codigoclasse2 =  r_transafalsecao.propriedade;
	       END IF;      
	     -- diretiva/Regra 73 - ( -codigo classificacacao gerencial 3 ) 
	       IF r_transacao.diretiva = 73 THEN
		 	 d73_codigoclasse3 =  r_transacao.propriedade;
	       END IF;         
		-- diretiva/Regra 410 - ( Atualiza saldo do C/C: Sim/Nao) 
	       IF r_transacao.diretiva = 410 THEN
		  d410_atualizarsaldoCC = substring(r_transacao.propriedade from 1 for 1)  ;
	       END IF;            
	  
		-- diretiva/Regra 411 - ( Tipo lancamento: 0-Normal/1-Transferencia) 
	       IF r_transacao.diretiva = 411 THEN
		      d411_tipolcto =  substring(r_transacao.propriedade from 1 for 1);
	       END IF;      
	       
		-- diretiva/Regra 412 - ( Natureza: Creditol/Debito) 
	       IF r_transacao.diretiva = 412 THEN
		  d412_natureza = substring(r_transacao.propriedade from 1 for 1);
	       END IF;       
		    
		-- diretiva/Regra 413 - ( Comissao: 0-Creditar comissao/1-Debitar comissao/2-Nao comissionar) 
	       IF r_transacao.diretiva = 413 THEN
		  d413_comissao =  substring(r_transacao.propriedade from 1 for 1);
	       END IF;         
	   
	    -- diretiva/Regra 414 - (Regra Conciliar automatico: Sim/Nao) 
	       IF r_transacao.diretiva = 414 THEN
		  d414_conciliar = substring(r_transacao.propriedade from 1 for 1);
	       END IF;   
	    -- diretiva/Regra 419 - (Regra Baixar Cheque Pre: Sim/Nao) 
	       IF r_transacao.diretiva = 419 THEN
		      D419_BaixaCHPD = substring(r_transacao.propriedade from 1 for 1);
	       END IF;  
	    --Gerar Fatura: R/P=Receber/Pagar)
	       IF r_transacao.diretiva = 423 THEN
		      d423_gerar_fatura = substring(r_transacao.propriedade from 1 for 1);
	       END IF;
         --Gerar Fatura: Condicção de Pgto
	       IF r_transacao.diretiva = 424 THEN
		      d424_CondPgto = CAST(r_transacao.propriedade AS INTEGER);
	       END IF;
	   END LOOP;

	   --
	   -- DELETE(S)
	   --

	   -- Checa a Existencia de Docto Gerado baixado

	   --Deleta Baixas
	   DELETE FROM financ_rp_baixas WHERE financ_rp_lctobaixa_lcto = OLD.financ_rp_lctobaixa_lcto;
	   --Atualiza status CHPD
	   UPDATE financ_rp_chpd  SET baixado = FALSE, databaixa = NULL, financ_cc_movto_controle_bxchpd = NULL WHERE financ_cc_movto_controle_bxchpd =  OLD.controle;

	  
	   
	   
	   IF d411_tipolcto = '1'THEN
		  DELETE FROM financ_cc_movto WHERE cc_controle_conta_transf = OLD.controle;
	   END IF;
	   --IF(d410_atualizarsaldoCC <> 'N') THEN
	      v_retorna = padrao.atualizaSaldoCC(OLD.financ_cc_id, OLD.data_emissao,FALSE);
	   --END IF;
       RETURN NULL;  

   END IF;
-- LOOP 
   FOR r_transacao IN SELECT * FROM view_transacao WHERE codigo_transacao = NEW.fat_transacao_id ORDER BY diretiva LOOP
       --RAISE NOTICE 'Propriedade:% (%)',  r_transacao.diretiva, r_transacao.propriedade;
    -- diretiva/Regra 11 -( (%) Comissao vendedores) 
       IF r_transacao.diretiva = 11 THEN
           
       	  d11_perc_comissao = CAST(r_transacao.propriedade AS DECIMAL(14,5));
       END IF; 

    -- diretiva/Regra 12 - ( Natureza: Entrada/Saida) 
       IF r_transacao.diretiva = 12 THEN
       	  d12_natureza = substring(r_transacao.propriedade from 1 for 1);
       END IF; 

    -- diretiva/Regra 13 - ( Tipo Docto: Nota Fiscao/Pedido/Orcamento) 
       IF r_transacao.diretiva = 13 THEN
       	  d13_tipo_docto = substring(r_transacao.propriedade from 1 for 1);
       END IF;

    -- diretiva/Regra 14 - ( Calcular ICMS: Sim/Nao) 
       IF r_transacao.diretiva = 14 THEN
       	  d14_calcularICMS = substring(r_transacao.propriedade from 1 for 1);
       END IF;  
        
    -- diretiva/Regra 15 - ( Calcular IPI: Sim/Nao) 
       IF r_transacao.diretiva = 15 THEN
       	  d15_calcularIPI = substring(r_transacao.propriedade from 1 for 1);
       END IF; 
       
    -- diretiva/Regra 16 - ( Calcular FUNRURAL: Sim/Nao) 
       IF r_transacao.diretiva = 16 THEN
       	  d16_calcularFUNRURAL = substring(r_transacao.propriedade from 1 for 1);
       END IF;   

    -- diretiva/Regra 17 - ( Classificacao Fiscal(CFOP)) 
       IF r_transacao.diretiva = 17 THEN
       	  d17_CFOP = Trim(both ' ' from r_transacao.propriedade);
       END IF;  

    -- diretiva/Regra 18 - ( Usar classificacao fiscal(CFOP) do:(1-Cadastro de Transacao/2-Cadastro do produtos ) 
       IF r_transacao.diretiva = 18 THEN
       	  d18_usarCFOP = substring(r_transacao.propriedade from 1 for 1);
       END IF;  
	-- diretiva/Regra 19 - (Devolucao:( Sim/Nao ) 
       IF r_transacao.diretiva = 19 THEN
       	  d19_devolucao = substring(r_transacao.propriedade from 1 for 1);
       END IF;  
     -- diretiva/Regra 115 - (Nota Fiscal Eletronica: Sim/Nao) 
       IF r_transacao.diretiva = 115 THEN
       	  d115_NFE = substring(r_transacao.propriedade from 1 for 1);
       END IF;   
    -- diretiva/Regra 26 - ( Atualiza estoque: Sim/Nao.) 
       IF r_transacao.diretiva = 26 THEN
       	  d26_atualiza_estoque = substring(r_transacao.propriedade from 1 for 1);
       END IF;        
 	-- diretiva/Regra 27 - ( Tipo de Movimentacao: 0-Normal/1-Consignacao - Envio/ ...) 
       IF r_transacao.diretiva = 27 THEN
       	  d27_tipo_mvto = substring(r_transacao.propriedade from 1 for 1);
       END IF;  
       
  	-- diretiva/Regra 28 - ( Alterar Custo Medio: Sim/Nao) 
       IF r_transacao.diretiva = 28 THEN
       	  d28_alterarCM = substring(r_transacao.propriedade from 1 for 1) ;
       END IF;  

  	-- diretiva/Regra 29 - ( Alterar Custo Ultima compra: Sim/Nao) 
       IF r_transacao.diretiva = 29 THEN
       	  d29_alterrrCUC = substring(r_transacao.propriedade from 1 for 1) ;
       END IF;  
    -- diretiva/Regra 210 - ( Checar Saldo Negativo:  0-Checar saldo negativo/1-Vetar saida com saldo negativo) 
       IF r_transacao.diretiva = 210 THEN
       	  d210_checarestoque = substring(r_transacao.propriedade from 1 for 1) ;
       END IF;  
  	-- diretiva/Regra 49 - ( Lancar contas a receber/pagar: Sim/Nao) 
       IF r_transacao.diretiva = 49 THEN
       	 d49_lancarCRP =  substring(r_transacao.propriedade from 1 for 1);
       END IF;       
    -- diretiva/Regra 71 - ( -codigo classificacacao gerencial 1 ) 
       IF r_transacao.diretiva = 71 THEN
       	 d71_codigoclasse1 =  r_transacao.propriedade;
       END IF; 
    -- diretiva/Regra 72 - ( -codigo classificacacao gerencial 2 ) 
       IF r_transacao.diretiva = 72 THEN
       	 d72_codigoclasse2 =  r_transacao.propriedade;
       END IF;      
     -- diretiva/Regra 73 - ( -codigo classificacacao gerencial 3 ) 
       IF r_transacao.diretiva = 73 THEN
       	 d73_codigoclasse3 =  r_transacao.propriedade;
       END IF;         
   	-- diretiva/Regra 410 - ( Atualiza saldo do C/C: Sim/Nao) 
       IF r_transacao.diretiva = 410 THEN
       	  d410_atualizarsaldoCC = substring(r_transacao.propriedade from 1 for 1)  ;
       END IF;            
  
  	-- diretiva/Regra 411 - ( Tipo lancamento: 0-Normal/1-Transferencia) 
       IF r_transacao.diretiva = 411 THEN
       	  d411_tipolcto =  substring(r_transacao.propriedade from 1 for 1);
       END IF;      
       
  	-- diretiva/Regra 412 - ( Natureza: Creditol/Debito) 
       IF r_transacao.diretiva = 412 THEN
       	  d412_natureza = substring(r_transacao.propriedade from 1 for 1);
       END IF;       
            
  	-- diretiva/Regra 413 - ( Comissao: 0-Creditar comissao/1-Debitar comissao/2-Nao comissionar) 
       IF r_transacao.diretiva = 413 THEN
       	  d413_comissao =  substring(r_transacao.propriedade from 1 for 1);
       END IF;         
   
    -- diretiva/Regra 414 - (Regra Conciliar automatico: Sim/Nao) 
       IF r_transacao.diretiva = 414 THEN
       	  d414_conciliar = substring(r_transacao.propriedade from 1 for 1);
       END IF; 
    -- diretiva/Regra 419 - (Regra Baixar Cheque Pre: Sim/Nao) 
	   IF r_transacao.diretiva = 419 THEN
	      D419_BaixaCHPD = substring(r_transacao.propriedade from 1 for 1);
	   END IF;  
    --Gerar Fatura: R/P=Receber/Pagar)
       IF r_transacao.diretiva = 423 THEN
          d423_gerar_fatura = substring(r_transacao.propriedade from 1 for 1);
       END IF;
    --Gerar Fatura: Condicção de Pgto
       IF r_transacao.diretiva = 424 THEN
          d424_CondPgto = CAST(r_transacao.propriedade AS INTEGER);
       END IF;

   END LOOP;
   


    --IF(d410_atualizarsaldoCC <> 'N') THEN
	   v_retorna = padrao.atualizaSaldoCC(NEW.financ_cc_id, NEW.data_emissao,false);
	--END IF;



   IF d423_gerar_fatura = 'R' OR d423_gerar_fatura = 'P' THEN
      IF TG_OP = 'INSERT'  THEN
          --Posiciona cadastro de unidade (sync)
		   SELECT id
		     INTO r_unidade
		     FROM cad_unidade
		    ORDER BY id
		    LIMIT 1;
		   IF FOUND THEN
		      -- Checa Faixa sync financ_rp
		      SELECT *
		      INTO   r_detail_sync
		      FROM   sync_table_details
		      WHERE  unidade_id = r_unidade.id
		        AND  nome_table = 'fat_docto_c';
		      IF FOUND THEN
		         IF NOT (NEW.controle >= r_detail_sync.faixa_inicio AND NEW.controle <= r_detail_sync.faixa_fim) THEN
		            RETURN NULL;
		         END IF;
		      END IF;
		   END IF;
	   END IF;

	   IF TG_OP = 'INSERT'  THEN
          --Posiciona cadastro de unidade (sync)
		   SELECT id
		     INTO r_unidade
		     FROM cad_unidade
		    ORDER BY id
		    LIMIT 1;
		   IF FOUND THEN
		      -- Checa Faixa sync financ_rp
		      SELECT *
		      INTO   r_detail_sync
		      FROM   sync_table_details
		      WHERE  unidade_id = r_unidade.id
		        AND  nome_table = 'finac_cc_movto';
		      IF FOUND THEN
		         IF NOT (NEW.controle >= r_detail_sync.faixa_inicio AND NEW.controle <= r_detail_sync.faixa_fim) THEN
		            RETURN NULL;
		         END IF;
		      END IF;
		   END IF;
	   END IF;

       --exlcuir contas a receber/pagar
       IF TG_OP = 'UPDATE'  THEN
        --Consiste Saldo
          UPDATE financ_rp_baixas SET  datapgto = datapgto  WHERE financ_cc_movto_controle = OLD.controle;

       	  SELECT financ_rp_baixas.financ_cc_movto_controle,financ_rp_lctobaixa_lcto,
       	         financ_rp_lctobaixa.financ_cc_movto_controle AS ctrl_baixa, financ_cc_id
       	    FROM financ_rp_baixas
       	    LEFT JOIN financ_rp_lctobaixa ON financ_rp_lctobaixa.lcto = financ_rp_lctobaixa_lcto
            INTO r_contem_Baixa
           WHERE financ_rp_baixas.financ_cc_movto_controle =  NEW.controle;

    	  IF FOUND THEN
       	      RAISE EXCEPTION 'FATURA GERADA POR ESSE LANCAMENTO CONTEM BAIXA - LCTO DE BAIXA C/C.:(%) - CONTROLE:(%). VERIFIQUE !!!', r_contem_Baixa.financ_cc_id, r_contem_Baixa.ctrl_baixa  ;
	         RETURN NULL;
	      END IF;



	    --Posiciona condpg
		  SELECT parcelas,prazoparcelas,vctoapartir
		    INTO r_condpgto
		    FROM fat_condpg
		   WHERE id = d424_CondPgto;

           IF NEW.valor             = OLD.valor            AND
              NEW.cad_cadastro_id   = OLD.cad_cadastro_id  AND
              NEW.cad_filial_id     = OLD.cad_filial_id    AND
              NEW.data_emissao      = OLD.data_emissao     AND
              NEW.fat_transacao_id  = OLD.fat_transacao_id THEN


              RETURN NULL;
           END IF;

           DELETE FROM financ_rp WHERE financ_rp.financ_cc_movto_controle = OLD.controle;
	   END IF;


    --Posiciona condpg
	  SELECT parcelas,prazoparcelas,vctoapartir
	    INTO r_condpgto
	    FROM fat_condpg
	   WHERE id = d424_CondPgto;

	 --Valor do lcto na C/C
	   valorCCsaldo    = NEW.valor;
	   valorTotalLcto =  NEW.valor;
	 --Loop parcelas
	  dia 		  = EXTRACT(DAY   FROM NEW.data_emissao);
	  mes         = EXTRACT(MONTH FROM NEW.data_emissao);
	  ano         = EXTRACT(YEAR  FROM NEW.data_emissao);
	  ultimoVcto  = NEW.data_emissao;
	  emissao     = NEW.data_emissao;
	  qtdeParcelas= 0;
	  FOR r_condpgtop IN SELECT * 
	                       FROM fat_condpg_p 
	                      WHERE fat_condpg_id = d424_CondPgto
	                      ORDER BY parcela LOOP
	        
	      
	       
	       --RAISE NOTICE 'dia: (%)',     dia;
	       --RAISE NOTICE 'mes: (%)',     mes;
	       --RAISE NOTICE 'ano: (%)',     ano;
	       --RAISE NOTICE 'ultimoVcto: (%)',     ultimoVcto;
	     --Periodo (em construcao)
	       IF r_condpgto.prazoparcelas = 'Periodo' THEN
	          RAISE EXCEPTION 'Condicao de pagamento por periodo ainda em construcao' ; 
	       END IF;
	     --Mensal   
	       IF r_condpgto.prazoparcelas = 'Mensal' THEN
	          mes = mes + 1;
	          IF mes > 12 THEN
	             mes = 1;
	             ano = ano + 1;
	          END IF;
	          --RAISE EXCEPTION 'Condicao de pagamento por periodo ainda em construcao % %', vencimento ,to_Char(ano,'9999')||'-'||to_Char(mes,'99'||'/'||to_Char(dia,'99'); 
	          vencimento = to_Date(to_Char(ano,'0999')||'-'||Trim(to_Char(mes,'09'))||'-'||Trim(to_Char(dia,'09')),'YYYY-MM-DD');
	          --RAISE EXCEPTION 'Condicao de pagamento por periodo ainda em construcao %', vencimento ; 
	          IF vencimento IS NULL THEN    
	             vencimento = getLastDay(NEW.data_emissao); 
	          END IF;
	       END IF;
	     
	    --Diario
	      IF r_condpgto.prazoparcelas = 'Diario' THEN
	         --vencimento = ultimoVcto + r_condpgtop.diasemissao;
	         vencimento = emissao + r_condpgtop.diasemissao;
	         ultimoVcto = vencimento;
	      END IF;
	   
	     valorPA      = (valorTotalLcto  * r_condpgtop.percentual) / 100;
	     valorCCsaldo = valorCCsaldo - valorPA;
	     qtdeParcelas = qtdeParcelas + 1;
	      
	     
	      
	     IF qtdeParcelas = r_condpgto.parcelas THEN
	       IF valorCCsaldo <> 0 THEN
	       	valorPA = valorPA + valorCCsaldo;
	       END IF;
	     END IF;
	     
	     --RAISE EXCEPTION 'valorTotalLcto:%  - valorPA:%',valorTotalLcto,valorPA ; 
	     
	     if valorPA IS NULL THEN
	        valorPA = COALESCE(valorPA, 0);
	        --RAISE EXCEPTION 'Valor parcela NULL: %  - ValorSaldo: % Prazo Parcela: %', valorPA, valorCCsaldo, r_condpgto.prazoparcelas ;
	     END IF;   
	     --mCm          = Comissao * FaCondI->fpe / 100;
	   --Grava contas Receber/Pagar
	     Receber_Pagar = d423_gerar_fatura;
	   --RAISE EXCEPTION 'Receber_Pagar:( % )',  Receber_Pagar;
	   --Checa constrant 
	     IF vencimento IS NULL THEN
	        RAISE EXCEPTION 'Vencimento nulo. Nao possivel persistir financeiro (LCTO C/C:%)!', New.controle ;
	     END IF;
	
	     IF r_condpgtop.financ_portador_id IS NULL THEN
	        RAISE EXCEPTION 'Portador nulo. Verique condicao de pgto (LCTO C/C::% C.Pgto.:%) !', New.controle, d424_CondPgto ;
	     END IF;
	
	     IF r_condpgtop.financ_tipocobranca_id IS NULL THEN
	        RAISE EXCEPTION 'Tipo de cobranca nulo. Verique condicao de pgto (LCTO C/C:% C.Pgto.:%) !', New.controle, d424_CondPgto ;
	     END IF;
	
	     --Posiciona Tipo de Cobranca
	     SELECT multa, juro, desconto, def_juros,acrescimo,carencia
	       INTO r_tipocobranca 
	       FROM financ_tipocobranca 
	      WHERE id = r_condpgtop.financ_tipocobranca_id; 
	    
	     --Posiciona Tipo de Cobranca
	     SELECT *
	       INTO r_parameters 
	       FROM fat_parameters 
	      LIMIT 1 ;  
	     --Checa JurosMora/Multa/Acrescimo
	     pjurosmora = CASE WHEN r_parameters.financjurosmora IS NULL THEN 0 ELSE r_parameters.financjurosmora END;
	     pmulta     = CASE WHEN r_parameters.financmulta     IS NULL THEN 0 ELSE r_parameters.financmulta     END;
	     pacrescimo = CASE WHEN r_parameters.financacrescimo IS NULL THEN 0 ELSE r_parameters.financacrescimo END;
	     ncarencia  = CASE WHEN r_parameters.financcarencia  IS NULL THEN 0 ELSE r_parameters.financcarencia  END;
	    
	     IF substring(r_tipocobranca.def_juros from 1 for 1) = '1' THEN -- Juros pelo Tipo de Cobranca   
	        pjurosmora = CASE WHEN r_tipocobranca.juro      IS NULL THEN 0 ELSE r_tipocobranca.juro      END;
	        pmulta     = CASE WHEN r_tipocobranca.multa     IS NULL THEN 0 ELSE r_tipocobranca.multa     END;
	        pacrescimo = CASE WHEN r_tipocobranca.acrescimo IS NULL THEN 0 ELSE r_tipocobranca.acrescimo END;
	        ncarencia  = CASE WHEN r_tipocobranca.carencia  IS NULL THEN 0 ELSE r_tipocobranca.carencia  END;
	     END IF;
	     
	     
	     
	     aCampos =  '{ cad_cadastro_id,
	                   financ_cc_movto_controle,
	                   parcela,
	                   cad_filial_id,
	                   emissao,
	                   vcto,
	                   prorrogacao,
	                   docto,
	                   portador_id,
	                   tipocobranca_id,
	                   status_reg,
	                   moeda_id,
                       vendedor_id,
					   per_acrescimo,
					   per_jurosmora,
					   per_multa,	
                       carencia,
	                   valor_desconto,
					   valor_jurosmora,
					   valor_acrescimo,
	                   valor_total,
	                   valor_saldo}';
	       
	     
	                  
	      aDados  =   '{' || to_char(NEW.cad_cadastro_id, '999999999')   ||','
	                      || to_char(NEW.controle,  '9999999999')           ||',' 
	                      || to_char(r_condpgtop.parcela,  '999')           ||',' 
	     			      || to_Char(NEW.cad_filial_id, '999')              ||','
	     			      || to_Char(NEW.data_emissao, 'dd/MM/yyyy')             ||','
	     			      || to_Char(vencimento::DATE, 'dd/MM/yyyy')          ||','
	     			      || to_Char(vencimento::DATE, 'dd/MM/yyyy')          ||','
	     			      || 'G-LCTO-C/C:'||ltrim(to_char(NEW.controle,'09999999999'))||'-'||ltrim(to_char(r_condpgtop.parcela,'09'))||'/'||ltrim(to_char(r_condpgto.parcelas,'09'))  ||','
	     			      || to_Char(r_condpgtop.financ_portador_id, '999')    ||','
	     			      || to_Char(r_condpgtop.financ_tipocobranca_id, '999')||','
	     			      || 'G'                                            ||','
	     			      || 'R$'                                           ||',' 
	     			      || to_char(0,'99999')   ||','
	     			      || to_Char(pacrescimo, '999999999.99')            ||','
	     			      || to_Char(pjurosmora, '999999999.99')            ||','
	     			      || to_Char(pmulta, '999999999.99')                ||','
	     			      || to_Char(ncarencia, '999999999')              ||','
	     			      || '0.00'                                         ||',' 
	     			      || '0.00'                                         ||',' 
	     			      || '0.00'                                         ||',' 
	     			      || to_Char(valorPA, '999999999.99')               ||','
	     			      || to_Char(valorPA, '999999999.99')               ||'}';
	     			          
	     --RAISE NOTICE 'aCampos fianc_rp: (%)',     aCampos;
	     --RAISE NOTICE 'aDados financ_rp: (%)',      aDados;
	     
	     IF aDados IS NULL THEN
	        RAISE EXCEPTION 'Nao sera possivel gravar docto. 
                             Dados para financeiro incompleto. Verifique campos <NULL>:
                            (cad_cadastro_id:%      
                              financ_cc_movto_controle:%
                              parcela:%             
                              cad_filial_id:%       
                              emissao:%             
                              vcto:%                
                              prorrogacao:%         
                              docto:%               
                              portador_id:%     
                              tipocobranca_id:% 
                              status_reg:%          
                              moeda_id:% 
							  cadastro_vendedor_id:% 
                              per_acrescimo:%
					          per_jurosmora:%
					          per_multa:%	
                              carencia:%	       
                              valor_desconto:%      
                              valor_jurosmora:%     
                              valor_acrescimo:%     
                              valor_total:%         
                              valor_saldo:%)',      
                               to_char(NEW.cad_cadastro_id, '999999999')   ,
                               to_char(NEW.controle,  '9999999999')           ,  
                               to_char(r_condpgtop.parcela,  '999')           ,  
                               to_Char(NEW.cad_filial_id, '999')              ,  
                               to_Char(NEW.data_emissao, 'dd/MM/yyyy')             ,
                               to_Char(vencimento::DATE, 'dd/MM/yyyy')          ,
                               to_Char(vencimento::DATE, 'dd/MM/yyyy')          ,
                               'G-LCTO-C/C:'||ltrim(to_char(NEW.controle,'09999999999'))||'-'||to_char(r_condpgtop.parcela,  '99')||'/'||to_char(r_condpgto.parcelas, '99'),
                               to_Char(r_condpgtop.financ_portador_id, '999')    ,  
                               to_Char(r_condpgtop.financ_tipocobranca_id, '999'),  
                               'G'                                            ,
                               'R$'                                           , 
                               to_char(0,'99999')   ,
                               to_Char(pacrescimo, '999999999.99')            ,
	     			           to_Char(pjurosmora, '999999999.99')            ,
	     			           to_Char(pmulta, '999999999.99')               ,
	     			           to_Char(ncarencia, '999999999')               ,
                               '0.00'                                         ,  
                               '0.00'                                         ,  
                               '0.00'                                         ,  
                               to_Char(valorPA, '999999999.99')               ,  
                               to_Char(valorPA, '999999999.99')               ; 
                            
	     END IF;
	     
	     --RAISE NOTICE 'aDados: (%)',      aDados;
	     
	     
	     IF NOT padrao.gravarp(Receber_Pagar, aCampos, aDados)THEN
	        RAISE EXCEPTION 'nao possivel persistir financeiro (NF:% - CTRL:%)!',NEW.numero_docto , New.controle ;
	     END IF;
	  END LOOP; 
   END IF;


   RETURN NULL;
END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE;


-- Gatilho {lancamentocc_integra()} Versao {002} Esquema {empresa} Descricao {Grava integracao contas corrente }
-- ------------------------------------------------------------

CREATE TRIGGER lancamentocc_integra AFTER INSERT OR UPDATE OR DELETE ON financ_cc_movto
       FOR EACH ROW EXECUTE PROCEDURE padrao.lancamentocc_integra();
              