USP_DATAFORMTEMPLATE_VIEW_DAILYSALESORDER
The load procedure used by the view dataform template "Daily Sales Order View Data Form"
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter used to load the fields defined on the form. |
@DATALOADED | bit | INOUT | Output parameter indicating whether or not data was actually loaded. |
@CALCULATORINPUT | nvarchar(9) | INOUT | CALCULATORINPUT |
@ITEMS | xml | INOUT | Items |
@SUBTOTAL | money | INOUT | Subtotal |
@TAXES | money | INOUT | Taxes |
@TOTAL | money | INOUT | Total |
@TENDERED | money | INOUT | Tendered |
@CHANGEDUE | money | INOUT | Change due |
@BALANCE | money | INOUT | Balance |
@SALESORDERID | uniqueidentifier | INOUT | ID |
@AVAILABLEPAYMENTMETHODS | xml | INOUT | Payment Types |
@CONSTITUENTID | uniqueidentifier | INOUT | Patron |
@MEMBERSHIPS | xml | INOUT | MEMBERSHIPS |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_DAILYSALESORDER
(
@ID uniqueidentifier,
@DATALOADED bit = 0 output,
@CALCULATORINPUT nvarchar(9) = null output,
@ITEMS xml = null output,
@SUBTOTAL money = null output,
@TAXES money = null output,
@TOTAL money = null output,
@TENDERED money = null output,
@CHANGEDUE money = null output,
@BALANCE money = null output,
@SALESORDERID uniqueidentifier = null output,
@AVAILABLEPAYMENTMETHODS xml = null output,
@CONSTITUENTID uniqueidentifier = null output,
@MEMBERSHIPS xml = null output
)
as
set nocount on;
declare @CURRENTDATE datetime = getdate();
declare @SALESMETHODTYPECODE tinyint;
select
@DATALOADED = 1,
@CONSTITUENTID = [CONSTITUENTID],
@SALESMETHODTYPECODE = SALESORDER.SALESMETHODTYPECODE
from dbo.[SALESORDER]
where [ID] = @ID
set @CALCULATORINPUT = '';
-- Order same as itemized receipt
-- 0 - Ticket
-- 10 - Combination
-- 20 - Event Registration
-- 30 - Membership
-- 40 - Merchandise
-- 50 - Donation
-- 60 - Discounts
-- 70 - Fees
-- 80 - Taxes
-- 85 - Delivery method
-- 90 - Payments
select @ITEMS =
(select ID, QUANTITY, DESCRIPTION, TOTAL, TYPECODE, SALESORDERITEMTYPECODE, PAYMENTID, DISCOUNTITEMID, EVENTID, REGISTRANTID, TICKETCOMBINATIONID, PRICETYPE, PRICETYPECODEID, PROGRAMNAME, TICKETSAPPLIED
from (
select distinct
[SALESORDERITEM].[ID],
case [SALESORDERITEM].[TYPECODE]
when 6 then 0
else [SALESORDERITEM].[QUANTITY]
end as [QUANTITY],
case
when [SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID] is not null and [PROGRAM].[ISDAILYADMISSION] = 1 then [PROGRAM].[NAME]
when [SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID] is not null and [PROGRAM].[ISDAILYADMISSION] = 0 then [EVENT].[NAME] + ' - ' + coalesce(' (' + convert(nvarchar(10), [EVENT].[STARTDATE], 101) + ' - ' + dbo.UFN_HOURMINUTE_DISPLAYTIME([EVENT].[STARTTIME]) + ')','')
when [SALESORDERITEM].[TYPECODE] = 0 then [SALESORDERITEM].[DESCRIPTION] + coalesce(' (' + convert(nvarchar(10), [EVENT].[STARTDATE], 101) + ' - ' + dbo.UFN_HOURMINUTE_DISPLAYTIME([EVENT].[STARTTIME]) + ')','')
when [SALESORDERITEM].[TYPECODE] = 6 then dbo.UFN_CONSTITUENT_BUILDNAME([REGISTRANT].[CONSTITUENTID]) + ' - ' + [SALESORDERITEM].[DESCRIPTION]
else [SALESORDERITEM].[DESCRIPTION]
end as [DESCRIPTION],
case
when TYPECODE = 1 then -- membership
[SALESORDERITEM].[TOTAL] + (select isnull(sum(ADDONITEMS.TOTAL), 0)
from dbo.SALESORDERITEM ADDONITEMS
inner join dbo.SALESORDERITEMMEMBERSHIPADDON SOIMA
on ADDONITEMS.ID = SOIMA.ID
where ADDONITEMS.TYPECODE = 16 and SOIMA.SALESORDERITEMMEMBERSHIPID = SALESORDERITEM.ID)
else
[SALESORDERITEM].[TOTAL]
end as [TOTAL],
0 TYPECODE,
case
when [PROGRAM].[ISPREREGISTERED] = 1 then 254
when [SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID] is not null then 253
when [SALESORDERITEM].[TYPECODE] = 1 then (select [TYPECODE] from dbo.[SALESORDERITEMMEMBERSHIP] where [ID] = [SALESORDERITEM].[ID])
else [SALESORDERITEM].[TYPECODE]
end as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
null as [DISCOUNTITEMID],
coalesce([COMBINATION].[ID], [SALESORDERITEMTICKET].[EVENTID], [SALESORDERITEMTICKET].[PROGRAMID]) as [EVENTID],
[REGISTRANT].[ID] as [REGISTRANTID],
[SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID],
dbo.UFN_PRICETYPECODE_GETDESCRIPTION([SALESORDERITEMTICKET].[PRICETYPECODEID]) as [PRICETYPE],
[SALESORDERITEMTICKET].[PRICETYPECODEID],
[COMBINATION].[NAME] as [PROGRAMNAME], --Only used for combos right now
0 as [TICKETSAPPLIED],
--below fields are used for sorting
case
when TYPECODE = 0 then --ticket
0
when TYPECODE = 2 then --donation
50
when TYPECODE = 6 then --event registration
20
else
0 --should not occur
end
as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
case
when [SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID] is not null then [COMBINATION].[NAME]
when [SALESORDERITEM].[TYPECODE] = 0 then [SALESORDERITEM].[DESCRIPTION] + coalesce(' (' + convert(nvarchar(10), [EVENT].[STARTDATE], 101) + ' - ' + dbo.UFN_HOURMINUTE_DISPLAYTIME([EVENT].[STARTTIME]) + ')','')
when [SALESORDERITEM].[TYPECODE] = 6 then dbo.UFN_CONSTITUENT_BUILDNAME([REGISTRANT].[CONSTITUENTID]) + ' - ' + [SALESORDERITEM].[DESCRIPTION]
else [SALESORDERITEM].[DESCRIPTION]
end as [ORDERSORTFIELD1],
case
when [SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID] is not null and [PROGRAM].[ISDAILYADMISSION] = 1 then [PROGRAM].[NAME]
when [SALESORDERITEMTICKETCOMBINATION].[TICKETCOMBINATIONID] is not null and [PROGRAM].[ISDAILYADMISSION] = 0 then [EVENT].[NAME] + ' - ' + coalesce(' (' + convert(nvarchar(10), [EVENT].[STARTDATE], 101) + ' - ' + dbo.UFN_HOURMINUTE_DISPLAYTIME([EVENT].[STARTTIME]) + ')','')
else cast([SALESORDERITEM].[ID] as nvarchar(36))
end as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEM]
left join dbo.[SALESORDERITEMTICKET]
on [SALESORDERITEM].[ID] = [SALESORDERITEMTICKET].[ID]
left join dbo.[SALESORDERITEMEVENTREGISTRATION]
on [SALESORDERITEM].[ID] = [SALESORDERITEMEVENTREGISTRATION].[ID]
left join dbo.[REGISTRANT]
on [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRANT].[ID]
left join dbo.[SALESORDERITEMTICKETCOMBINATION]
on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEMTICKETCOMBINATION].[ID]
left join dbo.[COMBINATION]
on [SALESORDERITEMTICKETCOMBINATION].[COMBINATIONID] = [COMBINATION].[ID]
left join dbo.[EVENT]
on [SALESORDERITEMTICKET].[EVENTID] = [EVENT].[ID]
left join dbo.[PROGRAM]
on [SALESORDERITEMTICKET].[PROGRAMID] = [PROGRAM].[ID]
where [SALESORDERITEM].[SALESORDERID] = @ID
and [SALESORDERITEM].[TYPECODE] in (0,2,6)
union all
-- Merchandise
select
[SOI].[ID],
[SOI].[QUANTITY],
[MPI].[ITEMDETAILS],
[SOI].[TOTAL],
9 as TYPECODE,
[SOI].[TYPECODE] as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
null as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
40 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.SALESORDERITEM SOI
inner join dbo.SALESORDERITEMMERCHANDISE SOIM on SOIM.ID = SOI.ID
inner join dbo.MERCHANDISEPRODUCTINSTANCE MPI on SOIM.MERCHANDISEPRODUCTINSTANCEID = MPI.ID
where SOI.SALESORDERID = @ID
union all
-- Membership
select distinct
[SALESORDERITEM].[ID],
[SALESORDERITEM].[QUANTITY],
[SALESORDERITEM].[DESCRIPTION],
[SALESORDERITEM].[TOTAL],
0 TYPECODE,
[SALESORDERITEM].[TYPECODE] as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
null as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null [PRICETYPECODEID],
null as [PROGRAMNAME],
case
when exists (select 1 from dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION where SALESORDERITEMID = SALESORDERITEM.ID and MEMBERSHIPPROMOID is null) then
1
else
0
end as [TICKETSAPPLIED], --only used for memberships right now
--below fields are used for sorting
30 [ORDERITEMTYPE],
[SALESORDERITEM].[TYPECODE] as [SUBORDERITEMTYPE],
case
when [SALESORDERITEM].[TYPECODE] = 1 then cast([SALESORDERITEM].[ID] as nvarchar(36))
when [SALESORDERITEM].[TYPECODE] = 16 then cast([SALESORDERITEMMEMBERSHIPADDON].[SALESORDERITEMMEMBERSHIPID] as nvarchar(36))
end as [ORDERSORTFIELD1],
'' as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEM]
left join dbo.[SALESORDERITEMMEMBERSHIP]
on [SALESORDERITEM].[ID] = [SALESORDERITEMMEMBERSHIP].[ID]
left join dbo.[SALESORDERITEMMEMBERSHIPADDON]
on [SALESORDERITEM].[ID] = [SALESORDERITEMMEMBERSHIPADDON].[ID]
where [SALESORDERITEM].[SALESORDERID] = @ID
and [SALESORDERITEM].[TYPECODE] in (1, 16)
union all
select
[SALESORDERITEMITEMDISCOUNT].[DISCOUNTID] as [ID],
case when [DISCOUNT].[DISCOUNTTYPECODE] = 2 then
null
else
[LIMIT].[NUMBEROFDISCOUNTSPERORDER]
end as [QUANTITY],
[DISCOUNTNAME] as [DESCRIPTION],
-1 * SUM([SALESORDERITEMITEMDISCOUNT].[AMOUNT]) AS [TOTAL],
1 [TYPECODE],
null as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
[SALESORDERMANUALDISCOUNT].[ID] as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
60 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEMITEMDISCOUNT]
inner join dbo.[SALESORDERITEM] on
[SALESORDERITEMITEMDISCOUNT].[SALESORDERITEMID] = [SALESORDERITEM].[ID]
inner join dbo.DISCOUNT on
[DISCOUNT].[ID] = [SALESORDERITEMITEMDISCOUNT].[DISCOUNTID]
left join dbo.[SALESORDERDISCOUNTLIMITOVERRIDE] [LIMIT] on
[LIMIT].[DISCOUNTID] = [SALESORDERITEMITEMDISCOUNT].[DISCOUNTID] and
[LIMIT].[SALESORDERID] = @ID
left join dbo.[SALESORDERMANUALDISCOUNT] on
[SALESORDERMANUALDISCOUNT].[DISCOUNTID] = [SALESORDERITEMITEMDISCOUNT].[DISCOUNTID] and
[SALESORDERMANUALDISCOUNT].[SALESORDERID] = [SALESORDERITEM].[SALESORDERID]
where SALESORDERITEM.SALESORDERID = @ID
group by [SALESORDERITEMITEMDISCOUNT].[DISCOUNTID], [DISCOUNTNAME], [LIMIT].[NUMBEROFDISCOUNTSPERORDER], [SALESORDERMANUALDISCOUNT].[ID], [DISCOUNT].[DISCOUNTTYPECODE]
union all
--applied tickets
select
[SALESORDERITEMMEMBERSHIPITEMPROMOTION].[ID] AS [ID],
null as [QUANTITY],
[PROMOTIONNAME] as [DESCRIPTION],
-1 * [AMOUNT] AS [TOTAL],
case
when SALESORDERITEMMEMBERSHIPITEMPROMOTION.MEMBERSHIPPROMOID is null then 7
else 5
end as [TYPECODE],
252 as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
[SALESORDERITEMMEMBERSHIPITEMPROMOTION].[SALESORDERITEMID] as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
30 as [ORDERITEMTYPE],
60 as [SUBORDERITEMTYPE],
[SALESORDERITEM].[DESCRIPTION] as [ORDERSORTFIELD1],
cast([SALESORDERITEM].[ID] as nvarchar(36)) as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEMMEMBERSHIPITEMPROMOTION]
inner join dbo.[SALESORDERITEM] on
[SALESORDERITEMMEMBERSHIPITEMPROMOTION].[SALESORDERITEMID] = [SALESORDERITEM].[ID]
where SALESORDERITEM.SALESORDERID = @ID
union all
select
[SALESORDERITEMORDERDISCOUNT].[DISCOUNTID],
null as [QUANTITY],
[DESCRIPTION] as [DESCRIPTION],
-1 * [TOTAL] AS [TOTAL],
case
when [SALESORDERITEMORDERDISCOUNT].[DISCOUNTID] is null then
4
else
1
end
TYPECODE,
null as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
case
when [SALESORDERITEMORDERDISCOUNT].[DISCOUNTID] is null then
[SALESORDERITEM].ID
else
[SALESORDERMANUALDISCOUNT].[ID]
end
[DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
60 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEM]
inner join dbo.[SALESORDERITEMORDERDISCOUNT] on
[SALESORDERITEMORDERDISCOUNT].[ID] = [SALESORDERITEM].[ID]
left join dbo.[SALESORDERMANUALDISCOUNT] on
[SALESORDERMANUALDISCOUNT].[DISCOUNTID] = [SALESORDERITEMORDERDISCOUNT].[DISCOUNTID] and
[SALESORDERMANUALDISCOUNT].[SALESORDERID] = [SALESORDERITEM].[SALESORDERID]
where [SALESORDERITEM].[SALESORDERID] = @ID
union all
--Membership Promos
select
[SALESORDERITEMMEMBERSHIPPROMO].[MEMBERSHIPPROMOID],
null as [QUANTITY],
[DESCRIPTION] as [DESCRIPTION],
-1 * [TOTAL] AS [TOTAL],
5 TYPECODE,
SALESORDERITEM.TYPECODE as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
[SALESORDERITEMMEMBERSHIPPROMO].[ID] as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
60 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE] ,
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEM]
inner join dbo.[SALESORDERITEMMEMBERSHIPPROMO] on
[SALESORDERITEMMEMBERSHIPPROMO].[ID] = [SALESORDERITEM].[ID]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SALESORDERITEMMEMBERSHIPPROMO].[INUSE] = 1
union all
select
[SALESORDERITEMFEE].[FEEID],
1,
[SALESORDERITEM].[DESCRIPTION],
sum([TOTAL]) as [TOTAL],
2 TYPECODE,
null as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
null as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
70 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.[SALESORDERITEM]
inner join dbo.SALESORDERITEMFEE on SALESORDERITEM.ID = SALESORDERITEMFEE.ID
where SALESORDERID = @ID
and SALESORDERITEM.TYPECODE = 3
group by SALESORDERITEMFEE.FEEID, SALESORDERITEM.DESCRIPTION
union all
select
SALESORDERPAYMENT.PAYMENTID AS [ID],
1 AS [QUANTITY],
case REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
when 2 then
dbo.UFN_CREDITTYPECODE_GETDESCRIPTION(CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID) + ': ' + CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER + ' - ' + CREDITCARDPAYMENTMETHODDETAIL.AUTHORIZATIONCODE
when 10 then
dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID)
else
REVENUEPAYMENTMETHOD.PAYMENTMETHOD
end AS [DESCRIPTION],
-1 * SALESORDERPAYMENT.AMOUNTTENDERED AS [TOTAL],
3 TYPECODE,
null as [SALESORDERITEMTYPECODE],
SALESORDERPAYMENT.ID as [PAYMENTID],
null as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
80 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.SALESORDERPAYMENT
inner join dbo.REVENUEPAYMENTMETHOD on SALESORDERPAYMENT.PAYMENTID = REVENUEPAYMENTMETHOD.REVENUEID
left join dbo.CREDITCARDPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
left join dbo.OTHERPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = OTHERPAYMENTMETHODDETAIL.ID
where SALESORDERPAYMENT.SALESORDERID = @ID
union all
--Delivery method
select
[SALESORDER].[DELIVERYMETHODID] as [ID],
0 as [QUANTITY],
'Delivery method - ' + dbo.UFN_DELIVERYMETHOD_GETNAME([SALESORDER].[DELIVERYMETHODID]) as [DESCRIPTION],
0 as [TOTAL],
20 as [TYPECODE],
null as [SALESORDERITEMTYPECODE],
null as [PAYMENTID],
null as [DISCOUNTITEMID],
null as [EVENTID],
null as [REGISTRANTID],
null as [TICKETCOMBINATIONID],
null as [PRICETYPE],
null as [PRICETYPECODEID],
null as [PROGRAMNAME],
0 as [TICKETSAPPLIED],
85 as [ORDERITEMTYPE],
0 as [SUBORDERITEMTYPE],
null as [ORDERSORTFIELD1],
null as [ORDERSORTFIELD2]
from dbo.[SALESORDER] where [SALESORDER].[ID] = @ID
and [SALESORDER].[SALESMETHODTYPECODE] in (1, 2) --Advanced, Online Sales
) as DETAILS
order by ORDERITEMTYPE, coalesce([ORDERSORTFIELD1], [DESCRIPTION]), coalesce([ORDERSORTFIELD2], cast([ID] as nvarchar(36))), SUBORDERITEMTYPE
for xml raw ('ITEM'), type, elements, root('ITEMS'), BINARY BASE64);
select
@SUBTOTAL = SUBTOTAL,
@TOTAL = TOTAL,
@TAXES = TAXES,
@TENDERED = AMOUNTTENDERED,
@CHANGEDUE = CHANGEDUE,
@BALANCE = BALANCE
from
dbo.UFN_SALESORDER_TOTALS(@ID)
set @SALESORDERID = @ID;
set @AVAILABLEPAYMENTMETHODS =
(select PAYTYPES.PAYMENTTYPECODE from
dbo.SALESMETHOD
CROSS APPLY dbo.UFN_SALESMETHODPAYMENTMETHOD_GETPAYMENTTYPES(SALESMETHOD.ID) PAYTYPES
WHERE SALESMETHOD.TYPECODE = @SALESMETHODTYPECODE
for xml raw ('ITEM'), type, elements, root('AVAILABLEPAYMENTMETHODS'), BINARY BASE64
);
set @MEMBERSHIPS =
(
select
[MEMBERSHIP].[ID] as [ID],
'' + dbo.UFN_MEMBERSHIPPROGRAM_GETNAME([MEMBERSHIP].[MEMBERSHIPPROGRAMID]) + ' - ' +
dbo.UFN_MEMBERSHIPLEVEL_GETNAME([MEMBERSHIP].[MEMBERSHIPLEVELID]) +
(case
when [MEMBERSHIP].[EXPIRATIONDATE] is null then
''
else
' (' + dbo.UFN_MEMBERSHIPLEVELTERM_GETVALUE([MEMBERSHIP].[MEMBERSHIPLEVELTERMID]) + ')'
end) +
(case
when [MEMBERSHIP].[MEMBERSHIPLEVELTYPECODEID] is null then
''
else
': ' + dbo.UFN_MEMBERSHIPLEVELTYPECODE_GETDESCRIPTION([MEMBERSHIP].[MEMBERSHIPLEVELTYPECODEID])
end)
as [DESCRIPTION],
case when [MEMBERSHIP].[STATUSCODE] = 1 then [MT].[TRANSACTIONDATE] else [MEMBERSHIP].[EXPIRATIONDATE] end [MEMBERSHIPEXPIRATION],
case when @CURRENTDATE > [MEMBERSHIP].[EXPIRATIONDATE] then 1
else 0 end [ISLAPSED],
case when [MEMBERSHIP].[STATUSCODE] = 1 then 1
else 0 end [ISCANCELED],
case [MEMBERSHIP].[STATUSCODE]
when 2 then
1
else
0
end [ISPENDING],
convert( nvarchar(1000),
(select [CONSTITUENT].[NAME] as div
from dbo.[MEMBER]
inner join dbo.[CONSTITUENT]
on [MEMBER].[CONSTITUENTID] = [CONSTITUENT].[ID]
where [MEMBERSHIPID] = [MEMBERSHIP].[ID] and
[ISDROPPED] = 0
order by [MEMBER].[ISPRIMARY] desc
for xml raw (''), type, elements, BINARY BASE64)) as [OTHERMEMBERS]
from dbo.[MEMBER]
inner join dbo.[MEMBERSHIP] on [MEMBER].[MEMBERSHIPID] = [MEMBERSHIP].[ID]
inner join dbo.[MEMBERSHIPLEVEL] on [MEMBERSHIP].[MEMBERSHIPLEVELID] = [MEMBERSHIPLEVEL].[ID]
left join dbo.[MEMBERSHIPTRANSACTION] [MT] on ([MEMBERSHIP].[ID] = [MT].[MEMBERSHIPID] and [MT].[ACTIONCODE] = 4) and ([MT].[ID] in (select top 1 [ID] from dbo.[MEMBERSHIPTRANSACTION] [MT2] where [MT2].[ACTIONCODE] = 4 and [MT2].[MEMBERSHIPID] = [MEMBERSHIP].[ID] order by [MT2].[TRANSACTIONDATE] desc))
where
[MEMBER].[CONSTITUENTID] = @CONSTITUENTID and
[MEMBER].[ISDROPPED] = 0
for xml raw ('ITEM'), type, elements, root('MEMBERSHIPS'), BINARY BASE64
);
return 0;