USP_DATALIST_CONSTITUENTMEMBERSHIPPROGRAM_RECENTACTIVITY

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@NUMROWS int IN

Definition

Copy


                CREATE procedure dbo.USP_DATALIST_CONSTITUENTMEMBERSHIPPROGRAM_RECENTACTIVITY
                (
                    @MEMBERSHIPID uniqueidentifier,
                    @CURRENTAPPUSERID uniqueidentifier,
                    @NUMROWS int = 0
                )
                as
                    set nocount on;

                    -- Activity Type Code List

                    -- 9: Interaction

                    -- 1: Event

                    -- 2: Ticket

                    -- 3: Merchandise

                    -- 4: Plan step

                    -- 5: Completed Sales Order (Ticket)

                    -- 6: Completed Sales Order (Merchandise)

                    -- 7: Group Sale Reservation (Pending)


                    declare @CONSTITUENTS table
                    (
                        ID uniqueidentifier
                    )

                    -- Collect constituents in the membership

                    insert into @CONSTITUENTS
                    select
                        CONSTITUENTID
                    from
                        dbo.MEMBER
                    where
                        MEMBERSHIPID = @MEMBERSHIPID
                        and ISDROPPED = 0;

                    declare @ACTIVITIES table
                    (
                        ID uniqueidentifier,
                        ACTIVITYTYPECODE tinyint,
                        ACTIVITY nvarchar(11),
                        DATE date,
                        DESCRIPTION nvarchar(255)
                    )

                    -- Collect interactions

                    insert into @ACTIVITIES
                    select
                        I.ID,
                        case
                            when I.PROSPECTPLANID is null then 9
                            else 4
                        end as ACTIVITYTYPECODE,
                        'Interaction' as ACTIVITY,
                        DATE,
                        I.OBJECTIVE as DESCRIPTION
                    from
                        dbo.INTERACTION I
                        left join dbo.INTERACTIONSITE IAS on I.ID = IAS.INTERACTIONID
                        left join dbo.PROSPECTPLANSITE PPS on I.PROSPECTPLANID = PPS.PROSPECTPLANID and I.PROSPECTPLANID is not null
                    where
                        CONSTITUENTID in (select ID from @CONSTITUENTS) and
                        (
                            dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or
                            exists
                            (
                                select 1
                                from
                                    dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,'da253487-b13f-42aa-a7d6-f54c4b0a6e28',2)
                                where
                                    SITEID = IAS.SITEID or
                                    SITEID = PPS.SITEID or
                                    (
                                        SITEID is null and
                                        IAS.SITEID is null and
                                        PPS.SITEID is null
                                    )
                            )
                        )
                    order by DATE desc

                    -- Collect attended/will attend events

                    insert into @ACTIVITIES
                    select
                        R.ID,
                        1 as ACTIVITYTYPECODE,
                        'Event' as ACTIVITY,
                        E.STARTDATE as DATE,
                        E.NAME + ' registration' as DESCRIPTION
                    from
                        dbo.REGISTRANT R
                        left join dbo.EVENT E on R.EVENTID = E.ID
                    where
                        CONSTITUENTID in (select ID from @CONSTITUENTS) and
                        dbo.UFN_EVENT_USERHASSITEACCESS(@CURRENTAPPUSERID, E.ID) = 1 and
                        (
                            ATTENDED = 1 or
                            WILLNOTATTEND = 0
                        )
                    order by E.STARTDATE desc

                    if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('BB1C17BC-9E0B-4683-B490-EE40D511FA05') = 1 or
                       dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('f238e8fe-06ae-4fdc-beaf-fdf6637e1982') = 1
                    begin
                        -- Collect ticketing

                        insert into @ACTIVITIES
                        select distinct
                            SO.ID,
                            case
                                when SO.STATUSCODE = 0 and R.ARRIVALDATE is not null then 7
                                when SO.STATUSCODE = 1 then 5
                                else 2
                            end as ACTIVITYTYPECODE,
                            'Tickets' as ACTIVITY,
                            case
                                when SO.SALESMETHODTYPECODE = 3 then R.ARRIVALDATE
                                else SO.TRANSACTIONDATE
                            end as DATE,
                            P.NAME as DESCRIPTION
                        from
                            dbo.SALESORDER SO
                            inner join dbo.SALESORDERITEM SOI on SOI.SALESORDERID = SO.ID
                            inner join dbo.SALESORDERITEMTICKET SOIT on SOIT.ID = SOI.ID
                            left join dbo.EVENT E on E.ID = SOIT.EVENTID
                            inner join dbo.PROGRAM P on P.ID = E.PROGRAMID or P.ID = SOIT.PROGRAMID
                            left join dbo.RESERVATION R on SO.ID = R.ID
                        where
                            SO.RECIPIENTID in (select ID from @CONSTITUENTS)
                        order by case when SO.SALESMETHODTYPECODE = 3 then R.ARRIVALDATE else SO.TRANSACTIONDATE end desc

                        -- Collect merchandise

                        insert into @ACTIVITIES
                        select distinct
                            case
                                when SO.STATUSCODE = 1 then SO.ID
                                else P.ID
                            end as ID,
                            case
                                when SO.STATUSCODE = 1 then 6
                                else 3
                            end as ACTIVITYTYPECODE,
                            'Merchandise' as ACTIVITY,
                            SO.TRANSACTIONDATE as DATE,
                            SOI.DESCRIPTION as DESCRIPTION
                        from
                            dbo.SALESORDER SO
                            inner join dbo.SALESORDERITEM SOI on SO.ID = SOI.SALESORDERID
                            inner join dbo.SALESORDERITEMMERCHANDISE SOIM on SOI.ID = SOIM.ID
                            inner join dbo.MERCHANDISEPRODUCTINSTANCE MPI on SOIM.MERCHANDISEPRODUCTINSTANCEID = MPI.ID
                            inner join dbo.PRODUCT P on MPI.MERCHANDISEPRODUCTID = P.ID
                        where
                            SO.CONSTITUENTID in (select ID from @CONSTITUENTS) and
                            SOI.TYPECODE = 14
                        order by SO.TRANSACTIONDATE desc

                    end

                    if @NUMROWS = 0
                    begin
                        -- Select all

                        select 
                            ID,
                            ACTIVITYTYPECODE,
                            ACTIVITY,
                            DATE,
                            DESCRIPTION
                        from @ACTIVITIES
                        order by DATE desc
                    end
                    else
                    begin
                        -- Select some

                        select top(@NUMROWS)
                            ID,
                            ACTIVITYTYPECODE,
                            ACTIVITY,
                            DATE,
                            DESCRIPTION
                        from @ACTIVITIES
                        order by DATE desc
                    end