USP_SPONSORSHIPLOCATION_CLOSE

Handles location closed operation

Parameters

Parameter Parameter Type Mode Description
@SPONSORSHIPLOCATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@SUCCESSTABLE nvarchar(128) IN
@EXCEPTIONTABLE nvarchar(128) IN
@SUCCESSCOUNT int INOUT
@EXCEPTIONCOUNT int INOUT

Definition

Copy


CREATE procedure dbo.USP_SPONSORSHIPLOCATION_CLOSE
(
    @SPONSORSHIPLOCATIONID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @SUCCESSTABLE nvarchar(128),
    @EXCEPTIONTABLE nvarchar(128),
    @SUCCESSCOUNT int = 0 output,
    @EXCEPTIONCOUNT int = 0 output
)
as begin
    set nocount on;

    declare @MATCHRULE tinyint        -- 0=Standard, 1=Nearest location

    declare @SPONSORSHIPREASONID uniqueidentifier
    declare @COMMENT nvarchar(255)
    declare @PROGRAMMAPPINGSXML xml
    declare @PROGRAMMAPPINGS table (FROMSPONSORSHIPPROGRAMID uniqueidentifier,
                                    TOSPONSORSHIPPROGRAMID uniqueidentifier,
                                    TOSPONSORSHIPLOCATIONID uniqueidentifier)

    --default

    set @MATCHRULE = 0
    -- Find the match rule custom setting

    select top 1
        @MATCHRULE = LOCATIONCLOSEMATCHINGCODE
    from dbo.SPONSORSHIPINFO
    order by DATEADDED

    select @SPONSORSHIPREASONID = SPONSORSHIPREASONID,
           @PROGRAMMAPPINGSXML = PROGRAMMAPPINGS,
                 @COMMENT = COMMENT
    from dbo.SPONSORSHIPLOCATIONCLOSEPROCESS
    where ID = @SPONSORSHIPLOCATIONID;

    insert into @PROGRAMMAPPINGS
    select *
    from dbo.UFN_SPONSORSHIPLOCATIONCLOSEPROCESS_PROGRAMMAPPINGS_FROMITEMLISTXML(@PROGRAMMAPPINGSXML)

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    if @CHANGEAGENTID is null  
        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

    declare @HIERARCHYPATH hierarchyid

    select @HIERARCHYPATH = HIERARCHYPATH
    from dbo.SPONSORSHIPLOCATION
    where ID = @SPONSORSHIPLOCATIONID

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

        -- Update all opportunities in the area to unavailable and mark the location inactive.

        exec dbo.USP_SPONSORSHIPLOCATION_INACTIVE_REASON @SPONSORSHIPLOCATIONID, @CHANGEAGENTID, @SPONSORSHIPREASONID, @COMMENT

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

        -- Transfer all sponsorships for the location to another location.


        create table #TRANSFERS (
            FROMSPONSORSHIPID uniqueidentifier,
            NEWSPONSORSHIPPROGRAMID uniqueidentifier,
            NEWSPONSORSHIPLOCATIONID uniqueidentifier,
            NEWSPONSORSHIPOPPORTUNITYID uniqueidentifier,
            NEWCHILDGENDERCODE tinyint,
            NEWSPONSORSHIPOPPORTUNITYAGERANGEID uniqueidentifier,
            NEWISHIVPOSITIVECODE tinyint,
            NEWHASCONDITIONCODE tinyint,
            NEWISORPHANEDCODE tinyint,
            NEWSPROPPPROJECTCATEGORYCODEID uniqueidentifier);

        insert into #TRANSFERS (FROMSPONSORSHIPID, NEWSPONSORSHIPPROGRAMID, NEWSPONSORSHIPLOCATIONID)
        select
            SPONSORSHIP.ID,
            MAPPINGS.TOSPONSORSHIPPROGRAMID,
            MAPPINGS.TOSPONSORSHIPLOCATIONID
        from dbo.SPONSORSHIP
        inner join @PROGRAMMAPPINGS MAPPINGS on MAPPINGS.FROMSPONSORSHIPPROGRAMID = SPONSORSHIP.SPONSORSHIPPROGRAMID
        inner join dbo.SPONSORSHIPOPPORTUNITY on SPONSORSHIPOPPORTUNITY.ID = SPONSORSHIP.SPONSORSHIPOPPORTUNITYID
        inner join dbo.SPONSORSHIPLOCATION on SPONSORSHIPLOCATION.ID = SPONSORSHIPOPPORTUNITY.SPONSORSHIPLOCATIONID
        where SPONSORSHIPLOCATION.HIERARCHYPATH.IsDescendantOf(@HIERARCHYPATH) = 1
        and SPONSORSHIP.STATUSCODE = 1
        union
        -- pending transfers

        select
            ACTIVESPONSORSHIP.ID,
            MAPPINGS.TOSPONSORSHIPPROGRAMID,
            MAPPINGS.TOSPONSORSHIPLOCATIONID
        from dbo.SPONSORSHIP PENDINGSPONSORSHIP
        inner join dbo.SPONSORSHIPOPPORTUNITY PENDINGSPONSORSHIPOPPORTUNITY on PENDINGSPONSORSHIPOPPORTUNITY.ID = PENDINGSPONSORSHIP.SPONSORSHIPOPPORTUNITYID
        inner join dbo.SPONSORSHIPLOCATION on SPONSORSHIPLOCATION.ID = PENDINGSPONSORSHIPOPPORTUNITY.SPONSORSHIPLOCATIONID
        inner join dbo.SPONSORSHIPTRANSACTION INITIATETRANSFERTRANSACTION on INITIATETRANSFERTRANSACTION.TARGETSPONSORSHIPID = PENDINGSPONSORSHIP.ID and INITIATETRANSFERTRANSACTION.ACTIONCODE = 6
        inner join dbo.SPONSORSHIP ACTIVESPONSORSHIP on ACTIVESPONSORSHIP.ID = INITIATETRANSFERTRANSACTION.CONTEXTSPONSORSHIPID
        inner join @PROGRAMMAPPINGS MAPPINGS on MAPPINGS.FROMSPONSORSHIPPROGRAMID = ACTIVESPONSORSHIP.SPONSORSHIPPROGRAMID
        where SPONSORSHIPLOCATION.HIERARCHYPATH.IsDescendantOf(@HIERARCHYPATH) = 1
        and PENDINGSPONSORSHIP.STATUSCODE = 0
        and ACTIVESPONSORSHIP.STATUSCODE = 1

        exec dbo.USP_SPONSORSHIP_BULKTRANSFER
            @SUCCESSTABLE,
            @EXCEPTIONTABLE,
            0,
            @MATCHRULE,
            @SPONSORSHIPREASONID,
            1,
            @SPONSORSHIPLOCATIONID,
            0,
            @CHANGEAGENTID,
            @SUCCESSCOUNT output,
            @EXCEPTIONCOUNT output,
      1,
      0

        drop table #TRANSFERS;

        if @EXCEPTIONCOUNT = 0
        begin
            ------------------------------------------------------------------

            -- Mark opportunity groups and programs that reference the location as closed.

            declare @GROUPS table (ID uniqueidentifier)

            insert into @GROUPS (ID)
            select SPONSORSHIPOPPORTUNITYGROUP.ID
            from dbo.SPONSORSHIPOPPORTUNITYGROUP
            inner join dbo.SPONSORSHIPLOCATION on SPONSORSHIPLOCATION.ID = SPONSORSHIPOPPORTUNITYGROUP.SPONSORSHIPLOCATIONID
            where SPONSORSHIPLOCATION.HIERARCHYPATH.IsDescendantOf(@HIERARCHYPATH) = 1;

            update dbo.SPONSORSHIPPROGRAM
            set ISINACTIVE = 1,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
            where SPONSORSHIPOPPORTUNITYGROUPID in(select ID from @GROUPS);

            update dbo.SPONSORSHIPOPPORTUNITYGROUP
            set ISINACTIVE = 1,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
            where ID in(select ID from @GROUPS);

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

            -- Mark the location as closed.

            update dbo.SPONSORSHIPLOCATION
            set STATUSCODE = 2,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE,
                SPONSORSHIPREASONID = @SPONSORSHIPREASONID,
                COMMENT = case ID when @SPONSORSHIPLOCATIONID then @COMMENT else COMMENT end
            where ID = @SPONSORSHIPLOCATIONID
            or HIERARCHYPATH.IsDescendantOf(@HIERARCHYPATH) = 1;
        end

    end try
    begin catch
      exec dbo.USP_RAISE_ERROR;
      return 1;
    end catch

    return 0;
end