USP_GLOBALCHANGE_BUSINESSPROCESSSTATUSDELETE

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN
@ASOF datetime IN
@NUMBERADDED int INOUT
@NUMBEREDITED int INOUT
@NUMBERDELETED int INOUT
@SELECTIONID uniqueidentifier IN
@DATEPART tinyint IN
@DATEINTERVAL int IN
@NUMBERTOKEEP int IN

Definition

Copy


    CREATE procedure [USP_GLOBALCHANGE_BUSINESSPROCESSSTATUSDELETE]
    (
     @CHANGEAGENTID uniqueidentifier = null,
     @ASOF as datetime = null,
     @NUMBERADDED integer = 0 output,
     @NUMBEREDITED integer = 0 output,
     @NUMBERDELETED integer = 0 output,
     @SELECTIONID uniqueidentifier = null,
     @DATEPART tinyint = 3,
     @DATEINTERVAL integer = 1,
     @NUMBERTOKEEP integer = 0 -- number to keep, if set to a non-zero value, trumps date parameters

    )
    with execute as owner
    as begin
    set nocount on;

    declare @CUTOFF datetime;
    declare @SQL nvarchar(max); 
    declare @FILTERDATE datetime;
    declare @PREVIOUSFILTERDATE datetime;
    declare @MAXDATE datetime;
    declare @STATUSID uniqueidentifier;
    declare @SEGMENTATIONID uniqueidentifier; 
    declare @SEGMENTATIONEXCLUSIONID uniqueidentifier;   
    declare @STEWARDSHIPPACKAGEID uniqueidentifier;

    set @NUMBERADDED = 0;
    set @NUMBEREDITED = 0;
    set @NUMBERDELETED = 0

    begin try
        if isnull(@NUMBERTOKEEP, 0) < 0
            raiserror('BBERR_INVALIDNUMBERTOKEEP', 13, 1);

        if isnull(@DATEINTERVAL, 0) < 0
            raiserror('BBERR_INVALIDDATEINTERVAL', 13, 1);

        if isnull(@NUMBERTOKEEP, 0) = 0 
        begin
            select @CUTOFF = dbo.[UFN_PURGEGLOBALCHANGE_RESOLVEDATEFILTER](@DATEPART, @DATEINTERVAL, getdate());

            if @CUTOFF is null
                raiserror('BBERR_COULDNOTRESOLVEINTERVAL', 13, 1);
        end
    end try
    begin catch
        exec dbo.[USP_RAISE_ERROR];
        return 1;
    end catch

    begin try
        create table #STATUSES ([BUSINESSPROCESSSTATUSID] uniqueidentifier, [STATUSDATE] datetime);

        if @SELECTIONID is null
            if @NUMBERTOKEEP > 0 begin

                 insert into #STATUSES
                    select [BUSINESSPROCESSSTATUSID], [STATUSDATE] from 
                        (select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], row_number() over(order by [ENDEDON] desc) as [ROWNUMBER], [STARTEDON] as [STATUSDATE] 
                        from dbo.[BUSINESSPROCESSSTATUS] 
                        where ENDEDON is not null) [STATUS] 
                    where [ROWNUMBER] > @NUMBERTOKEEP;
            end
            else begin
                 insert into #STATUSES
                    select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], [STARTEDON] as [STATUSDATE] 
                    from dbo.[BUSINESSPROCESSSTATUS] 
                    where [BUSINESSPROCESSSTATUS].[ENDEDON] < @CUTOFF
        end
        else 
            if @NUMBERTOKEEP > 0 begin
                 insert into #STATUSES
                    select [BUSINESSPROCESSSTATUSID], [STATUSDATE] from 
                        (select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], row_number() over(order by [ENDEDON] desc) as [ROWNUMBER], [STARTEDON] as [STATUSDATE] 
                        from dbo.[BUSINESSPROCESSSTATUS] 
                        where ENDEDON is not null and [BUSINESSPROCESSSTATUS].[ID] in 
                        (select [ID] from dbo.[UFN_IDSETREADER_GETRESULTS_GUID](@SELECTIONID))) [STATUS] 
                    where [ROWNUMBER] > @NUMBERTOKEEP;
            end
            else begin
                insert into #STATUSES
                    select [BUSINESSPROCESSSTATUS].[ID] as [BUSINESSPROCESSSTATUSID], [STARTEDON] as [STATUSDATE] 
                    from dbo.[BUSINESSPROCESSSTATUS]
                    where [BUSINESSPROCESSSTATUS].[ID] in 
                    (select [ID] from dbo.[UFN_IDSETREADER_GETRESULTS_GUID](@SELECTIONID)) 
                    and ENDEDON is not null 
                    and [BUSINESSPROCESSSTATUS].[ENDEDON] < @CUTOFF;
            end

        -- Remove business processes from temp table for "Receipting Process" business process which are not allowed to delete from UI. The receipt process with Receipt date  are not allowed to delete from UI

        delete #STATUSES
        from dbo.[REVENUERECEIPT] 
        inner join #STATUSES on RECEIPTINGPROCESSSTATUSID = [BUSINESSPROCESSSTATUSID] and RECEIPTDATE is not null;

        -- Delete dependent table for "Receipting Process" business process

        -- ReceiptingProcessStatusDelete.RecordOperation.xml

        declare RECEIPTSTATUS cursor local fast_forward for
            select distinct [BUSINESSPROCESSSTATUSID]
            from dbo.[REVENUERECEIPT]
            inner join #STATUSES on RECEIPTINGPROCESSSTATUSID = BUSINESSPROCESSSTATUSID;

        open RECEIPTSTATUS;
        fetch next from RECEIPTSTATUS into @STATUSID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_RECEIPTINGPROCESSSTATUS_DELETE @STATUSID, @CHANGEAGENTID;
            fetch next from RECEIPTSTATUS into @STATUSID;
        end

        close RECEIPTSTATUS;
        deallocate RECEIPTSTATUS;

        -- Delete dependent table for "Remove Members Process" business process

        -- SegmentationExclusionDelete.RecordOperation.xml

        declare SEGMENTPROCESS cursor local fast_forward for
            select SEGMENTATIONID, ID
            from dbo.[MKTSEGMENTATIONEXCLUSION]
            inner join #STATUSES on STATUSID = [BUSINESSPROCESSSTATUSID];

        open SEGMENTPROCESS;
        fetch next from SEGMENTPROCESS into @SEGMENTATIONID, @SEGMENTATIONEXCLUSIONID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_MKTSEGMENTATIONACTIVATE_MERGECONSTITUENTS @SEGMENTATIONID, @SEGMENTATIONEXCLUSIONID;
            exec dbo.USP_MKTSEGMENTATIONEXCLUSION_ROLLBACK @SEGMENTATIONEXCLUSIONID, @CHANGEAGENTID;
            fetch next from SEGMENTPROCESS into @SEGMENTATIONID, @SEGMENTATIONEXCLUSIONID;
        end

        close SEGMENTPROCESS;
        deallocate SEGMENTPROCESS;

        -- Delete dependent table for "Acknowledgement Process" business process

        -- AcknowledgementProcessStatusDelete.RecordOperation.xml

        declare ACKNOWLEDGMENTPROCESS cursor local fast_forward for
            select distinct [BUSINESSPROCESSSTATUSID]
            from dbo.[REVENUELETTER]
            inner join #STATUSES on ACKNOWLEDGEMENTPROCESSSTATUSID = BUSINESSPROCESSSTATUSID
            and ACKNOWLEDGEDATE is null;

        open ACKNOWLEDGMENTPROCESS;
        fetch next from ACKNOWLEDGMENTPROCESS into @STATUSID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_ACKNOWLEDGEMENTPROCESSSTATUS_DELETE @STATUSID, @CHANGEAGENTID;
            fetch next from ACKNOWLEDGMENTPROCESS into @STATUSID;
        end

        close ACKNOWLEDGMENTPROCESS;
        deallocate ACKNOWLEDGMENTPROCESS;

        -- Delete dependent table for "Planned Gift Acknowledgement Process" business process

        -- PlannedGiftAcknowledgementProcessStatusDelete.RecordOperation.xml

        declare PLANNEDGIFTPROCESSS cursor local fast_forward for
            select distinct [BUSINESSPROCESSSTATUSID]
            from dbo.[PLANNEDGIFTLETTER]
            inner join #STATUSES on PLANNEDGIFTACKNOWLEDGEMENTPROCESSSTATUSID = BUSINESSPROCESSSTATUSID
            and ACKNOWLEDGEDATE is null;

        open PLANNEDGIFTPROCESSS;
        fetch next from PLANNEDGIFTPROCESSS into @STATUSID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_PLANNEDGIFTACKNOWLEDGEMENTPROCESSSTATUS_DELETE @STATUSID, @CHANGEAGENTID;
            fetch next from PLANNEDGIFTPROCESSS into @STATUSID;
        end

        close PLANNEDGIFTPROCESSS;
        deallocate PLANNEDGIFTPROCESSS;


        -- Delete dependent table for "Generate Reminders Process" business process

        -- PledgeReminderProcessStatusDelete.RecordOperation.xml

        declare PLEDGEREMINDERPROCESSS cursor local fast_forward for
            select distinct [BUSINESSPROCESSSTATUSID]
            from dbo.[PLEDGEREMINDERSENT]
            inner join #STATUSES on PLEDGEREMINDERPROCESSSTATUSID = BUSINESSPROCESSSTATUSID
            and SENTDATE is null;

        open PLEDGEREMINDERPROCESSS;
        fetch next from PLEDGEREMINDERPROCESSS into @STATUSID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_PLEDGEREMINDERPROCESSSTATUS_DELETE @STATUSID, @CHANGEAGENTID;
            fetch next from PLEDGEREMINDERPROCESSS into @STATUSID;
        end

        close PLEDGEREMINDERPROCESSS;
        deallocate PLEDGEREMINDERPROCESSS;

        -- Delete dependent table for "R68 Process" business process

        -- R68ProcessStatusDelete.RecordOperation.xml

        declare R68PROCESSS cursor local fast_forward for
            select distinct [BUSINESSPROCESSSTATUSID]
            from dbo.[R68PROCESSCOMMITPARAMETERS]
            inner join #STATUSES on ID = BUSINESSPROCESSSTATUSID;

        open R68PROCESSS;
        fetch next from R68PROCESSS into @STATUSID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_R68PROCESSSTATUS_DELETE @STATUSID, @CHANGEAGENTID;
            fetch next from R68PROCESSS into @STATUSID;
        end

        close R68PROCESSS;
        deallocate R68PROCESSS;

        -- Delete dependent table for "Tribute Acknowledgement Process" business process

        -- TributeAcknowledgementProcessStatusDelete.RecordOperation.xml

        declare TRIBUTEACKNOWLEDGEMENTPROCESS cursor local fast_forward for
            select distinct [BUSINESSPROCESSSTATUSID]
            from dbo.[TRIBUTEACKNOWLEDGEMENTPROCESSSTATUS]
            inner join #STATUSES on ID = [BUSINESSPROCESSSTATUSID];

        open TRIBUTEACKNOWLEDGEMENTPROCESS;
        fetch next from TRIBUTEACKNOWLEDGEMENTPROCESS into @STATUSID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_TRIBUTEACKNOWLEDGEMENTPROCESSSTATUS_DELETE @STATUSID, @CHANGEAGENTID;
            fetch next from TRIBUTEACKNOWLEDGEMENTPROCESS into @STATUSID;
        end

        close TRIBUTEACKNOWLEDGEMENTPROCESS;
        deallocate TRIBUTEACKNOWLEDGEMENTPROCESS;

        -- Delete dependent table for "Stewardship Package Process" business process

        -- StewardshipPackageProcessStatusDelete.RecordOperation.xml

        declare STEWARDSHIPPACKAGEPROCESSS cursor local fast_forward for
            select ID
            from dbo.[STEWARDSHIPPACKAGEPROCESSHISTORY]
            inner join #STATUSES STATUSES on BUSINESSPROCESSSTATUSGUID = STATUSES.BUSINESSPROCESSSTATUSID;

        open STEWARDSHIPPACKAGEPROCESSS;
        fetch next from STEWARDSHIPPACKAGEPROCESSS into @STEWARDSHIPPACKAGEID;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_STEWARDSHIPPACKAGEPROCESSSTATUS_DELETE @STEWARDSHIPPACKAGEID, @CHANGEAGENTID;
            fetch next from STEWARDSHIPPACKAGEPROCESSS into @STEWARDSHIPPACKAGEID;
        end

        close STEWARDSHIPPACKAGEPROCESSS;
        deallocate STEWARDSHIPPACKAGEPROCESSS;

        select @FILTERDATE = min([STATUSDATE]), @MAXDATE = max([STATUSDATE]) from #STATUSES;
        set @PREVIOUSFILTERDATE = @FILTERDATE;

        while (@FILTERDATE < @MAXDATE)
        begin
            set @FILTERDATE = dateadd(month, 1, @FILTERDATE);

            delete BUSINESSPROCESSSTATUS
            from BUSINESSPROCESSSTATUS
            join #STATUSES on ID = BUSINESSPROCESSSTATUSID
            where STATUSDATE <= @FILTERDATE and STATUSDATE >= @PREVIOUSFILTERDATE;

            set @PREVIOUSFILTERDATE = @FILTERDATE;
        end

        select @NUMBERDELETED = count([BUSINESSPROCESSSTATUSID]) from #STATUSES;
        drop table #STATUSES;
    end try
    begin catch
    -- Close and deallocate cursor if they are not closed and deallocated

        if cursor_status('local','RECEIPTSTATUS')>=-1
        begin
            close RECEIPTSTATUS;
            deallocate RECEIPTSTATUS;
        end

        if cursor_status('local','SEGMENTPROCESS')>=-1
        begin
            close SEGMENTPROCESS;
            deallocate SEGMENTPROCESS;
        end

        if cursor_status('local','ACKNOWLEDGMENTPROCESS')>=-1
        begin
            close ACKNOWLEDGMENTPROCESS;
            deallocate ACKNOWLEDGMENTPROCESS;
        end

        if cursor_status('local','PLANNEDGIFTPROCESSS')>=-1
        begin
            close PLANNEDGIFTPROCESSS;
            deallocate PLANNEDGIFTPROCESSS;
        end

        if cursor_status('local','PLEDGEREMINDERPROCESSS')>=-1
        begin
            close PLEDGEREMINDERPROCESSS;
            deallocate PLEDGEREMINDERPROCESSS;
        end

     if cursor_status('local','R68PROCESSS')>=-1
        begin
            close R68PROCESSS;
            deallocate R68PROCESSS;
        end

        if cursor_status('local','TRIBUTEACKNOWLEDGEMENTPROCESS')>=-1
        begin
            close TRIBUTEACKNOWLEDGEMENTPROCESS;
            deallocate TRIBUTEACKNOWLEDGEMENTPROCESS;
        end

        if cursor_status('local','STEWARDSHIPPACKAGEPROCESSS')>=-1
        begin
            close STEWARDSHIPPACKAGEPROCESSS;
            deallocate STEWARDSHIPPACKAGEPROCESSS;
        end

        exec dbo.[USP_RAISE_ERROR];
        return 1;
    end catch

    return 0;
end