-- Storeprocedure {getmovtoprod(int4,int4, char(1),  char(1))} Versao {003} Esquema {padrao} Descricao {Saldo da movimentacao}
-- ------------------------------------------------------------

CREATE OR REPLACE FUNCTION padrao.getmovtoprod( int4, int4, char(1),  char(1)) RETURNS Numeric(12,2) AS

$BODY$

DECLARE
 v_cadastro_clifor       alias for $1;
 v_produto_codigo        alias for $2;
 v_tipomovto_e           alias for $3; -- tipo movto de envio
 v_tipomovto_r           alias for $4; -- tipo movto de retorno
 v_resultado_e           RECORD;
 v_resultado_r           RECORD;
 v_retornar              float8;
 v_envio                 float8;
 v_retorno               float8;

 BEGIN
    v_retornar := 0;
    v_envio    := 0;
    v_retorno  := 0;
    
    SELECT tipomovto,natureza,fat_produto_id, cad_cadastro_id, sum(qtde) as qtde into v_resultado_e 
      FROM fat_produto_movto 
     WHERE cad_cadastro_id = v_cadastro_clifor 
       AND fat_produto_id  = v_produto_codigo
       AND tipomovto = v_tipomovto_e
     GROUP by tipomovto,natureza,fat_produto_id,cad_cadastro_id;
    
    If found then
       v_envio = v_resultado_e.qtde;
    End if;
	
    SELECT tipomovto,natureza,fat_produto_id, cad_cadastro_id, sum(qtde) as qtde into v_resultado_r 
      FROM fat_produto_movto 
     WHERE cad_cadastro_id = v_cadastro_clifor 
       AND fat_produto_id  = v_produto_codigo
       AND tipomovto       = v_tipomovto_r
     GROUP by tipomovto,natureza,fat_produto_id,cad_cadastro_id;
    
    If found then
       v_retorno = v_resultado_r.qtde;
    End if;
    
     v_retornar = v_envio - v_retorno;
   
    RETURN v_retornar;
 END;
 
$BODY$

LANGUAGE 'plpgsql';