USP_DATAFORMTEMPLATE_EDITLOAD_RECURRINGGIFTSTATUS

The load procedure used by the edit dataform template "Recurring Gift Status Edit Form"

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@STATUSCODE tinyint INOUT Status
@TSLONG bigint INOUT Output parameter indicating the TSLONG value of the record being edited. This is used to manage multi-user concurrency issues when multiple users access the same record.
@REASONCODEID uniqueidentifier INOUT
@INSTALLMENTS xml INOUT
@RGFREQUENCYCODE tinyint INOUT
@RGENDDATE date INOUT
@SKIPPEDINSTALLMENTID uniqueidentifier INOUT

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITLOAD_RECURRINGGIFTSTATUS
                (
                    @ID uniqueidentifier,
                    @DATALOADED bit = 0 output,
                    @STATUSCODE tinyint = null output,
                    @TSLONG bigint = 0 output,
                    --@REASONCODEID is only needed on the save, but is required on editload due to platform constraints.

                    @REASONCODEID uniqueidentifier = null output,
                    @INSTALLMENTS xml = null output,
                    @RGFREQUENCYCODE tinyint = null output,
                    @RGENDDATE date = null output,
                    @SKIPPEDINSTALLMENTID uniqueidentifier = null output
                )

                as

                set nocount on;

                set @DATALOADED = 0;
                set @TSLONG = 0;

                select top 1  --ONLY EXPECTING ONE HERE

                    @DATALOADED = 1,
                    @STATUSCODE = REVENUESCHEDULE.STATUSCODE,
                    @TSLONG = REVENUE.TSLONG,
                    @RGENDDATE = REVENUESCHEDULE.ENDDATE,
                    @RGFREQUENCYCODE = REVENUESCHEDULE.FREQUENCYCODE
                from dbo.REVENUESCHEDULE
                inner join dbo.REVENUE
                    on REVENUESCHEDULE.ID = REVENUE.ID
                where REVENUE.ID = @ID;

                declare @CURRENTDATE date = getdate();

                if @STATUSCODE in(1,2,3)
                begin
                  -- Look for a skipped installment to determine whether:

                  -- a) Status can be set to Held if RG is Terminated or Canceled

                  -- b) Skipped installments will be undone if status is set to Active or Lapsed

                  select top 1 
                      @SKIPPEDINSTALLMENTID = I.ID
                  from dbo.RECURRINGGIFTINSTALLMENT I 
                  inner join dbo.RECURRINGGIFTINSTALLMENTWRITEOFF IW on IW.RECURRINGGIFTINSTALLMENTID = I.ID
                  inner join dbo.RECURRINGGIFTWRITEOFF W on W.ID = IW.WRITEOFFID
                  where I.REVENUEID = @ID
                  and W.TYPECODE = 1
                  and I.DATE >= cast(@CURRENTDATE as date)
                  order by I.DATE;
                end

                if @STATUSCODE <> 1
                begin
                  -- Look for a skippable installment to determine whether status can be set to Held or not.

                  declare @FIRSTSKIPDATE date;

                  select @FIRSTSKIPDATE = min(i.DATE)
                  from dbo.UFN_QUERY_RECURRINGGIFTACTIVITY(@ID,0,1) i
                  where i.HIDESKIP = 0;

                  if @FIRSTSKIPDATE is not null
                    set @INSTALLMENTS =
                     (
                     select top 2 isnull(ID,'00000000-0000-0000-0000-000000000000') as ID, DATE, 0 WRITEOFFAMOUNT, BALANCE, INSTALLMENTNUMBER NUMBER, ACTIVITY
                     from dbo.UFN_QUERY_RECURRINGGIFTACTIVITY (@ID, 0, 1)
                     where DATE <= @FIRSTSKIPDATE
                     order by SEQ desc
                        for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64);
                end;

                return 0;