Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

Find new and latest version here: https://gitlab.asamco.com/Asamco/sql-scripts/-/blob/master/_as_AddUpdateVolumeDiscounts/_as_AddUpdateVolumeDiscounts.sql

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

Code Block
languagesql
-----------------------------------------------------------
----------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)
-- Update date: 15/08/2019 : fixed discount percentage update.
-- Description:      This SP adds and updates customer specific prices in the volume discount module.
-- ===================================================================================================================
CREATE PROCEDURE [dbo].[_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)
			  PRINT 'VD contract created.'
       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)
			  PRINT 'INSERTED for customer ' + COALESCE(@CustomerCode,'') + ' and stock code: ' + COALESCE(@StockCode,'') + ' or group: ' + COALESCE(@StockGroupCode,'') 
       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
			PRINT 'updated [_etblVDLnAR] for customer ' + COALESCE(@CustomerCode,'') + ' and stock code: ' + COALESCE(@StockCode,'') + ' or group: ' + COALESCE(@StockGroupCode,'') + ' VDID: ' + CAST(@VDID as varchar(100))
       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)
						PRINT 'inserted [_etblVDLnLvlAR] for customer ' + COALESCE(@CustomerCode,'') + ' and stock code: ' + COALESCE(@StockCode,'') + ' or group: ' + COALESCE(@StockGroupCode,'') + ' VDID: ' + CAST(@VDID as varchar(100))  + ' iVDLnID: ' + CAST( @VDLnID as varchar(100)) 
       END
       ELSE
       BEGIN
         -- UPDATE
         UPDATE [_etblVDLnLvlAR] SET
              fPriceDisc = @Price@DiscountedPrice
         WHERE
              iVDLnID = @VDLnID
              AND
              iLevel = 1

			      END
 PRINT 'Readyinserted [_etblVDLnLvlAR] for customer ' + COALESCE(@CustomerCode,'') + ' and stock code: ' + COALESCE(@StockCode,'') + ' or group: ' + COALESCE(@StockGroupCode,'') END
GO+ ' VDID: ' + CAST(@VDID as varchar(100))  + ' iVDLnID: ' + CAST( @VDLnID as varchar(100)) 
       END

END



SQL - Import customer prices on volume discount contracts

...