/**
 * Faz a copia integral de um detalhe de servico da proposta e retorna o novo sequencial
 * @param {Number} P_NRDETALHESERVPROPCOM Numero do detalhe de proposta de origem
 * @param {Varchar2} P_CDOPERADOR Operador logado
 * @param {Number} P_NRORG Numero da organizacao logada
 * @param {Number} P_NRDETALHESERVPROPCOMNOVO [Saida] Parametro que recebe a variavel de saida para o novo sequencial
 */
CREATE OR REPLACE PROCEDURE COPIA_DETALHESERVPROPCOM
(
P_NRDETALHESERVPROPCOM IN NUMBER,
P_COPIA_CARD IN VARCHAR2,
P_CDOPERADOR IN VARCHAR2,
P_NRORG IN NUMBER,
P_NRDETALHESERVPROPCOMNOVO OUT NUMBER,
P_NRSERVICOPROPCOMNOVO IN NUMBER DEFAULT NULL
)
AS
   V_QTDE NUMBER;
   V_NRSERVICOPROPCOM NUMBER;
   V_NRCARDAPIOTRAB NUMBER;
   V_NRCARDAPIOTRABNOVO NUMBER;
   V_NRDETALHESERVPROPCOM NUMBER;
   V_NRPRODUTOPROPCOM NUMBER;
   V_NRINCIDENCIAPROPCOM NUMBER;
   V_NRCONFGRUPOTPPROPCOM NUMBER;
   V_NRCONFIGSERVPROPCOM NUMBER;
   V_CDFILIALLISTA VARCHAR2(4); 
   V_NRLISTA NUMBER;
BEGIN
   SELECT MAX(NRSERVICOPROPCOM), MAX(NRCARDAPIOTRAB), MAX(CDFILIALLISTA), MAX(NRLISTA)
     INTO V_NRSERVICOPROPCOM, V_NRCARDAPIOTRAB, V_CDFILIALLISTA, V_NRLISTA
     FROM DETALHESERVPROPCOM
    WHERE NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM;

   IF P_NRSERVICOPROPCOMNOVO IS NOT NULL THEN
      V_NRSERVICOPROPCOM := P_NRSERVICOPROPCOMNOVO;
   END IF;

   IF V_NRSERVICOPROPCOM IS NOT NULL THEN

      V_NRCARDAPIOTRABNOVO := NULL;
      IF P_COPIA_CARD = 'S' THEN
         -- Duplica cardapio de trabalho do detalhe do servico         
         IF V_NRCARDAPIOTRAB IS NOT NULL THEN
            COPIA_CARDAPIOTRAB(V_NRCARDAPIOTRAB, P_CDOPERADOR, P_NRORG, V_NRCARDAPIOTRABNOVO);
         END IF;
      END IF;
      
      V_NRDETALHESERVPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('DETALHESERVPROPCOM', 1));
      -- Inclui novo detalhe de servico
      INSERT INTO DETALHESERVPROPCOM
      (NRDETALHESERVPROPCOM, NRSERVICOPROPCOM, NRCARDAPIOTRAB,
       CDFILIALLISTA, NRLISTA,
       NRORG, NRORGINCLUSAO, NRORGULTATU,
       CDOPERINCLUSAO, CDOPERULTATU,
       DTINCLUSAO, DTULTATU)
      VALUES
      (V_NRDETALHESERVPROPCOM, V_NRSERVICOPROPCOM, V_NRCARDAPIOTRABNOVO,
       V_CDFILIALLISTA, V_NRLISTA,
       P_NRORG, P_NRORG, P_NRORG,
       P_CDOPERADOR, P_CDOPERADOR,
       SYSDATE, SYSDATE);
      -- Configuracao
      SELECT COUNT(1)
        INTO V_QTDE
        FROM CONFIGSERVPROPCOM
       WHERE NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM;
      IF V_QTDE > 0 THEN
         V_NRCONFIGSERVPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('CONFIGSERVPROPCOM', V_QTDE));
         INSERT INTO CONFIGSERVPROPCOM
         (NRCONFIGSERVPROPCOM, NRDETALHESERVPROPCOM,
          NRCONFIGCARDBASE, CDTIPOPRAT, DSCOMPLEMENTO,
          NRORDEM, IDTEMPERATURA,
          NRORG, NRORGINCLUSAO, NRORGULTATU,
          CDOPERINCLUSAO, CDOPERULTATU,
          DTINCLUSAO, DTULTATU)
         SELECT V_NRCONFIGSERVPROPCOM + (ROW_NUMBER() OVER (ORDER BY C.NRCONFIGSERVPROPCOM) - 1) AS NRCONFIGSERVPROPCOM,
                V_NRDETALHESERVPROPCOM,
                C.NRCONFIGCARDBASE, C.CDTIPOPRAT, C.DSCOMPLEMENTO,
                C.NRORDEM, C.IDTEMPERATURA,
                P_NRORG, P_NRORG, P_NRORG,
                P_CDOPERADOR, P_CDOPERADOR,
                SYSDATE, SYSDATE
           FROM CONFIGSERVPROPCOM C
          WHERE C.NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM
          ORDER BY C.NRCONFIGSERVPROPCOM;
      END IF;
      -- Grupos de tipo de prato
      SELECT COUNT(1)
        INTO V_QTDE
        FROM CONFGRUPOTPPROPCOM
       WHERE NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM;
      IF V_QTDE > 0 THEN
         V_NRCONFGRUPOTPPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('CONFGRUPOTPPROPCOM', V_QTDE));
         INSERT INTO CONFGRUPOTPPROPCOM
         (NRCONFGRUPOTPPROPCOM, NRDETALHESERVPROPCOM,
          CDGRTIPOPR, NRPORCIONAMENTO, NRGRAMATURACARDBASE,
          NRORG, NRORGINCLUSAO, NRORGULTATU,
          CDOPERINCLUSAO, CDOPERULTATU,
          DTINCLUSAO, DTULTATU)
         SELECT V_NRCONFGRUPOTPPROPCOM + (ROW_NUMBER() OVER (ORDER BY C.NRCONFGRUPOTPPROPCOM) - 1) AS NRCONFGRUPOTPPROPCOM, 
                V_NRDETALHESERVPROPCOM,
                C.CDGRTIPOPR, C.NRPORCIONAMENTO, C.NRGRAMATURACARDBASE,
                P_NRORG, P_NRORG, P_NRORG,
                P_CDOPERADOR, P_CDOPERADOR,
                SYSDATE, SYSDATE
           FROM CONFGRUPOTPPROPCOM C
          WHERE C.NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM
          ORDER BY C.NRCONFGRUPOTPPROPCOM;
      END IF;

      IF P_COPIA_CARD = 'S' THEN
         -- Produtos
         SELECT COUNT(1)
           INTO V_QTDE
           FROM PRODUTOPROPCOM
          WHERE NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM;
         IF V_QTDE > 0 THEN
            V_NRPRODUTOPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('PRODUTOPROPCOM' , V_QTDE));
            INSERT INTO PRODUTOPROPCOM
            (NRPRODUTOPROPCOM, NRDETALHESERVPROPCOM,
             CDPRODUTO, CDMARCASOLICITADA, CDMARCAESCOLHIDA,
             VRPEACRESCIMO,          
             NRORG, NRORGINCLUSAO, NRORGULTATU,
             CDOPERINCLUSAO, CDOPERULTATU,
             DTINCLUSAO, DTULTATU)
            SELECT V_NRPRODUTOPROPCOM + (ROW_NUMBER() OVER (ORDER BY P.NRPRODUTOPROPCOM) - 1) AS NRPRODUTOPROPCOM, 
                   V_NRDETALHESERVPROPCOM,
                   P.CDPRODUTO, P.CDMARCASOLICITADA, P.CDMARCAESCOLHIDA,
                   P.VRPEACRESCIMO,
                   P_NRORG, P_NRORG, P_NRORG,
                   P_CDOPERADOR, P_CDOPERADOR,
                   SYSDATE, SYSDATE
              FROM PRODUTOPROPCOM P
             WHERE P.NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM
             ORDER BY P.NRPRODUTOPROPCOM;
         END IF;
         -- Incidencias
         SELECT COUNT(1)
           INTO V_QTDE
           FROM INCIDENCIAPROPCOM
          WHERE NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM;
         IF V_QTDE > 0 THEN
            V_NRINCIDENCIAPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('INCIDENCIAPROPCOM', V_QTDE));
            INSERT INTO INCIDENCIAPROPCOM
            (NRINCIDENCIAPROPCOM, NRDETALHESERVPROPCOM,
             NRGRUPOPRATOSERV, QTSOLICITADA,
             NRORG, NRORGINCLUSAO, NRORGULTATU,
             CDOPERINCLUSAO, CDOPERULTATU,
             DTINCLUSAO, DTULTATU)
            SELECT V_NRINCIDENCIAPROPCOM + (ROW_NUMBER() OVER (ORDER BY I.NRINCIDENCIAPROPCOM) - 1) AS NRINCIDENCIAPROPCOM, 
                   V_NRDETALHESERVPROPCOM,
                   NRGRUPOPRATOSERV, QTSOLICITADA,
                   P_NRORG, P_NRORG, P_NRORG,
                   P_CDOPERADOR, P_CDOPERADOR,
                   SYSDATE, SYSDATE
              FROM INCIDENCIAPROPCOM I
             WHERE I.NRDETALHESERVPROPCOM = P_NRDETALHESERVPROPCOM
             ORDER BY I.NRINCIDENCIAPROPCOM;
         END IF;
      END IF;
      P_NRDETALHESERVPROPCOMNOVO := V_NRDETALHESERVPROPCOM;
   END IF;
END;
/