Skip to end of metadata
Go to start of metadata
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Alexander Toufexis
-- Create date: 24/05/2019
-- Description: Copy prices from one pricelist, to another, if no price is already set in the 2nd pricelist.
-- =============================================
ALTER PROCEDURE [dbo].[_as_UpdateItemSegmentValue]
    -- Add the parameters for the stored procedure here
    @ItemCode as varchar(50) = NULL,
    @SimpleCode as varchar(50) = NULL,
    @StockLink bigint = 0,
    @SegmentName as varchar(50),
    @NewSegmentValue as varchar(50)
AS
BEGIN
 
/* USAGE:
    --Item code based:
  EXEC [_as_UpdateItemSegmentValue] '1001/FIN/IND/CEL/RET/BAG',NULL,NULL,'Customer Grouping','SPA'; --FIN/SPA/CEL/RET/BAG
  EXEC [_as_UpdateItemSegmentValue] 'FIN/SPA/CEL/RET/BAG',NULL,NULL,'Customer Grouping','IND'; --FIN/SPA/CEL/RET/BAG
  EXEC [_as_UpdateItemSegmentValue] NULL,NULL,328,'Customer Grouping','IND'; --FIN/SPA/CEL/RET/BAG
    --Simple Code based:
  EXEC [_as_UpdateItemSegmentValue] NULL,'1001',NULL,'Customer Grouping','IND';
 
  --should fail due to duplicate simple code: 20040
  EXEC [_as_UpdateItemSegmentValue] NULL,'20040',NULL,'Customer Grouping','IND';
 
  --check:
  select top 10 StockLink, Code, cSimpleCode, cExtDescription from _bvStockFull where StockLink = 328 -- Code = '1001/FIN/SPA/CEL/RET/BAG'
*/
 
 
/*DEBUG SELECTS:
 SELECT * FROM sys.tables order by name
select * from _etblInvSegType
select * from _etblInvSegValue
select top 10 * from StkItem
select top 10 * from _bvStockFull
SELECT * FROM sys.tables where name like '%seg%' order by name
*/
 
DECLARE @SegGroupID int
SELECT @SegGroupID = COALESCE((SELECT idInvSegType FROM _etblInvSegType T WHERE T.cDescription = @SegmentName),0)
 
--getting the right stock item:
 
--DECLARE @StockLink bigint
IF (COALESCE(@ItemCode,'') <> '')
BEGIN
    SELECT @StockLink = COALESCE((SELECT StockLink FROM StkItem WHERE Code = @ItemCode),0)
END
ELSE IF (COALESCE(@SimpleCode,'') <> '')
BEGIN
    IF EXISTS (select cSimpleCode, count(*) from _bvStockFull group by cSimpleCode having count(*) > 1)
        BEGIN
            RaisError('Simple code %s is not unique!',17,1, @SimpleCode)
            RETURN -1
        END
    ELSE
        BEGIN
            SELECT @StockLink = COALESCE((SELECT StockLink FROM StkItem WHERE cSimpleCode = @SimpleCode),0)
        END
END
 
 
--check if segment group exists. if not, early out with error.
IF (@SegGroupID = 0)
        BEGIN
            RaisError('Segment Group %s not found!',17,1, @SegmentName)
            RETURN -1
        END
IF (@StockLink = 0)
        BEGIN
            RaisError('Stock Code %s not found!',17,1, @ItemCode)
            RETURN -1
        END
 
        PRINT 'about to lookup seg value id'
        PRINT @SegGroupID;
DECLARE @SegValueID int

/*also handling blank values, to set to 0*/
IF (@NewSegmentValue = '')
 BEGIN
	PRINT 'Setting segment ID to 0 for a blank value';
	SELECT @SegValueID = 0
 END 
ELSE
BEGIN
SELECT @SegValueID = COALESCE((SELECT TOP 1 idInvSegValue FROM _etblInvSegValue WHERE cValue = @NewSegmentValue AND iInvSegGroupID = @SegGroupID),0)
--select * from _etblInvSegValue WHERE cValue = 'IND' AND iInvSegGroupID = 2
 
IF (@SegValueID = 0)
        BEGIN
            RaisError('New segment value %s not found!',17,1, @NewSegmentValue)
            RETURN -1
        END
END --IF (@NewSegmentValue = '')
 
PRINT 'about to update stkitem'
--all good, let's update:
UPDATE StkItem
    SET
        iInvSegValue1ID = CASE WHEN @SegGroupID = 1 THEN @SegValueID ELSE iInvSegValue1ID END
        ,iInvSegValue2ID = CASE WHEN @SegGroupID = 2 THEN @SegValueID ELSE iInvSegValue2ID END
        ,iInvSegValue3ID = CASE WHEN @SegGroupID = 3 THEN @SegValueID ELSE iInvSegValue3ID END
        ,iInvSegValue4ID = CASE WHEN @SegGroupID = 4 THEN @SegValueID ELSE iInvSegValue4ID END
        ,iInvSegValue5ID = CASE WHEN @SegGroupID = 5 THEN @SegValueID ELSE iInvSegValue5ID END
        ,iInvSegValue6ID = CASE WHEN @SegGroupID = 6 THEN @SegValueID ELSE iInvSegValue6ID END
        ,iInvSegValue7ID = CASE WHEN @SegGroupID = 7 THEN @SegValueID ELSE iInvSegValue7ID END
         
    WHERE StockLink = @StockLink
 
UPDATE _bvStockFull
    SET Code = cSimpleCode
            + CASE WHEN iInvSegValue1ID = 0 THEN '' ELSE '/' + cInvSegValue1Value END
            + CASE WHEN iInvSegValue2ID = 0 THEN '' ELSE '/' + cInvSegValue2Value END
            + CASE WHEN iInvSegValue3ID = 0 THEN '' ELSE '/' + cInvSegValue3Value END
            + CASE WHEN iInvSegValue4ID = 0 THEN '' ELSE '/' + cInvSegValue4Value END
            + CASE WHEN iInvSegValue5ID = 0 THEN '' ELSE '/' + cInvSegValue5Value END
            + CASE WHEN iInvSegValue6ID = 0 THEN '' ELSE '/' + cInvSegValue6Value END
            + CASE WHEN iInvSegValue7ID = 0 THEN '' ELSE '/' + cInvSegValue7Value END
        ,cExtDescription = Description_1
            + CASE WHEN iInvSegValue1ID = 0 THEN '' ELSE '/' + cInvSegValue1Desc END
            + CASE WHEN iInvSegValue2ID = 0 THEN '' ELSE '/' + cInvSegValue2Desc END
            + CASE WHEN iInvSegValue3ID = 0 THEN '' ELSE '/' + cInvSegValue3Desc END
            + CASE WHEN iInvSegValue4ID = 0 THEN '' ELSE '/' + cInvSegValue4Desc END
            + CASE WHEN iInvSegValue5ID = 0 THEN '' ELSE '/' + cInvSegValue5Desc END
            + CASE WHEN iInvSegValue6ID = 0 THEN '' ELSE '/' + cInvSegValue6Desc END
            + CASE WHEN iInvSegValue7ID = 0 THEN '' ELSE '/' + cInvSegValue7Desc END
    WHERE StockLink = @StockLink
 
 
 
 
 
END
  • No labels