USP_DATALIST_SALESORDER_MEMBERSHIPS
Lists all memberships belonging to a sales order.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONTEXTID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_SALESORDER_MEMBERSHIPS
(
@CONTEXTID uniqueidentifier
)
as
set nocount on;
declare @CURRENTDATE date = getdate();
with MEMBERSHIP_CTE as
(
select
SALESORDERITEM.ID,
case
when FT.DATE is not null then
'Refund ' + convert(nvarchar(20), cast(FT.DATE as datetime), 1) + ', ' + SALESORDERITEM.DESCRIPTION
else
SALESORDERITEM.DESCRIPTION
end DESCRIPTION,
SALESORDERITEM.PRICE,
SALESORDERITEM.QUANTITY,
SALESORDERITEM.TOTAL,
coalesce(
(
select top 1 MEMBER.ID
from dbo.MEMBER
where
MEMBER.MEMBERSHIPID = MEMBERSHIP.ID and
MEMBER.CONSTITUENTID = SALESORDER.CONSTITUENTID
),
(
select top 1 MEMBER.ID
from dbo.MEMBER
where
MEMBER.MEMBERSHIPID = MEMBERSHIP.ID and
MEMBER.ISPRIMARY = 1 and
MEMBER.ISDROPPED = 0
)
) as MEMBERID,
MEMBERSHIP.ID as MEMBERSHIPID,
case
when exists(
select MEMBERSHIPCARD.ID
from dbo.MEMBERSHIPCARD
inner join.MEMBER on MEMBERSHIPCARD.MEMBERID = MEMBER.ID
where MEMBERSHIPCARD.STATUSCODE = 0 and
@CURRENTDATE < MEMBERSHIPCARD.EXPIRATIONDATE and
MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
) then 1
else 0
end as HASCARDSTOPRINT,
(
select MEMBERSHIPTRANSACTION.REVENUESPLITID
from dbo.MEMBERSHIPTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
inner join SALESORDER on SALESORDER.REVENUEID = LI.FINANCIALTRANSACTIONID
where
MEMBERSHIPTRANSACTION.MEMBERSHIPID = MEMBERSHIP.ID and
SALESORDER.ID = SALESORDERITEM.SALESORDERID
) as REVENUESPLITID,
case
when LI.ID is null then
0
else
1
end ISREFUNDED,
APPLIEDTICKETSSALESORDER.APPLIEDTOMEMBERSHIPSALESORDERID,
case
when APPLIEDTICKETSSALESORDER.APPLIEDTOMEMBERSHIPSALESORDERID is null then
0
else
1
end MEMBERSHIPHASAPPLIEDTICKETS
from
dbo.SALESORDER
inner join
dbo.SALESORDERITEM on SALESORDER.ID = SALESORDERITEM.SALESORDERID
inner join
dbo.SALESORDERITEMMEMBERSHIP on SALESORDERITEM.ID = SALESORDERITEMMEMBERSHIP.ID
left join
dbo.MEMBERSHIP on SALESORDERITEMMEMBERSHIP.MEMBERSHIPID = MEMBERSHIP.ID
left join (
select distinct
SALESORDERITEMMEMBERSHIPITEMPROMOTION.SALESORDERITEMID SALESORDERITEMMEMBERSHIPID,
APPLIEDITEM.SALESORDERID APPLIEDTOMEMBERSHIPSALESORDERID
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION on SALESORDERITEM.ID = SALESORDERITEMMEMBERSHIPITEMPROMOTION.SALESORDERITEMID
inner join
dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTIONAPPLIEDITEM on SALESORDERITEMMEMBERSHIPITEMPROMOTION.ID = SALESORDERITEMMEMBERSHIPITEMPROMOTIONAPPLIEDITEM.SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
inner join
dbo.SALESORDERITEM APPLIEDITEM on SALESORDERITEMMEMBERSHIPITEMPROMOTIONAPPLIEDITEM.APPLIEDSALESORDERITEMID = APPLIEDITEM.ID
where
SALESORDERITEM.SALESORDERID = @CONTEXTID
) as APPLIEDTICKETSSALESORDER on SALESORDERITEMMEMBERSHIP.ID = APPLIEDTICKETSSALESORDER.SALESORDERITEMMEMBERSHIPID
left outer join
dbo.CREDITITEM_EXT as EXT on EXT.SALESORDERITEMID = SALESORDERITEM.ID
left outer join
dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = EXT.ID
left outer join
dbo.FINANCIALTRANSACTION as FT on FT.ID = LI.FINANCIALTRANSACTIONID
where
SALESORDER.ID = @CONTEXTID
)
select
ID,
DESCRIPTION,
PRICE,
QUANTITY,
TOTAL,
MEMBERID,
MEMBERSHIPID,
HASCARDSTOPRINT,
REVENUESPLITID,
ISREFUNDED,
APPLIEDTOMEMBERSHIPSALESORDERID,
MEMBERSHIPHASAPPLIEDTICKETS,
0 as ISADDONREFUND
from MEMBERSHIP_CTE
union all
--we have a separate repeater view to house add-ons that have been refunded
--for a given membership
select
--We need it to pick one of the refunded add-on id's... it doesn't matter which one
max(convert(nvarchar(36), SALESORDERITEMMEMBERSHIPADDON.ID)),
'Refund, Add-on(s)' as DESCRIPTION,
null as PRICE,
null as QUANTITY,
null as TOTAL,
MEMBERSHIP_CTE.MEMBERID,
MEMBERSHIP_CTE.MEMBERSHIPID,
0 as HASCARDSTOPRINT,
null as REVENUESPLITID,
1 as ISREFUNDED,
null as APPLIEDTOMEMBERSHIPSALESORDERID,
0 as MEMBERSHIPHASAPPLIEDTICKETS,
1 as ISADDONREFUND
from MEMBERSHIP_CTE
inner join dbo.SALESORDERITEMMEMBERSHIPADDON on SALESORDERITEMMEMBERSHIPADDON.SALESORDERITEMMEMBERSHIPID = MEMBERSHIP_CTE.ID
inner join dbo.CREDITITEM_EXT on CREDITITEM_EXT.SALESORDERITEMID = SALESORDERITEMMEMBERSHIPADDON.ID
group by MEMBERSHIP_CTE.ID, MEMBERSHIP_CTE.MEMBERID, MEMBERSHIP_CTE.MEMBERSHIPID
order by MEMBERSHIP_CTE.MEMBERSHIPID, ISADDONREFUND
return 0;