USP_DATALIST_GROUPSALESORDERREPORT
Data associated with a group visit.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RESERVATIONID | uniqueidentifier | IN | Reservation ID |
@RESOURCEGROUPING | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_GROUPSALESORDERREPORT(
@RESERVATIONID uniqueidentifier,
@RESOURCEGROUPING tinyint = 0 -- when 0, this allows for grouping by resource category (i.e, Equipment), when 1, by resource name (i.e., Projector)
)
as
set nocount on;
declare @TABLE table(
QUANTITY decimal,
DESCRIPTION nvarchar(255),
ISFACILITYRENTAL tinyint,
ITEMTYPECODE tinyint
);
insert into @TABLE
-- Tickets
select
QUANTITY,
[DESCRIPTION],
0 as ISFACILITYRENTAL,
0 as ITEMTYPECODE
from dbo.SALESORDERITEM as SOI
where SOI.SALESORDERID = @RESERVATIONID and SOI.TYPECODE = 0 -- Ticket
union all
-- Resources
-- Itinerary Resources
select
case RES.ISPERTICKETITEM
when 0 then
IR.QUANTITYNEEDED
else
dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2(dbo.UFN_ITINERARY_TOTALVISITORCOUNT(IR.ITINERARYID) * IR.PERTICKETQUANTITY, IR.PERTICKETDIVISOR)
end as QUANTITY,
case @RESOURCEGROUPING
when 1 then
[RES].[NAME]
else
dbo.UFN_RESOURCE_GETCATEGORY([RES].[ID])
end as DESCRIPTION,
0 as ISFACILITYRENTAL,
1 as ITEMTYPECODE
from dbo.ITINERARYRESOURCE as IR
inner join dbo.SALESORDERITEMITINERARYRESOURCE as SOIIR on SOIIR.ITINERARYRESOURCEID = IR.ID
inner join dbo.SALESORDERITEM as SOI on SOI.ID = SOIIR.SALESORDERITEMID
inner join dbo.RESOURCE as RES on RES.ID = IR.RESOURCEID
where SOI.SALESORDERID = @RESERVATIONID and SOI.PRICE > 0.00
union all
-- Itinerary Item Resources
select
case RES.ISPERTICKETITEM
when 0 then
IIR.QUANTITYNEEDED
else
dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2(dbo.UFN_ITINERARY_TOTALVISITORCOUNT(II.ITINERARYID) * IIR.PERTICKETQUANTITY, IIR.PERTICKETDIVISOR)
end as QUANTITY,
case @RESOURCEGROUPING
when 1 then
[RES].[NAME]
else
dbo.UFN_RESOURCE_GETCATEGORY([RES].[ID])
end as DESCRIPTION,
0 as ISFACILITYRENTAL,
1 as ITEMTYPECODE
from dbo.ITINERARYITEM as II
inner join dbo.ITINERARYITEMRESOURCE as IIR on II.ID = IIR.ITINERARYITEMID
inner join dbo.SALESORDERITEMITINERARYITEMRESOURCE as SOIIIR on SOIIIR.ITINERARYITEMRESOURCEID = IIR.ID
inner join dbo.SALESORDERITEM as SOI on SOI.ID = SOIIIR.SALESORDERITEMID
inner join dbo.RESOURCE as RES on RES.ID = IIR.RESOURCEID
where SOI.SALESORDERID = @RESERVATIONID and SOI.PRICE > 0.00
union all
-- Itinerary Staff Resources
select
QUANTITYNEEDED QUANTITY,
case @RESOURCEGROUPING
when 1 then
isnull(VOLUNTEERTYPE.NAME, 'Other Staff')
else
'Staff'
end as DESCRIPTION,
0 as ISFACILITYRENTAL,
2 as ITEMTYPECODE
from dbo.ITINERARYSTAFFRESOURCE as ISR
inner join dbo.SALESORDERITEMITINERARYSTAFFRESOURCE as SOIISR on SOIISR.ITINERARYSTAFFRESOURCEID = ISR.ID
inner join dbo.SALESORDERITEM as SOI on SOI.ID = SOIISR.SALESORDERITEMID
left join dbo.VOLUNTEERTYPE on VOLUNTEERTYPE.ID = ISR.VOLUNTEERTYPEID
where SOI.SALESORDERID = @RESERVATIONID and SOI.PRICE > 0.00
union all
-- Itinerary Item Staff Resources
select
QUANTITYNEEDED QUANTITY,
case @RESOURCEGROUPING
when 1 then
isnull(VOLUNTEERTYPE.NAME, 'Other Staff')
else
'Staff'
end as DESCRIPTION,
0 as ISFACILITYRENTAL,
2 as ITEMTYPECODE
from dbo.SALESORDERITEM as SOI
inner join dbo.SALESORDERITEMITINERARYITEMSTAFFRESOURCE as SOIIISR on SOIIISR.SALESORDERITEMID = SOI.ID
inner join dbo.ITINERARYITEMSTAFFRESOURCE as IISR on IISR.ID = SOIIISR.ITINERARYITEMSTAFFRESOURCEID
left join dbo.VOLUNTEERTYPE on VOLUNTEERTYPE.ID = IISR.VOLUNTEERTYPEID
where SOI.SALESORDERID = @RESERVATIONID and SOI.PRICE > 0.00
union all
select
1,
'Facility - ' + dbo.UFN_EVENTLOCATION_GETNAME(II.EVENTLOCATIONID) [DESCRIPTION],
1 as ISFACILITYRENTAL,
3 as ITEMTYPECODE
from dbo.ITINERARY as I
inner join dbo.ITINERARYITEM as II on II.ITINERARYID = I.ID
inner join dbo.ITINERARYITEMLOCATION as IIL on IIL.ID = II.ID
where I.RESERVATIONID = @RESERVATIONID
union all
select
1,
SALESORDERITEMITEMDISCOUNT.DISCOUNTNAME,
0 as ISFACILITYRENTAL,
4 as ITEMTYPECODE
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMITEMDISCOUNT on SALESORDERITEMITEMDISCOUNT.SALESORDERITEMID = SALESORDERITEM.ID
where SALESORDERITEM.SALESORDERID = @RESERVATIONID
union all
select
1,
SALESORDERITEMORDERDISCOUNT.DISCOUNTNAME,
0 as ISFACILITYRENTAL,
4 as ITEMTYPECODE
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMORDERDISCOUNT on SALESORDERITEMORDERDISCOUNT.ID = SALESORDERITEM.ID
where SALESORDERITEM.SALESORDERID = @RESERVATIONID;
declare @TOTALVISITORCOUNT integer = coalesce([dbo].UFN_RESERVATION_TOTALVISITORCOUNT(@RESERVATIONID), 0);
declare @CONTACTNAME nvarchar(154);
declare @CONSTITUENTNAME nvarchar(154);
declare @ORDERTOTALPREDISCOUNT money;
declare @ORDERAMOUNT money;
declare @TOTALDISCOUNTS money;
declare @OVERAGEKEPT money;
select @ORDERTOTALPREDISCOUNT = coalesce(sum(SALESORDERITEM.TOTAL), 0)
from dbo.SALESORDERITEM
where SALESORDERITEM.SALESORDERID = @RESERVATIONID and
SALESORDERITEM.TYPECODE not in (5, 13) -- Discount, Membership Promotion
select
@CONTACTNAME = dbo.UFN_CONSTITUENT_BUILDNAME(SO.RECIPIENTID),
@CONSTITUENTNAME = dbo.UFN_CONSTITUENT_BUILDNAME(SO.CONSTITUENTID),
@ORDERAMOUNT = SO.AMOUNT
from dbo.SALESORDER SO
where ID = @RESERVATIONID;
set @TOTALDISCOUNTS = @ORDERTOTALPREDISCOUNT - @ORDERAMOUNT
if @TOTALDISCOUNTS < 0
set @TOTALDISCOUNTS = @ORDERAMOUNT;
declare @SECURITYDEPOSITBALANCE money;
set @SECURITYDEPOSITBALANCE = dbo.UFN_RESERVATION_GETSECURITYDEPOSITAMOUNTDUE(@RESERVATIONID);
declare @LATESTDEPOSITPAYMENT date;
select top(1) @LATESTDEPOSITPAYMENT = PAYMENTDATEWITHTIMEOFFSET
from dbo.RESERVATIONSECURITYDEPOSITPAYMENT
where RESERVATIONID = @RESERVATIONID
order by PAYMENTDATEWITHTIMEOFFSET desc;
-- Security deposit info
declare @SECURITYDEPOSITREFUNDEDAMOUNT money;
declare @SECURITYDEPOSITREFUNDEDDATE date;
declare @SECURITYDEPOSITWITHHELDREASON nvarchar(100);
declare @SECURITYDEPOSITSTATUSCODE tinyint;
select
@SECURITYDEPOSITWITHHELDREASON = CODE.DESCRIPTION,
@SECURITYDEPOSITSTATUSCODE = RES.SECURITYDEPOSITSTATUSCODE
from
dbo.RESERVATION RES
left outer join
dbo.RESERVATIONSECURITYDEPOSITWITHHOLDREASONCODE CODE on RES.SECURITYDEPOSITWITHHOLDREASONCODEID = CODE.ID
where
RES.ID = @RESERVATIONID;
set @SECURITYDEPOSITREFUNDEDAMOUNT =
case
when @SECURITYDEPOSITSTATUSCODE = 2 or @SECURITYDEPOSITSTATUSCODE = 4 then (
select sum(CREDITPAYMENT.AMOUNT)
from dbo.UFN_SALESORDER_REFUNDS(@RESERVATIONID) as REFUNDS
inner join dbo.CREDITPAYMENT on CREDITPAYMENT.CREDITID = REFUNDS.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as REFUNDEDLI on REFUNDEDLI.ID = CREDITPAYMENT.REVENUESPLITID
inner join dbo.REVENUESPLIT_EXT as EXT on EXT.ID = REFUNDEDLI.ID
where EXT.TYPECODE = 13 -- Security deposit
)
else 0
end;
select top(1)
@SECURITYDEPOSITREFUNDEDDATE = cast(FT.DATE as datetime)
from
dbo.UFN_SALESORDER_REFUNDS(@RESERVATIONID) as REFUNDS
inner join
dbo.FINANCIALTRANSACTION as FT on FT.ID = REFUNDS.ID
inner join
dbo.CREDITPAYMENT on CREDITPAYMENT.CREDITID = REFUNDS.ID
inner join
dbo.FINANCIALTRANSACTIONLINEITEM as REFUNDEDLI on REFUNDEDLI.ID = CREDITPAYMENT.REVENUESPLITID
inner join
dbo.REVENUESPLIT_EXT as EXT on EXT.ID = REFUNDEDLI.ID
where
EXT.TYPECODE = 13 -- Security deposit
order by
FT.DATE desc;
select @OVERAGEKEPT = sum(FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT)
from dbo.SALESORDER
inner join dbo.FINANCIALTRANSACTIONLINEITEM on SALESORDER.REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where SALESORDER.ID = @RESERVATIONID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0
and REVENUESPLIT_EXT.TYPECODE = 20;
with TABLE_CTE as (
select sum(QUANTITY) QUANTITY,
DESCRIPTION,
ISFACILITYRENTAL,
ITEMTYPECODE
from @TABLE
group by DESCRIPTION, ISFACILITYRENTAL, ITEMTYPECODE
),
REFUNDS_CTE as (
select
CREDITPAYMENT.CREDITID as CREDITID,
CONVERT(date, CREDITPAYMENT.CREDITPAYMENTDATEWITHTIMEOFFSET) as CREDITDATE,
case CREDITPAYMENT.PAYMENTMETHODCODE
when 10 then -- 'Other' refunds need information from a different table
OTHERPAYMENTMETHODCODE.DESCRIPTION
else
CREDITPAYMENT.PAYMENTMETHOD
end as CREDITMETHOD,
CREDITPAYMENT.AMOUNT as CREDITAMOUNT,
CREDITREASONCODE.DESCRIPTION as CREDITREASON,
CREDITPAYMENT.REVENUEID as REVENUEID
from
dbo.CREDITPAYMENT
left join
dbo.OTHERPAYMENTMETHODCODE on OTHERPAYMENTMETHODCODE.ID = CREDITPAYMENT.OTHERPAYMENTMETHODCODEID
inner join
dbo.CREDIT_EXT on CREDIT_EXT.ID = CREDITPAYMENT.CREDITID
left join
dbo.CREDITREASONCODE on CREDITREASONCODE.ID = CREDIT_EXT.CREDITREASONCODEID
)
select
[SO].[SEQUENCEID] ORDERNUMBER,
@CONTACTNAME CONTACTNAME,
@TOTALVISITORCOUNT VISITORCOUNT,
[R].[ARRIVALDATE] ARRIVALDATE,
@ORDERTOTALPREDISCOUNT TOTALPRICE,
[SOP].[ID] SALESORDERPAYMENTID,
[SOP].[AMOUNT] PAYMENT,
[SOP].[DATEADDED] PAYMENTDATE,
[SOP].[ID] PAYMENTID,
@CONSTITUENTNAME CONSTITUENTNAME,
[R].[FINALDUEDATE] DUEDATE,
(
select sum(AMOUNT)
from dbo.SALESORDERPAYMENT
where SALESORDERID = @RESERVATIONID
) as TOTALPAYMENTAMOUNT,
[RPM].[PAYMENTMETHOD] PAYMENTMETHOD,
case
when [RPM].[PAYMENTMETHODCODE] = 0 then
''
when [RPM].[PAYMENTMETHODCODE] = 1 then (
select 'Check #' + CHECKNUMBER + ', ' + convert(nvarchar(20), dbo.UFN_DATE_FROMFUZZYDATE(CHECKDATE), 101)
from dbo.CHECKPAYMENTMETHODDETAIL
where ID = [RPM].[ID]
)
when [RPM].[PAYMENTMETHODCODE] = 2 then (
select dbo.UFN_CREDITTYPECODE_GETDESCRIPTION(CREDITTYPECODEID) + ' - ' + CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
from dbo.CREDITCARDPAYMENTMETHODDETAIL
where ID = [RPM].[ID]
)
when [RPM].[PAYMENTMETHODCODE] = 10 then (
select dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(OTHERPAYMENTMETHODCODEID)
from dbo.OTHERPAYMENTMETHODDETAIL
where ID = [RPM].[ID]
)
end as PAYMENTDETAILS,
[T].[QUANTITY] QUANTITY,
[T].[DESCRIPTION] [DESCRIPTION],
coalesce([OI].[NAME],'') ORGANIZATIONNAME,
coalesce([OI].[ADDRESSBLOCK],'') ADDRESSBLOCK,
coalesce([OI].[CITY],'') [CITY],
coalesce([ST].[ABBREVIATION],'') [STATE],
coalesce([OI].[POSTCODE],'') POSTCODE,
coalesce([OI].[PHONENUMBER],'') PHONENUMBER,
[T].[ISFACILITYRENTAL] ISFACILITYRENTAL,
@TOTALDISCOUNTS DISCOUNTTOTAL,
[T].[ITEMTYPECODE] ITEMTYPECODE,
[R].[SECURITYDEPOSITREQUIRED] SECURITYDEPOSITREQUIRED,
@SECURITYDEPOSITSTATUSCODE SECURITYDEPOSITSTATUSCODE,
@SECURITYDEPOSITBALANCE SECURITYDEPOSITBALANCE,
[R].[SECURITYDEPOSITAMOUNT] SECURITYDEPOSITDUE,
[R].[SECURITYDEPOSITDUEDATE] SECURITYDEPOSITDUEDATE,
@LATESTDEPOSITPAYMENT SECURITYDEPOSITPAIDDATE,
@SECURITYDEPOSITREFUNDEDDATE SECURITYDEPOSITREFUNDEDDATE,
@SECURITYDEPOSITREFUNDEDAMOUNT SECURITYDEPOSITREFUNDEDAMOUNT,
@SECURITYDEPOSITWITHHELDREASON SECURITYDEPOSITWITHHELDREASON,
SALESORDERTOTALS.REFUNDS as TOTALCREDITAMOUNT,
REFUNDS_CTE.CREDITID,
REFUNDS_CTE.CREDITDATE,
REFUNDS_CTE.CREDITMETHOD,
REFUNDS_CTE.CREDITAMOUNT,
REFUNDS_CTE.CREDITREASON,
SALESORDERTOTALS.BALANCE as BALANCE,
@OVERAGEKEPT as OVERAGEKEPT,
convert(varchar,convert(time,substring(nullif([R].[ARRIVALTIME],''),1,2)+':'+substring(nullif([R].[ARRIVALTIME],''),3,2)),0) ARRIVALTIME,
[R].[NAME] RESERVATIONNAME
from [dbo].[SALESORDER] as SO
inner join [dbo].[RESERVATION] as R on R.ID = [SO].[ID]
left outer join [dbo].[CONSTITUENT] as C on [C].[ID] = [SO].[CONSTITUENTID]
left outer join [dbo].[SALESORDERPAYMENT] as SOP on [SO].[ID] = [SOP].[SALESORDERID]
left outer join [dbo].[ITINERARY] as I on [I].[RESERVATIONID] = [R].[ID]
left outer join [dbo].[REVENUEPAYMENTMETHOD] as RPM on [RPM].[REVENUEID] = [SOP].[PAYMENTID]
full outer join [dbo].[ORGANIZATIONINFORMATION] as OI on [R].ID = @RESERVATIONID
full outer join TABLE_CTE as T on [R].ID = @RESERVATIONID
left outer join [dbo].[STATE] as ST on ST.ID = OI.STATEID
left outer join REFUNDS_CTE on REFUNDS_CTE.REVENUEID = [SOP].PAYMENTID
outer apply dbo.UFN_SALESORDER_TOTALS(@RESERVATIONID) as SALESORDERTOTALS
where [R].[ID] = @RESERVATIONID
group by [SOP].[ID],[SOP].[AMOUNT],[SO].[AMOUNT],[R].[ARRIVALDATE],[R].[NAME],[SO].[SEQUENCEID],[I].[LEADERID],[SOP].[ID],
[SOP].[DATEADDED],[C].[ID],[R].[FINALDUEDATE],[RPM].[PAYMENTMETHOD],[RPM].[PAYMENTMETHODCODE],[RPM].[ID],[T].[QUANTITY],
[T].[DESCRIPTION],[OI].[NAME],[OI].[ADDRESSBLOCK],[OI].[CITY],[ST].[ABBREVIATION],[OI].[POSTCODE],[OI].[PHONENUMBER],
[T].[ISFACILITYRENTAL], [T].[ITEMTYPECODE], [R].[SECURITYDEPOSITREQUIRED], [R].[SECURITYDEPOSITAMOUNT], [R].[SECURITYDEPOSITDUEDATE],
REFUNDS_CTE.CREDITID, REFUNDS_CTE.CREDITDATE, REFUNDS_CTE.CREDITAMOUNT,
REFUNDS_CTE.CREDITMETHOD, REFUNDS_CTE.CREDITREASON, SALESORDERTOTALS.REFUNDS,
SALESORDERTOTALS.BALANCE, [R].[ARRIVALTIME], [R].[NAME]
return 0;