/* Sistemas Integrados TECNISA
   Planejamento Alimenta��o Industrial

Nome: NUTRIENTE_DO_CARDAPIO_PLA

Descri��o:
C�lculo dos Nutrientes do Cardapio e grava��o na tabela NUTRTRAB.

P_FILIAL     - Codigo da Filial.
P_SERVICOS   - String contendo sequencia de Servi�os a serem calculados.
P_NUTRIENTES - String contendo Nutrientes a serem calculados.
P_NRSEQUNUTR - N�mero sequencial a ser utilizado para grava��o dos dados.
P_IDNDPCAL   - Indicador de calculo do NDPCal.
P_DTINICIAL  - Data inicial.
P_DTFINAL    - Data final.

SQL*Plus 3.3
@C:\WIN_V1.53\SQL\ORACLE\7170_PLASTP_NUTRIENTE_DO_CARDAPIO_PLA.sql

Cria��o:
02/03/98 - Zed

Manuten��es:
05/03/99 - Ederson - Revis�o geral.
****************************************************************
             CORRE��O DO C�LCULO DO NDPCAL%
****************************************************************
A f�rmula usada para c�lculo do NDPCal% �:

NDPCAL% = NPU * Sum(Prote�nas) * 4
          ------------------------
                    VCT

onde:

NPU = Somat�rio das prote�nas dos componentes da receita multiplicados
      pelo Fator de C�lculo de NDPCAL, informado na tela de parametriza��o
      por grupo de produtos, sendo 0,7 para alimentos de origem animal;
      0,6 para leguminosas e 0,5 para cereais, frutas e outros vegetais.
Sum(Prote�nas) = Somat�rio das prote�nas dos componentes da receita
VCT = "Valor Cal�rico Total" = Soma(carboidratos) x 4 +
                               Soma(lip�deos)    x 9  +
                               Soma(prote�nas)   x 4  +
                               Soma(�lcoois)     x 7
****************************************************************

*/

CREATE OR REPLACE PROCEDURE NUTRIENTE_DO_CARDAPIO_PLA
  (P_FILIAL       IN VARCHAR2,
   P_SERVICOS     IN VARCHAR2,
   P_NUTRIENTES   IN VARCHAR2,
   P_NRSEQUNUTR   IN VARCHAR2,
   P_IDNDPCAL     IN VARCHAR2,
   P_DTINICIAL    IN DATE,
   P_DTFINAL      IN DATE) IS

   V_QTCARBOIDRATO NUMBER;
   V_QTPROTEINA    NUMBER;
   V_QTLIPIDEO     NUMBER;
   V_QTALCOOL      NUMBER;
   V_QTCALORIA     NUMBER;
BEGIN
   FOR C_NUTRTRAB IN (
      SELECT CD.CDFILIAL, CD.CDSERVFILI, CD.DTCARDAPIO,
             SUBSTR(LTRIM(CD.CDDIETPAD||'XXXX'),1,4) AS CDDIETPAD,
             CC.NRSEQPRATCAR, CC.CDTIPOPRAT, CC.CDFILAUXPRAT, CC.CDPRATO,
             R.CDPRODUTO, R.SGUNIDADE AS SGUNIDPROD, NP.CDNUTRIENTE,
             NVL(R.QTCALCNUTR,0) AS QTPRODUTO,
             NVL((NP.QTNUTRPROD * 10 * NVL(DECODE(PRODFILI.VRPESOUNIDFI, 0, R.VRPESOUNID, PRODFILI.VRPESOUNIDFI), R.VRPESOUNID) * R.QTCALCNUTR), 0) AS QTNUTPROD,
             NVL(CC.VRPECONSCARD,0) VRPECONSCARD,
             R.QTBRUTAUNR AS QTPRODPRATT, R.QTPRODLIQ
        FROM CARDADIA CD, COMPCARD CC, TABLE(
              RECEITA_UTIL(P_FILIAL, CD.CDSERVFILI, CC.CDPRATO, CC.CDFILAUXPRAT, 
                           '0', 'Z', CC.CDPRATO,0,0,'N')
              ) R, PRODFILI, NUTRPROD NP
       WHERE CD.CDFILIAL = P_FILIAL
         AND (R.CDPRATOPAI = CC.CDPRATO)
         AND (R.CDFILAUXPRAT = CC.CDFILAUXPRAT)
         AND VALOR_NA_LISTA(CD.CDSERVFILI, P_SERVICOS) > 0
         AND CD.DTCARDAPIO BETWEEN P_DTINICIAL AND P_DTFINAL
         AND CC.CDFILIAL = CD.CDFILIAL
         AND CC.NRCARDAPIO = CD.NRCARDAPIO 
         AND (INSTR(P_NUTRIENTES, NP.CDNUTRIENTE) <> 0 OR P_NUTRIENTES IS NULL)
         AND NP.CDPRODUTO = R.CDPRODUTO
         AND PRODFILI.CDFILIAL = P_FILIAL
         AND PRODFILI.CDPRODUTO = R.CDPRODUTO
       ORDER BY CDFILIAL, CDSERVFILI, DTCARDAPIO, NRSEQPRATCAR, CDPRATO, CDFILAUXPRAT, CDPRODUTO
      ) LOOP
         
      INSERT INTO NUTRTRAB
         (NRSEQUNUTR,
          CDFILINUTR,
          CDSERVNUTR,
          DTREFENUTR,
          CDDIETNUTR,
          NRSEQPRATNUT,
          CDTPPRATNUTR,
          CDFAPRATNUTR,
          CDPRATNUTR,
          CDPRODNUTR,
          CDNUTRCALC,
          QTPRODNUTR,
          QTNUTRCALC,
          QTPROTLIQU,
          VRCALORNUTR,
          VRPECONSNUTR,
          SGUNIDPRODT,
          QTPRODPRATT)
      VALUES
         (P_NRSEQUNUTR,
          C_NUTRTRAB.CDFILIAL,
          C_NUTRTRAB.CDSERVFILI,
          C_NUTRTRAB.DTCARDAPIO,
          C_NUTRTRAB.CDDIETPAD,
          C_NUTRTRAB.NRSEQPRATCAR,
          C_NUTRTRAB.CDTIPOPRAT,
          C_NUTRTRAB.CDFILAUXPRAT,
          C_NUTRTRAB.CDPRATO,
          C_NUTRTRAB.CDPRODUTO,
          C_NUTRTRAB.CDNUTRIENTE,
          C_NUTRTRAB.QTPRODUTO,
          C_NUTRTRAB.QTNUTPROD,
          C_NUTRTRAB.QTPRODLIQ,
          0,
          C_NUTRTRAB.VRPECONSCARD,
          C_NUTRTRAB.SGUNIDPROD,
          C_NUTRTRAB.QTPRODPRATT);

   END LOOP;

   /* ------------------------- CALCULO DO DNPCal --------------------------- */
   IF P_IDNDPCAL = 'S' THEN
      /* ---------------- GRAVA O VALOR DE PROTEINA LIQUIDA (NPU) ----------------- */
     /* UPDATE
         NUTRTRAB
      SET
         QTPROTLIQU = (SELECT
                          NVL(MAX(VRFATCALNDPC) * QTNUTRCALC,0)
                       FROM
                          NDPCAL
                       WHERE
                          CDPRODUTO = (SELECT
                                          MAX(CDPRODUTO)
                                       FROM
                                          NDPCAL
                                       WHERE
                                          INSTR(NUTRTRAB.CDPRODNUTR,CDPRODUTO) = 1
                                      )
                       )
      WHERE
         CDNUTRCALC = (SELECT MAX(CDPROTEINA) FROM PARAMGERAL) AND
         NRSEQUNUTR = P_NRSEQUNUTR;
     */

      /* --------------------- GRAVA O VALOR DE CALORIAS -------------------- */
      UPDATE
         NUTRTRAB
      SET
         VRCALORNUTR = QTNUTRCALC
      WHERE
         CDNUTRCALC = (SELECT MAX(CDCALORIAS) FROM PARAMGERAL) AND
         NRSEQUNUTR = P_NRSEQUNUTR;
   END IF;
END;
/


-- VERSAO --
BEGIN ATUVEROBJ('NUTRIENTE_DO_CARDAPIO_PLA','6.25.xxx'); END;
/

