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

CREATE PROCEDURE GRAVA_ITEMPEDIDO (@P_CDFILIAL       VARCHAR(4),
                                   @P_NRPEDIDO       VARCHAR(10),
                                   @P_CDPRODUTO      VARCHAR(10),
                                   @P_QTITEMPED      DOUBLE PRECISION,
                                   @P_VRPREUNITPED   DOUBLE PRECISION,
                                   @P_CDFATPRECO     VARCHAR(3),
                                   @P_VRDESITPED     DOUBLE PRECISION,
                                   @P_VRPESOITPED    DOUBLE PRECISION,
                                   @P_VRPRTABITPED   DOUBLE PRECISION,
                                   @P_VRPEDEMAXIPE   DOUBLE PRECISION,
                                   @P_DTENTITPED     DATETIME,
                                   @P_DTENTPED       DATETIME,
                                   @P_NRITEMORCAMENTO DOUBLE PRECISION = NULL,
                                   @P_CDMENSERRO     VARCHAR(20) OUTPUT,
                                   @P_NRITEMPED      VARCHAR(10) OUTPUT)

AS
   DECLARE @V_CTREG        INTEGER;
   DECLARE @V_DTINIVALIPB  DATETIME;
   DECLARE @V_DTFIMVALIPB  DATETIME;
   DECLARE @V_VRFATPRECOIT DOUBLE PRECISION;
   DECLARE @V_IDSITITEMPED VARCHAR(1);
   DECLARE @V_CDPRECOBASE  VARCHAR(2);
   DECLARE @V_CDMODPGTO    VARCHAR(5);
   DECLARE @V_VRPREUNITPED DOUBLE PRECISION;
   DECLARE @V_VRFATOCONV   DOUBLE PRECISION;
   DECLARE @V_ERRO         VARCHAR(400);
   DECLARE @V_CDOPELANPED  VARCHAR(12);
   DECLARE @V_NRITEMPED    VARCHAR(10);
   DECLARE @V_CDVENDEDOR   VARCHAR(4);
   DECLARE @V_IDCTRLVENEXP VARCHAR(1);
   DECLARE @V_DTENTITPED DATETIME;
   DECLARE @V_CDPRODESTO VARCHAR(10);
   DECLARE @V_HRENTRPROD VARCHAR(4);
   DECLARE @V_NRORCAEVENTO VARCHAR(10);
   DECLARE @V_CDEMPRESA    VARCHAR(02);
   DECLARE @V_CDINSCESTA   VARCHAR(16);
   DECLARE @V_CDCLIENTE    VARCHAR(21);
   DECLARE @V_CDFILIALDEST VARCHAR(04);
   DECLARE @V_CDTIPOOPER   VARCHAR(02);
   DECLARE @V_IDORIGDESTOP VARCHAR(01);

BEGIN
   SET @P_CDMENSERRO = 'OK';
   SET @V_ERRO = '';
   SET @V_IDCTRLVENEXP = 'N';

   SELECT @V_CTREG = COUNT(*)
   FROM PARAMPEDIDO
   WHERE CDFILIAL = @P_CDFILIAL;

   IF @V_CTREG > 0 BEGIN
      SELECT @V_IDSITITEMPED = IDLANCPED
      FROM PARAMPEDIDO
      WHERE CDFILIAL = @P_CDFILIAL;
   END ;

   SELECT @V_CTREG = COUNT(*)
   FROM PRODUTO
   WHERE CDPRODUTO = @P_CDPRODUTO;

   SET @V_NRORCAEVENTO = NULL;
   SELECT
      @V_CDPRECOBASE = MAX(CDPRECOBASE),
      @V_CDMODPGTO   = MAX(CDMODPGTO),
      @V_CDOPELANPED = MAX(CDOPELANPED),
      @V_NRORCAEVENTO = MAX(NRORCAEVENTO)
   FROM PEDIDO
   WHERE CDFILIAL = @P_CDFILIAL
     AND NRPEDIDO = @P_NRPEDIDO;

   IF @V_CTREG > 0 BEGIN
      SELECT @V_VRFATOCONV = MAX(VRFATOCONV)
      FROM PRODUTO
      WHERE CDPRODUTO = @P_CDPRODUTO;
   END;

   IF NOT @P_CDFATPRECO IS NULL BEGIN
      SELECT @V_CTREG = COUNT(*)
      FROM PRODFATOR
      WHERE CDFATPRECO = @P_CDFATPRECO
        AND CDPRODUTO  = @P_CDPRODUTO;

      IF @V_CTREG > 0 BEGIN
         SELECT @V_VRFATPRECOIT = VRFATPRECO
         FROM PRODFATOR
         WHERE CDFATPRECO = @P_CDFATPRECO
           AND CDPRODUTO  = @P_CDPRODUTO;
      END
      ELSE BEGIN
         SET @V_VRFATPRECOIT = NULL;
      END;
   END;

   IF @P_VRPREUNITPED IS NULL BEGIN
      IF @V_VRFATPRECOIT IS NULL BEGIN
         SELECT @V_VRPREUNITPED = MAX(VRITEPREBASE),
                @V_DTINIVALIPB  = MAX(DTINIVALIPB),
                @V_DTFIMVALIPB  = ISNULL(MAX(DTFIMVALIPB), '31/12/9999')
         FROM ITEMPREBASE
         WHERE CDPRECOBASE = @V_CDPRECOBASE
           AND CDPRODUTO   = @P_CDPRODUTO;

         IF @V_VRPREUNITPED > 0 BEGIN
            IF(@P_DTENTPED < @V_DTINIVALIPB )OR(@P_DTENTPED > @V_DTFIMVALIPB) BEGIN
               SET @V_ERRO = 'PRECOVENC;';
            END;
         END;
      END
      ELSE BEGIN
         SET @V_VRPREUNITPED = 1;
      END;
   END
   ELSE BEGIN
      SET @V_VRPREUNITPED = ROUND(@P_VRPREUNITPED,2);
   END;

   IF (@V_VRPREUNITPED IS NULL)OR(@V_VRPREUNITPED = 0) BEGIN
      --IF (@V_NRORCAEVENTO IS NULL) OR (@V_NRORCAEVENTO = '') BEGIN
          SET @V_ERRO = 'VRPREUNITPED;';
      --END;
   END;

   IF NOT @V_CDMODPGTO IS NULL BEGIN
      SELECT @V_IDSITITEMPED = ISNULL(MAX(IDLANCPEDMOD), @V_IDSITITEMPED)
      FROM MODPGTO
      WHERE CDMODPGTO = @V_CDMODPGTO;
   END;
   IF @V_IDSITITEMPED IS NULL BEGIN
      SET @V_ERRO = @V_ERRO + 'IDSITITEMPED;';
   END;

   IF @V_ERRO <> '' BEGIN
      SET @P_CDMENSERRO = @V_ERRO;
   END;

   SELECT @V_CTREG = COUNT(*)
   FROM ITEMPEDIDO
   WHERE CDFILIAL = @P_CDFILIAL
    AND  NRPEDIDO = @P_NRPEDIDO;

   IF @V_CTREG > 0 BEGIN
      SELECT @V_NRITEMPED = MAX(NRITEMPED)
      FROM ITEMPEDIDO
      WHERE CDFILIAL = @P_CDFILIAL
       AND  NRPEDIDO = @P_NRPEDIDO;
   END
   ELSE BEGIN
      SET @V_NRITEMPED = NULL;
   END;

   IF (@V_NRITEMPED IS NULL) BEGIN
      SET @V_NRITEMPED = RIGHT(REPLICATE('0',10) + RTRIM(CAST((CAST('0' AS INT) + 1) AS CHAR(10))),10);
   END
   ELSE BEGIN
      SET @V_NRITEMPED = RIGHT(REPLICATE('0',10) + RTRIM(CAST((CAST(@V_NRITEMPED AS INT) + 1) AS CHAR(10))),10);
   END;

   SET @P_NRITEMPED = @V_NRITEMPED;

   SELECT @V_CTREG = COUNT(*)
   FROM PRODUTO
   WHERE CDPRODESTO = @P_CDPRODUTO;

   IF(@V_CTREG >0)BEGIN
      SELECT @V_CDPRODESTO = CDPRODESTO
      FROM PRODUTO
      WHERE CDPRODESTO = @P_CDPRODUTO;
   END
   ELSE BEGIN
      SET @V_CDPRODESTO = @P_CDPRODUTO;
   END;

   SET @V_DTENTITPED = CONVERT( DATETIME, @P_DTENTITPED+ ' '+ CONVERT( VARCHAR, GETDATE(),108));

   IF (DATEPART(hh, @P_DTENTITPED) = 0) AND (DATEPART(mi, @P_DTENTITPED) = 0) BEGIN
      SELECT @V_CTREG = COUNT(*)
      FROM PARAMPRODMRP
      WHERE CDPRODUTO = @V_CDPRODESTO
        AND CDFILIAL  = @P_CDFILIAL;

      IF(@V_CTREG >0) BEGIN
         SELECT @V_HRENTRPROD = HRENTRPROD
         FROM PARAMPRODMRP
         WHERE CDPRODUTO = @V_CDPRODESTO
           AND CDFILIAL  = @P_CDFILIAL;

         IF(@V_HRENTRPROD IS NOT NULL)AND(@V_HRENTRPROD <> '0000') BEGIN
            SET @V_DTENTITPED = CONVERT(DATETIME,CONVERT(VARCHAR, CONVERT( VARCHAR, @P_DTENTITPED,103)+' '+(SUBSTRING(@V_HRENTRPROD,1,2)+':'+SUBSTRING(@V_HRENTRPROD,3,2))))
         END;
      END;
   END;

   IF @P_CDMENSERRO = 'OK' BEGIN

      SELECT @V_CDEMPRESA = MAX(F.CDEMPRESA), @V_CDINSCESTA = MAX(F.CDINSCESTA), @V_CDCLIENTE = MAX(P.CDCLIENTE), @V_CDFILIALDEST = MAX(P.CDFILIALPED),
             @V_CDTIPOOPER = MAX(P.CDTIPOOPER), @V_IDORIGDESTOP = MAX(T.IDORIGDESTOP)
        FROM FILIAL F, PEDIDO P LEFT JOIN TIPOOPERAC T
                                ON P.CDTIPOOPER = T.CDTIPOOPER AND
                                   P.IDENTRSAIDOP = T.IDENTRSAIDOP
       WHERE P.CDFILIAL = @P_CDFILIAL
         AND P.NRPEDIDO = @P_NRPEDIDO
         AND P.CDFILIAL = F.CDFILIAL;

      INSERT INTO ITEMPEDIDO
         (CDFILIAL,     NRPEDIDO,     NRITEMPED,     IDSITITEMPED,
          CDPRODUTO,    QTITEMPED,    VRPREUNITPED,  CDFATPRECO,
          VRFATPRECOIT, VRDESITPED,   DTENTITPED,    VRPESOITPED,
          VRPRTABITPED, VRPEDEMAXIPE, QTEXPITEMPED,  QTITEMPED2,
          CDOPERADOR,   NRITEMORCAMENTO)
      VALUES
         (@P_CDFILIAL,     @P_NRPEDIDO,     @P_NRITEMPED,     @V_IDSITITEMPED,
          @P_CDPRODUTO,    @P_QTITEMPED,    @V_VRPREUNITPED,  @P_CDFATPRECO,
          @V_VRFATPRECOIT, @P_VRDESITPED,   @V_DTENTITPED,    @P_VRPESOITPED,
          @P_VRPRTABITPED, @P_VRPEDEMAXIPE, 0,                @P_QTITEMPED * @V_VRFATOCONV,
          @V_CDOPELANPED,  @P_NRITEMORCAMENTO);

      EXEC IMPOSTO_ITEMPEDIDO @V_CDEMPRESA, @V_CDINSCESTA, @V_CDCLIENTE, @V_CDFILIALDEST,
                              @P_CDFILIAL, @P_NRPEDIDO, @V_NRITEMPED, @P_DTENTITPED,
                              @V_CDTIPOOPER, @V_IDORIGDESTOP;

      SELECT @V_CTREG = COUNT(*)
      FROM PAREXPEDICAO
      WHERE CDFILIAL = @P_CDFILIAL;

      IF @V_CTREG > 0 BEGIN
         SELECT IDCTRLVENEXP = @V_IDCTRLVENEXP
         FROM PAREXPEDICAO
         WHERE CDFILIAL = @P_CDFILIAL;
      END;

        IF(@V_IDCTRLVENEXP = 'S')BEGIN

         SELECT @V_CTREG = COUNT(*)
         FROM PEDIDO
         WHERE
            CDFILIAL = @P_CDFILIAL AND
            NRPEDIDO = @P_NRPEDIDO;

         IF @V_CTREG > 0 BEGIN
            SELECT @V_CDVENDEDOR = CDVENDEDOR
            FROM PEDIDO
            WHERE
               CDFILIAL = @P_CDFILIAL AND
               NRPEDIDO = @P_NRPEDIDO;

            EXEC GERA_COMISSAOVEND @P_CDFILIAL, @P_NRPEDIDO, @V_CDVENDEDOR,  @V_CDOPELANPED,
                                   @V_NRITEMPED, @V_IDSITITEMPED, @P_CDPRODUTO, @V_VRPREUNITPED;
         END;
       END;
   END;
END;

-- VERSAO --
EXEC ATUVEROBJ 'GRAVA_ITEMPEDIDO','6.35.025';
GO
