SQL - Import customer prices on volume discount contracts - now incl of discount percentage options

-----------------------------------------------------------
----------DELETE PROCS IF EXIST:
-----------------------------------------------------------
IF EXISTS ( SELECT  * FROM  sys.objects WHERE   object_id = OBJECT_ID(N'_as_AddUpdateCustomerPrices') AND type IN ( N'P', N'PC' ) )
DROP PROCEDURE _as_AddUpdateCustomerPrices
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ===================================================================================================================
-- Author:           Alexander Toufexis
-- Create date: 25/08/2015 (original: 22/03/2010),
-- Update date: 19/11/2015 (added: supports customer groups now, as well as inclusive/excl support)
-- Description:      This SP adds and updates customer specific prices in the volume discount module.
-- ===================================================================================================================
CREATE PROCEDURE _as_AddUpdateCustomerPrices
       -- Add the parameters for the stored procedure here
@CustomerCode varchar(20),
@GroupCode varchar(20),
@StockCode varchar(255),
@StockGroupCode varchar(255),
@Price float,
@DiscountPerc float,
@StartDate datetime,
@EndDate datetime,
@InclExcl char(1) = 'E'
AS
BEGIN
    --USAGE:
       --on Customer:
       --EXEC _as_AddUpdateCustomerPrices 'CASH', '', 'test', 21, '2015-01-01', '2020-12-31', 'E'
       --on group:
       --EXEC _as_AddUpdateCustomerPrices '', 'GROUP', 'test', 21, '2015-01-01', '2020-12-31', 'E'
       --inclusive vs exclusive: 'I' or 'E'
 
 
       -- SET NOCOUNT ON added to prevent extra result sets from
       -- interfering with SELECT statements.
       SET NOCOUNT ON;
 
--TO SET IN CODE: @AccountCode, @StockCode, @Price
 
DECLARE @CustID int
DECLARE @GroupID int
DECLARE @StockID int
DECLARE @StockGroupID int
DECLARE @VDID int
DECLARE @VDLnID int
DECLARE @AccountCode varchar(20)
 
SELECT @AccountCode = @CustomerCode
--SELECT * FROM _etblVDAR
 
--DEFINE CustomerID and Group ID.
IF (@CustomerCode <> '')
       BEGIN
       SELECT @CustID = (SELECT DCLink From Client WHERE Account = @AccountCode)
       SELECT @GroupID = 0
       END
ELSE IF (@GroupCode <> '')
       BEGIN
              SELECT @CustID = 0
              SELECT @GroupID = (SELECT IdCliClass FROM CliClass WHERE Code = @GroupCode)
       END
       --END of CustomerID and groupID selection
 
--DEFINE Stock ID and Stock Group ID.
IF (@StockCode <> '')
       BEGIN
       SELECT @StockID = (SELECT StockLink From StkItem WHERE Code = @StockCode)
       SELECT @StockGroupID = 0
       END
ELSE IF (@StockGroupCode <> '')
       BEGIN
              SELECT @StockID = 0
              SELECT @StockGroupID = (SELECT idGrpTbl FROM grptbl WHERE StGroup = @StockGroupCode)
              --select * from grptbl
       END
       --END of Stock ID and groupID selection
 
 
--EARLY OUT CHECK:
IF (COALESCE(@CustID,0) = 0 AND COALESCE(@GroupID,0) = 0)
       BEGIN
              RaisError('Customer %s or Group %s not found!',16,2,@CustomerCode,@GroupCode)
              RETURN -1
       END
IF (COALESCE(@StockID,0) = 0 AND COALESCE(@StockGroupID,0) = 0)
       BEGIN
              RaisError('Stock %s or Item Group %s not found!',16,2,@StockCode,@StockGroupCode)
              RETURN -1
       END
--END OF CHECK
 
--Percentage vs Set price:
DECLARE @bUsePrice bit, @DiscountedPrice float
IF (@Price = 0 AND COALESCE(@DiscountPerc,0) <> 0)
BEGIN
       SELECT @bUsePrice = 0, @InclExcl = '', @DiscountedPrice = @DiscountPerc
END
ELSE
BEGIN
       SELECT @bUsePrice = 1, @DiscountedPrice = @Price
END
--end of Percentage vs Set price:
 
       --CHECK IF DISCOUNT CONTRACT EXISTS FOR THE CUSTOMER. IF NOT, CREATE IT.
       IF NOT EXISTS (SELECT * FROM _etblVDAR WHERE COALESCE(iARAPID,0) = @CustID AND COALESCE(iGroupID,0) = @GroupID AND bIsTemplate = 0 AND bARAPAll = 0)
       BEGIN
       INSERT INTO [_etblVDAR] ([iARAPID],[iGroupID],[iCurrencyID],[cContractName],[bOnHold],[tDescription],[bARAPAll],[bIsTemplate])
              VALUES (@CustID,@GroupID,0,'',0,NULL,0,0)
       END
 
       --delete from [_etblVDLnAR]
       --delete from _etblVDLnLvlAR
 
       --GET ID OF DISCOUNT CONTRACT OF CUSTOMER
       SELECT @VDID = (SELECT IDVD FROM _etblVDAR WHERE COALESCE(iARAPID,0) = @CustID AND COALESCE(iGroupID,0) = @GroupID AND bIsTemplate = 0 AND bARAPAll = 0)
 
       --IF LINES DON'T EXIST FOR THE ITEM, CREATE THEM, OTHERWISE UPDATE THEM.
       IF NOT EXISTS (SELECT * FROM _etblVDLnAR WHERE iVDID = @VDID AND iStockID = @StockID AND iSTGroupID = @StockGroupID)
       BEGIN
         INSERT INTO [_etblVDLnAR] ([iVDID],[iStockID] ,[iStGroupID] ,[iCurrencyID] ,[dEffDate] ,[dExpDate] ,[bUseStockPrc] ,[cEnterInclExcl] ,[bIncremental] ,[bStockAll])
              VALUES (@VDID,@StockID,@StockGroupID,0,@StartDate,@EndDate,@bUsePrice,@InclExcl,0,0)
       END
       ELSE
        BEGIN
         --UPDATE /* select * from [_etblVDLnAR] */
              UPDATE [_etblVDLnAR] SET
                     dEffDate = @StartDate
                     ,dExpDate = @EndDate
                     ,bUseStockPrc = @bUsePrice
                     ,[cEnterInclExcl] = @InclExcl
              WHERE
                     iVDID = @VDID
                     AND
                     iStockID = @StockID AND iSTGroupID = @StockGroupID
       END
       --GET LINE ID OF THE VOLUME DISCOUNT CONTRACT LINE
       SELECT @VDLnID = (SELECT IDVDLn FROM _etblVDLnAR WHERE iVDID = @VDID and iStockID = @StockID AND iSTGroupID = @StockGroupID)
 
       --UPDATE FIRST LEVEL OF VD LINE WITH THE ENTERED PRICE
       IF NOT EXISTS (SELECT * FROM _etblVDLnLvlAR WHERE iVDLnID = @VDLnID AND iLevel = 1)
       BEGIN
         --INSERT
         INSERT INTO [_etblVDLnLvlAR] ([iVDLnID] ,[iLevel] ,[fQuantity] ,[fPriceDisc])
              VALUES
                        (@VDLnID, 1,1,@DiscountedPrice)
       END
       ELSE
       BEGIN
         -- UPDATE
         UPDATE [_etblVDLnLvlAR] SET
              fPriceDisc = @Price
         WHERE
              iVDLnID = @VDLnID
              AND
              iLevel = 1
       END
 
END
GO


SQL - Import customer prices on volume discount contracts

-----------------------------------------------------------
----------DELETE PROCS IF EXIST:
-----------------------------------------------------------
IF EXISTS ( SELECT  * FROM  sys.objects WHERE   object_id = OBJECT_ID(N'_as_AddUpdateCustomerPrices') AND type IN ( N'P', N'PC' ) ) 
DROP PROCEDURE _as_AddUpdateCustomerPrices
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ===================================================================================================================
-- Author:		Alexander Toufexis
-- Create date: 25/08/2015 (original: 22/03/2010), 
-- Update date: 19/11/2015 (added: supports customer groups now, as well as inclusive/excl support)
-- Description:	This SP adds and updates customer specific prices in the volume discount module.
-- ===================================================================================================================
CREATE PROCEDURE _as_AddUpdateCustomerPrices
	-- Add the parameters for the stored procedure here
 @CustomerCode varchar(20),
 @GroupCode varchar(20),
 @StockCode varchar(255),
 @Price float,
 @StartDate datetime,
 @EndDate datetime,
 @InclExcl char(1) = 'E'
AS
BEGIN
    --USAGE:
	--on Customer:
	--EXEC _as_AddUpdateCustomerPrices 'CASH', '', 'test', 21, '2015-01-01', '2020-12-31', 'E'
	--on group:
	--EXEC _as_AddUpdateCustomerPrices '', 'GROUP', 'test', 21, '2015-01-01', '2020-12-31', 'E'
	--inclusive vs exclusive: 'I' or 'E'


	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

--TO SET IN CODE: @AccountCode, @StockCode, @Price

DECLARE @CustID int
DECLARE @GroupID int
DECLARE @StockID int
DECLARE @VDID int
DECLARE @VDLnID int
DECLARE @AccountCode varchar(20)

SELECT @AccountCode = @CustomerCode
--SELECT * FROM _etblVDAR

--DEFINE CustomerID and Group ID.
IF (@CustomerCode <> '')
	BEGIN
	SELECT @CustID = (SELECT DCLink From Client WHERE Account = @AccountCode)
	SELECT @GroupID = 0
	END
ELSE IF (@GroupCode <> '')
	BEGIN
		SELECT @CustID = 0
		SELECT @GroupID = (SELECT IdCliClass FROM CliClass WHERE Code = @GroupCode)
	END
	--END of CustomerID and groupID selection

--EARLY OUT CHECK:
IF (COALESCE(@CustID,0) = 0 AND COALESCE(@GroupID,0) = 0) 
	BEGIN
		RaisError('Customer %s or Group %s not found!',16,2,@CustomerCode,@GroupCode)
		RETURN -1
	END
--END OF CHECK

	SELECT @StockID = (SELECT StockLink From StkItem WHERE Code = @StockCode)

	--CHECK IF DISCOUNT CONTRACT EXISTS FOR THE CUSTOMER. IF NOT, CREATE IT.
	IF NOT EXISTS (SELECT * FROM _etblVDAR WHERE COALESCE(iARAPID,0) = @CustID AND COALESCE(iGroupID,0) = @GroupID AND bIsTemplate = 0 AND bARAPAll = 0) 
	BEGIN
	 INSERT INTO [_etblVDAR] ([iARAPID],[iGroupID],[iCurrencyID],[cContractName],[bOnHold],[tDescription],[bARAPAll],[bIsTemplate])
		VALUES (@CustID,@GroupID,0,'',0,NULL,0,0)
	END

	--GET ID OF DISCOUNT CONTRACT OF CUSTOMER
	SELECT @VDID = (SELECT IDVD FROM _etblVDAR WHERE COALESCE(iARAPID,0) = @CustID AND COALESCE(iGroupID,0) = @GroupID AND bIsTemplate = 0 AND bARAPAll = 0)

	--IF LINES DON'T EXIST FOR THE ITEM, CREATE THEM, OTHERWISE UPDATE THEM.
	IF NOT EXISTS (SELECT * FROM _etblVDLnAR WHERE iVDID = @VDID AND iStockID = @StockID)
	 BEGIN
	  INSERT INTO [_etblVDLnAR] ([iVDID],[iStockID] ,[iStGroupID] ,[iCurrencyID] ,[dEffDate] ,[dExpDate] ,[bUseStockPrc] ,[cEnterInclExcl] ,[bIncremental] ,[bStockAll])
		VALUES (@VDID,@StockID,0,0,@StartDate,@EndDate,1,@InclExcl,0,0)
	 END
	ELSE 
	 BEGIN
	  --UPDATE
		UPDATE [_etblVDLnAR] SET
			dEffDate = @StartDate
			,dExpDate = @EndDate
			,[cEnterInclExcl] = @InclExcl
		WHERE
			iVDID = @VDID
			AND
			iStockID = @StockID
	 END
	--GET LINE ID OF THE VOLUME DISCOUNT CONTRACT LINE
	SELECT @VDLnID = (SELECT IDVDLn FROM _etblVDLnAR WHERE iVDID = @VDID and iStockID = @StockID)

	--UPDATE FIRST LEVEL OF VD LINE WITH THE ENTERED PRICE
	IF NOT EXISTS (SELECT * FROM _etblVDLnLvlAR WHERE iVDLnID = @VDLnID AND iLevel = 1)
	 BEGIN
	  --INSERT
	  INSERT INTO [_etblVDLnLvlAR] ([iVDLnID] ,[iLevel] ,[fQuantity] ,[fPriceDisc])
		 VALUES
			   (@VDLnID, 1,1,@Price)
	 END
	ELSE
	 BEGIN
	  -- UPDATE
	  UPDATE [_etblVDLnLvlAR] SET
		fPriceDisc = @Price
	  WHERE
		iVDLnID = @VDLnID
		AND
		iLevel = 1
	 END

END
GO