CREATE OR REPLACE
PROCEDURE FECHA_AUTOFORNE_MOBILE(P_CDFILDEST  AUTOFORNE.CDFILDEST%TYPE,
                                 P_CDFILLANC  AUTOFORNE.CDFILLANC%TYPE,
                                 P_NRAUTOFORN AUTOFORNE.NRAUTOFORN%TYPE)
IS
  V_ERRO         VARCHAR2(32767) := NULL;
  V_ERROITEM     VARCHAR2(32767) := NULL;
  V_CDERRO       VARCHAR2(1000)  := '_';
  V_CDERROITEM   VARCHAR2(1000)  := '_';
  V_CDCHAVE      VARCHAR2(10)    := '_';
  V_IDSITUATUAAF VARCHAR2(1);
  V_IDAFFORALIM  VARCHAR2(1);
BEGIN
   --RAISE_APPLICATION_ERROR(-20501, P_CDFILDEST||'_'||P_CDFILLANC||'_'||P_NRAUTOFORN);
   FECHAMENTO_AF(P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN);
   EXCLUI_CONTAPAGAR_PREVISTA(P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN, V_ERRO);
   GERA_CONTAPAGAR_PREVISTA(P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN);


   FOR C_INCONSITENCIA IN
      (SELECT CDFILDEST, CDFILLANC, NRAUTOFORN, CDPRODUTO, CDMARCA, DTPROGENTAF, CDFORNECED, CDERRO, TO_CHAR(VRLIMITE, '9999999999999D99MI') VRLIMITE, TO_CHAR(VRERROR, '9999999999999D99MI') VRERROR
         FROM TABLE(INCONSISTENCIA_AF(P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN, P_CDFILLANC))
        ORDER BY CDPRODUTO DESC)
   LOOP
      IF C_INCONSITENCIA.CDPRODUTO IS NULL THEN
         V_CDERRO := V_CDERRO||'_'||C_INCONSITENCIA.CDERRO||'_';
         V_ERRO := V_ERRO||
         CASE C_INCONSITENCIA.CDERRO
            WHEN 'L08'   THEN 'Valor da AF ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo para o comprador ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'L09'   THEN 'Valor de AF(s) no mes ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo para o comprador ('||C_INCONSITENCIA.VRLIMITE||')'||CHR(13)
            WHEN 'I10'   THEN 'Quantidade total da AF ('||C_INCONSITENCIA.VRERROR||') abaixo da quantidade minima para o fornecedor ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I11'   THEN 'Valor total da AF ('||C_INCONSITENCIA.VRERROR||') abaixo do valor minimo para o fornecedor ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I18'   THEN 'Quantidade total da AF ('||C_INCONSITENCIA.VRERROR||') abaixo da quantidade minima para o fornecedor na regiao ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I19'   THEN 'Valor total da AF ('||C_INCONSITENCIA.VRERROR||') abaixo do valor minimo para o fornecedor na regiao ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'L20'   THEN 'Orcamento da filial para consumo ultrapassado. Valor Orcado: ('||C_INCONSITENCIA.VRERROR||'). Valor Realizado com a AF: ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'L23'   THEN 'Orcamento da filial para despesa ultrapassado. Valor Orcado: ('||C_INCONSITENCIA.VRERROR||'). Valor Realizado com a AF: ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I28'   THEN 'Quantidade de fornecedores com entrega no mesmo dia ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo permitido ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I29'   THEN 'Peso para entrega no OL ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo permitido ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I30'   THEN 'Calendario de compras nao foi calculado para a filial ('||C_INCONSITENCIA.VRERROR||'), periodicidade ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I32'   THEN 'Data de entrega da AF nao respeita o prazo do fornecedor para expedicao de mercadoria de ('||C_INCONSITENCIA.VRLIMITE||') dias.'||CHR(13)
            WHEN 'I33'   THEN 'Obriga liberacao de AF manual devido ao parametro "Exigir Liberacao para as AFs Manuais".'||CHR(13)
         END;
      ELSE
         IF V_CDCHAVE <> C_INCONSITENCIA.CDPRODUTO THEN
            V_CDCHAVE := C_INCONSITENCIA.CDPRODUTO;
            V_CDERROITEM := '_';
            V_ERROITEM   := NULL;
         END IF;
         V_ERROITEM := V_ERROITEM||
         CASE C_INCONSITENCIA.CDERRO
            WHEN 'L12'   THEN 'Valor do produto ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo para o comprador ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'L13'   THEN 'Valor do produto no mes ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo para o comprador ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I14'   THEN 'Quantidade do produto ('||C_INCONSITENCIA.VRERROR||') abaixo do minimo para o fornecedor('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I15'   THEN 'Quantidade do produto ('||C_INCONSITENCIA.VRERROR||') nao atende ao valor de arredondamento do fornecedor ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I16'   THEN 'Produto nao atende as particularidades do produto.'||CHR(13)
            WHEN 'I16-1' THEN 'Marca Obrigatoria.'||CHR(13)
            WHEN 'I16-2' THEN 'Marca Preferencial.'||CHR(13)
            WHEN 'I16-3' THEN 'Restricao a Marca.' ||CHR(13)
            WHEN 'I16-4' THEN 'Fornecedor Obrigatorio.'||CHR(13)
            WHEN 'I16-5' THEN 'Fornecedor Preferencial.'||CHR(13)
            WHEN 'I16-6' THEN 'Restricao ao Fornecedor.'||CHR(13)
            WHEN 'I16-7' THEN 'Marca/Fornecedor Obrigatorios.'||CHR(13)
            WHEN 'I16-8' THEN 'Marca/Fornecedor Preferenciais.'||CHR(13)
            WHEN 'I16-9' THEN 'Restricao a Marca/Fornecedor.'||CHR(13)
            WHEN 'I17'   THEN 'Produto Preferencial.'||CHR(13)
            WHEN 'I21'   THEN 'Quantidade de cotacao do produto (igual a ('||C_INCONSITENCIA.VRERROR||') abaixo da quantidade minima de cotacoes exigidas ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'L22'   THEN 'Preco unitario unidade de estoque ('||C_INCONSITENCIA.VRERROR||') acima do preco de custo objetivo ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'L24'   THEN 'Valor por nivel do produto ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo para o comprador ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I25'   THEN 'Valor por nivel de produto no mes ('||C_INCONSITENCIA.VRERROR||') acima do valor maximo para o comprador ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
            WHEN 'I26'   THEN 'Preco unitario '||C_INCONSITENCIA.VRERROR||' (unidade de estoque) maior que o ultimo preco utilizado '||C_INCONSITENCIA.VRLIMITE||' (unidade de estoque).'||CHR(13)
            WHEN 'I31'   THEN 'Quantidade total do produto no periodo ('||C_INCONSITENCIA.VRERROR||'), acima da quantidade disponivel do fornecedor ('||C_INCONSITENCIA.VRLIMITE||').'||CHR(13)
         END;
         UPDATE ITEMAUTF
            SET DSINCONSITAF = V_ERROITEM
          WHERE CDFILDEST    = C_INCONSITENCIA.CDFILDEST
            AND CDFILLANC    = C_INCONSITENCIA.CDFILLANC
            AND NRAUTOFORN   = C_INCONSITENCIA.NRAUTOFORN
            AND CDPRODUTO    = C_INCONSITENCIA.CDPRODUTO
            AND CDMARCA      = C_INCONSITENCIA.CDMARCA
            AND DTPROGENTAF  = C_INCONSITENCIA.DTPROGENTAF;
      END IF;
   END LOOP;
   IF  INSTR(V_CDERRO||V_ERROITEM, 'I') > 0 THEN
      V_IDSITUATUAAF := '1';
   ELSE
      V_IDSITUATUAAF := NULL;
   END IF;

   IF  INSTR(V_CDERRO||V_ERROITEM, 'L') > 0 THEN
      V_IDAFFORALIM := 'S';
   ELSE
      V_IDAFFORALIM := 'N';
   END IF;
   UPDATE AUTOFORNE
      SET DSINCONSAF    = V_ERRO,
          IDSITUATUAAF  = V_IDSITUATUAAF,
          IDAFFORALIM   = V_IDAFFORALIM
    WHERE CDFILDEST     = P_CDFILDEST
      AND CDFILLANC     = P_CDFILLANC
      AND NRAUTOFORN    = P_NRAUTOFORN;
END;
/