
-- StoreProcedure {gravapc()} Versao {07} Esquema {padrao} Descricao {Grava grava saldo de pedido/consignaca/etc}
-- -----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.gravapc(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_fat_docto_c_controle     bigint;
    a_tipo                     varchar(2);
    a_cad_cadastro_id          int;
    a_cad_filial_id            int;
    a_data_p                   date;
    a_status_p                 varchar(20);
   
    r_registro   record;
  
  BEGIN
     v_length   := array_upper(p_dado,1);
  	 v_contador := 0;
  	 v_retorna = true;
  	 
    WHILE v_contador < v_length LOOP
     	v_contador := v_contador + 1;
        --RAISE NOTICE 'atributo(%)', p_atributo[v_contador];
        --RAISE NOTICE 'dado (%)',      p_dado[v_contador];
     	IF  p_atributo[v_contador] = 'cad_cadastro_id'THEN
     	   a_cad_cadastro_id = CAST(p_dado[v_contador] AS bigInt);
		   --RAISE NOTICE 'a_cad_cadastro_id (%)',      a_cad_cadastro_id;
     	END IF;
     	IF  p_atributo[v_contador] = 'fat_docto_c_controle'THEN
     	   a_fat_docto_c_controle = CAST(p_dado[v_contador] AS bigInt);
		   --RAISE NOTICE 'a_fat_docto_c_controle (%)',      a_fat_docto_c_controle;
     	END IF;   
     	IF  p_atributo[v_contador] = 'tipo'THEN
     	   a_tipo = p_dado[v_contador];
     	END IF;
     	IF  p_atributo[v_contador] = 'cad_filial_id'THEN
     	   a_cad_filial_id = CAST(p_dado[v_contador] AS bigInt);
		   --RAISE NOTICE 'a_cad_filial_id (%)',      a_cad_filial_id;
     	END IF;   
     	IF  p_atributo[v_contador] = 'data_p'THEN
     	   a_data_p = TO_DATE(p_dado[v_contador],'dd/MM/yyyy');
     	END IF; 
		IF  p_atributo[v_contador] = 'status_p'THEN
     	   a_status_p = p_dado[v_contador];
     	END IF;
     
  	End LOOP;
    -- Insert or update tabela financ_rp row with the new values.
    LOOP
   
       UPDATE fat_docto_pc
          SET tipo                = a_tipo,
              cad_filial_id       = a_cad_filial_id,
			  cad_cadastro_id     = a_cad_cadastro_id,
			  data_p              = a_data_p,
			  status_p            = a_status_p
        WHERE fat_docto_c_controle= a_fat_docto_c_controle;

        EXIT  WHEN found;

        BEGIN
            INSERT INTO fat_docto_pc
                      ( fat_docto_c_controle,
                        tipo,
					    cad_filial_id,
					    cad_cadastro_id,
					    data_p,
					    status_p )
                 VALUES(a_fat_docto_c_controle,      
						a_tipo,               
						a_cad_filial_id,        
						a_cad_cadastro_id,              
						a_data_p,                 
						a_status_p);
            EXIT ;

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

  