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

IF EXISTS(SELECT *
            FROM SYSOBJECTS O, SYSUSERS U
           WHERE O.NAME = 'HIST_INVEROTA_EST'
             AND TYPE = 'TR'
             AND U.UID = O.UID
             AND U.NAME = USER)

DROP TRIGGER HIST_INVEROTA_EST
GO

CREATE TRIGGER HIST_INVEROTA_EST
ON INVEROTA 
FOR DELETE, INSERT, UPDATE
AS
   DECLARE @V_USUARIO VARCHAR(40);
   DECLARE @V_TIPO VARCHAR(1);
   DECLARE @V_TPMOVI VARCHAR(1);
   DECLARE @V_ITPESQ VARCHAR(80);
   DECLARE @V_DESC VARCHAR(400);
   DECLARE @V_CDFILLOGOPER VARCHAR(4);
   DECLARE @V_DTOPER DATETIME;
   DECLARE @V_CDARVPROD VARCHAR(20);   
/*VARIÁVEIS DO CURSOR C_CURSOR*/
   DECLARE @V_CDFILIAL_NEW VARCHAR(4);
   DECLARE @V_CDFILIAL_OLD VARCHAR(4);
   DECLARE @V_DTINVEROTA_NEW DATETIME;
   DECLARE @V_DTINVEROTA_OLD DATETIME;
   DECLARE @V_CDPRODUTO_NEW VARCHAR(10);
   DECLARE @V_CDPRODUTO_OLD VARCHAR(10);
   DECLARE @V_CDALMOXARIFE_NEW VARCHAR(6);
   DECLARE @V_CDALMOXARIFE_OLD VARCHAR(6);
   DECLARE @V_CDLOCALESTOQ_NEW VARCHAR(6);
   DECLARE @V_CDLOCALESTOQ_OLD VARCHAR(6);
   DECLARE @V_QTINVEROTA_NEW DOUBLE PRECISION;
   DECLARE @V_QTINVEROTA_OLD DOUBLE PRECISION;
   DECLARE @V_QTESTOQUE_NEW DOUBLE PRECISION;
   DECLARE @V_QTESTOQUE_OLD DOUBLE PRECISION;
   DECLARE @V_IDINVENTOK_NEW VARCHAR(1);
   DECLARE @V_IDINVENTOK_OLD VARCHAR(1);
BEGIN
   SET @V_DESC = '';
   SET @V_TIPO = '0';
   SET @V_CDFILLOGOPER = '';
   
   DECLARE C_CURSOR CURSOR FOR
      SELECT 'D' COMANDO,
             NULL, NULL, NULL, NULL, 
             NULL, NULL, NULL, NULL,
             CDFILIAL,
             DTINVEROTA,
             CDPRODUTO,
             CDALMOXARIFE,
             CDLOCALESTOQ,
             QTINVEROTA,
             QTESTOQUE,
             IDINVENTOK
        FROM DELETED
       WHERE 0 = (SELECT COUNT(*) FROM INSERTED)
       UNION ALL
      SELECT 'U' COMANDO,
             INSERTED.CDFILIAL,
             INSERTED.DTINVEROTA,
             INSERTED.CDPRODUTO,
             INSERTED.CDALMOXARIFE,
             INSERTED.CDLOCALESTOQ,
             INSERTED.QTINVEROTA,
             INSERTED.QTESTOQUE,
             INSERTED.IDINVENTOK,
             DELETED.CDFILIAL,
             DELETED.DTINVEROTA,
             DELETED.CDPRODUTO,
             DELETED.CDALMOXARIFE,
             DELETED.CDLOCALESTOQ,
             DELETED.QTINVEROTA,
             DELETED.QTESTOQUE,
             DELETED.IDINVENTOK
        FROM INSERTED, DELETED
       WHERE INSERTED.CDFILIAL = DELETED.CDFILIAL
         AND INSERTED.DTINVEROTA = DELETED.DTINVEROTA
         AND INSERTED.CDPRODUTO = DELETED.CDPRODUTO
         AND INSERTED.CDALMOXARIFE = DELETED.CDALMOXARIFE
         AND INSERTED.CDLOCALESTOQ = DELETED.CDLOCALESTOQ
       UNION ALL
      SELECT 'I' COMANDO,
             CDFILIAL,
             DTINVEROTA,
             CDPRODUTO,
             CDALMOXARIFE,
             CDLOCALESTOQ,
             QTINVEROTA,
             QTESTOQUE,
             IDINVENTOK,
             NULL, NULL, NULL, NULL, 
             NULL, NULL, NULL, NULL
        FROM INSERTED
       WHERE 0 = (SELECT COUNT(*) FROM DELETED)

   OPEN C_CURSOR;
   FETCH NEXT FROM C_CURSOR INTO @V_TIPO, @V_CDFILIAL_NEW, @V_DTINVEROTA_NEW, @V_CDPRODUTO_NEW, @V_CDALMOXARIFE_NEW,
                                 @V_CDLOCALESTOQ_NEW, @V_QTINVEROTA_NEW, @V_QTESTOQUE_NEW, @V_IDINVENTOK_NEW,
                                 @V_CDFILIAL_OLD, @V_DTINVEROTA_OLD, @V_CDPRODUTO_OLD, @V_CDALMOXARIFE_OLD,
                                 @V_CDLOCALESTOQ_OLD, @V_QTINVEROTA_OLD, @V_QTESTOQUE_OLD, @V_IDINVENTOK_OLD;

   WHILE (@@FETCH_STATUS = 0) BEGIN
      IF @V_TIPO = 'D' BEGIN
         SELECT @V_CDARVPROD = CDARVPROD
           FROM PRODUTO
          WHERE CDPRODUTO = @V_CDPRODUTO_OLD;
        
         SET @V_DESC = 'Filial '+@V_CDFILIAL_OLD+' Dt. Inv. '+CONVERT(VARCHAR, @V_DTINVEROTA_OLD, 103)+' Prod. '+@V_CDARVPROD;

         IF (@V_CDALMOXARIFE_OLD <> ' ') BEGIN
            SET @V_DESC = @V_DESC + ' Almox. '+ @V_CDALMOXARIFE_OLD;
         END;

         IF (@V_CDLOCALESTOQ_OLD <> ' ') BEGIN
            SET @V_DESC = @V_DESC + ' Local. '+ @V_CDLOCALESTOQ_OLD;
         END;

         IF @V_QTINVEROTA_OLD IS NOT NULL BEGIN
            SET @V_DESC = @V_DESC + ' Qt. Inv. '+ CONVERT(VARCHAR, @V_QTINVEROTA_OLD);
         END;

         IF @V_QTESTOQUE_OLD IS NOT NULL BEGIN
            SET @V_DESC = @V_DESC + ' Qt. Est. '+ CONVERT(VARCHAR, @V_QTESTOQUE_OLD);
         END;

         IF @V_IDINVENTOK_OLD IS NOT NULL BEGIN
            SET @V_DESC = @V_DESC + ' Inv. Ok '+ @V_IDINVENTOK_OLD;
         END;

         SET @V_TPMOVI = '3';
         SET @V_CDFILLOGOPER = @V_CDFILIAL_OLD;
         SET @V_ITPESQ = @V_CDFILIAL_OLD +RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,DAY(@V_DTINVEROTA_OLD)), 2)+
                         RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,MONTH(@V_DTINVEROTA_OLD)), 2) +
                         RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,YEAR(@V_DTINVEROTA_OLD)), 2) + 
                         @V_CDPRODUTO_OLD + CASE @V_CDALMOXARIFE_OLD WHEN ' ' THEN '' ELSE @V_CDALMOXARIFE_OLD END +
                         CASE @V_CDLOCALESTOQ_OLD WHEN ' ' THEN '' ELSE @V_CDLOCALESTOQ_OLD END;
      END
      ELSE BEGIN
         IF @V_TIPO = 'U' BEGIN
            IF (@V_QTINVEROTA_OLD <> @V_QTINVEROTA_NEW) OR (@V_QTESTOQUE_OLD <> @V_QTESTOQUE_NEW)
               OR (@V_IDINVENTOK_OLD <> @V_IDINVENTOK_NEW) BEGIN
               SELECT @V_CDARVPROD = CDARVPROD
                 FROM PRODUTO
                WHERE CDPRODUTO = @V_CDPRODUTO_OLD;

               SET @V_DESC = 'Filial '+@V_CDFILIAL_OLD+' Dt. Inv. '+CONVERT(VARCHAR, @V_DTINVEROTA_OLD, 103)+' Prod. '+@V_CDARVPROD;

               IF (@V_CDALMOXARIFE_OLD <> ' ') BEGIN
                  SET @V_DESC = @V_DESC + ' Almox. '+ @V_CDALMOXARIFE_OLD;
               END;

               IF (@V_CDLOCALESTOQ_OLD <> ' ') BEGIN
                  SET @V_DESC = @V_DESC + ' Local. '+ @V_CDLOCALESTOQ_OLD;
               END;

               SET @V_DESC = @V_DESC + ' Alterado:'

               IF (@V_QTINVEROTA_OLD <> @V_QTINVEROTA_NEW) BEGIN
                  SET @V_DESC = @V_DESC + ' Qt. Inv. - De '+ CONVERT(VARCHAR, @V_QTINVEROTA_OLD) + ' Para '+ CONVERT(VARCHAR, @V_QTINVEROTA_NEW);
               END;

               IF (@V_QTESTOQUE_OLD <> @V_QTESTOQUE_NEW) BEGIN
                  SET @V_DESC = @V_DESC + ' Qt. Est. - De '+ CONVERT(VARCHAR, @V_QTESTOQUE_OLD) + ' Para ' + CONVERT(VARCHAR, @V_QTESTOQUE_NEW);
               END;

               IF (@V_IDINVENTOK_OLD <> @V_IDINVENTOK_NEW) BEGIN
                  IF @V_IDINVENTOK_OLD IS NULL BEGIN
                     SET @V_DESC = @V_DESC + ' Inv. Ok '+ @V_IDINVENTOK_NEW;
                  END
                  ELSE BEGIN
                     SET @V_DESC = @V_DESC + ' Inv. Ok - De '+ @V_IDINVENTOK_OLD + ' Para ' + @V_IDINVENTOK_NEW;
                  END;
               END;

               SET @V_TPMOVI = '2';
               SET @V_CDFILLOGOPER = @V_CDFILIAL_OLD;
               SET @V_ITPESQ = @V_CDFILIAL_OLD +RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,DAY(@V_DTINVEROTA_OLD)), 2)+
                               RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,MONTH(@V_DTINVEROTA_OLD)), 2) +
                               RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,YEAR(@V_DTINVEROTA_OLD)), 2) + 
                               @V_CDPRODUTO_OLD + CASE @V_CDALMOXARIFE_OLD WHEN ' ' THEN '' ELSE @V_CDALMOXARIFE_OLD END +
                               CASE @V_CDLOCALESTOQ_OLD WHEN ' ' THEN '' ELSE @V_CDLOCALESTOQ_OLD END;
            END;
         END
         ELSE BEGIN
            SELECT @V_CDARVPROD = CDARVPROD
              FROM PRODUTO
             WHERE CDPRODUTO = @V_CDPRODUTO_NEW;
        
            SET @V_DESC = 'Filial '+@V_CDFILIAL_NEW+' Dt. Inv. '+CONVERT(VARCHAR, @V_DTINVEROTA_NEW, 103)+' Prod. '+@V_CDARVPROD;

            IF (@V_CDALMOXARIFE_NEW <> ' ') BEGIN
               SET @V_DESC = @V_DESC + ' Almox. '+ @V_CDALMOXARIFE_NEW;
            END;

            IF (@V_CDLOCALESTOQ_NEW <> ' ') BEGIN
               SET @V_DESC = @V_DESC + ' Local. '+ @V_CDLOCALESTOQ_NEW;
            END;

            IF @V_QTINVEROTA_NEW IS NOT NULL BEGIN
               SET @V_DESC = @V_DESC + ' Qt. Inv. '+ CONVERT(VARCHAR, @V_QTINVEROTA_NEW);
            END;

            IF @V_QTESTOQUE_NEW IS NOT NULL BEGIN
               SET @V_DESC = @V_DESC + ' Qt. Est. '+ CONVERT(VARCHAR, @V_QTESTOQUE_NEW);
            END;

            IF @V_IDINVENTOK_NEW IS NOT NULL BEGIN
               SET @V_DESC = @V_DESC + ' Inv. Ok '+ @V_IDINVENTOK_NEW;
            END;

            SET @V_TPMOVI = '1';
            SET @V_CDFILLOGOPER = @V_CDFILIAL_NEW;
            SET @V_ITPESQ = @V_CDFILIAL_NEW +RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,DAY(@V_DTINVEROTA_NEW)), 2)+
                            RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,MONTH(@V_DTINVEROTA_NEW)), 2) +
                            RIGHT(REPLICATE('0', 2) + CONVERT(VARCHAR,YEAR(@V_DTINVEROTA_NEW)), 2) +
                            @V_CDPRODUTO_NEW + CASE @V_CDALMOXARIFE_NEW WHEN ' ' THEN '' ELSE @V_CDALMOXARIFE_NEW END +
                            CASE @V_CDLOCALESTOQ_NEW WHEN ' ' THEN '' ELSE @V_CDLOCALESTOQ_NEW END;
         END;
      END;

      EXEC NMUSUARIO @V_USUARIO;

      SET @V_USUARIO = ISNULL(@V_USUARIO, ' ');

      IF @V_TPMOVI <> '0' BEGIN
         IF NOT @V_DESC IS NULL BEGIN
            IF NOT @V_USUARIO IS NULL BEGIN
               SET @V_DTOPER = GETDATE();

               INSERT INTO LOGOPERA
                  (NMTABELA, DTOPERACAO, NMRESPOPER, IDTIPOOPER, CDPESQITEM, DSOPERACAO, CDFILLOGOPER)
               VALUES
                  ('INVEROTA', @V_DTOPER, @V_USUARIO, @V_TPMOVI, @V_ITPESQ, @V_DESC, @V_CDFILLOGOPER);
            END;
         END;
      END;

      FETCH NEXT FROM C_CURSOR INTO @V_TIPO, @V_CDFILIAL_NEW, @V_DTINVEROTA_NEW, @V_CDPRODUTO_NEW, @V_CDALMOXARIFE_NEW,
                                    @V_CDLOCALESTOQ_NEW, @V_QTINVEROTA_NEW, @V_QTESTOQUE_NEW, @V_IDINVENTOK_NEW,
                                    @V_CDFILIAL_OLD, @V_DTINVEROTA_OLD, @V_CDPRODUTO_OLD, @V_CDALMOXARIFE_OLD,
                                    @V_CDLOCALESTOQ_OLD, @V_QTINVEROTA_OLD, @V_QTESTOQUE_OLD, @V_IDINVENTOK_OLD;	  
   END;
   CLOSE C_CURSOR;
   DEALLOCATE C_CURSOR;
END;
GO

-- VERSAO --
EXEC ATUVEROBJ 'HIST_INVEROTA_EST','5.45.005';
GO
