-- Storeprocedure {getCustoProd(int4, int4, date)} Versao {005} Esquema {padrao} Descricao {Retornar Custo digitado do produto}
-- ------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.getCustoProd(int4, int4, date)
  RETURNS numeric(14,6) AS
$BODY$
 DECLARE
 p_filial     alias for $1;
 p_produto    alias for $2;
 p_data       alias for $3;
 v_retorna    NUMERIC(16,4);
 
 r_filial         RECORD;   
 r_parameters     RECORD;  

 BEGIN
	--Posiciona parameters
	 SELECT *
	   INTO r_parameters 
	   FROM fat_parameters 
	  LIMIT 1 ;    

   --posiciona filial
    SELECT id, filialestoque
	  INTO r_filial
      FROM cad_filial
	 WHERE id = p_Filial;
	 
    SELECT custodigitado
      FROM fat_produto_movto AS M
      INTO v_retorna
     WHERE (M.cad_filial_id  = r_parameters.fatfilialpadrao OR M.cad_filial_id  = r_filial.filialestoque)
       AND M.fat_produto_id  = p_produto
       AND M.DataMovto     <= p_data
     ORDER BY M.DataMovto DESC, M.fat_docto_c_controle DESC
     LIMIT 1;
    RETURN v_retorna;
 END;
 $BODY$
  LANGUAGE 'plpgsql' VOLATILE;

  
-- Storeprocedure {getCustoProd(int4, int4, date,int)} Versao {011} Esquema {padrao} Descricao {Retornar Custo digitado do produto}
-- ------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.getCustoProd(int4, int4, date, int)
  RETURNS numeric(14,6) AS

$BODY$

 DECLARE
 p_filial     alias for $1;
 p_produto    alias for $2;
 p_data       alias for $3;
 p_tipocusto  alias for $4;  -- (1001)- Custo Real (1002)-Custo NF (1003)- Custo Reposicao (digitado) (1004)- Custo Medio (1005)- Custo Inventario
 v_retorna    NUMERIC(16,4);
 
 r_filial         RECORD;   
 r_parameters     RECORD;
 
 BEGIN
	 
	 --Posiciona parameters
	 SELECT *
	   INTO r_parameters 
	   FROM fat_parameters 
	  LIMIT 1 ;    

   --posiciona filial
    SELECT id, filialestoque
	  INTO r_filial
      FROM cad_filial
	 WHERE id = p_Filial;
	 
    SELECT CASE p_tipocusto 
                WHEN 1001 THEN custoreal
                WHEN 1002 THEN custonf 
                WHEN 1003 THEN custodigitado 
                WHEN 1004 THEN customedio 
                WHEN 1005 THEN custoinventario 
                ELSE custodigitado
           END     
      FROM fat_produto_movto AS M
      INTO v_retorna
     WHERE (M.cad_filial_id  = r_parameters.fatfilialpadrao OR M.cad_filial_id  = r_filial.filialestoque)
       AND M.fat_produto_id   = p_produto
       AND M.DataMovto     <= p_data
     ORDER BY M.DataMovto DESC, M.fat_docto_c_controle DESC
     LIMIT 1;
    RETURN v_retorna;
 END;
 
$BODY$
 
 LANGUAGE 'plpgsql' VOLATILE;
  
