/*Tabela INVEROTALOTE: Inventário Rotativo por Lote*/
/*Descrição: A trigger insere registros na tabela LOGOPERA a partir de alterações na tabela INVEROTALOTE */
/*Objetivo: Gerar um log que vai registrar as alterações na tabela de Inventário Rotativo por Lote,
             utilizando a tabela Geral de Logs de Operações */
/*Criação: 12/06/2012 - Tarcísio Dias Pereira*/

CREATE OR REPLACE TRIGGER HIST_INVEROTALOTE_EST
AFTER DELETE OR INSERT OR UPDATE
ON INVEROTALOTE FOR EACH ROW
DECLARE
  V_USUARIO         VARCHAR2(40);
  V_TIPO            VARCHAR2(1);
  V_ITPESQ          VARCHAR2(80);
  V_DESC            VARCHAR2(400);
  V_CDFILLOGOPER    VARCHAR2(4);
  V_DTOPER          DATE;
  V_CDARVPROD       VARCHAR2(20);
BEGIN
   V_DESC     := '';
   V_TIPO     := '0';
   V_CDFILLOGOPER := '';

   NMUSUARIO(V_USUARIO);
   IF NOT V_USUARIO IS NULL THEN
      IF DELETING  THEN
         V_TIPO := '3';

         SELECT CDARVPROD INTO V_CDARVPROD
           FROM PRODUTO
          WHERE CDPRODUTO = :OLD.CDPRODUTO;

         V_DESC := 'Filial ' || :OLD.CDFILIAL || 
                   ' Dt. Inv. ' || TO_CHAR(:OLD.DTINVELOTE, 'DD/MM/YYYY') || 
                   ' Prod. ' || V_CDARVPROD ||
                   ' Lote ' || :OLD.NRLOTEESTQ;

         IF (:OLD.NRSUBLOTE <> ' ') THEN
            V_DESC := V_DESC || ' Sublote ' || :OLD.NRSUBLOTE;
         END IF;
         
         IF (:OLD.CDALMOXARIFE <> ' ') THEN
            V_DESC := V_DESC || ' Almox. ' || :OLD.CDALMOXARIFE; 
         END IF;

         IF (:OLD.CDLOCALESTOQ <> ' ') THEN
            V_DESC := V_DESC || ' Local. ' || :OLD.CDLOCALESTOQ; 
         END IF;

         V_DESC := V_DESC || ' Qtd. Inv. ' || TO_CHAR(:OLD.QTINVELOTE) 
                          || ' Qtd. Est. ' || TO_CHAR(:OLD.QTESTOLOTE);

         IF :OLD.IDINVLOTEOK IS NOT NULL THEN
            V_DESC := V_DESC || ' Inv. Ok ' || :OLD.IDINVLOTEOK;
         END IF;

         V_ITPESQ  := :OLD.CDFILIAL||TO_CHAR(:OLD.DTINVELOTE, 'DDMMYYYY')||:OLD.CDPRODUTO||:OLD.NRLOTEESTQ||CASE :OLD.NRSUBLOTE WHEN ' ' THEN '' ELSE :OLD.NRSUBLOTE END||
                      CASE :OLD.CDALMOXARIFE WHEN ' ' THEN '' ELSE :OLD.CDALMOXARIFE END ||CASE :OLD.CDLOCALESTOQ WHEN ' ' THEN '' ELSE :OLD.CDLOCALESTOQ END;

         V_CDFILLOGOPER := :OLD.CDFILIAL;
      ELSE
         IF UPDATING THEN
            IF (:OLD.QTINVELOTE <> :NEW.QTINVELOTE) OR (:OLD.QTESTOLOTE <> :NEW.QTESTOLOTE) OR
               (:OLD.IDINVLOTEOK <> :NEW.IDINVLOTEOK) THEN
               V_TIPO := '2';

               SELECT CDARVPROD INTO V_CDARVPROD
                 FROM PRODUTO
                WHERE CDPRODUTO = :OLD.CDPRODUTO;

               V_DESC := 'Filial ' || :OLD.CDFILIAL || 
                         ' Dt. Inv. ' || TO_CHAR(:OLD.DTINVELOTE, 'DD/MM/YYYY') || 
                         ' Prod. ' || V_CDARVPROD ||
                         ' Lote ' || :OLD.NRLOTEESTQ;

               IF (:OLD.NRSUBLOTE <> ' ') THEN
                  V_DESC := V_DESC || ' Sublote ' || :OLD.NRSUBLOTE;
               END IF;

               IF (:OLD.CDALMOXARIFE <> ' ') THEN
                  V_DESC := V_DESC || ' Almox. ' || :OLD.CDALMOXARIFE; 
               END IF;

               IF (:OLD.CDLOCALESTOQ <> ' ') THEN
                  V_DESC := V_DESC || ' Local. ' || :OLD.CDLOCALESTOQ; 
               END IF;

               V_DESC := V_DESC || ' Alterado:';

               IF (:OLD.QTINVELOTE <> :NEW.QTINVELOTE) THEN
                  V_DESC := V_DESC || ' Qtd. Inv. - De ' || :OLD.QTINVELOTE || ' Para ' || :NEW.QTINVELOTE;
               END IF;

               IF (:OLD.QTESTOLOTE <> :NEW.QTESTOLOTE) THEN
                  V_DESC := V_DESC || ' Qtd. Est. - De ' || :OLD.QTESTOLOTE || ' Para ' || :NEW.QTESTOLOTE;
               END IF;            

               IF (:OLD.IDINVLOTEOK <> :NEW.IDINVLOTEOK) THEN
                  IF (:OLD.IDINVLOTEOK IS NULL) THEN
                     V_DESC := V_DESC || ' Inv. OK ' || :NEW.IDINVLOTEOK;
                  ELSE
                     V_DESC := V_DESC || ' Inv. OK - De ' || :OLD.IDINVLOTEOK || ' Para '|| :NEW.IDINVLOTEOK;
                  END IF;
               END IF;

               V_ITPESQ  := :OLD.CDFILIAL||TO_CHAR(:OLD.DTINVELOTE, 'DDMMYYYY')||:OLD.CDPRODUTO||:OLD.NRLOTEESTQ||CASE :OLD.NRSUBLOTE WHEN ' ' THEN '' ELSE :OLD.NRSUBLOTE END||
                            CASE :OLD.CDALMOXARIFE WHEN ' ' THEN '' ELSE :OLD.CDALMOXARIFE END||CASE :OLD.CDLOCALESTOQ WHEN ' ' THEN '' ELSE :OLD.CDLOCALESTOQ END;

               V_CDFILLOGOPER := :OLD.CDFILIAL;
            END IF;
         ELSE
            V_TIPO := '1';

            SELECT CDARVPROD INTO V_CDARVPROD
              FROM PRODUTO
             WHERE CDPRODUTO = :NEW.CDPRODUTO;

            V_DESC := 'Filial ' || :NEW.CDFILIAL || 
                      ' Dt. Inv. ' || TO_CHAR(:NEW.DTINVELOTE, 'DD/MM/YYYY') || 
                      ' Prod. ' || V_CDARVPROD||
                      ' Lote ' || :NEW.NRLOTEESTQ;

            IF (:NEW.NRSUBLOTE <> ' ') THEN
               V_DESC := V_DESC || ' Sublote ' || :NEW.NRSUBLOTE;
            END IF;

            IF (:NEW.CDALMOXARIFE <> ' ') THEN
               V_DESC := V_DESC || ' Almox. ' || :NEW.CDALMOXARIFE; 
            END IF;

            IF (:NEW.CDLOCALESTOQ <> ' ') THEN
               V_DESC := V_DESC || ' Local. ' || :NEW.CDLOCALESTOQ; 
            END IF;

            IF :NEW.QTINVELOTE IS NOT NULL THEN
               V_DESC := V_DESC || ' Qtd. Inv. ' || TO_CHAR(:NEW.QTINVELOTE);
            END IF;

            IF :NEW.QTESTOLOTE IS NOT NULL THEN
               V_DESC := V_DESC || ' Qtd. Est. '|| TO_CHAR(:NEW.QTESTOLOTE);
            END IF;

            IF :NEW.IDINVLOTEOK IS NOT NULL THEN
               V_DESC := V_DESC || ' Inv. Ok ' || :NEW.IDINVLOTEOK;
            END IF;

            V_ITPESQ  := :NEW.CDFILIAL||TO_CHAR(:NEW.DTINVELOTE, 'DDMMYYYY')||:NEW.CDPRODUTO||:NEW.NRLOTEESTQ||CASE :NEW.NRSUBLOTE WHEN ' ' THEN '' ELSE :NEW.NRSUBLOTE END||
                         CASE :NEW.CDALMOXARIFE WHEN ' ' THEN '' ELSE :NEW.CDALMOXARIFE END||CASE :NEW.CDLOCALESTOQ WHEN ' ' THEN '' ELSE :NEW.CDLOCALESTOQ END;

            V_CDFILLOGOPER := :NEW.CDFILIAL;
         END IF;
      END IF;

      IF V_TIPO <> '0' THEN
         IF NOT V_DESC IS NULL THEN
            V_DTOPER := SYSDATE;

            INSERT INTO LOGOPERA
               (NMTABELA, DTOPERACAO, NMRESPOPER, IDTIPOOPER, CDPESQITEM, DSOPERACAO, CDFILLOGOPER)
            VALUES
               ('INVEROTALOTE', V_DTOPER, V_USUARIO, V_TIPO, V_ITPESQ, V_DESC, V_CDFILLOGOPER);

         END IF;
      END IF;
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('HIST_INVEROTALOTE_EST','5.45.005'); END;
/