CREATE OR REPLACE PROCEDURE COPIA_COMPOSICAO_CICLO(
  P_CDFILIAL IN VARCHAR2,
  P_CDCIA IN VARCHAR2,
  P_CDMANCIA IN VARCHAR2,
  P_NRSERVICOCIAFILI IN NUMBER,
  P_CDCLASSE IN VARCHAR2,
  P_CDSUBGRU IN VARCHAR2,
  P_NRSEQSUBGRUSEMAM IN VARCHAR2,
  P_CDCICLOORIGEM  IN VARCHAR2,
  P_CDFILIALDES IN VARCHAR2,
  P_CDCIADES IN VARCHAR2,
  P_CDMANCIADES IN VARCHAR2,
  P_NRSERVICOCIAFILIDES IN NUMBER,
  P_CDCLASSEDES IN VARCHAR2,
  P_CDSUBGRUDES IN VARCHAR2,
  P_NRSEQSUBGRUSEMAMDES IN VARCHAR2,
  P_CDCICLODESTINO IN VARCHAR2,
  P_IMAGEMDEFAULT IN VARCHAR2,
  P_COPIA_IMAGEM IN VARCHAR2,
  P_SOBRESCREVER IN VARCHAR2,
  P_COPIA_IT IN VARCHAR2,
  P_CDOPERADOR IN VARCHAR2,
  P_NRORG IN NUMBER
)
IS  
  V_EXISTE_CICLOSUBGRUSEMAM NUMBER;
  V_EXISTE_SUBGRUPRI NUMBER;
  V_EXISTE_SERVCICLO NUMBER;
  V_EXISTE_CLASSECIA NUMBER;
  V_EXISTE_CICLOCIA NUMBER;
  V_NRITAIRVISION VARCHAR2(10);
  V_FGFOTOSUBSEMAM VARCHAR2(2000);
  V_FGFOTOSUBSEMAMT VARCHAR2(2000);
  V_DSCLASSE VARCHAR2(200);
  V_NRCORCICLO VARCHAR2(20);
  V_IDSITUAPROPCIA VARCHAR2(1);
  V_DSSUBGRUPOIMP VARCHAR2(200);
  V_VRMMPMCICSEMAM FLOAT;
BEGIN
  IF P_CDFILIAL = P_CDFILIALDES AND
     P_CDCIA = P_CDCIADES AND
     P_CDMANCIA = P_CDMANCIADES AND
     P_NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES AND
     P_CDCLASSE = P_CDCLASSEDES AND
     P_CDSUBGRU = P_CDSUBGRUDES AND
     P_NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAMDES AND
     P_CDCICLOORIGEM = P_CDCICLODESTINO THEN
     RETURN;
  END IF;

  SELECT MAX(IDSITUAPROPCIA)
    INTO V_IDSITUAPROPCIA
    FROM MANUALCIAM
   WHERE CDFILIAL = P_CDFILIALDES
     AND CDCIA = P_CDCIADES
     AND CDMANCIA = P_CDMANCIADES;

  /*Operacao bloqueada. Manual de destino ja esta em proposta ou aprovado.*/
  IF V_IDSITUAPROPCIA NOT IN ('E', 'A') THEN
    RAISE_APPLICATION_ERROR(-20501, 'APPERRMSGSTR' || 'APP-00046' || 'APPERRMSGEND' , TRUE);
  END IF;
    
  SELECT COUNT(1)     
    INTO V_EXISTE_CLASSECIA
    FROM CLASSECIA
   WHERE CDFILIAL = P_CDFILIALDES
     AND CDCIA = P_CDCIADES
     AND CDCLASSE = P_CDCLASSEDES;
  
  IF V_EXISTE_CLASSECIA = 0 THEN
      SELECT MAX(DSCLASSE)
        INTO V_DSCLASSE
        FROM CLASSE 
       WHERE CDCLASSE = P_CDCLASSEDES;

      INSERT INTO CLASSECIA
      (CDFILIAL, CDCIA, CDCLASSE, DSCLASSECIA,DTULTATUCLAC,
       NRORG, NRORGINCLUSAO, NRORGULTATU,
       CDOPERINCLUSAO, CDOPERULTATU,
       DTINCLUSAO, DTULTATU, IDATIVO)
      VALUES
      (P_CDFILIALDES, P_CDCIADES, P_CDCLASSEDES, V_DSCLASSE, SYSDATE,
       P_NRORG, P_NRORG, P_NRORG,
       P_CDOPERADOR, P_CDOPERADOR,
       SYSDATE, SYSDATE, 'S');
  END IF;

  SELECT COUNT(1)
    INTO V_EXISTE_CICLOCIA
    FROM CICLOCIA
   WHERE CDFILIAL = P_CDFILIALDES
     AND CDCIA = P_CDCIADES
     AND CDCICLO = P_CDCICLODESTINO;

  IF V_EXISTE_CICLOCIA = 0 THEN
     SELECT MAX(NRCORCICLO)
       INTO V_NRCORCICLO
       FROM CICLO
      WHERE CDCICLO = P_CDCICLODESTINO;

    INSERT INTO CICLOCIA
    (CDFILIAL, CDCIA, CDCICLO, NRCORCICCIA,DTULTATUCCIA,
     NRORG, NRORGINCLUSAO, NRORGULTATU,
     CDOPERINCLUSAO, CDOPERULTATU,
     DTINCLUSAO, DTULTATU, IDATIVO)
    VALUES
    (P_CDFILIALDES,P_CDCIADES, P_CDCICLODESTINO, V_NRCORCICLO, SYSDATE,
     P_NRORG, P_NRORG, P_NRORG,
     P_CDOPERADOR, P_CDOPERADOR,
     SYSDATE, SYSDATE, 'S');
  END IF;

  /* INCLUSAO DOS CICLOS POR SERVICO/CLASSE NO DESTINO */
  SELECT COUNT(1)
    INTO V_EXISTE_SERVCICLO
    FROM SERVCICLO    
   WHERE CDFILIAL = P_CDFILIALDES
     AND CDCIA = P_CDCIADES
     AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
     AND CDCLASSE = P_CDCLASSEDES
     AND CDCICLO = P_CDCICLODESTINO;

  IF V_EXISTE_SERVCICLO = 0 THEN
      INSERT INTO SERVCICLO
      (CDFILIAL, CDCIA, NRSERVICOCIAFILI, CDCLASSE, CDCICLO, VRPESOSE,
       NRORG, NRORGINCLUSAO, NRORGULTATU,
       CDOPERINCLUSAO, CDOPERULTATU,
       DTINCLUSAO, DTULTATU, IDATIVO)
      VALUES
      (P_CDFILIALDES, P_CDCIADES, P_NRSERVICOCIAFILIDES, P_CDCLASSEDES, P_CDCICLODESTINO,1,
       P_NRORG, P_NRORG, P_NRORG,
       P_CDOPERADOR, P_CDOPERADOR,
       SYSDATE, SYSDATE, 'S');
  END IF;

  SELECT COUNT(*)
    INTO V_EXISTE_CICLOSUBGRUSEMAM
    FROM CICLOSUBGRUSEMAM
   WHERE CDFILIAL = P_CDFILIALDES
     AND CDCIA    = P_CDCIADES
     AND CDMANCIA = P_CDMANCIADES
     AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
     AND CDCLASSE         = P_CDCLASSEDES
     AND CDSUBGRU         = P_CDSUBGRUDES
     AND NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAMDES
     AND CDCICLO          = P_CDCICLODESTINO
     AND NRORG            = P_NRORG;

  IF V_EXISTE_CICLOSUBGRUSEMAM > 0 THEN
     IF P_SOBRESCREVER = 'S' THEN
        EXCLUI_CICLO_MENUGRID(P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, 
                              P_NRSERVICOCIAFILIDES, P_CDCLASSEDES, P_CDSUBGRUDES,
                              P_NRSEQSUBGRUSEMAMDES, P_CDCICLODESTINO, P_NRORG);
     ELSE
        RETURN;        
     END IF;
  END IF;

  SELECT MAX(NRITAIRVISION),MAX(FGFOTOSUBSEMAM),
         MAX(DSSUBGRUPOIMP), MAX(FGFOTOSUBSEMAMT)
    INTO V_NRITAIRVISION,V_FGFOTOSUBSEMAM,
         V_DSSUBGRUPOIMP, V_FGFOTOSUBSEMAMT
    FROM CICLOSUBGRUSEMAM
   WHERE CDFILIAL = P_CDFILIAL
     AND CDCIA    = P_CDCIA
     AND CDMANCIA = P_CDMANCIA
     AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILI
     AND CDCLASSE         = P_CDCLASSE
     AND CDSUBGRU         = P_CDSUBGRU
     AND NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAM
     AND CDCICLO          = P_CDCICLOORIGEM
     AND NRORG            = P_NRORG;

  INSERT INTO CICLOSUBGRUSEMAM
  (CDFILIAL, CDCIA, CDMANCIA, NRSERVICOCIAFILI, CDCLASSE,
   CDSUBGRU, NRSEQSUBGRUSEMAM, CDCICLO, NRITAIRVISION,
   VRCUSTOCICSEMAM, FGFOTOSUBSEMAM, FGFOTOSUBSEMAMT, DSSUBGRUPOIMP, VRMMPMCICSEMAM,
   NRORG, NRORGINCLUSAO, NRORGULTATU,
   CDOPERINCLUSAO, CDOPERULTATU,
   DTULTATU, DTINCLUSAO)
  VALUES
  (P_CDFILIALDES,P_CDCIADES,P_CDMANCIADES,P_NRSERVICOCIAFILIDES,P_CDCLASSEDES,
   P_CDSUBGRUDES, P_NRSEQSUBGRUSEMAMDES, P_CDCICLODESTINO, CASE WHEN P_COPIA_IT = 'S' THEN V_NRITAIRVISION ELSE NULL END,
   NULL, CASE WHEN P_COPIA_IMAGEM = 'S' THEN V_FGFOTOSUBSEMAM ELSE P_IMAGEMDEFAULT END, 
   CASE WHEN P_COPIA_IMAGEM = 'S' THEN V_FGFOTOSUBSEMAMT ELSE P_IMAGEMDEFAULT END,
   V_DSSUBGRUPOIMP, NULL,
   P_NRORG, P_NRORG, P_NRORG,
   P_CDOPERADOR, P_CDOPERADOR,
   SYSDATE, SYSDATE);

  FOR CUR_MONTASUBSEMAM IN
  (SELECT DSMONTASUBSEMAMHTML
     FROM MONTASUBSEMAM
    WHERE CDFILIAL = P_CDFILIAL
      AND CDCIA    = P_CDCIA
      AND CDMANCIA = P_CDMANCIA
      AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILI
      AND CDCLASSE         = P_CDCLASSE
      AND CDSUBGRU         = P_CDSUBGRU
      AND NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAM
      AND CDCICLO          = P_CDCICLOORIGEM
      AND NRORG            = P_NRORG
      AND DSMONTASUBSEMAMHTML IS NOT NULL) LOOP         
 
    /*INSERE NA TABELA DE PRODUTOS DO SUBGRUPO DO MANUAL */
    INSERT INTO MONTASUBSEMAM
       (CDFILIAL,CDCIA,CDMANCIA,NRSERVICOCIAFILI,CDCLASSE,CDSUBGRU,NRSEQSUBGRUSEMAM,CDCICLO,
        DSMONTASUBSEMAMHTML,
        NRORG, DTINCLUSAO, CDOPERINCLUSAO, DTULTATU, NRORGINCLUSAO, NRORGULTATU, CDOPERULTATU, IDATIVO)
    VALUES
       (P_CDFILIALDES,P_CDCIADES,P_CDMANCIADES,P_NRSERVICOCIAFILIDES, P_CDCLASSEDES,P_CDSUBGRUDES,P_NRSEQSUBGRUSEMAMDES,P_CDCICLODESTINO,
        CUR_MONTASUBSEMAM.DSMONTASUBSEMAMHTML,
        P_NRORG,SYSDATE,P_CDOPERADOR,SYSDATE,P_NRORG,P_NRORG,P_CDOPERADOR,'S');
 END LOOP;

 /*SELECIONA OS PRODUTOS DO SUBGRUPO DO MANUAL*/
  FOR CUR_PROD IN
   (SELECT CDPRODUTO,QTPRODSUMA,TXCOPRODSUMA,NRITAIRVISION,
           NRORDEM, QTGRAMATURA, VRPESOGRAMATURA
      FROM PRODSUBSEMAM
     WHERE CDFILIAL = P_CDFILIAL
       AND CDCIA    = P_CDCIA
       AND CDMANCIA = P_CDMANCIA
       AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILI
       AND CDCLASSE = P_CDCLASSE
       AND CDSUBGRU = P_CDSUBGRU
       AND NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAM
       AND CDCICLO = P_CDCICLOORIGEM
       AND NRORG    = P_NRORG) LOOP

    /*INSERE NA TABELA DE PRODUTOS DO SUBGRUPO DO MANUAL */
    INSERT INTO PRODSUBSEMAM
       (CDFILIAL,CDCIA,CDMANCIA,NRSERVICOCIAFILI,CDCLASSE,CDSUBGRU,NRSEQSUBGRUSEMAM,CDCICLO,
        CDPRODUTO,QTPRODSUMA,TXCOPRODSUMA,NRITAIRVISION,
        NRORDEM, QTGRAMATURA, VRPESOGRAMATURA,
        NRORG, DTINCLUSAO, CDOPERINCLUSAO, DTULTATU, NRORGINCLUSAO, NRORGULTATU, CDOPERULTATU, IDATIVO)
    VALUES
       (P_CDFILIALDES,P_CDCIADES,P_CDMANCIADES,P_NRSERVICOCIAFILIDES,P_CDCLASSEDES,P_CDSUBGRUDES,P_NRSEQSUBGRUSEMAMDES,P_CDCICLODESTINO,
        CUR_PROD.CDPRODUTO,CUR_PROD.QTPRODSUMA,CUR_PROD.TXCOPRODSUMA,CASE WHEN P_COPIA_IT = 'S' THEN CUR_PROD.NRITAIRVISION ELSE NULL END,
        CUR_PROD.NRORDEM, CUR_PROD.QTGRAMATURA, CUR_PROD.VRPESOGRAMATURA,
        P_NRORG,SYSDATE,P_CDOPERADOR,SYSDATE,P_NRORG,P_NRORG,P_CDOPERADOR,'S');

  END LOOP;

  /*SELECIONA AS RECEITAS DENTRO DO SUBGRUPO */
  FOR CUR_REC IN
   (SELECT CDRECEITA,QTRECSUMA,TXCOMRECSUMA,NRITAIRVISION, 
           NRORDEM, QTGRAMATURA, VRPESOGRAMATURA
      FROM RECSUBSEMAM
     WHERE CDFILIAL = P_CDFILIAL
       AND CDCIA    = P_CDCIA
       AND CDMANCIA = P_CDMANCIA
       AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILI
       AND CDCLASSE = P_CDCLASSE
       AND CDSUBGRU = P_CDSUBGRU
       AND NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAM
       AND CDCICLO = P_CDCICLOORIGEM
       AND NRORG    = P_NRORG) LOOP

    /*INSERE NA TABELA DE RECEITAS DO SUBGRUPO DO MANUAL */
    INSERT INTO RECSUBSEMAM
       (CDFILIAL,CDCIA,CDMANCIA,NRSERVICOCIAFILI,CDCLASSE,CDSUBGRU,NRSEQSUBGRUSEMAM,CDCICLO,
        CDRECEITA,QTRECSUMA,TXCOMRECSUMA,NRITAIRVISION, 
        NRORDEM, QTGRAMATURA, VRPESOGRAMATURA,
        NRORG, DTINCLUSAO, CDOPERINCLUSAO, DTULTATU, NRORGINCLUSAO, NRORGULTATU, CDOPERULTATU, IDATIVO)
    VALUES
       (P_CDFILIALDES,P_CDCIADES,P_CDMANCIADES,P_NRSERVICOCIAFILIDES,P_CDCLASSEDES,P_CDSUBGRUDES,P_NRSEQSUBGRUSEMAMDES,P_CDCICLODESTINO,
        CUR_REC.CDRECEITA,CUR_REC.QTRECSUMA,CUR_REC.TXCOMRECSUMA, CASE WHEN P_COPIA_IT = 'S' THEN CUR_REC.NRITAIRVISION ELSE NULL END,
        CUR_REC.NRORDEM, CUR_REC.QTGRAMATURA, CUR_REC.VRPESOGRAMATURA,
        P_NRORG,SYSDATE,P_CDOPERADOR,SYSDATE,P_NRORG,P_NRORG,P_CDOPERADOR,'S');


    /*INSERE NA TABELA DE FILIRECEITA CASO NAO EXISTA*/
    INSERT INTO FILIRECEITA
    (CDFILIAL, CDRECEITA, NRVARIACAOREC,
     NRORG, DTINCLUSAO, CDOPERINCLUSAO, DTULTATU, NRORGINCLUSAO, NRORGULTATU, CDOPERULTATU, IDATIVO)
    SELECT P_CDFILIALDES, CUR_REC.CDRECEITA, NRVARIACAOREC,
           P_NRORG,SYSDATE,P_CDOPERADOR,SYSDATE,P_NRORG,P_NRORG,P_CDOPERADOR,'S'
      FROM FILIRECEITA
     WHERE CDFILIAL = P_CDFILIAL
       AND CDRECEITA = CUR_REC.CDRECEITA
       AND NOT EXISTS (SELECT 1
                         FROM FILIRECEITA
                        WHERE CDFILIAL = P_CDFILIALDES
                          AND CDRECEITA = CUR_REC.CDRECEITA);

  END LOOP;

  IF P_CDFILIAL = P_CDFILIALDES AND
     P_CDCIA = P_CDCIADES AND
     P_CDMANCIA = P_CDMANCIADES AND
     P_NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES AND
     P_CDCLASSE = P_CDCLASSEDES AND
     P_CDSUBGRU = P_CDSUBGRUDES AND
     P_NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAMDES THEN

    FOR CUR_SUBGRUPRI IN
    (SELECT S.CDFILIAL, S.CDCIA, S.CDMANCIA, S.NRSERVICOCIAFILI, S.CDCLASSE, S.CDSUBGRU, S.NRSEQSUBGRUSEMAM, 
            S.CDCICLO, S.CDSUBGRUPRIN, S.NRSEQSUBGRUSEMAMPRIN
       FROM SUBGRUPRINCIPALMENU S            
      WHERE S.CDFILIAL = P_CDFILIAL
        AND S.CDCIA = P_CDCIA
        AND S.CDMANCIA = P_CDMANCIA
        AND S.NRSERVICOCIAFILI = P_NRSERVICOCIAFILI
        AND S.CDCLASSE = P_CDCLASSE
        AND S.CDSUBGRU = P_CDSUBGRU
        AND S.NRSEQSUBGRUSEMAM = P_NRSEQSUBGRUSEMAM
        AND S.CDCICLO = P_CDCICLOORIGEM) LOOP

      SELECT COUNT(1)
        INTO V_EXISTE_SUBGRUPRI
        FROM CICLOSUBGRUSEMAM
       WHERE CDFILIAL = P_CDFILIALDES
         AND CDCIA = P_CDCIADES
         AND CDMANCIA = P_CDMANCIADES
         AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
         AND CDCLASSE = P_CDCLASSEDES
         AND CDSUBGRU = CUR_SUBGRUPRI.CDSUBGRUPRIN
         AND NRSEQSUBGRUSEMAM = CUR_SUBGRUPRI.NRSEQSUBGRUSEMAMPRIN
         AND CDCICLO = P_CDCICLODESTINO;
      
      IF V_EXISTE_SUBGRUPRI > 0 THEN
        INSERT INTO SUBGRUPRINCIPALMENU
        (CDFILIAL, CDCIA, CDMANCIA, NRSERVICOCIAFILI, CDCLASSE, CDSUBGRU, NRSEQSUBGRUSEMAM, CDCICLO,
         CDSUBGRUPRIN, NRSEQSUBGRUSEMAMPRIN, 
         NRORG, NRORGULTATU, NRORGINCLUSAO,
         CDOPERULTATU, CDOPERINCLUSAO,
         DTULTATU, DTINCLUSAO)
        VALUES
        (P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, P_NRSERVICOCIAFILIDES, P_CDCLASSEDES, P_CDSUBGRUDES, P_NRSEQSUBGRUSEMAMDES,
         P_CDCICLODESTINO, CUR_SUBGRUPRI.CDSUBGRUPRIN, CUR_SUBGRUPRI.NRSEQSUBGRUSEMAMPRIN,
         P_NRORG, P_NRORG, P_NRORG,
         P_CDOPERADOR, P_CDOPERADOR,
         SYSDATE, SYSDATE);      
      END IF;
    END LOOP;
  END IF;
END;
/