UFN_BACSPROCESS_GETTRANSACTIONCODE

Returns the transaction code given a batch revenue ID.

Return

Return Type
nvarchar(2)

Parameters

Parameter Parameter Type Mode Description
@BATCHREVENUEID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_BACSPROCESS_GETTRANSACTIONCODE(@BATCHREVENUEID uniqueidentifier)
            returns nvarchar(2)
            with execute as caller
            as begin
                declare @SOURCEREVENUEID uniqueidentifier;
                select @SOURCEREVENUEID = BATCHREVENUEAPPLICATION.REVENUEID from dbo.BATCHREVENUEAPPLICATION
                    inner join dbo.BATCHREVENUE on BATCHREVENUE.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEID
                    where BATCHREVENUE.ID = @BATCHREVENUEID;


                if @SOURCEREVENUEID is null 
                begin
                  declare @APPINFO as nvarchar(60);
                  set @APPINFO = (select APPLICATIONINFO from dbo.BATCHREVENUE where ID = @BATCHREVENUEID);
                  set @SOURCEREVENUEID = (select SINGLEAPPLICATIONID from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@APPINFO));
                end


                declare @TRANSACTIONTYPECODE tinyint = (select TRANSACTIONTYPECODE from dbo.REVENUE where ID = @SOURCEREVENUEID);
                declare @ACTIVITYCOUNT integer;



                if @TRANSACTIONTYPECODE = 2 
                begin
                select @ACTIVITYCOUNT = COUNT(*) from dbo.RECURRINGGIFTACTIVITY
                    inner join dbo.REVENUE on REVENUE.ID = RECURRINGGIFTACTIVITY.SOURCEREVENUEID
                    where REVENUE.ID = @SOURCEREVENUEID;
                end
                else
                begin
                  select @ACTIVITYCOUNT = COUNT(*) from dbo.INSTALLMENT
                    inner join dbo.INSTALLMENTPAYMENT on INSTALLMENT.ID = INSTALLMENTPAYMENT.INSTALLMENTID
                        where INSTALLMENT.REVENUEID = @SOURCEREVENUEID;
                end


                declare @ENDDATE datetime;
                declare @THISTRANSACTIONDATE datetime;
                declare @FREQUENCYCODE tinyint;
                declare @NUMINSTALLMENTS int;
                select 
                    @ENDDATE = REVENUESCHEDULE.ENDDATE, 
                    @THISTRANSACTIONDATE = REVENUESCHEDULE.NEXTTRANSACTIONDATE, 
                    @FREQUENCYCODE = REVENUESCHEDULE.FREQUENCYCODE,
                  @NUMINSTALLMENTS = REVENUESCHEDULE.NUMBEROFINSTALLMENTS
                from REVENUESCHEDULE where REVENUESCHEDULE.ID = @SOURCEREVENUEID;

                if @FREQUENCYCODE = 5
                begin
                    return N'19';
                end
                else
                    begin
                    declare @NEXTTRANSACTIONDATE datetime;
                    select @NEXTTRANSACTIONDATE = dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE(@FREQUENCYCODE, @THISTRANSACTIONDATE);

                    if @ACTIVITYCOUNT = 0
                    begin
                        return N'01';
                    end
                    else if @TRANSACTIONTYPECODE = 2 
                    begin
                        if @ENDDATE < @NEXTTRANSACTIONDATE
                        begin
                            return N'19';
                        end
                    end
                    else if (@NUMINSTALLMENTS - @ACTIVITYCOUNT) = 1
                    begin
                        return N'19';
                    end
                end
                return N'17';
            end