
-- StoreProcedure {gravarpcl()} Versao {25} Esquema {padrao} Descricao {Grava classificacao gerencial a receber/pagar}
-- -----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.gravarpcl(character varying[],character varying[])
  RETURNS bool AS
  $BODY$
  DECLARE
	p_atributo               alias for $1;
	p_dado                   alias for $2;
	v_length                 integer;
 	v_contador               integer;
 	v_retorna                boolean;
    a_id                     int;                             
    a_financ_rp_id           int;           
    a_cad_cadastro_id        int;                  
    --a_fatura                 financ_rp_cl.fatura%TYPE;                                               
    --a_parcela                financ_rp_cl.parcela%TYPE;                                              
    a_financ_classificacao_g_id int;                         
    --a_baixa_lancamento       financ_rp_cl.baixa_lancamento%TYPE;                                 
    a_tipo                   char(2) ;                     
    a_regimecaixa            boolean;                    
    a_regimecompetencia      boolean;                    
    a_natureza               char(7);
    a_datalcto               date;
    a_valor                  DECIMAL(14,2);
    r_registro   record;
  BEGIN
     v_length   := array_upper(p_dado,1);
  	 v_contador := 0;
  	 v_retorna = true;
  	 
     
    WHILE v_contador <= v_length LOOP
        --RAISE NOTICE 'atributo(%)', p_atributo[v_contador];
        --RAISE NOTICE 'dado (%)',      p_dado[v_contador];
     	v_contador := v_contador + 1;
     	IF  p_atributo[v_contador] = 'id'THEN
     	   a_id = CAST(p_dado[v_contador] AS Integer);
		   --RAISE NOTICE 'a_id (%)',      a_lancamento;
     	END IF;
     	IF  p_atributo[v_contador] = 'financ_rp_id'THEN
     	   a_financ_rp_id = CAST(p_dado[v_contador] AS Integer);
		   --RAISE NOTICE 'a_financ_rp_id (%)',      a_financ_rp_id;
     	END IF;
     	IF  p_atributo[v_contador] = 'cad_cadastro_id'THEN
     	   a_cad_cadastro_id = CAST(p_dado[v_contador] AS Integer);
		   --RAISE NOTICE 'a_cad_cadastro_id (%)',      a_cad_cadastro_id;
     	END IF;
     	--IF  p_atributo[v_contador] = 'fatura'THEN
     	--   a_fatura = CAST(p_dado[v_contador] AS Integer);
		--   --RAISE NOTICE 'a_fatura (%)',     a_fatura;
     	--END IF;
     	--IF  p_atributo[v_contador] = 'parcela'THEN
     	--   a_parcela = CAST(p_dado[v_contador] AS Integer);
		--   --RAISE NOTICE 'a_parcela (%)',      a_parcela;
     	--END IF;
     	IF p_atributo[v_contador] = 'financ_classificacao_g_id'THEN
     	   a_financ_classificacao_g_id = CAST(p_dado[v_contador] AS Integer);
		   --RAISE NOTICE ' a_financ_classificacao_g_id (%)',      a_financ_classificacao_g_id;
     	END IF;   
     	--IF  p_atributo[v_contador] = 'baixa_lancamento'THEN
     	--   a_baixa_lancamento = CAST(p_dado[v_contador] AS Integer);
		--   --RAISE NOTICE 'a_baixa_lancamento (%)',      a_rbaixa_lancamento;
     	--END IF; 
     	IF  p_atributo[v_contador] = 'tipo'THEN
     	   a_tipo = p_dado[v_contador];
		   --RAISE NOTICE 'a_tipo (%)',      a_tipo;
     	END IF;   
     	IF  p_atributo[v_contador] = 'regimecaixa'THEN
     	   a_regimecaixa = CASE WHEN p_dado[v_contador] = 'true'THEN true ELSE false END;
     	END IF;
     	IF  p_atributo[v_contador] = 'regimecompetencia'THEN
     	   a_regimecompetencia = CASE WHEN p_dado[v_contador] = 'true'THEN true ELSE false END;
     	END IF;
     	IF  p_atributo[v_contador] = 'datalcto'THEN
     	   a_datalcto = TO_DATE(p_dado[v_contador],'dd/mm/yyyy');
     	END IF; 
     	IF  p_atributo[v_contador] = 'natureza'THEN
     	   a_natureza = p_dado[v_contador];
     	END IF;
     	IF  p_atributo[v_contador] = 'valor'THEN
     	   a_valor = CAST(p_dado[v_contador] AS DECIMAL(14,2));
     	END IF;
     
  	End LOOP;

    -- Insert or update tabela receber row with the new values.
    LOOP
       UPDATE financ_rp_cl
          SET financ_rp_id               = a_financ_rp_id,       
			  tipo                       = a_tipo,                   
			  regimecaixa                = a_regimecaixa,            
			  regimecompetencia          = a_regimecompetencia,      
			  natureza                   = a_natureza,               
			  datalcto                   = a_datalcto,               
			  valor                      = a_valor                  
        WHERE financ_rp_id               = a_financ_rp_id
          AND financ_classificacao_g_id  = a_financ_classificacao_g_id;

        EXIT  WHEN found;

        BEGIN
            INSERT INTO financ_rp_cl
                      ( financ_rp_id, 
                        cad_cadastro_id,
					    financ_classificacao_g_id,
					    tipo,                  
					    regimecaixa,           
					    regimecompetencia,     
					    natureza,              
					    datalcto,              
					    valor)                   
                 VALUES(a_financ_rp_id,
                        a_cad_cadastro_id,       
						a_financ_classificacao_g_id,
						a_tipo,                  
						a_regimecaixa,           
						a_regimecompetencia,     
						a_natureza,              
						a_datalcto,              
						a_valor	);
            EXIT ;

        EXCEPTION
            WHEN UNIQUE_VIOLATION THEN
                -- do nothing
                  v_retorna = false;
        END;
    END LOOP;
    RETURN v_retorna;
  END
  
  $BODY$
  
  LANGUAGE 'plpgsql' VOLATILE;

  