USP_SPONSORSHIP_DELETE

Executes the "Sponsorship: 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_SPONSORSHIP_DELETE
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as begin
    -- Cannot delete a sponsorship if there are payments made against it

    if (select count(SPONSORSHIP.ID) 
        from dbo.SPONSORSHIP
        inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = SPONSORSHIP.REVENUESPLITID
        inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTACTIVITY.SOURCEREVENUEID = REVENUESPLIT.REVENUEID
        where SPONSORSHIP.ID = @ID
        and RECURRINGGIFTACTIVITY.TYPECODE = 0) > 0                     
    begin
        raiserror('There are payments made against this sponsorship. Delete those payments before deleting this sponsorship.', 13, 1);
        return 1;
    end        

     -- only do this if sponsorship has recurring additional gift

     if (select count(*) from dbo.SPONSORSHIPRECURRINGADDITIONALGIFT where SPONSORSHIPID = @ID) > 0
     begin
         declare @REVENUEPAIDCOUNT int;

         select @REVENUEPAIDCOUNT = count(*)
          from dbo.SPONSORSHIPRECURRINGADDITIONALGIFT SPRAG
          where SPRAG.SPONSORSHIPID = @ID 
          and exists(select 'x' 
                         from dbo.RECURRINGGIFTACTIVITY RGA
                         where SPRAG.REVENUEID = RGA.SOURCEREVENUEID
                         and RGA.TYPECODE = 0);

        if @REVENUEPAIDCOUNT > 0 
         begin
            declare @STR nvarchar(256);
            set @STR = 'There are ' +  convert(nvarchar(100),@REVENUEPAIDCOUNT) + ' sponsorship recurring additional gift with payments.  Delete those payments before deleting this sponsorship.';
            raiserror(@STR,13, 1);
            return 1;
         end
        else -- none have been paid

        begin
            declare @REVENUEIDTABLE table (REVENUEID uniqueidentifier);
            declare @REVID uniqueidentifier;

            insert into @REVENUEIDTABLE (REVENUEID)
            select REVENUEID 
              from dbo.SPONSORSHIPRECURRINGADDITIONALGIFT
             where SPONSORSHIPID = @ID;

             declare REVENUE_CURSOR cursor local fast_forward for
                    select REVENUEID
                    from @REVENUEIDTABLE;

              open REVENUE_CURSOR;
              fetch next from REVENUE_CURSOR into @REVID;

              while (@@FETCH_STATUS = 0)
              begin
                    exec dbo.USP_REVENUE_DELETE @REVID, @CHANGEAGENTID

                    fetch next from REVENUE_CURSOR into @REVID;
              end
              close REVENUE_CURSOR;
              deallocate REVENUE_CURSOR;        
        end
     end -- has sponsorship recurring gift


    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    declare @SPONSORSHIPOPPORTUNITYID uniqueidentifier; 
    declare @CONSTITUENTID uniqueidentifier;   
    declare @STARTDATE datetime;
    declare @ENDDATE datetime;
    declare @COMMITMENTID uniqueidentifier;
    declare @COMMITMENTSEQUENCE smallint;
    declare @REVENUEID uniqueidentifier;
    declare @REVENUECONSTITUENTID uniqueidentifier;
    declare @STATUSCODE tinyint;
    declare @CONSTITUENTSTAB table (CONSTITUENTID uniqueidentifier,
                                    SPONSORTYPECODE tinyint,
                                    STARTDATE date,
                                    ENDDATE date);

    select @SPONSORSHIPOPPORTUNITYID = SPONSORSHIP.SPONSORSHIPOPPORTUNITYID,  
           @CONSTITUENTID = SPONSORSHIP.CONSTITUENTID,
           @STARTDATE = SPONSORSHIP.STARTDATE,
           @ENDDATE = SPONSORSHIP.ENDDATE,
           @COMMITMENTID = SPONSORSHIP.SPONSORSHIPCOMMITMENTID,
           @COMMITMENTSEQUENCE = SPONSORSHIPCOMMITMENT.COMMITMENTSEQUENCE,
           @REVENUEID = REVENUE.ID,
           @REVENUECONSTITUENTID = REVENUE.CONSTITUENTID,
           @STATUSCODE = SPONSORSHIP.STATUSCODE
    from dbo.SPONSORSHIP
    inner join dbo.SPONSORSHIPCOMMITMENT on SPONSORSHIPCOMMITMENT.ID = SPONSORSHIP.SPONSORSHIPCOMMITMENTID
    left outer join dbo.REVENUESPLIT on REVENUESPLIT.ID = SPONSORSHIP.REVENUESPLITID
    left outer join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
    where SPONSORSHIP.ID = @ID;

    -- cache all constituency date ranges for this sponsorship for later updating

    insert into @CONSTITUENTSTAB
    select CONSTITUENTID, SPONSORTYPECODE, STARTDATE, ENDDATE
    from dbo.V_QUERY_FINANCIALSPONSORSHIPDATERANGE
    where ID = @ID;

    begin try
        -----------------------------------------------------------

        -- delete all sponsorshiptransaction rows for this sponsorship

        declare @CONTEXTCACHE varbinary(128);
        set @CONTEXTCACHE = CONTEXT_INFO();
        if @CHANGEAGENTID is not null
            set CONTEXT_INFO @CHANGEAGENTID

        -- delete all future sponsordaterange

        delete from dbo.SPONSORSHIPTRANSACTION
        where @ID in(CONTEXTSPONSORSHIPID,TARGETSPONSORSHIPID)

        -- restore cached context

        if not @CONTEXTCACHE is null
            set CONTEXT_INFO @CONTEXTCACHE

        -----------------------------------------------------------

        -- delete the sponsorship

        exec dbo.USP_SPONSORSHIP_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID

        -----------------------------------------------------------

        -- delete the commitment

        exec dbo.USP_SPONSORSHIPCOMMITMENT_DELETEBYID_WITHCHANGEAGENTID @COMMITMENTID, @CHANGEAGENTID

        -- update other commitment sequences for the sponsor

        update dbo.SPONSORSHIPCOMMITMENT
        set COMMITMENTSEQUENCE = COMMITMENTSEQUENCE - 1,
            DATECHANGED = @CURRENTDATE,
            CHANGEDBYID = @CHANGEAGENTID
        where CONSTITUENTID = @CONSTITUENTID
        and COMMITMENTSEQUENCE > @COMMITMENTSEQUENCE

        -----------------------------------------------------------

        -- delete the recurring gift

        if @REVENUEID is not null
            exec dbo.USP_REVENUE_DELETE @REVENUEID, @CHANGEAGENTID

        -----------------------------------------------------------

        -- SPONSORDATERANGE

        -----------------------------------------------------------

        declare @SDR_CONSTITUENTID uniqueidentifier;
        declare @SPONSORTYPECODE tinyint;
        declare @SDR_STARTDATE date;
        declare @SDR_ENDDATE date;

        declare SPONSOR_CURSOR cursor local fast_forward for
            select CONSTITUENTID, SPONSORTYPECODE, STARTDATE, ENDDATE
            from @CONSTITUENTSTAB;

        open SPONSOR_CURSOR;
        fetch next from SPONSOR_CURSOR into @SDR_CONSTITUENTID, @SPONSORTYPECODE, @SDR_STARTDATE, @SDR_ENDDATE;

        while (@@FETCH_STATUS = 0)
        begin
            exec dbo.USP_SPONSORSHIPDELETE_UPDATESPONSORDATERANGE
                @SDR_CONSTITUENTID,
                @SPONSORTYPECODE,
                @SDR_STARTDATE,
                @SDR_ENDDATE,
                @CHANGEAGENTID,
                @CURRENTDATE

            fetch next from SPONSOR_CURSOR into @SDR_CONSTITUENTID, @SPONSORTYPECODE, @SDR_STARTDATE, @SDR_ENDDATE;
        end
        close SPONSOR_CURSOR;
        deallocate SPONSOR_CURSOR;

        -----------------------------------------------------------

        -- reactivate opportunity

        if @STATUSCODE in(0,1)
        begin
            update dbo.SPONSORSHIPOPPORTUNITY
            set AVAILABILITYCODE = 0,
                DATECHANGED = @CURRENTDATE,
                CHANGEDBYID = @CHANGEAGENTID
            where ID = @SPONSORSHIPOPPORTUNITYID
            and AVAILABILITYCODE = 2
            and dbo.UFN_SPONSORSHIPLOCATION_ISACTIVE(SPONSORSHIPLOCATIONID) = 1;

            update dbo.SPONSORSHIPOPPORTUNITYLOCK
            set SPONSORCOUNT = SPONSORCOUNT - 1,
                DATECHANGED = @CURRENTDATE,
                CHANGEDBYID = @CHANGEAGENTID
            where ID = @SPONSORSHIPOPPORTUNITYID;
        end
    end try
    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;

end