CREATE OR REPLACE PROCEDURE INSERE_INSUMOS_PREVCONSINF
(
P_NRPREVCONSINF IN NUMBER,
P_CDPRODUTO IN VARCHAR2,
P_QTINSUMO IN FLOAT,
P_DTPRODUCAO IN DATE,
P_DTATENDIMENTO IN DATE,
P_CDFILIAL IN VARCHAR2,
P_CDCIA IN VARCHAR2,
P_NRVOO IN VARCHAR2,
P_CDTRECHO IN VARCHAR2,
P_NRSERVICOCIAFILIP IN NUMBER,
P_CDMANCIA IN VARCHAR2,
P_NRSERVICOCIAFILI IN NUMBER,
P_CDCLASSE IN VARCHAR2,
P_CDSUBGRU IN VARCHAR2,
P_NRSEQSUBGRUSEMAM IN NUMBER,
P_CDCICLO IN VARCHAR2,
P_NRTIPOPROD IN NUMBER,
P_NRTIPONEGOCIOINF IN NUMBER,
P_CDRECEITAMENU IN VARCHAR2,
P_CDRECEITADEST IN VARCHAR2,
P_CDRECEITA IN VARCHAR2,
P_CDSETOR IN VARCHAR2,
P_NRTURNO IN VARCHAR2,
P_NRCATEGORIAPROD IN NUMBER,
P_NRSUBCATEGORIAPROD IN NUMBER,
P_CDOPERADOR IN VARCHAR2,
P_NRORG IN NUMBER
)
AS
V_SEQ VARCHAR2(20);
V_NRINSUMOPREVCONSINF NUMBER;
V_NRDESTPREVCONSINF NUMBER;
V_QUANTIDADE FLOAT;
BEGIN
   V_QUANTIDADE := P_QTINSUMO;
   IF V_QUANTIDADE > 0.0 AND ROUND(V_QUANTIDADE, 3) = 0 THEN
      V_QUANTIDADE := 0.001;
   ELSE
      V_QUANTIDADE := ROUND(V_QUANTIDADE, 3);
   END IF;

   SELECT MAX(NRINSUMOPREVCONSINF)
     INTO V_NRINSUMOPREVCONSINF
     FROM INSUMOPREVCONSINF
    WHERE NRPREVCONSINF = P_NRPREVCONSINF
      AND CDPRODUTO = P_CDPRODUTO;

   IF V_NRINSUMOPREVCONSINF IS NULL THEN
      /*Gera nova chave para o insumo*/
      NOVO_CODIGO_NT('INSUMOPREVCONSINF', V_SEQ);
      V_NRINSUMOPREVCONSINF := TO_NUMBER(V_SEQ);

      INSERT INTO INSUMOPREVCONSINF
      (
      NRINSUMOPREVCONSINF, NRPREVCONSINF,
      CDPRODUTO, QTINSUMOCALC,       
      NRORG, NRORGINCLUSAO, NRORGULTATU,
      DTINCLUSAO, DTULTATU,
      CDOPERINCLUSAO, CDOPERULTATU, IDATIVO
      )
      VALUES
      (
      V_NRINSUMOPREVCONSINF, P_NRPREVCONSINF,
      P_CDPRODUTO, 0,
      P_NRORG, P_NRORG, P_NRORG,
      SYSDATE, SYSDATE,
      P_CDOPERADOR, P_CDOPERADOR, 'S'
      );

   END IF;

   /*Gera nova chave para o destino do insumo*/
   NOVO_CODIGO_NT('DESTPREVCONSINF', V_SEQ);
   V_NRDESTPREVCONSINF := TO_NUMBER(V_SEQ);

   INSERT INTO DESTPREVCONSINF
   (
   NRDESTPREVCONSINF, NRINSUMOPREVCONSINF, CDFILIAL,
   CDCIA, NRVOO, CDTRECHO, DTPRODUCAO, DTATENDIMENTO, NRSERVICOCIAFILIP,
   CDMANCIA, NRSERVICOCIAFILI, CDCLASSE,
   CDSUBGRU, NRSEQSUBGRUSEMAM, CDCICLO,
   NRTIPOPROD, NRTIPONEGOCIOINF,
   CDRECEITAMENU, CDRECEITADEST, CDRECEITA,
   CDSETOR, NRTURNO, NRCATEGORIAPROD, NRSUBCATEGORIAPROD,
   QTINSUMOCALC,
   NRORG, NRORGINCLUSAO, NRORGULTATU,
   DTINCLUSAO, DTULTATU,
   CDOPERINCLUSAO, CDOPERULTATU, IDATIVO
   )
   VALUES
   (
   V_NRDESTPREVCONSINF, V_NRINSUMOPREVCONSINF, P_CDFILIAL,
   P_CDCIA, P_NRVOO, P_CDTRECHO, P_DTPRODUCAO, P_DTATENDIMENTO,  P_NRSERVICOCIAFILIP,
   P_CDMANCIA, P_NRSERVICOCIAFILI, P_CDCLASSE,
   P_CDSUBGRU, P_NRSEQSUBGRUSEMAM, P_CDCICLO,
   P_NRTIPOPROD, P_NRTIPONEGOCIOINF,
   P_CDRECEITAMENU, P_CDRECEITADEST, P_CDRECEITA,
   P_CDSETOR, P_NRTURNO, P_NRCATEGORIAPROD, P_NRSUBCATEGORIAPROD,
   V_QUANTIDADE,
   P_NRORG, P_NRORG, P_NRORG,
   SYSDATE, SYSDATE,
   P_CDOPERADOR, P_CDOPERADOR, 'S'
   );

   UPDATE INSUMOPREVCONSINF
      SET QTINSUMOCALC = QTINSUMOCALC + V_QUANTIDADE,
          NRORGULTATU = P_NRORG,
          CDOPERULTATU = P_CDOPERADOR,
          DTULTATU = SYSDATE
    WHERE NRINSUMOPREVCONSINF = V_NRINSUMOPREVCONSINF;

   DBMS_OUTPUT.PUT_LINE('Inserindo insumo');
END;
/