CREATE OR REPLACE PROCEDURE COPIA_MENU_GRID(
  P_CDFILIPROC IN VARCHAR2,
  P_CDFILIALORI IN VARCHAR2,
  P_CDCIAORI IN VARCHAR2,
  P_CDMANCIAORI IN VARCHAR2,
  P_CDFILIALDES IN VARCHAR2,
  P_CDCIADES IN VARCHAR2,
  P_DTINIVGMADES IN DATE,
  P_DTFIMVGMADES IN DATE,
  P_IMAGEMDEFAULT IN VARCHAR2,
  P_COPIA_IMAGEM IN VARCHAR2,
  P_COPIA_PRODCIA IN VARCHAR2,
  P_COPIA_IT IN VARCHAR2,
  P_CDOPERADOR IN VARCHAR2,
  P_NRORG IN NUMBER DEFAULT 1,  
  P_NRLISTAERROS OUT NUMBER
)
IS
  V_CDMANCIADES VARCHAR2(4);
  V_DSMANUAL VARCHAR2(50);
  V_SEQ VARCHAR2(20);
  V_QT_SUBGRU NUMBER;  
  V_NRLISTA VARCHAR2(10);
  V_DSMONTASUBSEMAMHTML CLOB;
  V_MSGERRO VARCHAR2(2000);
  V_DTINIVGMA DATE;
  V_DTFIMVGMA DATE; 
BEGIN    
  NOVO_CODIGO('LISTA', V_SEQ, 2);
  V_NRLISTA := SUBSTR(V_SEQ, -10);

  P_NRLISTAERROS := NULL;
  -- /* Se estiver copiando para uma companhia ou filial de destino diferente da de origem */
  -- IF (P_CDFILIALORI <> P_CDFILIALDES OR P_CDCIAORI <> P_CDCIADES) THEN    
  --   /*VERIFICA SE NECESSITA INCLUIR SERVICO OU CICLO NA FILIAL/COMPANHIA DESTINO*/    
  --   FOR CUR_SERV_ERRO
  --   IN
  --   (SELECT SEL.CDFILIAL, SEL.CDCIA, SEL.NRSERVICOCIAFILI, SEL.CDCLASSE, SEL.CDCICLO, CL.SGCLASSE, CI.IDCICLO, SG.DSSERVICOGEN,
  --      SEL.NRSERVICOCIAFILIDES, SD.DSSERVICOCIAFILI AS DSSERVICOCIAFILIDES, SCD.CDCICLO AS CDCICLODES
  --     FROM
  --   (
  --   SELECT S.CDFILIAL, S.CDCIA, S.NRSERVICOCIAFILI, CI.CDCLASSE, CI.CDCICLO, SCF.NRSERVICOGEN,
  --                   MAX(D.NRSERVICOCIAFILI) AS NRSERVICOCIAFILIDES
  --           FROM SERVMANUALM S
  --                INNER JOIN SERVICOCIAFILI SCF ON SCF.CDFILIAL = S.CDFILIAL AND
  --                                                 SCF.CDCIA = S.CDCIA AND
  --                                                 SCF.NRSERVICOCIAFILI = S.NRSERVICOCIAFILI
  --                LEFT JOIN SERVICOCIAFILI D ON D.NRSERVICOGEN = SCF.NRSERVICOGEN AND
  --                                              D.IDFATSE = SCF.IDFATSE AND
  --                                              D.IDTIPMANUAL = SCF.IDTIPMANUAL AND
  --                                              D.CDFILIAL = P_CDFILIALDES AND
  --                                              D.CDCIA = P_CDCIADES        
  --                INNER JOIN CICLOSUBGRUSEMAM CI ON CI.CDFILIAL = S.CDFILIAL AND
  --                                                  CI.CDCIA = S.CDCIA AND
  --                                                  CI.CDMANCIA = S.CDMANCIA AND
  --                                                  CI.NRSERVICOCIAFILI = S.NRSERVICOCIAFILI AND
  --                                                  CI.CDCLASSE = S.CDCLASSE       
  --          WHERE S.CDFILIAL = P_CDFILIALORI
  --            AND S.CDCIA    = P_CDCIAORI
  --            AND ((P_CDMANCIAORI = 'T') OR (INSTR(P_CDMANCIAORI, S.CDMANCIA) > 0))
  --            AND S.NRORG    = P_NRORG
  --         GROUP BY S.CDFILIAL, S.CDCIA, S.NRSERVICOCIAFILI, CI.CDCLASSE, CI.CDCICLO, SCF.NRSERVICOGEN) SEL
  --   INNER JOIN SERVICOGEN SG ON SG.NRSERVICOGEN = SEL.NRSERVICOGEN
  --   LEFT JOIN SERVICOCIAFILI SD ON SD.NRSERVICOCIAFILI = SEL.NRSERVICOCIAFILIDES AND
  --                                  SD.CDFILIAL = P_CDFILIALDES AND
  --                                  SD.CDCIA = P_CDCIADES        
  --   LEFT JOIN SERVCICLO SCD ON SCD.CDFILIAL = SD.CDFILIAL AND
  --                              SCD.CDCIA = SD.CDCIA AND
  --                              SCD.NRSERVICOCIAFILI = SD.NRSERVICOCIAFILI AND
  --                              SCD.CDCLASSE = SEL.CDCLASSE AND
  --                              SCD.CDCICLO = SEL.CDCICLO         
  --   INNER JOIN CLASSE CL ON CL.CDCLASSE = SEL.CDCLASSE
  --   INNER JOIN CICLO CI ON CI.CDCICLO = SEL.CDCICLO
  --   WHERE SEL.NRSERVICOCIAFILIDES IS NULL
  --      OR SCD.CDCICLO IS NULL
  --   ORDER BY SD.DSSERVICOCIAFILI, SG.DSSERVICOGEN, CL.SGCLASSE, CI.IDCICLO) LOOP

  --        IF P_NRLISTAERROS IS NULL THEN
  --           NOVO_CODIGO('LISTAERROS'|| P_CDFILIPROC, V_SEQ);
  --           P_NRLISTAERROS := TO_NUMBER(V_SEQ);
  --        END IF;

  --        IF CUR_SERV_ERRO.NRSERVICOCIAFILIDES IS NULL THEN
  --           /*Servico generico $param[0] nao cadastrado para filial e companhia de destino.*/
  --           V_MSGERRO := 'APPERRMSGSTR' ||'APP-00039' || '$$' || CUR_SERV_ERRO.DSSERVICOGEN || 'APPERRMSGEND';   
  --        ELSE
  --           /*Classe $param[0] e ciclo $param[1] nao cadastrado para o servico $param[2]  filial e companhia de destino.*/
  --           V_MSGERRO := 'APPERRMSGSTR' ||'APP-00040' || '$$' || CUR_SERV_ERRO.SGCLASSE
  --                                                     || '$$' || CUR_SERV_ERRO.IDCICLO
  --                                                     || '$$' || CUR_SERV_ERRO.DSSERVICOCIAFILIDES
  --                        || 'APPERRMSGEND';
         
  --        END IF;

  --        INSERT INTO LISTAERROS
  --        (CDFILIAL, NRLISTA, DSERRO,
  --         NRORG, NRORGINCLUSAO, NRORGULTATU,
  --         CDOPERINCLUSAO, CDOPERULTATU,
  --         DTINCLUSAO, DTULTATU)
  --         VALUES
  --        (P_CDFILIPROC, P_NRLISTAERROS, V_MSGERRO,
  --         P_NRORG, P_NRORG, P_NRORG,
  --         P_CDOPERADOR, P_CDOPERADOR,
  --         SYSDATE, SYSDATE);

  --   END LOOP;
  -- END IF;

  IF P_NRLISTAERROS IS NOT NULL THEN
    RETURN;
  END IF;

  FOR CUR_MANUAL IN
  (SELECT CDFILIAL, CDCIA, CDMANCIA, DTINIVGMA, DTFIMVGMA
     FROM MANUALCIAM
    WHERE CDFILIAL = P_CDFILIALORI
      AND CDCIA = P_CDCIAORI
      AND ((P_CDMANCIAORI = 'T') OR (INSTR(P_CDMANCIAORI, CDMANCIA) > 0))
  ) LOOP    

    SELECT LPAD(TO_CHAR(TO_NUMBER(NVL(MAX(CDMANCIA),0))+1),4,'0')
      INTO V_CDMANCIADES
      FROM MANUALCIAM
     WHERE CDFILIAL = P_CDFILIALDES
       AND CDCIA    = P_CDCIADES
       AND NRORG    = P_NRORG;

    SELECT MAX(DSMANUAL), MAX(DTINIVGMA), MAX(DTFIMVGMA)
      INTO V_DSMANUAL, V_DTINIVGMA, V_DTFIMVGMA
      FROM MANUALCIAM
     WHERE CDFILIAL = P_CDFILIALORI
       AND CDCIA = P_CDCIAORI
       AND CDMANCIA = CUR_MANUAL.CDMANCIA;

    IF P_DTINIVGMADES IS NOT NULL THEN
       V_DTINIVGMA := P_DTINIVGMADES;
       V_DTFIMVGMA := P_DTFIMVGMADES;
    END IF;


    INSERT INTO MANUALCIAM
       (CDFILIAL,CDCIA,CDMANCIA,DSMANUAL,DTINIVGMA,DTFIMVGMA,
        NRORG,DTINCLUSAO,CDOPERINCLUSAO,DTULTATU,NRORGINCLUSAO,NRORGULTATU,CDOPERULTATU,IDATIVO,IDSITUAPROPCIA)
    VALUES
       (P_CDFILIALDES,P_CDCIADES,V_CDMANCIADES,V_DSMANUAL,V_DTINIVGMA,V_DTFIMVGMA,
        P_NRORG,SYSDATE,P_CDOPERADOR,SYSDATE,P_NRORG,P_NRORG,P_CDOPERADOR,'S','E');

    /* Cria lista para importacao de servicos no manual de destino */          
    INSERT INTO LISTA
    (NRLISTA, CDLISTA, NRORG)      
    SELECT V_NRLISTA, NRSERVICOCIAFILI || '|' || CDCLASSE, P_NRORG
      FROM SERVMANUALM
     WHERE CDFILIAL = P_CDFILIALORI
       AND CDCIA = P_CDCIAORI
       AND CDMANCIA = CUR_MANUAL.CDMANCIA;

    COPIA_SERV_MENU_GRID(P_CDFILIPROC, P_CDFILIALORI, P_CDCIAORI, CUR_MANUAL.CDMANCIA, V_NRLISTA, LPAD(TO_CHAR(TO_NUMBER(V_NRLISTA) + 1),10, '0'),
                         P_CDFILIALDES, P_CDCIADES, V_CDMANCIADES, P_IMAGEMDEFAULT, P_COPIA_IMAGEM, 'N', P_COPIA_PRODCIA,
                         P_COPIA_IT, P_CDOPERADOR, P_NRORG, P_NRLISTAERROS);

    DELETE FROM LISTA WHERE NRLISTA = V_NRLISTA;      
  END LOOP;
END;
/