CREATE OR REPLACE PROCEDURE BREAKDOWN_OP(
                                          P_CDFILIAL     IN     ORDPRODUCAO.CDFILIAL    %TYPE,
                                          P_DTGERORDPROD IN     ORDPRODUCAO.DTGERORDPROD%TYPE,
                                          P_HRINITURNO   IN     TURNO      .HRINITURNO  %TYPE,
                                          P_CDPRODUTO    IN     INSUMETAPA .CDPRODINSUMO%TYPE,
                                          P_CDCLASSE     IN     CLASSE     .CDCLASSE    %TYPE,
                                          P_CDCICLO      IN     CICLOCIA   .CDCICLO     %TYPE,
                                          P_QTINSUMETAPA IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_DSORDPROD    IN     ORDPRODUCAO.DSORDPROD   %TYPE,
                                          P_NRBREAKDOWN  IN     BREAKDOWN  .NRBREAKDOWN %TYPE,
                                          P_CDCIA        IN     COMPANHIA  .CDCIA       %TYPE,
                                          P_QTHISTORICO  IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_QTSOLICITA   IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_QTHOLDINGBOX IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_QTESTPISTA   IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_QTPREVPROD   IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_QTPRODUCAO   IN     INSUMETAPA .QTINSUMETAPA%TYPE,
                                          P_CDOPERADOR   IN     OPERADOR   .CDOPERADOR%TYPE,
                                          P_NRPREVCOMP   IN     PREVCOMP.NRPREVCOMP%TYPE,
                                          P_GERAREQ      IN     BOOLEAN,
                                          P_DATAPREVI    IN     DATE,
                                          P_CDSETOR      IN     SETOR.CDSETOR%TYPE,
                                          P_CDALMOXORIG  IN     ALMOXARIFADO.CDALMOXARIFE%TYPE,
                                          P_CDLOCALORIG  IN     LOCALESTOQUE.CDLOCALESTOQ%TYPE,
                                          P_CDALMOXDEST  IN     ALMOXARIFADO.CDALMOXARIFE%TYPE,
                                          P_CDLOCALDEST  IN     LOCALESTOQUE.CDLOCALESTOQ%TYPE,
                                          P_NRREQUESTO   IN     VARCHAR2,
                                          P_DESCREQUI    IN     VARCHAR2,
                                          P_QTSTANDBY    IN     FLOAT
                                          ) AS
   V_CONT         NUMBER;
   V_NRORDPROD    VARCHAR2(20);
   V_NRSUBORDPROD NUMBER;
   V_CDPROCFABRIC PROCFABRICA.CDPROCFABRIC%TYPE;
   V_DTHRGEROP    DATE;

   V_IDUTILIZLOTE PARAMAN.IDUTILIZLOTE%TYPE;
   V_NRLOTEESTQ   LOTE.NRLOTEESTQ     %TYPE;
   V_NRSUBLOTE    LOTE.NRSUBLOTE      %TYPE;
   V_DTVALIDADE   DATE;
   V_EXISPREVI    PRODUTO.CDPRODUTO%TYPE;
   V_CDSETOR      SETOR.CDSETOR%TYPE;
   V_NRPREVCOMP  VARCHAR2(10);
   V_STINSERE    VARCHAR2(1);
BEGIN

  V_DTHRGEROP := TO_DATE(TO_CHAR(P_DTGERORDPROD, 'DD/MM/YYYY')||' '||P_HRINITURNO,'DD/MM/YYYY HH24MI');

   SERVBREAK_OP(P_CDFILIAL,P_CDPRODUTO,P_CDCLASSE,P_CDCICLO,
                P_DTGERORDPROD,P_QTINSUMETAPA,'0',
                P_NRBREAKDOWN,P_CDCIA,P_QTHISTORICO,P_QTSOLICITA,
                P_QTHOLDINGBOX,P_QTESTPISTA,P_QTPREVPROD,P_QTPRODUCAO,
                P_CDOPERADOR, P_NRPREVCOMP, P_QTSTANDBY);

   NOVO_CODIGO_SC('NRORDPROD'||P_CDFILIAL, V_NRORDPROD, 1);
   V_NRORDPROD    := SUBSTR(V_NRORDPROD,11,10);

   V_NRSUBORDPROD := -1;

   FOR C_SER IN (SELECT CDSERVICO,DTHRSERBREAK,
                        QTSERVPROD,CDOPERADOR,HRINIPRODSER
                 FROM SERVBREAK
                 WHERE (CDFILIAL    = P_CDFILIAL   ) AND
                       (NRBREAKDOWN = P_NRBREAKDOWN)
                 ORDER BY
                     NRSUBORDPROD DESC
                ) LOOP

      SELECT MAX(CDPROCFABRIC)
      INTO V_CDPROCFABRIC
      FROM PROCFABRICA
      WHERE (CDFILIAL     = P_CDFILIAL     ) AND
            (CDPRODUTO    = C_SER.CDSERVICO) AND
            (IDPROFABPADR = 'S'            );

      V_NRSUBORDPROD := V_NRSUBORDPROD + 1;

/************** Geracao de Lote de Producao Automatico **************/
      SELECT
         MAX(VALIDADE_PRODUTO(CDPRODUTO, SYSDATE)),
         MAX(CDSETOR)
      INTO
         V_DTVALIDADE,
         V_CDSETOR
      FROM
         PRODUTO
      WHERE (CDPRODUTO = C_SER.CDSERVICO);

      PRXLOTEPROD(P_CDFILIAL, SYSDATE, C_SER.CDSERVICO, V_NRLOTEESTQ);
      V_NRSUBLOTE  := ' ';

      INSERT INTO LOTE
      (CDFILIAL, NRLOTEESTQ, NRSUBLOTE, IDSTATLOTE, DTENTRLOTE,
       CDPRODUTO, DTVALILOTE, IDSTPRODLOTE)
      VALUES
      (P_CDFILIAL, V_NRLOTEESTQ, V_NRSUBLOTE, 'I', SYSDATE,
       C_SER.CDSERVICO, V_DTVALIDADE, '1');
/********************************************************************/
      INSERT INTO ORDPRODUCAO
      (CDFILIAL,NRORDPROD,NRSUBORDPROD,CDPRODUTO,IDSITORDPROD,IDTIPORDPROD,
       DTGERORDPROD,QTAPRODPREOP,NRLOTEESTQ,NRSUBLOTE,CDPROCFABRIC,
       DTHRINIPREOP,DTHRFIMPREOP,DTHRINIREAOP,DSORDPROD,CDSETORESPOP)
      VALUES
      (P_CDFILIAL,V_NRORDPROD, TO_CHAR(V_NRSUBORDPROD), C_SER.CDSERVICO,'1','3',
       C_SER.DTHRSERBREAK, C_SER.QTSERVPROD,V_NRLOTEESTQ,V_NRSUBLOTE,V_CDPROCFABRIC,
       C_SER.DTHRSERBREAK,NULL,NULL,P_DSORDPROD,V_CDSETOR);

      UPDATE SERVBREAK
      SET NRORDPROD    = V_NRORDPROD,
          NRSUBORDPROD = V_NRSUBORDPROD
      WHERE (CDFILIAL    = P_CDFILIAL     ) AND
            (NRBREAKDOWN = P_NRBREAKDOWN  ) AND
            (CDSERVICO   = C_SER.CDSERVICO);
   END LOOP;

   FOR C_COMP IN(
                  SELECT EP.CDCIA, CP.CDPRODINSUMO,
                         PR.CDCLASSE,PR.CDCICLO,CP.NRORDCOMP,
                         CP.CDESPEPROD,CP.CDTIPOCOMP,CP.CDESPPRODAUX
                    FROM ESPEPROD EP, COMPPROD CP, PRODUTO PR , PRODUTO P1,
                       (SELECT CDFILIAL, CDCIA, CDMANCIA
                        FROM MANUALCIA MC
                        WHERE (MC.CDFILIAL   = P_CDFILIAL) AND
                             (MC.CDCIA       = P_CDCIA ) AND
                             (MC.IDTPMANUAL  = 'M'   )AND
                             (TO_DATE(MC.DTINIVGMA)   = (SELECT MAX(DTINIVGMA)
                                                           FROM MANUALCIA
                                                          WHERE
                                                             CDFILIAL = P_CDFILIAL AND
                                                             CDCIA    = P_CDCIA  AND
                                                             DTINIVGMA < TO_DATE(SYSDATE) )))G
                   WHERE (EP.CDFILIAL     = G.CDFILIAL)    AND
                         (EP.CDCIA        = G.CDCIA )    AND
                         (EP.CDMANCIA     = G.CDMANCIA)    AND
                         (EP.IDTPMANUAL   = 'M'          )    AND
                         (PR.CDPRODUTO    = CP.CDPRODUTO )    AND
                         (PR.IDPRODCOMISS = '1'          )    AND
                         (PR.CDPRODUTO||PR.CDCLASSE||PR.CDCICLO = P_CDPRODUTO||P_CDCLASSE||P_CDCICLO) AND
                         (P1.CDPRODUTO(+) = EP.CDPRODUTOPRI) AND
                         (CP.CDPRODUTOAUX = EP.CDPRODUTO )   AND
                         (CP.CDESPPRODAUX = EP.CDESPEPROD)
                   ORDER BY CP.NRORDCOMP )LOOP



      IF P_GERAREQ THEN
         FOR C_CIA IN( SELECT E.QTEQUISUMA, E.CDFILIAL, E.CDCIA, E.CDESPEPROD, CDPRODEQUIP
                         FROM EQESPEPROD E
                        WHERE
                            E.CDESPEPROD = C_COMP.CDESPPRODAUX AND
                            E.CDFILIAL   = P_CDFILIAL AND
                            E.CDCIA = C_COMP.CDCIA AND
                            E.CDPRODUTO =  C_COMP.CDPRODINSUMO) LOOP

            BEGIN
               SELECT CDFILIAL
                 INTO V_STINSERE
                 FROM REQUESTO
                WHERE
                   CDFILIAL  = P_CDFILIAL AND
                    NRREQUESTO = P_NRREQUESTO;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_STINSERE  := NULL;
               END;

            IF V_STINSERE IS NULL THEN

               INSERT INTO REQUESTO (CDFILIAL, NRREQUESTO, DTREQUESTO, DTPREVREQU, DSREQUESTO,
                                     CDALMOXENTR, CDLCESTENTR, CDALMOXSAID, CDLCESTSAID, CDSETOR)
                             VALUES
                                    ( P_CDFILIAL, P_NRREQUESTO, TO_DATE(SYSDATE), P_DATAPREVI, P_DESCREQUI, P_CDALMOXORIG, P_CDLOCALORIG,
                                     P_CDALMOXDEST, P_CDLOCALDEST, P_CDSETOR);
            END IF;

            BEGIN
               SELECT CDPRODUTO
                 INTO V_STINSERE
                 FROM ITREQUESTO
                WHERE
                   CDFILIAL = P_CDFILIAL AND
                   NRREQUESTO = P_NRREQUESTO AND
                   CDPRODUTO = C_CIA.CDPRODEQUIP;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_STINSERE  := NULL;
               END;

            IF V_STINSERE IS NULL THEN
               INSERT INTO ITREQUESTO (CDFILIAL, NRREQUESTO, CDPRODUTO, QTREQUESTO)
                               VALUES (P_CDFILIAL, P_NRREQUESTO, C_CIA.CDPRODEQUIP, C_CIA.QTEQUISUMA*P_QTINSUMETAPA);
            ELSE

               UPDATE ITREQUESTO
                  SET  QTREQUESTO = QTREQUESTO +( C_CIA.QTEQUISUMA*P_QTINSUMETAPA)
                  WHERE
                     CDFILIAL = P_CDFILIAL AND
                     NRREQUESTO = P_NRREQUESTO AND
                     CDPRODUTO = C_CIA.CDPRODEQUIP;
            END IF;
         END LOOP;
      END IF;
   END LOOP;
END;
/