/*

@C:\WEB_405\Sql\End_conv\Oracle\4020_ESTSTPO_ATUALIZA_CUSTO_CMP.SQL

raise_application_error(-20501, '' , True);

*/

CREATE OR REPLACE PROCEDURE ATUALIZA_CUSTO_CMP

AS
   V_COUNT           NUMBER;
   V_CDALMOXARIFE    VARCHAR(06);
   V_CDLOCALESTOQ    VARCHAR(06);
   V_NRLOTEESTQ      VARCHAR(20);
   V_NRSUBLOTE       VARCHAR(04);
   V_UTILALMOX       VARCHAR(01);
   V_UTILLOCAL       VARCHAR(01);
   V_CDALMOXPROD     VARCHAR(06);
   V_CDLOCALPROD     VARCHAR(06);
   V_NRLOTEPROD      VARCHAR(20);
   V_NRSUBPROD       VARCHAR(04);
   V_IDUTCTRLLOTE    VARCHAR(01);
   V_IDUTILLOTE      VARCHAR(01);

BEGIN

   FOR C_CUSTOPROD IN (SELECT P.CDFILIAL,     CDPRODUTO,
                              NVL(NVL(DTULTCOMPR, DTPROCESSA), SYSDATE) DTULTCOMPR,
                              VRULTCOMPR,   VRULTLANCUNI, VRULTCOMPRM1,
                              VRULTCOMPRM2, P.CDALMOXARIFE, P.CDLOCALESTOQ
                       FROM PRODFILI P, PARAMFILIAL F
                       WHERE  P.CDFILIAL = F.CDFILIAL  AND
                              VRULTCOMPR > 0  ) LOOP

      SELECT COUNT(*)
      INTO V_COUNT
      FROM CUSTOCMPPROD
      WHERE CDFILIAL     = C_CUSTOPROD.CDFILIAL   AND
            CDPRODUTO    = C_CUSTOPROD.CDPRODUTO  AND
            DTCUSTCMPPRO = C_CUSTOPROD.DTULTCOMPR;

      IF V_COUNT = 0 THEN
         SELECT MAX(IDUTILALMOX), MAX(IDUTILLCESTQ),
                MAX(CDALMOXARIFE), MAX(CDLOCALESTOQ),
                MAX(IDUTILLOTE)
         INTO V_UTILALMOX,    V_UTILLOCAL,
              V_CDALMOXARIFE, V_CDLOCALESTOQ,
              V_IDUTILLOTE
         FROM PARAMFILIAL
         WHERE CDFILIAL = C_CUSTOPROD.CDFILIAL;

         IF NVL(V_UTILALMOX, 'N') = 'N' THEN
            V_CDALMOXARIFE    := ' ';
            V_CDLOCALESTOQ    := ' ';
            V_NRLOTEESTQ      := ' ';
            V_NRSUBLOTE       := ' ';
         ELSE
            SELECT MAX(CDALMOXARIFE), MAX(CDLOCALESTOQ), MAX(IDUTCTRLLOTE)
            INTO V_CDALMOXPROD, V_CDLOCALPROD, V_IDUTCTRLLOTE
            FROM PRODFILI
            WHERE CDFILIAL    = C_CUSTOPROD.CDFILIAL    AND
                  CDPRODUTO   = C_CUSTOPROD.CDPRODUTO;

            IF NOT (V_CDALMOXPROD IS NULL) THEN
               V_CDALMOXARIFE := V_CDALMOXPROD;
            END IF;

            IF NOT (V_CDLOCALPROD IS NULL) THEN
               V_CDLOCALESTOQ := V_CDLOCALPROD;
            END IF;

            IF (NVL(V_IDUTILLOTE, 'N') <> 'N') AND (NVL(V_IDUTCTRLLOTE, 'N') <> 'N') THEN

               SELECT MAX(NRLOTEESTQ), MAX(NRSUBLOTE)
               INTO V_NRLOTEPROD, V_NRSUBPROD
               FROM POSESTATU
               WHERE CDFILIAL     = C_CUSTOPROD.CDFILIAL    AND
                     CDALMOXARIFE = V_CDALMOXARIFE          AND
                     CDLOCALESTOQ = V_CDLOCALESTOQ          AND
                     CDPRODUTO    = C_CUSTOPROD.CDPRODUTO;

               V_NRLOTEESTQ      := V_NRLOTEPROD;
               V_NRSUBLOTE       := V_NRSUBPROD;
            END IF;
         END IF;

         INSERT INTO LOTE
         (CDFILIAL, NRLOTEESTQ, NRSUBLOTE, CDPRODUTO, IDSTATLOTE, DTENTRLOTE)
         (SELECT C_CUSTOPROD.CDFILIAL,  NVL(V_NRLOTEESTQ, ' '),  NVL(V_NRSUBLOTE, ' '),
                 C_CUSTOPROD.CDPRODUTO, 'L' IDSTATLOTE, SYSDATE DTENTRLOTE
          FROM PARAMGERAL
          MINUS
          SELECT CDFILIAL,   NRLOTEESTQ,  NRSUBLOTE,
                 C_CUSTOPROD.CDPRODUTO, 'L', SYSDATE
          FROM LOTE
          WHERE  C_CUSTOPROD.CDFILIAL   =  CDFILIAL     AND
                 NVL(V_NRLOTEESTQ, ' ') =  NRLOTEESTQ   AND
                 NVL(V_NRSUBLOTE, ' ')  =  NRSUBLOTE    AND
                 C_CUSTOPROD.CDPRODUTO  =  CDPRODUTO);

         INSERT INTO CUSTOCMPPROD
            (CDFILIAL,     DTCUSTCMPPRO,  CDFILLANCEST, NRLANCESTQ,   CDPRODUTO,
             CDALMOXARIFE, CDLOCALESTOQ,  NRLOTEESTQ,   NRSUBLOTE,    VRLIQCMPPROD,
             VRBRUCMPPROD, VRLIQCMPPRM1,  VRBRUCMPPRM1, VRBRUCMPPRM2, VRLIQCMPPRM2)
         VALUES
            (C_CUSTOPROD.CDFILIAL,   C_CUSTOPROD.DTULTCOMPR,   C_CUSTOPROD.CDFILIAL, '',
             C_CUSTOPROD.CDPRODUTO,  NVL(V_CDALMOXARIFE, ' '), NVL(V_CDLOCALESTOQ, ' '),
             NVL(V_NRLOTEESTQ, ' '), NVL(V_NRSUBLOTE, ' '),    C_CUSTOPROD.VRULTCOMPR,
             C_CUSTOPROD.VRULTCOMPR, C_CUSTOPROD.VRULTCOMPRM1, C_CUSTOPROD.VRULTCOMPRM1,
             C_CUSTOPROD.VRULTCOMPRM2,  C_CUSTOPROD.VRULTCOMPRM2);
      END IF;
   END LOOP;
END;

/

BEGIN
   ATUALIZA_CUSTO_CMP;
END;

/

COMMIT

/

DROP PROCEDURE ATUALIZA_CUSTO_CMP

/

-- VERSAO --
BEGIN ATUVEROBJ('ATUALIZA_CUSTO_CMP','4.05.062'); END;

/

