CREATE OR REPLACE PROCEDURE LIBERA_LOTE(
   P_CDEMPRESA  IN EMPRESA.CDEMPRESA%TYPE,
   P_CDLOTE     IN CAPALOTE.CDLOTE%TYPE,
   P_NRLANC     IN LANCCONT.NRLANCCONT%TYPE,
   P_CDOPERADOR IN LANCCONT.CDOPERINS%TYPE)
IS
   V_NRLANCLOTE LANCLOTE.NRLANCLOTE%TYPE;
   V_NRLANCCONT LANCCONT.NRLANCCONT%TYPE;
   V_IDCONTGERE CONTOPECTBL.IDCONTGERE%TYPE;
   V_IDCONTCOME CONTOPECTBL.IDCONTCOME%TYPE;
   V_IDLANCINTE VARCHAR2(1);
   V_IDTIPOLANC VARCHAR2(1);
   V_PROXLANCCTB NUMBER;
   V_SEQUENCIAL1     VARCHAR2(20);
BEGIN
   V_NRLANCLOTE := 'XXX';
   V_PROXLANCCTB := -1;

   SELECT MAX(IDCONTGERE), MAX(IDCONTCOME) INTO V_IDCONTGERE, V_IDCONTCOME
   FROM CONTOPECTBL
   WHERE (CONTOPECTBL.CDEMPRESA = P_CDEMPRESA);

   FOR LOTE IN
      (SELECT LANCLOTE.*
         FROM LANCLOTE
	    	WHERE (LANCLOTE.CDEMPRESA = P_CDEMPRESA)
           AND (LANCLOTE.CDLOTE = P_CDLOTE)
         ORDER BY NRLANCLOTE, NRSEQLANLOTE) LOOP

      IF (V_NRLANCLOTE <> LOTE.NRLANCLOTE) THEN
         IF P_NRLANC IS NULL THEN
            NOVO_CODIGO_NT('LANCCONTABIL' || P_CDEMPRESA || TO_CHAR(LOTE.DTLANCLOTE,'YYYYMM'),V_SEQUENCIAL1,1);
            V_NRLANCCONT := TO_CHAR(LOTE.DTLANCLOTE,'YYYYMM') || SUBSTR(V_SEQUENCIAL1,15,6);
         ELSE
            V_PROXLANCCTB := V_PROXLANCCTB + 1;
            V_NRLANCCONT := P_NRLANC + V_PROXLANCCTB;
         END IF;
      END IF;

      IF LOTE.IDTPLANCLOTE NOT IN ('F', 'S') THEN
         V_IDLANCINTE := 'L';
      ELSE
         V_IDLANCINTE := LOTE.IDTPLANCLOTE;
      END IF;

      IF LOTE.VRLANCLOTE < 0 THEN
         V_IDTIPOLANC := 'D';
      ELSE
         V_IDTIPOLANC := 'C';
      END IF;

      INSERT INTO LANCCONT
         (CDEMPRESA, NRLANCCONT, NRSEQLANC, CDCONTCTBL, CDHISTPADR,
          DTLANCCONT, CDDOCUCONT, IDTIPOLANC, DSHISTLANC, VRLANCAMENT,
          IDLANCCOME, CDCONTCOME, IDLANCSALDO, IDLANCINTE, IDLANCMANI,
          CDOPERINS, DTULTATULAN, IDSALDLANCO, IDSALDLANGE, IDSISTEMA)
      VALUES (P_CDEMPRESA, V_NRLANCCONT, LOTE.NRSEQLANLOTE, LOTE.CDCONTCTBL,
              LOTE.CDHISTPADR, LOTE.DTLANCLOTE, LOTE.NRDOCULOTE, V_IDTIPOLANC,
              LOTE.DSHISTLOTE, LOTE.VRLANCLOTE, LOTE.IDLLOTCOME,
              LOTE.CDLLOTCOME, 'N',V_IDLANCINTE, 'N', P_CDOPERADOR, SYSDATE, 'N', 'N', 'LTO');

      UPDATE LANCLOTE
      SET LANCLOTE.NRLANCDEFI = V_NRLANCCONT,
          LANCLOTE.NRSEQUDEFI = LANCLOTE.NRSEQLANLOTE
      WHERE (LANCLOTE.CDEMPRESA    = P_CDEMPRESA)     AND
            (LANCLOTE.CDLOTE       = P_CDLOTE)        AND
            (LANCLOTE.NRLANCLOTE   = LOTE.NRLANCLOTE) AND
            (LANCLOTE.NRSEQLANLOTE = LOTE.NRSEQLANLOTE);

      INSERT INTO LANCCCUSTO
         (CDEMPRESA, NRLANCCONT, NRSEQLANC, CDFILIAL, CDCENTCUST, VRLANCCUST, DTCOMPCUSTO)
         (SELECT P_CDEMPRESA, V_NRLANCCONT, LOTE.NRSEQLANLOTE,
                 RATECCUS.CDFILIAL, RATECCUS.CDCENTCUST, RATECCUS.VRRATECCUS, RATECCUS.DTCOMPRATECCUS
          FROM RATECCUS
          WHERE (RATECCUS.CDEMPRESA    = P_CDEMPRESA)     AND
                (RATECCUS.CDLOTE       = P_CDLOTE)        AND
                (RATECCUS.NRLANCLOTE   = LOTE.NRLANCLOTE) AND
                (RATECCUS.NRSEQLANLOTE = LOTE.NRSEQLANLOTE));

      V_NRLANCLOTE := LOTE.NRLANCLOTE;
   END LOOP;

   UPDATE CAPALOTE
      SET CAPALOTE.IDLOTE = 'L'
    WHERE (CAPALOTE.CDEMPRESA = P_CDEMPRESA) AND
          (CAPALOTE.CDLOTE = P_CDLOTE);
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('LIBERA_LOTE','6.35.033'); END;
/
