/**
 * Cria serviços complementares segundo o cálculo realizado
 * 
 * @param {Number} P_NRSERVICOPROPCOM Número do serviço da proposta comercial
 * @param {Number} P_NRCARDAPIOBASE Número do cardápio base complementar
 * @param {Number} P_NRCARDAPIOTRAB Número do cardápio de trabalho complementar
 * @param {Varchar2} P_CDOPERADOR Código do operador logado 
 * @param {Number} P_NRORG Número da organização logada
 * revisada
 */
CREATE OR REPLACE PROCEDURE CRIA_SERVCOMPLEMENTAR_PROPCOM
(
  P_NRSERVICOPROPCOM IN NUMBER,
  P_NRCARDAPIOBASE IN NUMBER,
  P_NRCARDAPIOTRAB IN NUMBER,
  P_CDOPERADOR IN VARCHAR2,
  P_NRORG IN NUMBER
)
AS   
   V_NRVERSAOPROPCOM NUMBER;
   V_NRTIPOPUBLICO NUMBER;
   V_NRPADRAOQUALIDADE NUMBER;
   V_QTSEGSEX FLOAT;
   V_QTSABADO FLOAT;
   V_QTDOMFERI FLOAT;
   V_QTTURNOS FLOAT;   
   V_QTTOTDIAS FLOAT;
   V_QTTOTREFEICOES FLOAT;
   V_RETORNO VARCHAR2(4000);
   V_NRATIVCLISEGMER NUMBER;
   V_NRSERVICOPROPCOM NUMBER;
   V_NRSERVICOPROPOSTA NUMBER;
   V_NRDETALHESERVPROPCOM NUMBER;
   V_NRCONFIGSERVPROPCOM NUMBER;
   V_NRCONFGRUPOTPPROPCOM NUMBER;
   V_QTDE NUMBER;
BEGIN
   IF P_NRSERVICOPROPCOM IS NULL OR P_NRCARDAPIOBASE IS NULL OR P_NRCARDAPIOTRAB IS NULL THEN
      RETURN;
   END IF;

   SELECT COUNT(1)
     INTO V_QTDE
     FROM CARDAPIOTRAB
    WHERE NRCARDAPIOTRAB = P_NRCARDAPIOTRAB;

   IF V_QTDE = 0 THEN
      RETURN;
   END IF;

--=========================================================
--=== Inclusão do serviço da proposta
--=========================================================
	SELECT MAX(S.NRVERSAOPROPCOM),
          MAX(S.NRTIPOPUBLICO),
          MAX(S.QTSEGSEX),
          MAX(S.QTSABADO),
          MAX(S.QTDOMFERI),
          MAX(S.QTTURNOS),
          MAX(S.QTTOTDIAS),
          MAX(S.QTTOTREFEICOES),
          MAX(S.NRPADRAOQUALIDADE)
	  INTO V_NRVERSAOPROPCOM,
          V_NRTIPOPUBLICO,
          V_QTSEGSEX,
          V_QTSABADO,
          V_QTDOMFERI,
          V_QTTURNOS,
          V_QTTOTDIAS,
          V_QTTOTREFEICOES,
          V_NRPADRAOQUALIDADE
	  FROM SERVICOPROPCOM S
	 WHERE S.NRSERVICOPROPCOM = P_NRSERVICOPROPCOM;

    SELECT MAX(NRSERVICOPROPOSTA)
      INTO V_NRSERVICOPROPOSTA
      FROM CARDAPIOBASE 
     WHERE NRCARDAPIOBASE = P_NRCARDAPIOBASE;   
   
   V_NRSERVICOPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('SERVICOPROPCOM', 1));

   INSERT INTO SERVICOPROPCOM
   (
      NRSERVICOPROPCOM, NRVERSAOPROPCOM,
      NRSERVICOPROPOSTA, NRPADRAOQUALIDADE,
      NRTIPOPUBLICO, IDSERVICOPROPCOM,
      QTSEGSEX, QTSABADO, QTDOMFERI, 
      QTTOTDIAS, QTTURNOS, QTTOTREFEICOES,
      NRCARDAPIOBASE, NRSERVICOPROPCOMCOMPL,
      NRORG, NRORGINCLUSAO, NRORGULTATU,
      DTINCLUSAO, DTULTATU,
      CDOPERINCLUSAO, CDOPERULTATU
   )
   VALUES
   (
      V_NRSERVICOPROPCOM, V_NRVERSAOPROPCOM,
      V_NRSERVICOPROPOSTA, V_NRPADRAOQUALIDADE,
      V_NRTIPOPUBLICO, 'CALCULADO',
      V_QTSEGSEX, V_QTSABADO, V_QTDOMFERI,
      V_QTTOTDIAS, V_QTTURNOS, V_QTTOTREFEICOES,
      P_NRCARDAPIOBASE, P_NRSERVICOPROPCOM,
      P_NRORG, P_NRORG, P_NRORG,
      SYSDATE, SYSDATE,
      P_CDOPERADOR, P_CDOPERADOR
   );   
--=========================================================
--=== Inclusão do detalhe e configurações
--=========================================================
   V_NRDETALHESERVPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('DETALHESERVPROPCOM', 1));
   -- Inclui novo detalhe de serviço
   INSERT INTO DETALHESERVPROPCOM
   (NRDETALHESERVPROPCOM, NRSERVICOPROPCOM, NRCARDAPIOTRAB,
    NRORG, NRORGINCLUSAO, NRORGULTATU,
    CDOPERINCLUSAO, CDOPERULTATU,
    DTINCLUSAO, DTULTATU)
   VALUES
   (V_NRDETALHESERVPROPCOM, V_NRSERVICOPROPCOM, P_NRCARDAPIOTRAB,    
    P_NRORG, P_NRORG, P_NRORG,
    P_CDOPERADOR, P_CDOPERADOR,
    SYSDATE, SYSDATE);

   UPDATE SERVICOPROPCOM
      SET NRDETALHESERVPROPCOM = V_NRDETALHESERVPROPCOM
    WHERE NRSERVICOPROPCOM = V_NRSERVICOPROPCOM;   

   -- Inclui configuração do serviço
   FOR C_CONFIG IN
   (
      SELECT C.NRCONFIGCARDBASE, C.CDTIPOPRAT, C.DSCOMPLEMENTO,
             C.NRORDEM, C.IDTEMPERATURA
        FROM CONFIGCARDBASE C
       WHERE C.NRCARDAPIOBASE = P_NRCARDAPIOBASE
         AND C.IDCLASSIFICACAO = 'ALIMENTAR'
   ) LOOP
      V_NRCONFIGSERVPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('CONFIGSERVPROPCOM', 1));
      INSERT INTO CONFIGSERVPROPCOM
      (NRCONFIGSERVPROPCOM, NRDETALHESERVPROPCOM,
       NRCONFIGCARDBASE, CDTIPOPRAT, DSCOMPLEMENTO,
       NRORDEM, IDTEMPERATURA,
       NRORG, NRORGINCLUSAO, NRORGULTATU,
       CDOPERINCLUSAO, CDOPERULTATU,
       DTINCLUSAO, DTULTATU)
      VALUES
      (V_NRCONFIGSERVPROPCOM, V_NRDETALHESERVPROPCOM,
       C_CONFIG.NRCONFIGCARDBASE, C_CONFIG.CDTIPOPRAT, C_CONFIG.DSCOMPLEMENTO,
       C_CONFIG.NRORDEM, C_CONFIG.IDTEMPERATURA,
       P_NRORG, P_NRORG, P_NRORG,
       P_CDOPERADOR, P_CDOPERADOR,
       SYSDATE, SYSDATE);
   END LOOP;

   -- Insere grupos
   FOR C_GRUPOS IN
   (
      SELECT DISTINCT G.CDGRTIPOPR, P.NRPORCIONAMENTO, NULL AS NRGRAMATURACARDBASE
        FROM CONFIGCARDBASE C
             INNER JOIN TIPOPRAT T ON T.CDTIPOPRAT = C.CDTIPOPRAT
             INNER JOIN GRTIPOPR G ON G.CDGRTIPOPR = T.CDGRTIPOPR
             LEFT JOIN (SELECT A.CDGRTIPOPR, MAX(NRPORCIONAMENTO) AS NRPORCIONAMENTO
                          FROM ADESAOCARDBASE A
                               INNER JOIN ITEMADESAOCBASE I ON I.NRADESAOCARDBASE = A.NRADESAOCARDBASE
                         WHERE A.NRCARDAPIOBASE = P_NRCARDAPIOBASE
                         GROUP BY A.CDGRTIPOPR) P ON P.CDGRTIPOPR = G.CDGRTIPOPR                   
       WHERE C.NRCARDAPIOBASE = P_NRCARDAPIOBASE
         AND C.IDCLASSIFICACAO = 'ALIMENTAR'
   ) LOOP
      V_NRCONFGRUPOTPPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('CONFGRUPOTPPROPCOM', 1));
      INSERT INTO CONFGRUPOTPPROPCOM
      (NRCONFGRUPOTPPROPCOM, NRDETALHESERVPROPCOM,
       CDGRTIPOPR, NRPORCIONAMENTO, NRGRAMATURACARDBASE,
       IDTIPOGRAMATURA,
       NRORG, NRORGINCLUSAO, NRORGULTATU,
       CDOPERINCLUSAO, CDOPERULTATU,
       DTINCLUSAO, DTULTATU)
      VALUES
      (V_NRCONFGRUPOTPPROPCOM, V_NRDETALHESERVPROPCOM,
       C_GRUPOS.CDGRTIPOPR, C_GRUPOS.NRPORCIONAMENTO, NULL,
       NULL,
       P_NRORG, P_NRORG, P_NRORG,
       P_CDOPERADOR, P_CDOPERADOR,
       SYSDATE, SYSDATE);
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CRIA_SERVCOMPLEMENTAR_PROPCOM','6.29.xxx'); END;
/