/*
@C:\WEB_501\Sql\End_Conv\Oracle\8275_CMPSTPO_BaixaAF.SQL
 raise_application_error(-20501, '' , True);
*/

CREATE OR REPLACE PROCEDURE BAIXAAF(
  	P_CDFILDEST  IN ITEMAUTF.CDFILDEST%TYPE,
	P_CDFILLANC  IN ITEMAUTF.CDFILLANC%TYPE,
 	P_NRAUTOFORN IN ITEMAUTF.NRAUTOFORN%TYPE)

IS

   V_TOTALITEM    NUMBER;
   V_BAIXATOTAL   NUMBER;
   V_BAIXAMANUAL  NUMBER;
   V_EMABERTO     NUMBER;
   V_BAIXAPARCIAL NUMBER;
   V_IDBAIXAAF    AUTOFORNE.IDBAIXAAF%TYPE;
BEGIN
   V_TOTALITEM    := 0;
   V_BAIXATOTAL   := 0;
   V_BAIXAMANUAL  := 0;
   V_EMABERTO     := 0;
   V_BAIXAPARCIAL := 0;


   SELECT COUNT(*) INTO V_TOTALITEM -- BUSCA O TOTAL DE ITENS DA AF
   FROM ITEMAUTF
   WHERE
      P_CDFILDEST  = ITEMAUTF.CDFILDEST AND
      P_CDFILLANC  = ITEMAUTF.CDFILLANC AND
      P_NRAUTOFORN = ITEMAUTF.NRAUTOFORN;

   SELECT COUNT(*) INTO V_EMABERTO  -- BUSCA O TOTAL DE ITENS DA AF EM ABERTO
   FROM ITEMAUTF
   WHERE
      P_CDFILDEST  = ITEMAUTF.CDFILDEST AND
      P_CDFILLANC  = ITEMAUTF.CDFILLANC AND
      P_NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
      ITEMAUTF.IDBAIXITMAF IS NULL;

   SELECT COUNT(*) INTO V_BAIXAPARCIAL -- BUSCA O TOTAL DE ITENS DA AF COM BAIXA PARCIAL
   FROM ITEMAUTF
   WHERE
      P_CDFILDEST  = ITEMAUTF.CDFILDEST AND
      P_CDFILLANC  = ITEMAUTF.CDFILLANC AND
      P_NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
      ITEMAUTF.IDBAIXITMAF = '1';

   SELECT COUNT(*) INTO V_BAIXATOTAL -- BUSCA O TOTAL DE ITENS DA AF COM BAIXA TOTAL
   FROM ITEMAUTF
   WHERE
      P_CDFILDEST  = ITEMAUTF.CDFILDEST AND
      P_CDFILLANC  = ITEMAUTF.CDFILLANC AND
      P_NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
      ITEMAUTF.IDBAIXITMAF = '2';

   SELECT COUNT(*) INTO V_BAIXAMANUAL -- BUSCA O TOTAL DE ITENS DA AF COM BAIXA MANUAL
   FROM ITEMAUTF
   WHERE
      P_CDFILDEST  = ITEMAUTF.CDFILDEST AND
      P_CDFILLANC  = ITEMAUTF.CDFILLANC AND
      P_NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
      ITEMAUTF.IDBAIXITMAF = '3';

   IF V_TOTALITEM = V_EMABERTO THEN
      V_IDBAIXAAF := NULL;  -- AF EM ABERTO
   END IF;
   IF V_TOTALITEM = V_BAIXATOTAL THEN
      V_IDBAIXAAF := '2';   -- AF COM BAIXA TOTAL
   END IF;
   IF V_BAIXAPARCIAL > 0 THEN
      V_IDBAIXAAF := '1';   -- AF COM BAIXA PARCIAL
   END IF;
   IF (V_TOTALITEM = V_BAIXATOTAL + V_BAIXAMANUAL) AND
      (V_BAIXAMANUAL > 0) THEN
      V_IDBAIXAAF := '3';   -- AF COM BAIXA MANUAL
   END IF;
   IF (V_TOTALITEM = V_BAIXATOTAL + V_BAIXAMANUAL + V_EMABERTO) AND
      (V_EMABERTO > 0) AND (V_EMABERTO < V_TOTALITEM) THEN
      V_IDBAIXAAF := '1';   -- AF COM BAIXA PARCIAL
   END IF;

   UPDATE AUTOFORNE  -- ALTERA O ID DE BAIXA DA AF
   SET IDBAIXAAF = V_IDBAIXAAF
   WHERE
      P_CDFILDEST  = AUTOFORNE.CDFILDEST AND
      P_CDFILLANC  = AUTOFORNE.CDFILLANC AND
      P_NRAUTOFORN = AUTOFORNE.NRAUTOFORN;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('BAIXAAF','5.03.004'); END;
/

