IF EXISTS (SELECT *
             FROM SYSOBJECTS O, SYSUSERS U
            WHERE O.NAME = 'IMPORT_PRODFORNCOMP'
              AND TYPE = 'P'
              AND U.UID = O.UID
              AND U.NAME = USER)
   DROP PROCEDURE IMPORT_PRODFORNCOMP;
GO
IF EXISTS (SELECT *
             FROM SYSOBJECTS O, SYSUSERS U
            WHERE O.NAME = 'IMPORT_PRODFORNCOMP'
              AND TYPE = 'P'
              AND U.UID = O.UID
              AND U.NAME = USER)
   DROP PROCEDURE IMPORT_PRODFORNCOMP;
GO

CREATE PROCEDURE IMPORT_PRODFORNCOMP
   @P_CDFILCENTCMP     VARCHAR(4),
   @P_NRAPURPREC       VARCHAR(10),
   @P_CDPRODINI        VARCHAR(20) = NULL,
   @P_CDPRODFIN        VARCHAR(20) = NULL,
   @P_DTENTREGA        DATETIME,
   @P_CDCOMPRADOR      VARCHAR(12),
   @P_CDOPERADOR       VARCHAR(12),
   @P_CDFILIAL         VARCHAR(2000),
   @P_CDFORNECED       VARCHAR(21),
   @P_CDCUSTO          VARCHAR(4),
   @P_LISTAPRECO       VARCHAR(1),
   @P_ROWSAFFECT       VARCHAR(1) OUTPUT
AS
   DECLARE @V_IDCONSPRSOL       VARCHAR(1);
   DECLARE @V_IDSEPAFIMP        VARCHAR(1);
   DECLARE @V_IDUTISTATCOT      VARCHAR(1);
   DECLARE @V_IDUTILCONSSOLIOL  VARCHAR(1);
   DECLARE @V_IDUTLPRCMPATIVO   VARCHAR(1);
   DECLARE @V_IDUTLMARPREFOL    VARCHAR(1);
   DECLARE @V_CDMARCA_PADRAO    VARCHAR(5);
   DECLARE @V_IDUTLPRARVOLCMP   VARCHAR(1);
   DECLARE @V_IDFUNCAOFILICMPOL VARCHAR(1);
   DECLARE @V_IDARREDCMPAMENOS  VARCHAR(1);
   DECLARE @V_IDUTQTDISPGERAL   VARCHAR(1);
   DECLARE @V_EMITENTE          VARCHAR(4);
   DECLARE @V_CDEMPRESA         VARCHAR(3);
   DECLARE @V_CONCKEY           VARCHAR(200);
   DECLARE @V_IDTIPEMIT         VARCHAR(1);
   DECLARE @V_DSPZOPGTCONC      VARCHAR(2000);
   DECLARE @V_IDPRODWEB         VARCHAR(1);
   DECLARE @V_CDFILIOPELOG      VARCHAR(2000);
   DECLARE @V_VRCUSTO           DOUBLE PRECISION;


   DECLARE @C_GRAVA_CDFILIAL      VARCHAR(4);
   DECLARE @C_GRAVA_CDPRODUTO     VARCHAR(10);
   DECLARE @C_GRAVA_NRCOLEPRECO   VARCHAR(10);
   DECLARE @C_GRAVA_CDFORNECED    VARCHAR(21);
   DECLARE @C_GRAVA_CDREGIAO      VARCHAR(3);
   DECLARE @C_GRAVA_CDMARCA       VARCHAR(5);
   DECLARE @C_GRAVA_CDTIPCOB      VARCHAR(2);
   DECLARE @C_GRAVA_CDFORMPGTO    VARCHAR(2);
   DECLARE @C_GRAVA_IDTIPFREITM   VARCHAR(1);
   DECLARE @C_GRAVA_VRCUSTO       DOUBLE PRECISION;
   DECLARE @C_GRAVA_IDITMLISPREC  VARCHAR(1);
   DECLARE @C_GRAVA_NRSEQPRELIST  VARCHAR(10);
   DECLARE @C_GRAVA_QTSOLIPROD    DOUBLE PRECISION;
   DECLARE @C_GRAVA_IDUTDIAPGTFO  VARCHAR(1);
   DECLARE @C_GRAVA_IDTPFORPGTFO  VARCHAR(1);
   DECLARE @C_GRAVA_IDTPFRETFORN  VARCHAR(1);
   DECLARE @C_GRAVA_NRPARCPGTOFO  NUMERIC;
   DECLARE @C_GRAVA_VRPEDESCFORN  VARCHAR(1);
   DECLARE @C_GRAVA_NRDIAPGFIXFO  VARCHAR(1);

BEGIN
   SET @P_ROWSAFFECT = 'N';
   SELECT @V_CDMARCA_PADRAO = MAX(CDMARCA)
     FROM MARCA;
   SELECT @V_IDCONSPRSOL      = ISNULL(MAX(IDCONSPRSOL), 'N'),
          @V_IDSEPAFIMP       = ISNULL(MAX(IDSEPAFIMP), 'N'),
          @V_IDUTISTATCOT     = ISNULL(MAX(IDUTISTATCOT), 'N'),
          @V_IDUTILCONSSOLIOL = ISNULL(MAX(IDUTILCONSSOLIOL), 'N'),
          @V_IDUTQTDISPGERAL  = ISNULL(MAX(IDUTQTDISPGERAL), 'N'),
          @V_IDUTLMARPREFOL   = ISNULL(MAX(IDUTLMARPREFOL), 'N'),
          @V_CDMARCA_PADRAO   = ISNULL(MAX(CDMARCA), @V_CDMARCA_PADRAO),
          @V_IDUTLPRARVOLCMP  = ISNULL(MAX(IDUTLPRARVOLCMP), 'N'),
          @V_IDUTLPRCMPATIVO = ISNULL(MAX(IDUTLPRCMPATIVO), 'N'),
          @V_IDARREDCMPAMENOS = ISNULL(MAX(IDARREDCMPAMENOS), 'N')
     FROM PARASUPRI
    WHERE CDFILIAL = @P_CDFILCENTCMP;

   INSERT
     INTO APURPRECO (CDFILCENTCMP, NRAPURPREC, CDCOMPRADOR, DTINIAPUPREC,
          DTFINAPUPREC, IDSITAPUPREC, DTAPURPREC,CDOPERADOR, CDFILLANC,
          DSGRUPFILIAPUR, CDPRODINICAPUR, CDPRODFINAAPUR, IDCONSOLAPUEFET)
   VALUES (@P_CDFILCENTCMP, @P_NRAPURPREC, @P_CDCOMPRADOR, @P_DTENTREGA,
           @P_DTENTREGA, '1', GETDATE(), @P_CDOPERADOR, @P_CDFILCENTCMP,
           '', @P_CDPRODINI, @P_CDPRODFIN, 'N');
   DECLARE C_GRAVA CURSOR FOR
      SELECT CDFILIAL, CDREGIAO, CDPRODUTO, QTSOLIPROD,
             CDMARCA,VRCUSTO, NRCOLEPRECO, CDFORNECED,
             CDTIPCOB, CDFORMPGTO, IDUTDIAPGTFO, IDTPFORPGTFO, IDTPFRETFORN,
             NRPARCPGTOFO, VRPEDESCFORN, NRDIAPGFIXFO
        FROM (SELECT I.CDFILIAL,
                     FILIAL.CDREGIAO, PRODUTO.CDPRODUTO,
                     0 QTSOLIPROD, PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.SGUNIDADE, MARCPRODCOMP.CDMARCA,
                     (CASE
                        WHEN @P_LISTAPRECO = 'S'
                        THEN 0
                        ELSE TEKNISA.CUSTO_PRODUTO(I.CDFILIAL, PRODUTO.CDPRODESTO, @P_CDCUSTO, GETDATE(), GETDATE())
                     END) * PRODUTO.VRFATOCONV AS VRCUSTO, '9999999999' NRCOLEPRECO,
                     PF.CDFORNECED, CDTIPCOB, CDFORMPGTO, IDUTDIAPGTFO,
                     IDTPFORPGTFO, IDTPFRETFORN, NRPARCPGTOFO, VRPEDESCFORN, NRDIAPGFIXFO
                FROM PRODFILI I, PRODUTO, FILIAL, MARCPRODCOMP,
                     (SELECT P.CDPRODCOMPL, P.CDFORNECED, CDTIPCOB, CDFORMPGTO,
                             IDUTDIAPGTFO, IDTPFORPGTFO, IDTPFRETFORN, NRPARCPGTOFO,
                             VRPEDESCFORN, NRDIAPGFIXFO, CDQUALIF, DTVALQUALIF, IDFORNAUTO
                        FROM PRODFORNCOMP P, FORNECEDOR
                       WHERE (@P_CDFORNECED = P.CDFORNECED)
                         AND P.CDFORNECED   = FORNECEDOR.CDFORNECED) PF, PARASUPRI
       WHERE ((CHARINDEX(I.CDFILIAL, @P_CDFILIAL) > 0) OR (@P_CDFILIAL = 'T'))
         AND I.CDPRODUTO    = PRODUTO.CDPRODUTO
         AND (PF.CDPRODCOMPL = PRODUTO.CDPRODUTO)
         AND ISNULL(I.IDPRODATIV, 'I') = 'A'
         AND (FILIAL.CDFILIAL = I.CDFILIAL)
         AND ISNULL(FILIAL.IDFUNCAOFILI, 'S') <> 'O'
         AND ISNULL(FILIAL.IDCNTRRESC, 'S') = 'N'
         AND FILIAL.CDREGIAO IS NOT NULL
         AND ISNULL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)  = @P_CDFILCENTCMP
         AND (PARASUPRI.CDFILIAL = @P_CDFILCENTCMP)
         AND PRODUTO.CDPRODUTO = MARCPRODCOMP.CDPRMARCOMPL
         AND ((PRODUTO.CDARVPROD BETWEEN @P_CDPRODINI AND @P_CDPRODFIN) OR (@P_CDPRODFIN = 'T'))
         AND EXISTS (SELECT PRODCOMP.CDPRODUTO
                       FROM PRODCOMP, PRODUTO PR
                      WHERE PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                        AND PRODCOMP.CDOPERADOR = @P_CDCOMPRADOR
                        AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD +'%')
          AND NOT EXISTS (SELECT REFOREG.CDREGIAO
                            FROM REFOREG
                           WHERE REFOREG.CDREGIAO   = FILIAL.CDREGIAO
                             AND REFOREG.CDFORNECED = @P_CDFORNECED)
          AND NOT EXISTS (SELECT REFORFIL.CDFILIAL
                            FROM REFORFIL
                           WHERE REFORFIL.CDFILIAL   = FILIAL.CDFILIAL
                             AND REFORFIL.CDPERIENTR IS NULL
                             AND REFORFIL.CDFORNECED = @P_CDFORNECED )
          AND NOT EXISTS (SELECT QFOPRODFORN.CDPRODUTO
                            FROM QFOPRODFORN
                           WHERE QFOPRODFORN.CDPRODUTO = PRODUTO.CDPRODUTO
                             AND QFOPRODFORN.CDFORNECED = @P_CDFORNECED
                             AND ((QFOPRODFORN.IDFORNAPROV = 'N' AND QFOPRODFORN.IDFORNAUTOR = 'N') OR
                                 ((QFOPRODFORN.IDFORNAPROV = 'S') AND
                                 ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                                 @P_DTENTREGA > (DATEADD(MONTH, DATEDIFF(MONTH, 0, QFOPRODFORN.DTVALPRFORN) + 1, 0) - 1)) OR
                                 (PARASUPRI.IDULTIDTVALQ = 'D' AND
                                 @P_DTENTREGA > QFOPRODFORN.DTVALPRFORN)))))
          AND NOT EXISTS (SELECT QFOMARPROD.CDMARCA
                            FROM QFOMARPROD
                           WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                             AND QFOMARPROD.CDMARCA   = MARCPRODCOMP.CDMARCA
                             AND ((QFOMARPROD.IDAPRMARPRO = 'N' AND QFOMARPROD.IDAUTMARPRO = 'N') OR
                                 ((QFOMARPROD.IDAPRMARPRO = 'S') AND
                                 ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                                 @P_DTENTREGA > (DATEADD(MONTH, DATEDIFF(MONTH, 0, QFOMARPROD.DTVALAPROVA) + 1, 0) - 1)) OR
                                 (PARASUPRI.IDULTIDTVALQ = 'D' AND
                                 @P_DTENTREGA > QFOMARPROD.DTVALAPROVA)))))
          AND EXISTS (SELECT QFOMARPROD.CDMARCA
                        FROM QFOMARPROD
                       WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                         AND QFOMARPROD.CDMARCA   = MARCPRODCOMP.CDMARCA
                       UNION
                      SELECT PARASUPRI.CDMARCA
                        FROM PARASUPRI
                       WHERE PARASUPRI.CDFILIAL     = @P_CDFILCENTCMP
                         AND (PARASUPRI.IDMARSEMQUA = 'N' OR PARASUPRI.IDMARSEMQUA IS NULL))
          AND NOT EXISTS (SELECT QUALIFICACAO.CDQUALIF
                            FROM QUALIFICACAO
                           WHERE PF.CDQUALIF = QUALIFICACAO.CDQUALIF
                             AND PF.IDFORNAUTO = 'N'
                             AND ((QUALIFICACAO.IDPERCOTCMP = '2')                   OR
                                 ((PARASUPRI.IDULTIDTVALQ  = 'D'                    AND
                                 @P_DTENTREGA > PF.DTVALQUALIF)       OR
                                 (PARASUPRI.IDULTIDTVALQ = 'M'                      AND
                                 @P_DTENTREGA > (DATEADD(MONTH, DATEDIFF(MONTH, 0, PF.DTVALQUALIF) + 1, 0) - 1)))))) A;
   OPEN C_GRAVA;
   FETCH NEXT FROM C_GRAVA INTO @C_GRAVA_CDFILIAL, @C_GRAVA_CDREGIAO, @C_GRAVA_CDPRODUTO,
                                @C_GRAVA_QTSOLIPROD, @C_GRAVA_CDMARCA,
                                @C_GRAVA_VRCUSTO, @C_GRAVA_NRCOLEPRECO,
                                @C_GRAVA_CDFORNECED, @C_GRAVA_CDTIPCOB, @C_GRAVA_CDFORMPGTO,
                                @C_GRAVA_IDUTDIAPGTFO, @C_GRAVA_IDTPFORPGTFO, @C_GRAVA_IDTPFRETFORN,
                                @C_GRAVA_NRPARCPGTOFO, @C_GRAVA_VRPEDESCFORN, @C_GRAVA_NRDIAPGFIXFO;

   WHILE (@@FETCH_STATUS = 0) BEGIN
      SET @V_EMITENTE  = TEKNISA.EMITENTE(@C_GRAVA_CDFILIAL, @C_GRAVA_CDPRODUTO, @P_CDFORNECED);
      SET @V_CDEMPRESA = SUBSTRING(@V_EMITENTE, 3, 2);
      SET @V_CONCKEY   = @V_CONCKEY+@C_GRAVA_CDFILIAL+ @P_CDFORNECED +SUBSTRING(@V_EMITENTE, 3, 2)+
                         @C_GRAVA_IDTPFORPGTFO +
                         @C_GRAVA_CDTIPCOB     + @C_GRAVA_IDTIPFREITM  +
                         @C_GRAVA_CDFORMPGTO   + CONVERT(CHAR, @C_GRAVA_NRPARCPGTOFO) +
                         CONVERT(CHAR, @C_GRAVA_NRDIAPGFIXFO) + @C_GRAVA_IDUTDIAPGTFO +SUBSTRING(@V_EMITENTE, 1, 1);
      SET @V_IDTIPEMIT = SUBSTRING(@V_EMITENTE, 1, 1);
      SET @V_IDPRODWEB     = 'N';
      SET @V_CDFILIOPELOG  = 'X';
      SET @V_VRCUSTO       = @C_GRAVA_VRCUSTO;
      SET @V_DSPZOPGTCONC  = '';
      IF @P_LISTAPRECO = 'S' BEGIN
         SELECT @V_VRCUSTO = ISNULL(MIN(VRPRECUNIITM), 0)
           FROM ITEMCOLE, FILIAL, PRODUTO
          WHERE ITEMCOLE.CDFILIAL     = @P_CDFILCENTCMP
            AND ITEMCOLE.CDFORNECED   = @C_GRAVA_CDFORNECED
            AND FILIAL.CDFILIAL       = @C_GRAVA_CDFILIAL
            AND @P_DTENTREGA BETWEEN ITEMCOLE.DTINIVALITM AND ITEMCOLE.DTFINVALITM
            AND PRODUTO.CDPRODUTO   = @C_GRAVA_CDPRODUTO
            AND ITEMCOLE.CDREGIAO   = FILIAL.CDREGIAO
            AND ITEMCOLE.CDPRODUTO  = PRODUTO.CDPRODUTO
            AND ITEMCOLE.VRPRECUNIITM > 0;
      END ;
      INSERT INTO ITMAPURPREC
      (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,
       DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
       CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,
       QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
       CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF,
       CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
       IDTIPOFRETAP, NRPARCPGTOAP, VRPRECUNIAP,
       VRPERDESIAP,  NRDIAPGFIAP, DSPZOPGTCOAP,
       VRPRECECOAP,  VRPRECONPIAP, IDITMLISPRAP)
      VALUES(@P_CDFILCENTCMP,
             @P_NRAPURPREC,
             @C_GRAVA_CDFILIAL,
             @P_DTENTREGA,
             @C_GRAVA_CDPRODUTO,
             @C_GRAVA_NRCOLEPRECO,
             @C_GRAVA_CDFORNECED,
             @C_GRAVA_CDREGIAO,
             @C_GRAVA_CDMARCA,
             0,
             0,
             @C_GRAVA_CDTIPCOB,
             @V_CDEMPRESA,
             @C_GRAVA_CDFORMPGTO,
             @C_GRAVA_IDUTDIAPGTFO,
             @V_CONCKEY+@V_IDPRODWEB+@V_CDFILIOPELOG,
             @C_GRAVA_IDTPFORPGTFO,
             @V_IDTIPEMIT,
             @C_GRAVA_IDTPFRETFORN,
             @C_GRAVA_NRPARCPGTOFO,
             @V_VRCUSTO,
             @C_GRAVA_VRPEDESCFORN,
             @C_GRAVA_NRDIAPGFIXFO,
             @V_DSPZOPGTCONC,
             @V_VRCUSTO,
             @V_VRCUSTO,
             'N');
      SET @V_CONCKEY = '';
      IF @@ROWCOUNT > 0 BEGIN
         SET @P_ROWSAFFECT = 'S';
      END;
      FETCH NEXT FROM C_GRAVA INTO @C_GRAVA_CDFILIAL, @C_GRAVA_CDREGIAO, @C_GRAVA_CDPRODUTO,
                                   @C_GRAVA_QTSOLIPROD, @C_GRAVA_CDMARCA,
                                   @C_GRAVA_VRCUSTO, @C_GRAVA_NRCOLEPRECO,
                                   @C_GRAVA_CDFORNECED, @C_GRAVA_CDTIPCOB, @C_GRAVA_CDFORMPGTO,
                                   @C_GRAVA_IDUTDIAPGTFO, @C_GRAVA_IDTPFORPGTFO, @C_GRAVA_IDTPFRETFORN,
                                   @C_GRAVA_NRPARCPGTOFO, @C_GRAVA_VRPEDESCFORN, @C_GRAVA_NRDIAPGFIXFO;
   END;
   CLOSE C_GRAVA;
   DEALLOCATE C_GRAVA;
END;
GO

-- VERSAO --
EXEC ATUVEROBJ 'IMPORT_PRODFORNCOMP','6.19.xxx';
GO
