USP_CONSTITUENCYDATERANGE_REFRESHMEMBERCONSTITUENCY

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@CONSTITUENCYREFRESHPROCESSID uniqueidentifier IN
@RECORDCOUNT int INOUT

Definition

Copy


CREATE procedure dbo.USP_CONSTITUENCYDATERANGE_REFRESHMEMBERCONSTITUENCY
(
    @CONSTITUENTID uniqueidentifier = null,
    @CONSTITUENCYREFRESHPROCESSID uniqueidentifier = null,
    @RECORDCOUNT int = 0 output
)
as
begin
    set nocount on;

    set @RECORDCOUNT = 0;

    declare @CURRENTDATE datetime = getdate();

    declare @MEMBERDEFINITIONID uniqueidentifier = '2D11326E-8F3B-4322-9797-57C1AACFA5DF';

    begin try
        if @CONSTITUENTID is not null and @CONSTITUENCYREFRESHPROCESSID is not null
        begin
            raiserror('ERR_REFRESH_CONSTITUENTANDSELECTION : A constituency refresh cannot be run with both a specific constituent and a selection.', 13, 1);
        end

        if @CONSTITUENCYREFRESHPROCESSID is null and @CONSTITUENTID is null
        begin
            insert into dbo.CONSTITUENCYDATERANGE
            (
                ID,
                CONSTITUENTID,
                CONSTITUENCYDEFINITIONID,
                DATEFROM,
                DATETO,
                REFRESHDATE
            )
            select
                newid(),
                MEMBER.CONSTITUENTID,
                @MEMBERDEFINITIONID,
                cast(min(MEMBERSHIP.JOINDATE) as date),
                cast(max(MEMBERSHIP.EXPIRATIONDATE) as date),
                @CURRENTDATE
            from
                dbo.MEMBER
                inner join dbo.MEMBERSHIP
                    on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                inner join dbo.MEMBERSHIPLEVELTERM
                    on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                left join dbo.MEMBERSHIPLEVEL
                    on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                left join dbo.CONSTITUENCYDATERANGE
                    on CONSTITUENCYDATERANGE.CONSTITUENTID = MEMBER.CONSTITUENTID
                    and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID
            where
                CONSTITUENCYDATERANGE.ID is null
                and MEMBER.ISDROPPED = 0
                and (
                    getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                    or MEMBERSHIPLEVELTERM.TERMCODE = 6
                )
                and MEMBERSHIP.STATUSCODE <> 1
            group by
                MEMBER.CONSTITUENTID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;

            update dbo.CONSTITUENCYDATERANGE
            set
                CONSTITUENCYDATERANGE.DATEFROM = MEMBER.DATEFROM,
                CONSTITUENCYDATERANGE.DATETO = MEMBER.DATETO,
                CONSTITUENCYDATERANGE.REFRESHDATE = @CURRENTDATE
            from
                dbo.CONSTITUENCYDATERANGE
                inner join (
                    select
                        CONSTITUENTID,
                        cast(min(MEMBERSHIP.JOINDATE) as date) as DATEFROM,
                        cast(max(MEMBERSHIP.EXPIRATIONDATE) as date) as DATETO
                    from
                        dbo.MEMBER
                        inner join dbo.MEMBERSHIP
                            on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                        inner join dbo.MEMBERSHIPLEVELTERM
                            on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                        left join dbo.MEMBERSHIPLEVEL
                            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                    where
                        MEMBER.ISDROPPED = 0
                        and (
                            getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                            or MEMBERSHIPLEVELTERM.TERMCODE = 6
                        )
                        and MEMBERSHIP.STATUSCODE <> 1
                    group by
                        MEMBER.CONSTITUENTID
                ) MEMBER
                    on MEMBER.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
            where
                CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;

            delete dbo.CONSTITUENCYDATERANGE
            from
                dbo.CONSTITUENCYDATERANGE
                left join (
                    select distinct
                        CONSTITUENTID
                    from
                        dbo.MEMBER
                        inner join dbo.MEMBERSHIP
                            on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                        inner join dbo.MEMBERSHIPLEVELTERM
                            on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                        left join dbo.MEMBERSHIPLEVEL
                            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                    where
                        MEMBER.ISDROPPED = 0
                        and (
                            getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                            or MEMBERSHIPLEVELTERM.TERMCODE = 6
                        )
                        and MEMBERSHIP.STATUSCODE <> 1
                ) MEMBER
                    on MEMBER.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
            where
                MEMBER.CONSTITUENTID is null
                and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
        end
        else if @CONSTITUENCYREFRESHPROCESSID is null
        begin
            insert into dbo.CONSTITUENCYDATERANGE
            (
                ID,
                CONSTITUENTID,
                CONSTITUENCYDEFINITIONID,
                DATEFROM,
                DATETO,
                REFRESHDATE
            )
            select
                newid(),
                MEMBER.CONSTITUENTID,
                @MEMBERDEFINITIONID,
                cast(min(MEMBERSHIP.JOINDATE) as date),
                cast(max(MEMBERSHIP.EXPIRATIONDATE) as date),
                @CURRENTDATE
            from
                dbo.MEMBER
                inner join dbo.MEMBERSHIP
                    on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                inner join dbo.MEMBERSHIPLEVELTERM
                    on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                left join dbo.MEMBERSHIPLEVEL
                    on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                left join dbo.CONSTITUENCYDATERANGE
                    on CONSTITUENCYDATERANGE.CONSTITUENTID = MEMBER.CONSTITUENTID
                    and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID
            where
                CONSTITUENCYDATERANGE.ID is null
                and MEMBER.ISDROPPED = 0
                and (
                    getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                    or MEMBERSHIPLEVELTERM.TERMCODE = 6
                )
                and MEMBERSHIP.STATUSCODE <> 1
                and MEMBER.CONSTITUENTID = @CONSTITUENTID
            group by
                MEMBER.CONSTITUENTID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;

            update dbo.CONSTITUENCYDATERANGE
            set
                CONSTITUENCYDATERANGE.DATEFROM = MEMBER.DATEFROM,
                CONSTITUENCYDATERANGE.DATETO = MEMBER.DATETO,
                CONSTITUENCYDATERANGE.REFRESHDATE = @CURRENTDATE
            from
                dbo.CONSTITUENCYDATERANGE
                inner join (
                    select
                        CONSTITUENTID,
                        cast(min(MEMBERSHIP.JOINDATE) as date) as DATEFROM,
                        cast(max(MEMBERSHIP.EXPIRATIONDATE) as date) as DATETO
                    from
                        dbo.MEMBER
                        inner join dbo.MEMBERSHIP
                            on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                        inner join dbo.MEMBERSHIPLEVELTERM
                            on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                        left join dbo.MEMBERSHIPLEVEL
                            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                    where
                        MEMBER.ISDROPPED = 0
                        and (
                            getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                            or MEMBERSHIPLEVELTERM.TERMCODE = 6
                        )
                        and MEMBERSHIP.STATUSCODE <> 1
                    group by
                        MEMBER.CONSTITUENTID
                ) MEMBER
                    on MEMBER.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
            where
                CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID
                and CONSTITUENCYDATERANGE.CONSTITUENTID = @CONSTITUENTID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;

            delete dbo.CONSTITUENCYDATERANGE
            from
                dbo.CONSTITUENCYDATERANGE
                left join (
                    select distinct
                        CONSTITUENTID
                    from
                        dbo.MEMBER
                        inner join dbo.MEMBERSHIP
                            on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                        inner join dbo.MEMBERSHIPLEVELTERM
                            on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                        left join dbo.MEMBERSHIPLEVEL
                            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                    where
                        MEMBER.ISDROPPED = 0
                        and (
                            getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                            or MEMBERSHIPLEVELTERM.TERMCODE = 6
                        )
                        and MEMBERSHIP.STATUSCODE <> 1
                ) MEMBER
                    on MEMBER.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
            where
                MEMBER.CONSTITUENTID is null
                and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID
                and CONSTITUENCYDATERANGE.CONSTITUENTID = @CONSTITUENTID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
        end
        else
        begin
            insert into dbo.CONSTITUENCYDATERANGE
            (
                ID,
                CONSTITUENTID,
                CONSTITUENCYDEFINITIONID,
                DATEFROM,
                DATETO,
                REFRESHDATE
            )
            select
                newid(),
                MEMBER.CONSTITUENTID,
                @MEMBERDEFINITIONID,
                cast(min(MEMBERSHIP.JOINDATE) as date),
                cast(max(MEMBERSHIP.EXPIRATIONDATE) as date),
                @CURRENTDATE
            from
                dbo.MEMBER
                inner join dbo.MEMBERSHIP
                    on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                inner join dbo.MEMBERSHIPLEVELTERM
                    on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                left join dbo.MEMBERSHIPLEVEL
                    on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                left join dbo.CONSTITUENCYDATERANGE
                    on CONSTITUENCYDATERANGE.CONSTITUENTID = MEMBER.CONSTITUENTID
                    and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID
                inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
                    on CONSTITUENTS.CONSTITUENTID = MEMBER.CONSTITUENTID
                    and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
            where
                CONSTITUENCYDATERANGE.ID is null
                and MEMBER.ISDROPPED = 0
                and (
                    getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                    or MEMBERSHIPLEVELTERM.TERMCODE = 6
                )
                and MEMBERSHIP.STATUSCODE <> 1
            group by
                MEMBER.CONSTITUENTID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;

            update dbo.CONSTITUENCYDATERANGE
            set
                CONSTITUENCYDATERANGE.DATEFROM = MEMBER.DATEFROM,
                CONSTITUENCYDATERANGE.DATETO = MEMBER.DATETO,
                CONSTITUENCYDATERANGE.REFRESHDATE = @CURRENTDATE
            from
                dbo.CONSTITUENCYDATERANGE
                inner join (
                    select
                        CONSTITUENTID,
                        cast(min(MEMBERSHIP.JOINDATE) as date) as DATEFROM,
                        cast(max(MEMBERSHIP.EXPIRATIONDATE) as date) as DATETO
                    from
                        dbo.MEMBER
                        inner join dbo.MEMBERSHIP
                            on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                        inner join dbo.MEMBERSHIPLEVELTERM
                            on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                        left join dbo.MEMBERSHIPLEVEL
                            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                    where
                        MEMBER.ISDROPPED = 0
                        and (
                            getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                            or MEMBERSHIPLEVELTERM.TERMCODE = 6
                        )
                        and MEMBERSHIP.STATUSCODE <> 1
                    group by
                        MEMBER.CONSTITUENTID
                ) MEMBER
                    on MEMBER.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
                inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
                    on CONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
                    and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
            where
                CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;

            delete dbo.CONSTITUENCYDATERANGE
            from
                dbo.CONSTITUENCYDATERANGE
                left join (
                    select distinct
                        CONSTITUENTID
                    from
                        dbo.MEMBER
                        inner join dbo.MEMBERSHIP
                            on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                        inner join dbo.MEMBERSHIPLEVELTERM
                            on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
                        left join dbo.MEMBERSHIPLEVEL
                            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                    where
                        MEMBER.ISDROPPED = 0
                        and (
                            getdate() <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE)
                            or MEMBERSHIPLEVELTERM.TERMCODE = 6
                        )
                        and MEMBERSHIP.STATUSCODE <> 1
                ) MEMBER
                    on MEMBER.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
                inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
                    on CONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
                    and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
            where
                MEMBER.CONSTITUENTID is null
                and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @MEMBERDEFINITIONID;
            set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
        end
    end try
    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;
end