/**
 * Aplica rotina de geração do cardápio de trabalho em um cardápio complementar
 * para criação de um cardápio de trabalho.
 * 
 * @param {Number} P_NRCARDAPIOBASE Número do cardápio base da importação
 * @param {Varchar2} P_IDORIGEM Indica a operação que está executando a importação 
 *                              (CALCULOGN, PLANEJAMENTO, SIMULADOR)
 * @param {Number} P_NRATIVCLISEGMER Número da relação entre segmento de mercado e ramo de atividade
 * @param {Varchar2} P_CDREGIAO Código da região
 * @param {Varchar2} P_VRPEACRESCUSTO Percentual de acréscimo sobre o custo da região
 * @param {Number} P_NRTIPOPUBLICO Número do tipo de público
 * @param {Float} P_QTSEGSEX Quantidade de comensais de segunda a sexta
 * @param {Float} P_QTSABADO Quantidade de comensais no sábado
 * @param {Float} P_QTDOMFERI Quantidade de comensais em domingos e feriados
 * @param {Float} P_QTTURNOS Quantidade de turnos 
 * @param {Date} P_DTCUSTO Data para referência do custo
 * @param {Number} P_NRCARDTRABCOMPLEMENTADO Data do cardápio de trabalho complementado pelo cardápio base de origem
 * @param {Number} P_NRORG Número da organização logada
 * @param {Varchar2} P_CDOPERADOR Código do operador logado
 * @param {Varchar2} P_CDFILIALLOGADA Código da filial logada
 * @param {Number} P_NRCARDAPIOTRAB {saída} Número sequencial do cardápio de trabalho resultante da rotina
 * @param {Number} P_LISTAERROS {saída} Lista de erros. Se preenchido o ROLLBACK é obrigatório
 * revisada
 */
CREATE OR REPLACE PROCEDURE CALC_SERVCOMPLEMENTAR
(
   P_NRCARDAPIOBASE IN NUMBER,
   P_IDORIGEM IN VARCHAR2,
   P_NRATIVCLISEGMER IN NUMBER,
   P_CDREGIAO IN VARCHAR2,
   P_VRPEACRESCUSTO IN FLOAT,
   P_NRTIPOPUBLICO IN NUMBER,
   P_QTSEGSEX IN FLOAT,
   P_QTSABADO IN FLOAT,
   P_QTDOMFERI IN FLOAT,
   P_QTTURNOS IN FLOAT,   
   P_DTCUSTO IN DATE,
   P_NRCARDTRABCOMPLEMENTADO IN NUMBER,
   P_NRORG IN NUMBER,
   P_CDOPERADOR IN VARCHAR2,
   P_CDFILIALLOGADA IN VARCHAR2,
   P_NRCARDAPIOTRAB OUT NUMBER,
   P_LISTAERROS OUT VARCHAR2,
   P_IDIOMA IN VARCHAR2 DEFAULT 'PT_BR'
)
AS
   PRAGMA AUTONOMOUS_TRANSACTION;   
   V_CONFIGURACOES VARCHAR2(10);
   V_GRUPOS VARCHAR2(10);
BEGIN
   V_CONFIGURACOES := RETORNA_NOVO_CODIGO('LISTA', 1, 10);
   V_GRUPOS := RETORNA_NOVO_CODIGO('LISTA', 1, 10);
   
   -- Monta lista de itens da configuração
   INSERT INTO LISTA
   (NRLISTA, CDLISTA,
   NRORG, NRORGULTATU, NRORGINCLUSAO,
   CDOPERINCLUSAO, CDOPERULTATU,
   DTINCLUSAO, DTULTATU)
   SELECT V_CONFIGURACOES, TO_CHAR(C.NRCONFIGCARDBASE),
        P_NRORG, P_NRORG, P_NRORG,
        P_CDOPERADOR, P_CDOPERADOR,
        SYSDATE, SYSDATE         
   FROM CONFIGCARDBASE C
   WHERE C.NRCARDAPIOBASE = P_NRCARDAPIOBASE
    AND C.IDCLASSIFICACAO = 'ALIMENTAR';

   -- Monta lista dos grupos
   INSERT INTO LISTA
   (NRLISTA, CDLISTA,
   NRORG, NRORGULTATU, NRORGINCLUSAO,
   CDOPERINCLUSAO, CDOPERULTATU,
   DTINCLUSAO, DTULTATU)
   SELECT DISTINCT V_GRUPOS, TO_CHAR(G.CDGRTIPOPR) || '|' || TO_CHAR(P.NRPORCIONAMENTO) || '||',
        P_NRORG, P_NRORG, P_NRORG,
        P_CDOPERADOR, P_CDOPERADOR,
        SYSDATE, SYSDATE         
   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';

   IMPORTA_CARDBASE_NO_CARDTRAB(P_NRCARDAPIOBASE, P_IDORIGEM,
                                P_NRATIVCLISEGMER, P_CDREGIAO,
                                P_VRPEACRESCUSTO, P_NRTIPOPUBLICO,
                                P_QTSEGSEX, P_QTSABADO,
                                P_QTDOMFERI, P_QTTURNOS,
                                V_CONFIGURACOES, V_GRUPOS,
                                P_DTCUSTO, P_NRCARDTRABCOMPLEMENTADO,
                                P_NRORG, P_CDOPERADOR,
                                P_CDFILIALLOGADA, P_NRCARDAPIOTRAB,
                                P_LISTAERROS, P_IDIOMA);
   
   -- Apaga lista de itens da configuração
   DELETE FROM LISTA WHERE NRLISTA = V_CONFIGURACOES;
   -- Apaga lista de grupos
   DELETE FROM LISTA WHERE NRLISTA = V_GRUPOS;

   IF P_LISTAERROS IS NOT NULL THEN
      ROLLBACK;
   ELSE
      COMMIT;
   END IF;
END;
/

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