USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTMEMBERSHIPPROGRAM2

Parameters

Parameter Parameter Type Mode Description
@ID nvarchar(72) IN
@CONSTITUENTID uniqueidentifier INOUT
@DATALOADED bit INOUT
@PRIMARYMEMBERNAME nvarchar(100) INOUT
@PRIMARYMEMBERCONSTITUENTID uniqueidentifier INOUT
@PRIMARYMEMBERID uniqueidentifier INOUT
@MEMBERSHIPPROGRAMNAME nvarchar(100) INOUT
@MEMBERSHIPLEVELTYPE nvarchar(100) INOUT
@MEMBERSHIPID uniqueidentifier INOUT
@MEMBERSHIPLEVELNAME nvarchar(100) INOUT
@MEMBERSHIPTERM nvarchar(12) INOUT
@HIDEMEMBERSHIPTERM bit INOUT
@AMOUNT money INOUT
@BASECURRENCYID uniqueidentifier INOUT
@MEMBERSHIPSTATUS nvarchar(15) INOUT
@MEMBERS xml INOUT
@NUMBEROFMEMBERS int INOUT
@CHILDREN int INOUT
@EXPIRATIONDATE date INOUT
@RENEWALWINDOWEXPIRATIONDATE date INOUT
@MEMBERSHIPSTATUSAFTERRENEWALWINDOW tinyint INOUT
@MEMBERSINCEDATE date INOUT
@ISGIFT bit INOUT
@GIVENBYID uniqueidentifier INOUT
@GIVENBYNAME nvarchar(154) INOUT
@RENEWALWINDOWREVENUETYPECODE tinyint INOUT
@AFTEREXPIRATION int INOUT
@PROGRAMTYPECODE tinyint INOUT
@PROGRAMTYPE nvarchar(40) INOUT
@PAYS nvarchar(40) INOUT
@BALANCE money INOUT
@NEXTPAYMENT date INOUT
@PAIDINFULLDATE date INOUT
@TOTALPAYMENTSMADE int INOUT
@LASTPAIDDATE date INOUT
@LASTPAIDAMOUNT money INOUT
@FREQUENCY nvarchar(40) INOUT
@INSTALLMENTAMOUNT money INOUT
@PAYSINSTALLMENTS bit INOUT
@REVENUEID uniqueidentifier INOUT
@LASTPAIDINFO nvarchar(40) INOUT
@MEMBERSHIPSTATUSCODE int INOUT
@MEMBERSHIPLOOKUPID nvarchar(100) INOUT
@AUTOMATICALLYRENEWMEMBERSHIP bit INOUT
@CANCELLATIONREASONTIP nvarchar(50) INOUT
@WHEREISREVENUETRACKEDCODE tinyint INOUT
@ISUPGRADEABLE bit INOUT
@PROGRAMISACTIVE bit INOUT
@PDACCOUNTSYSTEMID uniqueidentifier INOUT
@PENDINGBATCHNUMBER nvarchar(100) INOUT
@HASOUTSTANDINGPLEDGE bit INOUT
@HASMEMBERSHIPLEVELTYPES bit INOUT

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_CONSTITUENTMEMBERSHIPPROGRAM2
                (
                    @ID nvarchar(72),
                    @CONSTITUENTID uniqueidentifier = null output,
                    @DATALOADED bit = 0 output,
                    @PRIMARYMEMBERNAME nvarchar(100) = null output,
                    @PRIMARYMEMBERCONSTITUENTID uniqueidentifier = null output,
                    @PRIMARYMEMBERID uniqueidentifier = null output,
                    @MEMBERSHIPPROGRAMNAME nvarchar(100) = null output,
                    @MEMBERSHIPLEVELTYPE nvarchar(100) = null output,
                    @MEMBERSHIPID uniqueidentifier = null output,
                    @MEMBERSHIPLEVELNAME nvarchar(100) = null output,
                    @MEMBERSHIPTERM nvarchar(12) = null output,
                    @HIDEMEMBERSHIPTERM bit = null output,
                    @AMOUNT money = null output,
                    @BASECURRENCYID uniqueidentifier = null output,
                    @MEMBERSHIPSTATUS nvarchar(15) = null output,
                    @MEMBERS xml = null output,
                    @NUMBEROFMEMBERS integer = null output,
                    @CHILDREN integer = null output,
                    @EXPIRATIONDATE date = null output,
                    @RENEWALWINDOWEXPIRATIONDATE date = null output,
                    @MEMBERSHIPSTATUSAFTERRENEWALWINDOW tinyint = null output,
                    @MEMBERSINCEDATE date = null output,
                    @ISGIFT bit = null output,
                    @GIVENBYID uniqueidentifier = null output,
                    @GIVENBYNAME nvarchar(154) = null output,
                    @RENEWALWINDOWREVENUETYPECODE tinyint = null output,
                    @AFTEREXPIRATION integer = null output,
                    @PROGRAMTYPECODE tinyint = null output,
                    @PROGRAMTYPE nvarchar(40) = null output,
                    @PAYS nvarchar(40) = null output,
                    @BALANCE money = null output,
                    @NEXTPAYMENT date = null output,
                    @PAIDINFULLDATE date = null output,
                    @TOTALPAYMENTSMADE int = null output,
                    @LASTPAIDDATE date = null output,
                    @LASTPAIDAMOUNT money = null output,
                    @FREQUENCY nvarchar(40) = null output,
                    @INSTALLMENTAMOUNT money = null output,
                    @PAYSINSTALLMENTS bit = null output,
                    @REVENUEID uniqueidentifier = null output,
                    @LASTPAIDINFO nvarchar(40) = null output,
                    @MEMBERSHIPSTATUSCODE integer = null output,
                    @MEMBERSHIPLOOKUPID nvarchar(100) = null output,
                    @AUTOMATICALLYRENEWMEMBERSHIP bit = null output,
                    @CANCELLATIONREASONTIP nvarchar(50) = null output,
                    @WHEREISREVENUETRACKEDCODE tinyint = null output,
                    @ISUPGRADEABLE bit = null output,
                    @PROGRAMISACTIVE bit = null output,
                    @PDACCOUNTSYSTEMID uniqueidentifier = null output,
                    @PENDINGBATCHNUMBER nvarchar(100) = null output,
                    @HASOUTSTANDINGPLEDGE bit = null output,
                    @HASMEMBERSHIPLEVELTYPES bit = null output
                )
                as
                    declare @TOTALMEMBERSHIPAMOUNT money;

                    set nocount on;

                    set @DATALOADED = 0;

                    -- Extract membership ID

                    set @MEMBERSHIPID = convert(uniqueidentifier,substring(CONVERT(nvarchar(72),@ID),1,36));

                    -- Extract constituent ID

                    set @CONSTITUENTID = convert(uniqueidentifier,substring(CONVERT(nvarchar(72),@ID),37,36));

                    declare @PROGRAMBASEDONCODE tinyint = 0, @MEMBERSHIPTRANSACTIONBASEAMOUNT money;

                    select
                        @PRIMARYMEMBERNAME = NF.NAME,
                        @PRIMARYMEMBERCONSTITUENTID = M.CONSTITUENTID,
                        @PRIMARYMEMBERID = M.ID
                    from
                        dbo.MEMBER M
                        cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(M.CONSTITUENTID) NF
                    where
                        M.MEMBERSHIPID = @MEMBERSHIPID and
                        M.ISPRIMARY = 1 and
                        M.ISDROPPED = 0;

                    select
                        @MEMBERSHIPPROGRAMNAME = MP.NAME,
                        @MEMBERSHIPLEVELTYPE = MT.DESCRIPTION,
                        @PROGRAMTYPECODE = MP.PROGRAMTYPECODE,
                        @PROGRAMTYPE = MP.PROGRAMTYPE,
                        @PROGRAMBASEDONCODE = MP.PROGRAMBASEDONCODE,
                        @MEMBERSHIPLOOKUPID = M.LOOKUPID,
                        @PROGRAMISACTIVE = MP.ISACTIVE
                    from
                        dbo.MEMBERSHIP M
                        inner join MEMBERSHIPPROGRAM MP on M.MEMBERSHIPPROGRAMID = MP.ID
                            left join dbo.MEMBERSHIPLEVELTYPECODE MT
                        on M.MEMBERSHIPLEVELTYPECODEID = MT.ID
                    where
                        M.ID = @MEMBERSHIPID;

                                set @MEMBERS =
                    (
                        select
                            NAMEFORMAT.NAME as MEMBERNAME,
                            CONSTITUENT.LOOKUPID,
                            MEMBERS.CONSTITUENTID as MEMBERCONSTITUENTID,
                            MEMBERS.ISPRIMARY
                        from dbo.UFN_MEMBERSHIP_GETACTIVEMEMBERS(@MEMBERSHIPID) MEMBERS
                            inner join dbo.CONSTITUENT on MEMBERS.CONSTITUENTID = CONSTITUENT.ID
                            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(CONSTITUENT.ID) NAMEFORMAT
                        order by MEMBERS.ISPRIMARY desc
                        for xml raw('ITEM'),type,elements,root('MEMBERS'),BINARY BASE64
                    );

                    select
                        @NUMBEROFMEMBERS = count(CONSTITUENTID)
                    from
                        dbo.UFN_MEMBERSHIP_GETACTIVEMEMBERS(@MEMBERSHIPID);

                    select
                        @DATALOADED = 1,
                        @MEMBERSHIPLEVELNAME = ML.NAME,
                        @MEMBERSHIPTERM =
                            case
                                when (select count(ID) from dbo.MEMBERSHIPLEVELTERM TERMS where ML.ID = TERMS.LEVELID) > 1 and MP.PROGRAMTYPECODE = 0 then cast(MLT.TERMTIMELENGTH as nvarchar(5)) + ' ' + MLT.TERMLENGTH 
                                else null 
                            end,
                        @HIDEMEMBERSHIPTERM =
                            case
                                when (select count(ID) from dbo.MEMBERSHIPLEVELTERM TERMS where ML.ID = TERMS.LEVELID) > 1 and MP.PROGRAMTYPECODE = 0 then 0
                                else 1
                            end,
                        @BASECURRENCYID = MLT.BASECURRENCYID,
                        @MEMBERSHIPSTATUS = M.STATUS,
                        @MEMBERSHIPSTATUSCODE = M.STATUSCODE,
                        @CHILDREN = M.NUMBEROFCHILDREN,
                        @EXPIRATIONDATE = M.EXPIRATIONDATE,
                        @RENEWALWINDOWEXPIRATIONDATE = dbo.UFN_MEMBERSHIP_GETRENEWALWINDOWENDDATE(M.ID, M.EXPIRATIONDATE),
                        @MEMBERSHIPSTATUSAFTERRENEWALWINDOW = dbo.UFN_MEMBERSHIP_GETSTATUSCODE_AFTERRENEWALWINDOW(ML.ID),
                        @MEMBERSINCEDATE = M.JOINDATE,
                        @ISGIFT = M.ISGIFT,
                        @GIVENBYID = M.GIVENBYID,
                        @GIVENBYNAME = CONSTITUENT.NAME,
                        @RENEWALWINDOWREVENUETYPECODE = ML.RENEWALWINDOWREVENUETYPECODE,
                        @AFTEREXPIRATION = ML.AFTEREXPIRATION,
                        @FREQUENCY = MLT.RECURRINGPAYMENTOPTION,
                        @CANCELLATIONREASONTIP = MCC.CODE + ' - ' + MCC.DESCRIPTION,
                        @AUTOMATICALLYRENEWMEMBERSHIP = M.AUTOMATICALLYRENEWMEMBERSHIP,
                        @WHEREISREVENUETRACKEDCODE = MP.WHEREISREVENUETRACKEDCODE,
                        @HASMEMBERSHIPLEVELTYPES = case when (select count(ID) from dbo.MEMBERSHIPLEVELTYPE MLT where LEVELID = ML.ID) > 0 then 1 else 0 end
                    from
                        dbo.MEMBERSHIP M
                        inner join dbo.MEMBERSHIPLEVEL ML on M.MEMBERSHIPLEVELID = ML.ID
                        inner join dbo.MEMBERSHIPLEVELTERM MLT on M.MEMBERSHIPLEVELTERMID = MLT.ID
                        inner join dbo.MEMBERSHIPPROGRAM MP on M.MEMBERSHIPPROGRAMID = MP.ID
                        left join dbo.CONSTITUENT on CONSTITUENT.ID = M.GIVENBYID
                        left join dbo.MEMBERSHIPCANCELLATIONCODE MCC on M.CANCELLATIONREASONCODEID = MCC.ID
                    where
                        M.ID = @MEMBERSHIPID;

                    set @TOTALPAYMENTSMADE = 0;

                    select  @TOTALMEMBERSHIPAMOUNT = sum(FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT)
                    from dbo.MEMBERSHIPTRANSACTION
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
                    where MEMBERSHIPTRANSACTION.MEMBERSHIPID = @ID;

                    declare @LASTPAIDTRANSACTIONAMOUNT money;

                    select top 1
                        @LASTPAIDAMOUNT = MEMBERSHIPTRANSACTIONAMOUNT.AMOUNT,
                        @LASTPAIDTRANSACTIONAMOUNT = MEMBERSHIPTRANSACTIONAMOUNT.AMOUNT,
                        @LASTPAIDDATE = MT.TRANSACTIONDATE,
                        @PDACCOUNTSYSTEMID = FINANCIALTRANSACTION.PDACCOUNTSYSTEMID
                    from dbo.MEMBERSHIPTRANSACTION MT
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = MT.REVENUESPLITID
                        inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID  = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                        outer apply dbo.UFN_MEMBERSHIPTRANSACTION_AMOUNT(MT.ID, 1) as MEMBERSHIPTRANSACTIONAMOUNT  -- 1 = Currency base amount

                    where MT.MEMBERSHIPID = @MEMBERSHIPID
                    and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                    order by MT.TRANSACTIONDATE DESC, MT.DATEADDED DESC;

                    set @REVENUEID = dbo.UFN_MEMBERSHIP_GETPLEDGE(@MEMBERSHIPID);

                    declare @ISPENDING bit = 0;

                    if @REVENUEID is not null
                    begin
                    select
                        @TOTALPAYMENTSMADE = count(distinct FT.ID),
                        @LASTPAIDDATE = max(FT.DATE)
                    from dbo.INSTALLMENTSPLIT S
                        join dbo.INSTALLMENTSPLITPAYMENT SP on S.ID = SP.INSTALLMENTSPLITID and S.PLEDGEID = @REVENUEID
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on SP.PAYMENTID = FTLI.ID
                        inner join dbo.FINANCIALTRANSACTION FT on FTLI.FINANCIALTRANSACTIONID = FT.ID
                        where FTLI.TYPECODE <> 1
                        and FTLI.DELETEDON is null;

                        select
                            @INSTALLMENTAMOUNT = INSTALLMENT.AMOUNT,
                            @NEXTPAYMENT = INSTALLMENT.DATE,
                            @FREQUENCY = REVENUESCHEDULE.FREQUENCY
                        from MEMBERSHIP
                            left join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = dbo.UFN_MEMBERSHIP_GETPLEDGE(MEMBERSHIP.ID)
                            left join dbo.INSTALLMENT on INSTALLMENT.ID = dbo.UFN_PLEDGE_GETNEXTINSTALLMENT(@REVENUEID, null)
                            left join dbo.REVENUESCHEDULE ON FINANCIALTRANSACTION.ID = REVENUESCHEDULE.ID
                        where MEMBERSHIP.ID = @MEMBERSHIPID
                        and FINANCIALTRANSACTION.DELETEDON is null;

                        select @BALANCE = dbo.UFN_PLEDGE_GETBALANCE(@REVENUEID);

                        set @PAYSINSTALLMENTS = 1;

                        set @ISPENDING = (select REVENUESCHEDULE.ISPENDING from dbo.REVENUESCHEDULE where REVENUESCHEDULE.ID = @REVENUEID);

                        if @ISPENDING = 1
                        begin
                                select top 1 
                                    @PENDINGBATCHNUMBER = BATCH.BATCHNUMBER
                                from dbo.BATCH
                                inner join dbo.BATCHMEMBERSHIPDUES on BATCHMEMBERSHIPDUES.BATCHID = BATCH.ID and dbo.UFN_MEMBERSHIP_GETPLEDGE(BATCHMEMBERSHIPDUES.EXISTINGMEMBERSHIPID) = @REVENUEID
                                where 
                                    BATCH.STATUSCODE not in (1, 2
                                    and BATCHMEMBERSHIPDUES.EXISTINGMEMBERSHIPID is not null
                                    and BATCHMEMBERSHIPDUES.REVENUETYPECODE = 1;
                        end

                    end
                    else --OK now try it as a recurring

                    begin
                        set @REVENUEID = dbo.UFN_MEMBERSHIP_GETRECURRINGGIFT_2(@MEMBERSHIPID, 1);

                        if @REVENUEID is not null
                        begin
                            select
                                @NEXTPAYMENT = case when REVENUESCHEDULE.NEXTTRANSACTIONDATE > REVENUESCHEDULE.ENDDATE then null else REVENUESCHEDULE.NEXTTRANSACTIONDATE end,
                                @FREQUENCY = REVENUESCHEDULE.FREQUENCY
                            from dbo.FINANCIALTRANSACTION
                                inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
                                inner join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = FINANCIALTRANSACTION.ID
                                left join dbo.CHANNELCODE on CHANNELCODE.ID = REVENUE_EXT.CHANNELCODEID
                            where FINANCIALTRANSACTION.ID = @REVENUEID
                            and FINANCIALTRANSACTION.DELETEDON is null;

                            set @LASTPAIDDATE = null;
                            set @LASTPAIDAMOUNT = null;

                        select top 1
                            @LASTPAIDDATE = FINANCIALTRANSACTION.[DATE],
                            @LASTPAIDAMOUNT = sum(RECURRINGGIFTINSTALLMENTPAYMENT.AMOUNT)
                        from dbo.RECURRINGGIFTINSTALLMENT
                            inner join dbo.RECURRINGGIFTINSTALLMENTPAYMENT on RECURRINGGIFTINSTALLMENT.ID = RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID
                            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = RECURRINGGIFTINSTALLMENTPAYMENT.PAYMENTID
                        where
                            RECURRINGGIFTINSTALLMENT.REVENUEID = @REVENUEID and
                            FINANCIALTRANSACTION.DELETEDON is null
                        group by FINANCIALTRANSACTION.[DATE]
                        order by FINANCIALTRANSACTION.[DATE] desc;

                            set @ISPENDING = (select REVENUESCHEDULE.ISPENDING from dbo.REVENUESCHEDULE where REVENUESCHEDULE.ID = @REVENUEID);

                            if @ISPENDING = 1
                            begin
                                    select top 1 
                                        @PENDINGBATCHNUMBER = BATCH.BATCHNUMBER
                                    from dbo.BATCH
                                    inner join dbo.BATCHMEMBERSHIPDUES on BATCHMEMBERSHIPDUES.BATCHID = BATCH.ID and dbo.UFN_MEMBERSHIP_GETRECURRINGGIFT(BATCHMEMBERSHIPDUES.EXISTINGMEMBERSHIPID) = @REVENUEID
                                    where 
                                        BATCH.STATUSCODE not in (1, 2
                                        and BATCHMEMBERSHIPDUES.EXISTINGMEMBERSHIPID is not null
                                        and BATCHMEMBERSHIPDUES.REVENUETYPECODE = 1;
                            end

                        end
                                                else
                                                begin
                                                        --If this is a lifetime program and it wasn't trapped by the installment plan check above, then the term option is pay in full and the number of payments is 1.

                                                        if @PROGRAMTYPECODE = 2
                                                        begin
                                                                set @TOTALPAYMENTSMADE = 1;
                                                        end
                                                end
                    end

                    if @BALANCE = 0 or @BALANCE is null set @PAIDINFULLDATE = @LASTPAIDDATE;

                    set @PAYS = cast(@INSTALLMENTAMOUNT as nvarchar(max)) + ' ' + lower(@FREQUENCY); --this will get formatted properly in the VB


                    declare @OBTAINLEVELCODE tinyint;
                    declare @MOSTRECENTTRANSACTIONID uniqueidentifier;
                    declare @MOSTRECENTLEVEL uniqueidentifier;

                    select top 1
                        @OBTAINLEVELCODE = MEMBERSHIPLEVEL.OBTAINLEVELCODE,
                        @MOSTRECENTTRANSACTIONID = MEMBERSHIPTRANSACTION.ID,
                        @MOSTRECENTLEVEL = MEMBERSHIPLEVEL.ID,
                        @MEMBERSHIPTRANSACTIONBASEAMOUNT = MEMBERSHIPTRANSACTION.BASEAMOUNT
                    from dbo.MEMBERSHIPTRANSACTION
                        inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
                    where MEMBERSHIPTRANSACTION.MEMBERSHIPID = @MEMBERSHIPID
                    order by MEMBERSHIPTRANSACTION.TRANSACTIONDATE DESC, MEMBERSHIPTRANSACTION.DATEADDED DESC;

                    set @AMOUNT = @LASTPAIDTRANSACTIONAMOUNT;
                    if @WHEREISREVENUETRACKEDCODE = 1
                        set @AMOUNT = @MEMBERSHIPTRANSACTIONBASEAMOUNT;

                    if @OBTAINLEVELCODE = 1 and @WHEREISREVENUETRACKEDCODE = 0
                    begin
                        select @AMOUNT = SUM(AMOUNT)
                        from dbo.MEMBERSHIPPROGRAMCONTRIBUTIONREVENUE
                        where (ORIGINALMEMBERSHIPTRANSACTIONID = @MOSTRECENTTRANSACTIONID);
                    end

                    set @ISUPGRADEABLE = dbo.UFN_MEMBERSHIP_ISUPGRADEABLE(@MEMBERSHIPID,default);

                    set @HASOUTSTANDINGPLEDGE = dbo.UFN_MEMBERSHIP_HASOUTSTANDINGPLEDGE(@ID);