USP_MEMBERSHIP_ADDFROMSALE

Updates member, expiration date, and given by fields based on membership payment rules, and adds a membership transaction.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@TRANSACTIONDATE datetime IN
@MEMBERSHIPID uniqueidentifier INOUT
@MEMBERSHIPLEVELID uniqueidentifier IN
@MEMBERSHIPLEVELTERMID uniqueidentifier IN
@MEMBERSHIPTYPECODEID uniqueidentifier IN
@NUMBEROFCHILDREN tinyint IN
@COMMENTS nvarchar(1000) IN
@ISGIFT bit IN
@SENDRENEWALCODE tinyint IN
@EXPIRATIONDATE datetime IN
@MEMBERS xml IN
@GIVENBYID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@REVENUESPLITID uniqueidentifier IN
@TRANSACTIONID uniqueidentifier INOUT

Definition

Copy


            CREATE procedure dbo.USP_MEMBERSHIP_ADDFROMSALE
            (
                @CONSTITUENTID uniqueidentifier,
                @TRANSACTIONDATE datetime,
                @MEMBERSHIPID uniqueidentifier output,
                @MEMBERSHIPLEVELID uniqueidentifier,
                @MEMBERSHIPLEVELTERMID uniqueidentifier,
                @MEMBERSHIPTYPECODEID uniqueidentifier,
                @NUMBEROFCHILDREN tinyint,
                @COMMENTS nvarchar(1000),
                @ISGIFT bit,
                @SENDRENEWALCODE tinyint,
                @EXPIRATIONDATE datetime,
                @MEMBERS xml,
                @GIVENBYID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null,
                @REVENUESPLITID uniqueidentifier = null,
                @TRANSACTIONID uniqueidentifier = null output
            )
            as
                set nocount on;

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

                if @MEMBERSHIPID = '00000000-0000-0000-0000-000000000001' 
                    set @MEMBERSHIPID = newid();

                if @MEMBERS is not null
                begin
                    declare @NEWMEMBERS xml;
                    declare @NEWCONSTITID uniqueidentifier;
                    declare @EXCEPTIONID uniqueidentifier;

                    set @EXCEPTIONID = '00000000-0000-0000-0000-000000000000';
                    declare @HASEXCEPT bit;
                    set @HASEXCEPT = 0;

                    select @HASEXCEPT = 1 from 
                    @MEMBERS.nodes('/MEMBERS/ITEM') T(c)
                    where T.c.value('(ID)[1]','uniqueidentifier') = @EXCEPTIONID;

                    select @NEWCONSTITID = T.c.value('(CONSTITUENTID)[1]','uniqueidentifier'
                    from @MEMBERS.nodes('/MEMBERS/ITEM') T(c)
                    where not exists (select ID from dbo.CONSTITUENT where ID = T.c.value('(CONSTITUENTID)[1]','uniqueidentifier'));

                    if @HASEXCEPT = 1 or @NEWCONSTITID is not null
                    begin
                        set @NEWMEMBERS = 
                        (
                            select 
                            case when T.c.value('(ID)[1]','uniqueidentifier') = @EXCEPTIONID then 
                                coalesce((select top 1 ID from dbo.MEMBER where CONSTITUENTID = T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') and MEMBERSHIPID = @MEMBERSHIPID), newid())
                                else T.c.value('(ID)[1]','uniqueidentifier') end AS ID,
                                case when T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') = @NEWCONSTITID then @CONSTITUENTID else T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') end AS CONSTITUENTID,
                                T.c.value('(ISPRIMARY)[1]','bit') AS ISPRIMARY,
                                T.c.query('./MEMBERSHIPCARDS/ITEM') AS MEMBERSHIPCARDS
                            from @MEMBERS.nodes('/MEMBERS/ITEM') T(c)
                            for xml raw('ITEM'), type, elements, root('MEMBERS'), binary base64
                        );

                        set @MEMBERS = @NEWMEMBERS;
                    end

                    if not exists
                    (
                        select 1
                        from @MEMBERS.nodes('/MEMBERS/ITEM') T(members)
                        where T.members.value('(CONSTITUENTID)[1]','uniqueidentifier') = @CONSTITUENTID
                    )
                    begin
                        if @GIVENBYID is null
                        begin
                            set @GIVENBYID = @CONSTITUENTID;
                            set @SENDRENEWALCODE = 2;
                            set @ISGIFT = 1;
                        end
                    end                    
                end

                if @EXPIRATIONDATE is null
                begin
                    declare @ACTIONCODE tinyint;
                    select @ACTIONCODE = dbo.UFN_MEMBERSHIPTRANSACTION_DETERMINEACTIONCODE(@MEMBERSHIPID, @MEMBERSHIPLEVELID, @TRANSACTIONDATE)

                    if @ACTIONCODE = 0 or @ACTIONCODE = 5 --join/rejoin

                    begin
                        set @EXPIRATIONDATE = dbo.UFN_MEMBERSHIP_CALCULATEEXPIRATIONDATEBYLEVEL(@MEMBERSHIPLEVELID, @MEMBERSHIPLEVELTERMID, @TRANSACTIONDATE);
                    end
                    else
                    begin
                        declare @CURRENTSTATUS tinyint;
                        select @EXPIRATIONDATE = EXPIRATIONDATE, 
                            @CURRENTSTATUS = STATUSCODE
                        from dbo.MEMBERSHIP where ID = @MEMBERSHIPID;

                        if @CURRENTSTATUS = 2 --pending membership

                        begin                            
                            set @EXPIRATIONDATE = dbo.UFN_MEMBERSHIP_CALCULATEEXPIRATIONDATEBYLEVEL(@MEMBERSHIPLEVELID, @MEMBERSHIPLEVELTERMID, @TRANSACTIONDATE);
                        end
                        else
                        begin
                            set @EXPIRATIONDATE = dbo.UFN_MEMBERSHIP_CALCULATERENEWALEXPIRATION(@EXPIRATIONDATE, @MEMBERSHIPLEVELTERMID);
                        end
                    end
                end

                exec dbo.USP_MEMBERSHIP_ADD
                    @MEMBERSHIPID output,
                    @CHANGEAGENTID,
                    @CONSTITUENTID,
                    null,
                    @MEMBERSHIPLEVELID,
                    @MEMBERSHIPLEVELTERMID,
                    @MEMBERSHIPTYPECODEID,
                    0,
                    @TRANSACTIONDATE,
                    @NUMBEROFCHILDREN,
                    @COMMENTS,
                    @ISGIFT,
                    @SENDRENEWALCODE,
                    @EXPIRATIONDATE,
                    @MEMBERS,
                    @GIVENBYID,
                    @REVENUESPLITID,
                    @TRANSACTIONID output;

                return 0;