CREATE OR REPLACE PROCEDURE MONTA_DSAJUSTE_MAPA(
   P_CDFILIAL    IN NOTAFISCAL.CDFILIAL%TYPE,
   P_NRLANCTONF  IN NOTAFISCAL.NRLANCTONF%TYPE,
   P_CDPRODUTO   IN PRODUTO.CDPRODUTO%TYPE,
   P_DSAJUSTECAD IN ITMAPARECUP.DSITEMMAPR%TYPE,
   P_DSAJUSTE    OUT VARCHAR2)
IS
   V_DSAJUSTE     VARCHAR2(1000);
   V_NRNOTAFISC   VARCHAR2(20);
   V_CDFILIAL     VARCHAR2(04);
   V_IDCODEXTPROD VARCHAR2(01);
   V_IDORIGDESTNF VARCHAR2(01);
   V_CDPARTICIP   VARCHAR2(21);
   V_NRINSJURPART VARCHAR2(20);
   V_NMFANTPART   VARCHAR2(100);
   V_NMRAZSOCPART VARCHAR2(100);
   V_CDPRODUTO    VARCHAR2(10);
   V_CDARVPROD    VARCHAR2(20);
   V_NMPRODUTO    VARCHAR2(50);
   V_CDEMPRESA    VARCHAR2(02);
   V_CDINSCESTA   VARCHAR2(20);
BEGIN
   V_DSAJUSTE := P_DSAJUSTECAD;
   BEGIN
      SELECT N.NRNOTAFISC, DECODE(N.IDENTRSAIDOP,'E',N.CDFILIRECE,N.CDFILIEMIT) AS CDFILIAL, N.IDORIGDESTNF, N.CDEMPRESA, N.CDINSCESTA,
             DECODE(N.IDORIGDESTNF,'F',N.CDFORNECED,'C',N.CDCLIENTE,'L',DECODE(N.IDENTRSAIDOP,'E',N.CDFILIEMIT,N.CDFILIRECE)) AS CODPART
        INTO V_NRNOTAFISC, V_CDFILIAL, V_IDORIGDESTNF, V_CDEMPRESA, V_CDINSCESTA, V_CDPARTICIP
        FROM NOTAFISCAL N
       WHERE N.CDFILIAL   = P_CDFILIAL
         AND N.NRLANCTONF = P_NRLANCTONF;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_NRNOTAFISC   := NULL;
         V_CDFILIAL     := NULL;
         V_IDORIGDESTNF := NULL;
         V_CDEMPRESA    := NULL;
         V_CDINSCESTA   := NULL;
         V_CDPARTICIP   := NULL;
   END;
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[DOC]', V_NRNOTAFISC);
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[FIL]', V_CDFILIAL);

   IF V_IDORIGDESTNF = 'F' THEN
      BEGIN
         SELECT F.NRINSJURFORN, F.NMFANTFORN, F.NMRAZSOCFORN
           INTO V_NRINSJURPART, V_NMFANTPART, V_NMRAZSOCPART
           FROM FORNECEDOR F
          WHERE F.CDFORNECED = V_CDPARTICIP;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NRINSJURPART := NULL;
            V_NMFANTPART   := NULL;
            V_NMRAZSOCPART := NULL;
      END;
   ELSIF V_IDORIGDESTNF = 'C' THEN
      BEGIN
         SELECT C.NRINSJURCLIE, C.NMFANTCLIE, C.NMRAZSOCCLIE
           INTO V_NRINSJURPART, V_NMFANTPART, V_NMRAZSOCPART
           FROM CLIENTE C
          WHERE C.CDCLIENTE = V_CDPARTICIP;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NRINSJURPART := NULL;
            V_NMFANTPART   := NULL;
            V_NMRAZSOCPART := NULL;
      END;
   ELSE
      BEGIN
         SELECT L.NRINSJURFILI, L.NMFILIAL, L.NMRAZSOCFILI
           INTO V_NRINSJURPART, V_NMFANTPART, V_NMRAZSOCPART
           FROM FILIAL L
          WHERE L.CDFILIAL = V_CDPARTICIP;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NRINSJURPART := NULL;
            V_NMFANTPART   := NULL;
            V_NMRAZSOCPART := NULL;
      END;
   END IF;
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[PAR]', V_NRINSJURPART);
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[NFP]', V_NMFANTPART);
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[RSP]', V_NMRAZSOCPART);

   V_IDCODEXTPROD := 'N';
   BEGIN
      SELECT IDCONSPRODEXT
        INTO V_IDCODEXTPROD
        FROM DADOSGERSPED
       WHERE CDEMPRESA  = V_CDEMPRESA
         AND CDINSCESTA = V_CDINSCESTA;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_IDCODEXTPROD := 'N';
   END;

   IF V_IDCODEXTPROD = 'S' THEN
      V_IDCODEXTPROD := 'N';
      BEGIN
         SELECT IDUTCDEXTPRONF
           INTO V_IDCODEXTPROD
           FROM PARAMFILIAL
          WHERE CDFILIAL = V_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDCODEXTPROD := 'N';
      END;
   END IF;

   BEGIN
      SELECT P.CDPRODUTO, DECODE(V_IDCODEXTPROD,'S',NVL(P.CDPRODINTE,P.CDARVPROD),P.CDARVPROD) AS CDARVPROD, P.NMPRODUTO
        INTO V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO
        FROM PRODUTO P
       WHERE P.CDPRODUTO = P_CDPRODUTO;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDPRODUTO := NULL;
         V_CDARVPROD := NULL;
         V_NMPRODUTO := NULL;
   END;
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[PROD]', V_CDPRODUTO);
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[CAP]', V_CDARVPROD);
   V_DSAJUSTE := REPLACE(V_DSAJUSTE, '[NPR]', V_NMPRODUTO);

   P_DSAJUSTE := SUBSTR(V_DSAJUSTE,1,250);
END;
/