UFN_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER

Gets the next automatically generated number for a batch numbering scheme.

Return

Return Type
nvarchar(100)

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER(
    @ID uniqueidentifier
)
returns nvarchar(100)
as
    begin

    declare @USERDEFINEDLABEL nvarchar(50);
    declare @LABELPLACECODE tinyint;
    declare @SEQUENCEPLACECODE tinyint;
    declare @DATEFORMAT nvarchar(10);
    declare @DATEFORMATPLACECODE tinyint;
    declare @PART1 nvarchar(100);
    declare @SEP1 nvarchar(1);
    declare @PART2 nvarchar(100);
    declare @SEP2 nvarchar(1);
    declare @PART3 nvarchar(100);
    declare @LEADINGZEROES int;
    declare @FORMATTEDNUMBER nvarchar(20);
    declare @NEXTBATCHNUMBER nvarchar(100);

    select
        @USERDEFINEDLABEL = USERDEFINEDLABEL,
        @LABELPLACECODE = (case INCLUDELABEL when 1 then LABELPLACECODE else 0 end),
        @FORMATTEDNUMBER = cast(ACTUALSEQUENCE as nvarchar),
        @SEQUENCEPLACECODE = SEQUENCEPLACECODE,
        @DATEFORMAT = DATEFORMAT,
        @DATEFORMATPLACECODE = (case INCLUDEDATEFORMAT when 1 then DATEFORMATPLACECODE else 0 end),
        @LEADINGZEROES = NUMBERFORMATCODE,
        @SEP1 = case when (INCLUDELABEL=1) or (INCLUDEDATEFORMAT=1) then (case (case 1 when SEQUENCEPLACECODE then SEQUENCESEPARATORCODE when DATEFORMATPLACECODE then DATESEPARATORCODE when LABELPLACECODE then LABELSEPARATORCODE else 0 end) when (1) then N' ' when (2) then N'-' when (3) then N'/' when (4) then N'.' when (5) then N',' when (6) then N'_' when (7) then N'*' when (8) then N':' else '' end) else '' end,
        @SEP2 = case when (INCLUDELABEL=1) AND (INCLUDEDATEFORMAT=1) then (case (case 2 when SEQUENCEPLACECODE then SEQUENCESEPARATORCODE when DATEFORMATPLACECODE then DATESEPARATORCODE when LABELPLACECODE then LABELSEPARATORCODE else 0 end) when (1) then N' ' when (2) then N'-' when (3) then N'/' when (4) then N'.' when (5) then N',' when (6) then N'_' when (7) then N'*' when (8) then N':' else '' end) else '' end
    from
        dbo.BATCHNUMBERINGSCHEME
    where
        ID = @ID;

    if @LEADINGZEROES >= len(@FORMATTEDNUMBER) set @FORMATTEDNUMBER = replicate('0',1+(@LEADINGZEROES-len(@FORMATTEDNUMBER)))+@FORMATTEDNUMBER;

    if @DATEFORMATPLACECODE > 0
    begin
        declare @today datetime;
        set @today = getdate();

        if charindex('YYYY', @DATEFORMAT) > 0
            set @DATEFORMAT = replace(@DATEFORMAT, 'YYYY', right('0000'+cast(year(@today) as nvarchar), 4));
        else if charindex('YY', @DATEFORMAT) > 0
            set @DATEFORMAT = replace(@DATEFORMAT, 'YY', right('0000'+cast(year(@today) as nvarchar), 2));

        if charindex('MM', @DATEFORMAT) > 0
            set @DATEFORMAT = replace(@DATEFORMAT, 'MM', right('0' + cast(month(@today) as nvarchar), 2));

        if charindex('DD', @DATEFORMAT) > 0
            set @DATEFORMAT = replace(@DATEFORMAT, 'DD', right('0' + cast(day(@today) as nvarchar), 2));

    end;   

    SELECT @PART1=case 1 when @SEQUENCEPLACECODE then @FORMATTEDNUMBER when @DATEFORMATPLACECODE then @DATEFORMAT when @LABELPLACECODE then @USERDEFINEDLABEL else '' end;
    SELECT @PART2=case 2 when @SEQUENCEPLACECODE then @FORMATTEDNUMBER when @DATEFORMATPLACECODE then @DATEFORMAT when @LABELPLACECODE then @USERDEFINEDLABEL else '' end;
    SELECT @PART3=case 3 when @SEQUENCEPLACECODE then @FORMATTEDNUMBER when @DATEFORMATPLACECODE then @DATEFORMAT when @LABELPLACECODE then @USERDEFINEDLABEL else '' end;

    set @NEXTBATCHNUMBER=left(@PART1+@SEP1+@PART2+@SEP2+@PART3,100);

    return @NEXTBATCHNUMBER;

    end