create or replace PROCEDURE USR_PROT_BAIXA_AUTOFORNE(
   P_MENSAGEMERRO OUT VARCHAR2)
IS
   --GERAL
   V_CDCENTCUST    USR_CISBAIXA_AUTOFORNE.CDCENTCUST%TYPE;
   V_NRAUTOFORNE   USR_CISBAIXA_AUTOFORNE.NRAUTOFORNE%TYPE;
   V_CDITEM        USR_CISBAIXA_AUTOFORNE.CDITEM%TYPE;
   V_CDPRODUTO     USR_CISBAIXA_AUTOFORNE.CDPRODUTO%TYPE;
   V_IDINTERFACE   USR_CISBAIXA_AUTOFORNE.IDINTERFACE%TYPE;

   --ESPECIFICO TABELA INT
   V_LOG_ERRO      VARCHAR2(250);
   V_DTGRAVACAO    DATE;
   V_HRGRAVACAO    VARCHAR2(5);
   V_DTIMPORTACAO  DATE;
   V_HRIMPORTACAO  VARCHAR2(5);
   V_ERRO 			 VARCHAR2(5000);
   V_OBS			    VARCHAR2(5000);

   --VARIAVEIS LOCAIS MUTAVEIS
   V_CDFILIAL      AUTOFORNE.CDFILDEST%TYPE;
   V_NRAUTOFORN    AUTOFORNE.NRAUTOFORN%TYPE;
   V_CDMARCA       ITEMAUTF.CDMARCA%TYPE;
   V_PENDENTES     NUMBER;

   CURSOR C_BAIXAMANUAL IS
      SELECT CDCENTCUST, NRAUTOFORNE, CDITEM, CDPRODUTO, IDINTERFACE, LOG_ERRO
        FROM USR_CISBAIXA_AUTOFORNE
       WHERE DTIMPORTACAO IS NULL;
BEGIN
   OPEN C_BAIXAMANUAL;
   LOOP
      FETCH C_BAIXAMANUAL INTO V_CDCENTCUST,
                               V_NRAUTOFORNE,
                               V_CDITEM,
                               V_CDPRODUTO,
                               V_IDINTERFACE,
                               V_LOG_ERRO;
		EXIT WHEN C_BAIXAMANUAL%NOTFOUND;

      V_ERRO := NULL;
      V_OBS  := NULL;
      P_MENSAGEMERRO := NULL;

      IF (V_IDINTERFACE = '1' OR V_IDINTERFACE = '2') THEN
         BEGIN
            SELECT CDFILIAL
              INTO V_CDFILIAL
              FROM PARAMFILIAL
             WHERE CDEXFILIAL = V_CDCENTCUST;

            SELECT CDMARCA
              INTO V_CDMARCA
              FROM USR_CISAUTO_FORNE
             WHERE CDCENTCUST  = V_CDCENTCUST
               AND NRAUTOFORNE = V_NRAUTOFORNE
               AND CDITEM      = V_CDITEM;

            V_NRAUTOFORN := LPAD(V_NRAUTOFORNE, 10, '0');

            SELECT COUNT(*)
              INTO V_PENDENTES
              FROM ITEMAUTF
             WHERE CDFILDEST  = V_CDFILIAL
               AND NRAUTOFORN = V_NRAUTOFORN
               AND NVL(QTEFETENTRAF, 0) < QTPROGENTAF
               AND NVL(IDBAIXITMAF, 0) <> 3;

            UPDATE ITEMAUTF
					SET DTEFETENTAF = SYSDATE,
					    IDBAIXITMAF = '3',
					    CDOPERBAIXA = '000000009999'
				 WHERE CDFILDEST  = V_CDFILIAL
               AND CDFILLANC  = V_CDFILIAL
               AND NRAUTOFORN = V_NRAUTOFORN
               AND CDPRODUTO  = V_CDPRODUTO
               AND CDMARCA    = V_CDMARCA;

				IF (V_PENDENTES > 0) THEN
				   UPDATE AUTOFORNE
					   SET IDBAIXAAF = '1'
					 WHERE CDFILDEST  = V_CDFILIAL
					   AND NRAUTOFORN = V_NRAUTOFORN;
				ELSE
					UPDATE AUTOFORNE
					   SET IDBAIXAAF = '3'
					 WHERE CDFILDEST  = V_CDFILIAL
					   AND NRAUTOFORN = V_NRAUTOFORN;
				END IF;
         EXCEPTION
				WHEN OTHERS THEN
					V_ERRO := SQLERRM(SQLCODE);
        			P_MENSAGEMERRO := V_ERRO;
			END;
      END IF;

    	UPDATE USR_CISBAIXA_AUTOFORNE
       	SET DTIMPORTACAO = SYSDATE,
         	 HRIMPORTACAO = TO_CHAR(SYSDATE, 'HH:MM'),
        		 LOG_ERRO = V_ERRO
       WHERE CDCENTCUST  = V_CDCENTCUST
         AND NRAUTOFORNE = V_NRAUTOFORNE
         AND CDITEM      = V_CDITEM
         AND CDPRODUTO	 = V_CDPRODUTO;

      COMMIT;

   END LOOP;
   CLOSE C_BAIXAMANUAL;

   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('USR_PROT_BAIXA_AUTOFORNE','6.35.038'); END;
/
