IF EXISTS( SELECT * FROM sysobjects O, sysusers U
            WHERE o.name = 'QUALIFICA_MARCA_PRODUTO'
              and type   = 'TR'
              and u.uid  = o.uid
              and u.name = USER)

DROP TRIGGER QUALIFICA_MARCA_PRODUTO
GO

CREATE TRIGGER QUALIFICA_MARCA_PRODUTO
ON QFOMARNIVELPROD 
FOR DELETE, INSERT, UPDATE
AS
  
   DECLARE @V_COUNT         DOUBLE PRECISION;
   DECLARE @V_CDPRODUTO     VARCHAR(10);
   DECLARE @V_ATU_CDPRODUTO VARCHAR(10);
   DECLARE @V_CDMARCA       VARCHAR(5);

   /*VARIÁVEIS DO CURSOR C_CURSOR*/

   DECLARE @V_ID_COMANDO          VARCHAR(1);

   DECLARE @V_OLD_CDPRODUTO       VARCHAR(10);
   DECLARE @V_OLD_CDMARCA         VARCHAR(5);
   DECLARE @V_OLD_IDAPRMARNIVPROD VARCHAR(1);
   DECLARE @V_OLD_IDAUTMARNIVPROD VARCHAR(1);
   DECLARE @V_OLD_DTVALAPRNIVPROD DATETIME;

   DECLARE @V_NEW_CDPRODUTO       VARCHAR(10);
   DECLARE @V_NEW_CDMARCA         VARCHAR(5);
   DECLARE @V_NEW_IDAPRMARNIVPROD VARCHAR(1);
   DECLARE @V_NEW_IDAUTMARNIVPROD VARCHAR(1);
   DECLARE @V_NEW_DTVALAPRNIVPROD DATETIME;
BEGIN
   DECLARE C_CURSOR CURSOR FOR

      SELECT
         'U' IDCOMANDO,
         INSERTED.CDPRODUTO,
         INSERTED.CDMARCA,
         INSERTED.IDAPRMARNIVPROD,
         INSERTED.IDAUTMARNIVPROD,
         INSERTED.DTVALAPRNIVPROD,
         DELETED.CDPRODUTO,
         DELETED.CDMARCA,
         DELETED.IDAPRMARNIVPROD,
         DELETED.IDAUTMARNIVPROD,
         DELETED.DTVALAPRNIVPROD
      FROM
         INSERTED,
         DELETED
      WHERE INSERTED.CDPRODUTO = DELETED.CDPRODUTO
        AND INSERTED.CDMARCA   = DELETED.CDMARCA

      UNION ALL

      SELECT
         'I' IDCOMANDO,
         INSERTED.CDPRODUTO,
         INSERTED.CDMARCA,
         INSERTED.IDAPRMARNIVPROD,
         INSERTED.IDAUTMARNIVPROD,
         INSERTED.DTVALAPRNIVPROD,
         NULL,
         NULL,
         NULL,
         NULL,
         NULL
      FROM
         INSERTED
      WHERE
         CDPRODUTO+CDMARCA  NOT IN (SELECT CDPRODUTO+CDMARCA  FROM DELETED)

      UNION ALL

      SELECT
         'D' IDCOMANDO,
         NULL,
         NULL,
         NULL,
         NULL,
         NULL,
         DELETED.CDPRODUTO,
         DELETED.CDMARCA,
         DELETED.IDAPRMARNIVPROD,
         DELETED.IDAUTMARNIVPROD,
         DELETED.DTVALAPRNIVPROD
      FROM
         DELETED
      WHERE
         CDPRODUTO+CDMARCA  NOT IN (SELECT CDPRODUTO+CDMARCA  FROM INSERTED)

   OPEN C_CURSOR;
   FETCH NEXT FROM C_CURSOR INTO @V_ID_COMANDO,
                                 @V_NEW_CDPRODUTO,
                                 @V_NEW_CDMARCA,
                                 @V_NEW_IDAPRMARNIVPROD,
                                 @V_NEW_IDAUTMARNIVPROD,
                                 @V_NEW_DTVALAPRNIVPROD,
                                 @V_OLD_CDPRODUTO,
                                 @V_OLD_CDMARCA,
                                 @V_OLD_IDAPRMARNIVPROD,
                                 @V_OLD_IDAUTMARNIVPROD,
                                 @V_OLD_DTVALAPRNIVPROD;

   WHILE (@@FETCH_STATUS = 0) BEGIN
      IF @V_ID_COMANDO= 'I' /*INSERTING*/ BEGIN
         SET @V_CDPRODUTO = @V_NEW_CDPRODUTO;
         SET @V_CDMARCA   = @V_NEW_CDMARCA;
      END
      ELSE BEGIN
         SET @V_CDPRODUTO = @V_OLD_CDPRODUTO;
         SET @V_CDMARCA   = @V_OLD_CDMARCA;
      END;
      FETCH NEXT FROM C_CURSOR INTO @V_ID_COMANDO,
                                    @V_NEW_CDPRODUTO,
                                    @V_NEW_CDMARCA,
                                    @V_NEW_IDAPRMARNIVPROD,
                                    @V_NEW_IDAUTMARNIVPROD,
                                    @V_NEW_DTVALAPRNIVPROD,
                                    @V_OLD_CDPRODUTO,
                                    @V_OLD_CDMARCA,
                                    @V_OLD_IDAPRMARNIVPROD,
                                    @V_OLD_IDAUTMARNIVPROD,
                                    @V_OLD_DTVALAPRNIVPROD;
   END;
   CLOSE      C_CURSOR;
   DEALLOCATE C_CURSOR;

   DECLARE C_PRODUTO CURSOR FOR ( SELECT CDPRODUTO
                                    FROM PRODUTO P
                                   WHERE P.CDARVPROD BETWEEN (  SELECT MAX(CDARVPROD)
                                                                  FROM PRODUTO
                                                                 WHERE @V_CDPRODUTO = CDARVPROD)
                                                         AND (SELECT MAX(CDARVPROD) + REPLICATE('Z', (SELECT LEN(CDPICTPROD) FROM PARAMGERAL))
                                                                FROM PRODUTO
                                                               WHERE @V_CDPRODUTO = CDARVPROD)
                                    AND CDNVPRODUTO = (SELECT MAX(CDNVPRODUTO) FROM PRODUTO));
   OPEN C_PRODUTO;
   FETCH NEXT FROM C_PRODUTO INTO @V_ATU_CDPRODUTO;
   WHILE (@@FETCH_STATUS = 0) BEGIN
      SELECT @V_COUNT = COUNT(1)
        FROM QFOMARPROD
       WHERE CDPRODUTO = @V_ATU_CDPRODUTO
         AND CDMARCA   = @V_CDMARCA;

      IF @V_ID_COMANDO= 'D' /*DELETING*/ BEGIN
         IF @V_COUNT > 0 BEGIN
           DELETE FROM QFOMARPROD
            WHERE CDPRODUTO = @V_ATU_CDPRODUTO
              AND CDMARCA   = @V_CDMARCA;
         END;
      END
      ELSE BEGIN
         IF @V_COUNT > 0 BEGIN
            UPDATE QFOMARPROD
               SET IDAPRMARPRO = @V_NEW_IDAPRMARNIVPROD,
                   IDAUTMARPRO = @V_NEW_IDAUTMARNIVPROD,
                   DTVALAPROVA = @V_NEW_DTVALAPRNIVPROD
             WHERE CDPRODUTO = @V_ATU_CDPRODUTO
               AND CDMARCA   = @V_CDMARCA;
         END
         ELSE BEGIN
            INSERT INTO QFOMARPROD (CDPRODUTO, CDMARCA, IDAPRMARPRO, IDAUTMARPRO, DTVALAPROVA)
                            VALUES (@V_ATU_CDPRODUTO, @V_CDMARCA, @V_NEW_IDAPRMARNIVPROD, @V_NEW_IDAUTMARNIVPROD, @V_NEW_DTVALAPRNIVPROD);
         END;
      END;
      FETCH NEXT FROM C_PRODUTO INTO @V_ATU_CDPRODUTO;
   END;
   CLOSE      C_PRODUTO;
   DEALLOCATE C_PRODUTO;
END;
GO

-- VERSAO --
EXEC ATUVEROBJ 'QUALIFICA_MARCA_PRODUTO','6.05.000';
GO

