
-- StoreProcedure {gravapi()} Versao {07} Esquema {padrao} Descricao {Grava itens ped/orc/consig/etc}
-- -----------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.gravapi(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_pc_fat_docto_c_controle     bigint;              
    a_fat_produto_id                        bigint;                
    a_cad_filial_id                         bigint;                                               
    a_tipo                                  varchar(20);                              
    a_data_p                                date ;                            
    a_qtde                                  DECIMAL(16,6);                
    a_qtde_atendida                         DECIMAL(16,6);                
    a_qtde_naoatendida                      DECIMAL(16,6);                
    a_qtde_cancelada                        DECIMAL(16,6);                
    a_qtde_pendente                         DECIMAL(16,6);
   
    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] = 'fat_produto_id'THEN
     	   a_fat_produto_id = CAST(p_dado[v_contador] AS bigInt);
		   --RAISE NOTICE 'a_fat_produto_id (%)',      a_fat_produto_id;
     	END IF;
     	IF  p_atributo[v_contador] = 'fat_docto_pc_fat_docto_c_controle'THEN
     	   a_fat_docto_pc_fat_docto_c_controle = CAST(p_dado[v_contador] AS bigInt);
		   --RAISE NOTICE 'a_fat_docto_pc_fat_docto_c_controlee (%)',      a_fat_docto_pc_fat_docto_c_controle;
     	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] = 'tipo'THEN
     	   a_tipo = p_dado[v_contador];
     	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] = 'qtde'THEN
     	   a_qtde = CAST(p_dado[v_contador] AS DECIMAL(14,6));
     	END IF;
     	IF  p_atributo[v_contador] = 'qtde_atendida'THEN
     	   a_qtde_atendida = CAST(p_dado[v_contador] AS DECIMAL(14,6));
     	END IF;
     	IF  p_atributo[v_contador] = 'qtde_naoatendida'THEN
     	   a_qtde_naoatendida = CAST(p_dado[v_contador] AS DECIMAL(14,6));
     	END IF;
     	IF  p_atributo[v_contador] = 'qtde_cancelada'THEN
     	   a_qtde_cancelada = CAST(p_dado[v_contador] AS DECIMAL(14,6));
     	END IF;
     	IF  p_atributo[v_contador] = 'qtde_pendente'THEN
     	   a_qtde_pendente = CAST(p_dado[v_contador] AS DECIMAL(14,6));
     	END IF;
     	
     
  	End LOOP;
    -- Insert or update tabela financ_rp row with the new values.
    LOOP
   
       UPDATE fat_docto_pi
          SET tipo                = a_tipo,
              cad_filial_id       = a_cad_filial_id,
			  data_p              = a_data_p,
			  qtde                = a_qtde,
			  qtde_atendida       = a_qtde_atendida,
			  qtde_naoatendida    = a_qtde_naoatendida,
			  qtde_cancelada      = a_qtde_cancelada,
			  qtde_pendente       = a_qtde_pendente
        WHERE fat_docto_pc_fat_docto_c_controle = a_fat_docto_pc_fat_docto_c_controle
          AND fat_produto_id      = a_fat_produto_id;

        EXIT  WHEN found;

        BEGIN
            INSERT INTO fat_docto_pi
                      ( fat_docto_pc_fat_docto_c_controle,
                        fat_produto_id,
                        cad_filial_id,
                        tipo,
					    data_p,
					    qtde,
  						qtde_atendida,
                        qtde_naoatendida,
                        qtde_cancelada,
                        qtde_pendente)
                 VALUES(a_fat_docto_pc_fat_docto_c_controle,   
                        a_fat_produto_id,                        
						a_cad_filial_id,                       
						a_tipo,                                
						a_data_p,                               
						a_qtde,                                
						a_qtde_atendida,                       
						a_qtde_naoatendida,                    
						a_qtde_cancelada,                      
						a_qtde_pendente);                       
						
            EXIT ;

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

  