USP_RECEIPTINGPROCESSSTATUS_DELETE

Executes the "Receipting Process Status: Delete" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the ID of the record being deleted.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the delete.

Definition

Copy


                    CREATE procedure dbo.USP_RECEIPTINGPROCESSSTATUS_DELETE
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier
                    )
                    as
                        set nocount on;

                        if exists (select ID from dbo.BUSINESSPROCESSSTATUS    where ID = @ID and STATUSCODE = 1)
                            raiserror('Business process is still running',13,1);    

                        declare @CURRENTDATE datetime;
                        set @CURRENTDATE = getdate();

                        if (coalesce((select top 1 RERECEIPTPAYMENTS from dbo.RECEIPTPREFERENCEINFO), 1)) = 1
                            and exists (select ID from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null)
                        begin
                            -- If we are deleting the status for pending revenue, those revenue receipt records will also be deleted.

                            -- Therefore, if we are deleting the most recent status for the receipt records, we need to mark 

                            -- the NEEDSRERECEIPT flag on those records so they will be picked up in the next run.

                            declare CUR_REVENUE cursor local fast_forward for
                                select REVENUEID,DATEADDED from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID;

                            declare @REVENUEID uniqueidentifier;
                            declare @DATERECEIPTADDED datetime;
                            open CUR_REVENUE

                            fetch next from CUR_REVENUE into @REVENUEID,@DATERECEIPTADDED
                            while @@FETCH_STATUS = 0
                            begin

                                if not exists (select ID from dbo.REVENUERECEIPT where REVENUEID = @REVENUEID and DATEADDED > @DATERECEIPTADDED)
                                    and (select count(ID) from dbo.REVENUERECEIPT where REVENUEID = @REVENUEID) > 1
                    /* CMC
                    update dbo.REVENUE_EXT
                                        set 
                                            REVENUE_EXT.NEEDSRERECEIPT = 1
                                        from 
                                            dbo.REVENUE_EXT
                                        where 
                                            REVENUE_EXT.ID = @REVENUEID
                                            and REVENUE_EXT.DONOTRECEIPT = 0;
                                    */
                  update dbo.REVENUE
                                        set 
                                            REVENUE.NEEDSRERECEIPT = 1,
                                            REVENUE.CHANGEDBYID = @CHANGEAGENTID
                                            REVENUE.DATECHANGED = @CURRENTDATE 
                                        from 
                                            dbo.REVENUE
                                        where 
                                            REVENUE.ID = @REVENUEID
                                            and REVENUE.DONOTRECEIPT = 0;


                                fetch next from CUR_REVENUE into @REVENUEID,@DATERECEIPTADDED
                            end

                            close CUR_REVENUE;
                            deallocate CUR_REVENUE;
                        end              

                        update 
                            dbo.REVENUERECEIPT
                        set 
                            ORIGINALREVENUERECEIPTID = null,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where
                            ORIGINALREVENUERECEIPTID in (select RR.ID from dbo.REVENUERECEIPT RR where RR.RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null);

                        update 
                            dbo.REVENUERECEIPT
                        set 
                            PREVIOUSREVENUERECEIPTID = null,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where
                            PREVIOUSREVENUERECEIPTID in (select RR.ID from dbo.REVENUERECEIPT RR where RR.RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null);

                        -- if records have not been marked Receipted for this run, delete the records from the REVENUERECEIPT table

                        -- so they will be picked up in a subsequent run


                        -- Reset the next available receipt number first


                        declare @NEXTNUMBER int;
                        declare @RECEIPTSTACKID uniqueidentifier;
                        declare @RECEIPTPROCESSDATE datetime;
                        select @NEXTNUMBER = MIN(RECEIPTNUMBER), @RECEIPTSTACKID = RECEIPTSTACKINFOID, @RECEIPTPROCESSDATE = RECEIPTPROCESSDATE
                        from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null
                        group by RECEIPTSTACKINFOID,RECEIPTPROCESSDATE;
                        if not exists (select ID from REVENUERECEIPT where @RECEIPTSTACKID = RECEIPTSTACKINFOID and RECEIPTPROCESSDATE > @RECEIPTPROCESSDATE and RECEIPTINGPROCESSSTATUSID <> @ID)
                            exec dbo.USP_REVENUE_SETNEXTRECEIPTNUMBER @RECEIPTSTACKID,@NEXTNUMBER

                        --Cache CONTEXT INFO

                        declare @contextCache varbinary(128);
                        set @contextCache = CONTEXT_INFO();

                        if not @CHANGEAGENTID is null
                            set CONTEXT_INFO @CHANGEAGENTID;

                        delete from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null;

                        --Restore CONTEXT_INFO

                        if not @contextCache is null
                            set CONTEXT_INFO @contextCache;

                        exec dbo.USP_BUSINESSPROCESSSTATUS_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID
                        return 0;