-- ================================================================== --
-- SISTEMA         : PEDIDO                                           --
-- DATA DA CRIAÇÃO : INÍCIO - 10/11/2003                              --
-- CRIAÇÃO         : Raphael Freitas Pinheiro                         --
-- OBJETIVO        : Gera comissão do vendedor por item do pedido     --
-- ================================================================== --

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



IF EXISTS (
			SELECT *
			FROM SYSOBJECTS O, SYSUSERS U
			WHERE (O.NAME = 'BUSCA_COMISSAO')
			AND (TYPE   = 'FN' )
			AND (U.UID  = O.UID)
			AND (U.NAME = USER))
DROP FUNCTION BUSCA_COMISSAO
GO
CREATE FUNCTION BUSCA_COMISSAO (
	@P_CDFILIAL     VARCHAR(04),
	@P_CDVENDEDOR   VARCHAR(04),
	@P_CDPRODUTO    VARCHAR(10),
	@P_VRPREUNITPED DOUBLE PRECISION,
	@P_IDITPEDDIFER VARCHAR(1),
	@P_CDCLIENTE    VARCHAR(21),
	@P_IDCTRLVENEXP VARCHAR(1))RETURNS DOUBLE PRECISION
AS
BEGIN
	DECLARE @V_CTPEPROD INTEGER;
	DECLARE @V_CTPEVEND INTEGER;
	DECLARE @V_CTPEFILI INTEGER;
	DECLARE @V_CTPEEMPR INTEGER;
	DECLARE @V_VRPECOMISSAO DOUBLE PRECISION;

	SET @V_VRPECOMISSAO = 0;

/* TIPOS DE PREÇO NORMAL, PERSONALIZADO, OUTROS */
	IF (@P_IDITPEDDIFER IN ('N', 'S', 'O')) BEGIN
		IF (@P_IDCTRLVENEXP = 'S') BEGIN

/* BUSCA O PERCENTUAL DA TABELA DE COMISSÃO */
			SELECT @V_CTPEPROD = COUNT(*)
			FROM ITCOMISSAO IC, VENDEDOR VD, PRODUTO PR
			WHERE (VD.CDVENDEDOR = @P_CDVENDEDOR) 
			AND (IC.CDFILIAL   = @P_CDFILIAL  ) 
			AND (IC.CDCOMISSAO = VD.CDCOMISSAO) 
			AND (PR.CDPRODUTO  = @P_CDPRODUTO ) 
			AND (IC.CDPRODUTO  = PR.CDPRODUTO ) 
			AND (@P_VRPREUNITPED BETWEEN IC.VRINICVENDA AND IC.VRFINAVENDA);

			IF (@V_CTPEPROD > 0) BEGIN

				-- ***** PRODUTO ***** --
				SELECT @V_VRPECOMISSAO = ISNULL(MAX(IC.VRPECOMIVEND), 0)
				FROM ITCOMISSAO IC, VENDEDOR VD, PRODUTO PR
				WHERE (VD.CDVENDEDOR = @P_CDVENDEDOR)
				AND (IC.CDFILIAL   = @P_CDFILIAL  )
				AND (IC.CDCOMISSAO = VD.CDCOMISSAO)
				AND (PR.CDPRODUTO  = @P_CDPRODUTO )
				AND (IC.CDPRODUTO  = PR.CDPRODUTO )
				AND (@P_VRPREUNITPED BETWEEN IC.VRINICVENDA AND IC.VRFINAVENDA);
			END;
			IF (@V_VRPECOMISSAO) IS NULL BEGIN
				SET @V_VRPECOMISSAO = 0;
			END;
		END
		ELSE IF (@V_IDEXIBRENTPED = 'I') BEGIN

			-- ***** PEDIDO ***** --
			SELECT @V_VRPECOMISSAO = ISNULL(MAX(PC.VRPECOMIVEND), 0)
			FROM PEDPERCOMISSAO PC, VENDEDOR VD
			WHERE (VD.CDVENDEDOR = @P_CDVENDEDOR)
			AND (PC.CDCOMISSAO = VD.CDCOMISSAO)
			AND (@P_VRPREUNITPED BETWEEN PC.VRINIPERVEND AND PC.VRFINPERVEND);

			IF (@V_VRPECOMISSAO) IS NULL BEGIN
				SET @V_VRPECOMISSAO = 0;
			END;
		END
		ELSE IF (@V_IDEXIBRENTPED = 'R') BEGIN

			SELECT @V_VRPECOMISSAO = ISNULL(MAX(I.VRPECOMIVEND), 0)
			FROM TABCOMRAATIVCLI T, CLIENTE C, ITCOMISSAO I
			WHERE (C.CDCLIENTE  = @P_CDCLIENTE )
			AND (T.CDVENDEDOR = @P_CDVENDEDOR)
			AND (T.CDFILIAL   = @P_CDFILIAL  )
			AND (T.CDATIVCLI  = C.CDATIVCLI  )
			AND (I.CDFILIAL   = @P_CDFILIAL  )
			AND (T.CDCOMISSAO = I.CDCOMISSAO )
			AND (I.CDPRODUTO  = @P_CDPRODUTO )
			AND (@P_VRPREUNITPED BETWEEN I.VRINICVENDA AND I.VRFINAVENDA);

			IF (@V_VRPECOMISSAO) IS NULL BEGIN
				SET @V_VRPECOMISSAO = 0;
			END;
		END;

		IF (@V_VRPECOMISSAO = 0) BEGIN

			-- **** VENDEDOR **** --
			SELECT @V_CTPEVEND = COUNT(*)
			FROM VENDEDOR
			WHERE (CDVENDEDOR = @P_CDVENDEDOR);

			IF (@V_CTPEVEND > 0) BEGIN
				SELECT @V_VRPECOMISSAO = ISNULL(VRPECOMVEN, 0)
				FROM VENDEDOR
				WHERE (CDVENDEDOR = @P_CDVENDEDOR);
			END;
		END;

		IF (@V_VRPECOMISSAO = 0) BEGIN

			-- **** FILIAL **** --
			SELECT @V_CTPEFILI = COUNT(*)
			FROM FILIAL
			WHERE (CDFILIAL = @P_CDFILIAL);

			IF (@V_CTPEFILI > 0) BEGIN
				SELECT @V_VRPECOMISSAO = ISNULL(VRPECOVENFIL, 0)
				FROM FILIAL
				WHERE (CDFILIAL = @P_CDFILIAL);

				IF (@V_VRPECOMISSAO = 0) BEGIN

					-- **** EMPRESA **** --
					SELECT @V_CTPEEMPR = COUNT(*)
					FROM FILIAL F, EMPRESA E
					WHERE (F.CDFILIAL  = @P_CDFILIAL)
					AND (E.CDEMPRESA = F.CDEMPRESA);

					IF (@V_CTPEEMPR > 0) BEGIN
						SELECT @V_VRPECOMISSAO = ISNULL(E.VRPECOVENEMP, 0)
						FROM FILIAL F, EMPRESA E
						WHERE (F.CDFILIAL  = @P_CDFILIAL)
						AND (E.CDEMPRESA = F.CDEMPRESA);
					END;
				END;
			END;
		END;
	END
	ELSE BEGIN

/* TIPOS DE PREÇO PROMOCIONAL, GRUPO PROMOCIONAL */

		IF (@P_IDCTRLVENEXP = 'S') BEGIN

/* BUSCA O PERCENTUAL DA TABELA DE COMISSÃO PROMOCIONAL*/
			SELECT @V_VRPECOMISSAO = ISNULL(MAX(IC.VRPECOMIVEND), 0)
			FROM ITCOMISSAO IC, VENDEDOR VD
			WHERE (VD.CDVENDEDOR = @P_CDVENDEDOR)
			AND (IC.CDFILIAL   = @P_CDFILIAL  )
			AND (IC.CDPRODUTO  = @P_CDPRODUTO )
			AND (IC.CDCOMISSAO = VD.CDCOMISSAOPROMO)
			AND (@P_VRPREUNITPED BETWEEN IC.VRINICVENDA AND IC.VRFINAVENDA);

			IF (@V_VRPECOMISSAO) IS NULL BEGIN
				SET @V_VRPECOMISSAO = 0;
			END;
		END
		ELSE IF (@V_IDEXIBRENTPED = 'I') BEGIN

			-- ***** PEDIDO ***** --
			SELECT @V_VRPECOMISSAO = ISNULL(MAX(PC.VRPECOMIVEND), 0)
			FROM PEDPERCOMISSAO PC, VENDEDOR VD
			WHERE (VD.CDVENDEDOR = @P_CDVENDEDOR)
			AND (PC.CDCOMISSAO = VD.CDCOMISSAOPROMO)
			AND (@P_VRPREUNITPED BETWEEN PC.VRINIPERVEND AND PC.VRFINPERVEND);

			IF (@V_VRPECOMISSAO) IS NULL BEGIN
				SET @V_VRPECOMISSAO = 0;
			END;
		END
		ELSE IF (@V_IDEXIBRENTPED = 'R') BEGIN

			SELECT @V_VRPECOMISSAO = ISNULL(MAX(I.VRPECOMIVEND), 0)
			FROM TABCOMRAATIVCLI T, CLIENTE C, ITCOMISSAO I
			WHERE (C.CDCLIENTE  = @P_CDCLIENTE )
			AND (T.CDVENDEDOR = @P_CDVENDEDOR)
			AND (T.CDFILIAL   = @P_CDFILIAL  )
			AND (T.CDATIVCLI  = C.CDATIVCLI  )
			AND (I.CDFILIAL   = @P_CDFILIAL  )
			AND (T.CDCOMISSAO = I.CDCOMISSAO )
			AND (I.CDPRODUTO  = @P_CDPRODUTO )
			AND (@P_VRPREUNITPED BETWEEN I.VRINICVENDA AND I.VRFINAVENDA);

			IF (@V_VRPECOMISSAO) IS NULL BEGIN
				SET @V_VRPECOMISSAO = 0;
			END;
		END;

		IF (@V_VRPECOMISSAO = 0) BEGIN
			SELECT @V_VRPECOMISSAO = ISNULL(MAX(VRCOMPROVEND),0)
			FROM VENDEDOR
			WHERE (CDVENDEDOR = @P_CDVENDEDOR);
		END;
	END;
	RETURN @V_VRPECOMISSAO;
END
GO

-- VERSAO --
EXEC ATUVEROBJ 'BUSCA_COMISSAO','6.19.000';
GO

