IF EXISTS(SELECT * FROM sysobjects O, sysusers U
          WHERE
            o.name = 'INSERE_AGRUPA'  and
            type = 'P'                and
            u.uid = o.uid             and
            u.name = USER)
  DROP PROCEDURE INSERE_AGRUPA
  GO

CREATE PROCEDURE INSERE_AGRUPA(@P_CDARVPROD VARCHAR(20), @P_stEdit VARCHAR(1)) AS
DECLARE
   @V_CDPRODUTO      VARCHAR(10),
   @V_CDPROD         VARCHAR(10),
   @V_CDGRUPPROD     VARCHAR(10),
   @V_CDSUBGRPROD    VARCHAR(10),
   @V_CDFILISUBGR    VARCHAR(4),
   @V_CDFORNECED     VARCHAR(21),
   @V_CDPRODCOMPL    VARCHAR(10),
   @V_CDMARCA        VARCHAR(5),
   @V_CDPRMARCOMPL   VARCHAR(10),
   @V_CDSEGMER       VARCHAR(5),
   @V_CDPRODDEL      VARCHAR(10),
   @V_CDPRODESTO     VARCHAR(10),
   @V_COUNT          DOUBLE PRECISION;
BEGIN
   SELECT @V_CDPRODUTO = CDPRODUTO, @V_CDPRODESTO = CDPRODESTO
   FROM PRODUTO
   WHERE  @P_CDARVPROD = CDARVPROD ;

   IF (@P_stEdit = 's') BEGIN
      DELETE FROM PRODFORNCOMP
      WHERE CDPRODCOMPL = @V_CDPRODUTO;
      DELETE FROM MARCPRODCOMP
      WHERE CDPRMARCOMPL = @V_CDPRODUTO;
   END;

   DECLARE C_PRODUTO CURSOR FOR
      SELECT CDPRODUTO
      FROM PRODUTO
      WHERE (CDPRODUTO = @P_CDARVPROD OR
             @P_CDARVPROD LIKE CDARVPROD + '%')
   OPEN C_PRODUTO;
   FETCH NEXT FROM C_PRODUTO INTO @V_CDPRODDEL;
   WHILE (@@FETCH_STATUS = 0) BEGIN
       DELETE FROM PRODUTOSEG
       WHERE CDPRODUTO = @V_CDPRODDEL;
      FETCH NEXT FROM C_PRODUTO INTO @V_CDPRODDEL;
   END;
   CLOSE C_PRODUTO ;
   DEALLOCATE C_PRODUTO ;


   DECLARE C_SUBGRUP CURSOR FOR
      SELECT CDGRUPPROD, CDSUBGRPROD, CDFILISUBGR
      FROM NVSUBGRPROD NV, PRODUTO PR
      WHERE  NV.CDPRODUTO = PR.CDPRODUTO AND
             (@P_CDARVPROD = PR.CDARVPROD OR
             @P_CDARVPROD LIKE CDARVPROD + '%') AND
             NOT EXISTS (SELECT CDPRODUTO
                           FROM PRSUBGRPROD
                          WHERE CDPRODUTO   = @V_CDPRODUTO
                            AND CDGRUPPROD  = NV.CDGRUPPROD
                            AND CDSUBGRPROD = NV.CDSUBGRPROD)

   OPEN C_SUBGRUP;
   FETCH NEXT FROM C_SUBGRUP INTO @V_CDGRUPPROD, @V_CDSUBGRPROD, @V_CDFILISUBGR;
   WHILE (@@FETCH_STATUS = 0) BEGIN
      IF @V_CDGRUPPROD IS NOT NULL BEGIN
         INSERT INTO PRSUBGRPROD
           (CDGRUPPROD, CDSUBGRPROD, CDPRODUTO, CDFILISUBGR)
         VALUES
            (@V_CDGRUPPROD, @V_CDSUBGRPROD, @V_CDPRODUTO, @V_CDFILISUBGR);
      END;
      FETCH NEXT FROM C_SUBGRUP INTO @V_CDGRUPPROD, @V_CDSUBGRPROD, @V_CDFILISUBGR;
   END;

   CLOSE C_SUBGRUP;
   DEALLOCATE C_SUBGRUP;

   DECLARE C_PRODFORN CURSOR FOR
      SELECT PF.CDFORNECED, PR.CDPRODUTO
      FROM PRODFORN PF, PRODUTO PR
      WHERE
         PF.CDPRODUTO = PR.CDPRODUTO AND
         (@P_CDARVPROD = PR.CDARVPROD OR
          @P_CDARVPROD LIKE CDARVPROD + '%')

   OPEN C_PRODFORN;
   FETCH NEXT FROM C_PRODFORN INTO @V_CDFORNECED, @V_CDPROD;
   WHILE (@@FETCH_STATUS = 0) BEGIN
      INSERT INTO PRODFORNCOMP
         (CDFORNECED, CDPRODUTO, CDPRODCOMPL)
         (SELECT @V_CDFORNECED, @V_CDPROD, @V_CDPRODUTO
          FROM  PARAMGERAL
          WHERE NOT EXISTS (SELECT CDFORNECED, CDPRODUTO, CDPRODCOMPL
                            FROM PRODFORNCOMP
                            WHERE CDFORNECED    = @V_CDFORNECED AND
                                  CDPRODUTO     = @V_CDPROD  AND
                                  CDPRODCOMPL  = @V_CDPRODUTO));
      FETCH NEXT FROM C_PRODFORN INTO @V_CDFORNECED, @V_CDPROD;
   END;
   CLOSE C_PRODFORN;
   DEALLOCATE C_PRODFORN;

   DECLARE C_MARCPROD CURSOR FOR
      SELECT CDMARCA, PR.CDPRODUTO
       FROM MARCPROD MA, PRODUTO PR
       WHERE
          (MA.CDPRODUTO = PR.CDPRODUTO) AND
          (@P_CDARVPROD = PR.CDARVPROD OR
           @P_CDARVPROD LIKE PR.CDARVPROD + '%')
       GROUP BY CDMARCA, PR.CDPRODUTO


   OPEN C_MARCPROD;
   FETCH NEXT FROM C_MARCPROD INTO @V_CDMARCA, @V_CDPROD;
   WHILE (@@FETCH_STATUS = 0) BEGIN
      INSERT INTO MARCPRODCOMP
         (CDMARCA, CDPRODUTO, CDPRMARCOMPL)
         (SELECT @V_CDMARCA, @V_CDPROD, @V_CDPRODUTO
          FROM  PARAMGERAL
          WHERE NOT EXISTS (SELECT CDMARCA, CDPRODUTO, CDPRMARCOMPL
                            FROM MARCPRODCOMP
                            WHERE CDMARCA    = @V_CDMARCA    AND
                                  CDPRODUTO  = @V_CDPROD  AND
                                  CDPRMARCOMPL  = @V_CDPRODUTO));
      FETCH NEXT FROM C_MARCPROD INTO @V_CDMARCA, @V_CDPROD;
   END;
   CLOSE C_MARCPROD;
   DEALLOCATE C_MARCPROD;

   DECLARE C_SEGMENTO CURSOR FOR
      SELECT CDSEGMER
       FROM NIVELPRODSEG NI, PRODUTO PR
       WHERE
           NI.CDPRODUTO = PR.CDPRODUTO AND
           (@P_CDARVPROD = CDARVPROD OR
            @P_CDARVPROD LIKE CDARVPROD +'%');

   OPEN C_SEGMENTO;
   FETCH NEXT FROM C_SEGMENTO INTO @V_CDSEGMER;
   WHILE (@@FETCH_STATUS = 0) BEGIN
      INSERT INTO PRODUTOSEG
        (CDSEGMER, CDPRODUTO)
      VALUES
        (@V_CDSEGMER, @V_CDPRODUTO);
      FETCH NEXT FROM C_SEGMENTO INTO @V_CDSEGMER;
   END;
   CLOSE C_SEGMENTO;
   DEALLOCATE C_SEGMENTO;

   SET @V_COUNT = 0;
   SELECT @V_COUNT = COUNT(1)
   FROM QFOMARPROD Q
   WHERE Q.CDPRODUTO = @V_CDPRODESTO;
   IF @V_COUNT > 0 BEGIN
      INSERT INTO QFOMARPROD (CDPRODUTO, CDMARCA, IDAPRMARPRO, IDAUTMARPRO, DTVALAPROVA)
      SELECT
          @V_CDPRODUTO, Q.CDMARCA, Q.IDAPRMARPRO, Q.IDAUTMARPRO, Q.DTVALAPROVA
      FROM QFOMARPROD Q
      WHERE Q.CDPRODUTO = @V_CDPRODESTO
        AND NOT EXISTS (SELECT 1
                        FROM QFOMARPROD QFO
                        WHERE QFO.CDPRODUTO = @V_CDPRODUTO
                          AND QFO.CDMARCA = Q.CDMARCA);
   END
   ELSE BEGIN
      INSERT INTO QFOMARPROD (CDPRODUTO, CDMARCA, IDAPRMARPRO, IDAUTMARPRO, DTVALAPROVA)
      SELECT
         @V_CDPRODUTO,
         QFOMARNIVELPROD.CDMARCA,
         QFOMARNIVELPROD.IDAPRMARNIVPROD,
         QFOMARNIVELPROD.IDAUTMARNIVPROD,
         QFOMARNIVELPROD.DTVALAPRNIVPROD
      FROM PRODUTO PRODQFO, QFOMARNIVELPROD
      WHERE QFOMARNIVELPROD.CDPRODUTO = PRODQFO.CDPRODUTO
        AND PRODQFO.CDARVPROD = (SELECT
                                     MAX(B.CDARVPROD)
                                  FROM
                                     QFOMARNIVELPROD A,
                                     PRODUTO B
                                  WHERE A.CDPRODUTO = B.CDPRODUTO
                                    AND CHARINDEX(B.CDARVPROD, @P_CDARVPROD) = 1);
   END;
END;
GO


-- VERSAO --
EXEC ATUVEROBJ 'INSERE_AGRUPA','6.10.XXX';
GO

