USP_SALESORDER_ADDBENEFITS
Records the benefits granted for the given sales order
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SALESORDERID | uniqueidentifier | IN | |
@REVENUEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_SALESORDER_ADDBENEFITS
(
@SALESORDERID uniqueidentifier,
@REVENUEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime
)
as begin
set nocount on;
declare @BENEFITS table (
BENEFITID uniqueidentifier,
DETAILS text,
QUANTITY int,
SEQUENCE int,
UNITVALUE money,
PERCENTAPPLICABLEAMOUNT money,
VALUEPERCENT int,
BASECURRENCYID uniqueidentifier,
REVENUESPLITID uniqueidentifier
)
insert into @BENEFITS
select
MEMBERSHIPLEVELBENEFIT.BENEFITID,
MEMBERSHIPLEVELBENEFIT.DETAILS,
SUM(MEMBERSHIPLEVELBENEFIT.QUANTITY) as QUANTITY,
MEMBERSHIPLEVELBENEFIT.SEQUENCE,
MEMBERSHIPLEVELBENEFIT.UNITVALUE,
SALESORDERITEM.TOTAL - isnull((
select sum(AMOUNT) from dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION P where P.SALESORDERITEMID = SALESORDERITEM.ID
), 0) as PERCENTAPPLICABLEAMOUNT,
MEMBERSHIPLEVELBENEFIT.VALUEPERCENT,
MEMBERSHIPLEVELBENEFIT.BASECURRENCYID as BASECURRENCYID,
MEMBERSHIPTRANSACTION.REVENUESPLITID
from dbo.SALESORDER
inner join dbo.SALESORDERITEM on SALESORDERITEM.SALESORDERID = SALESORDER.ID
inner join dbo.SALESORDERITEMMEMBERSHIP on SALESORDERITEMMEMBERSHIP.ID = SALESORDERITEM.ID
inner join dbo.MEMBERSHIPTRANSACTION on SALESORDERITEMMEMBERSHIP.MEMBERSHIPTRANSACTIONID = MEMBERSHIPTRANSACTION.ID
inner join dbo.MEMBERSHIPLEVEL ON SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
inner join dbo.MEMBERSHIPLEVELBENEFIT on MEMBERSHIPLEVEL.ID = MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID
where SALESORDER.REVENUEID = @REVENUEID
and (MEMBERSHIPTRANSACTION.ACTIONCODE = 0 or (MEMBERSHIPTRANSACTION.ACTIONCODE <> 0 and MEMBERSHIPLEVELBENEFIT.FREQUENCYCODE = 0))
group by
MEMBERSHIPLEVELBENEFIT.BENEFITID, MEMBERSHIPLEVELBENEFIT.UNITVALUE, MEMBERSHIPLEVELBENEFIT.DETAILS, MEMBERSHIPLEVELBENEFIT.SEQUENCE,
MEMBERSHIPLEVELBENEFIT.VALUEPERCENT, SALESORDERITEM.TOTAL, SALESORDERITEM.ID,
MEMBERSHIPLEVELBENEFIT.BASECURRENCYID, MEMBERSHIPTRANSACTION.REVENUESPLITID
union all
select
BENEFITID,
DETAILS,
sum(QUANTITY) as QUANTITY,
0 as SEQUENCE,
VALUE,
sum(PERCENTAPPLICABLEAMOUNT) as PERCENTAPPLICABLEAMOUNT,
0 as VALUEPERCENT,
BASECURRENCYID,
REVENUESPLITID
-- From: Getting registration benefits grouped by REGISTRANTREGISTRATION so we can properly total PERCENTAPPLICABLEAMOUNT
-- If we were to sum REGISTRANTREGISTRATION.AMOUNT below, the total would be a multiple of the number of registrants in that registration + a multiple of the other registrations that share a benefit and split
from (
select
REGISTRANTBENEFIT.BENEFITID,
REGISTRANTBENEFIT.DETAILS,
sum(REGISTRANTBENEFIT.QUANTITY) as QUANTITY,
UNIT.VALUE,
REGISTRANTREGISTRATION.AMOUNT as PERCENTAPPLICABLEAMOUNT,
REGISTRANTBENEFIT.BASECURRENCYID as BASECURRENCYID,
FINANCIALTRANSACTIONLINEITEM.ID as REVENUESPLITID
from (
select
SALESORDERITEMEVENTREGISTRATION.REGISTRANTID as REGISTRANTID,
dbo.UFN_EVENTREGISTRANT_GETBALANCE(SALESORDERITEMEVENTREGISTRATION.REGISTRANTID) as BALANCE
from dbo.SALESORDERITEM with (nolock)
inner join dbo.SALESORDERITEMEVENTREGISTRATION with (nolock) on
SALESORDERITEM.ID = SALESORDERITEMEVENTREGISTRATION.ID
where SALESORDERITEM.SALESORDERID = @SALESORDERID
) as [REGISTRATIONS]
inner join (
select
ID,
ID as JOINID,
BENEFITSWAIVED
from dbo.REGISTRANT with (nolock)
union all
select
ID,
GUESTOFREGISTRANTID as JOINID,
BENEFITSWAIVED
from
dbo.REGISTRANT with (nolock)
) as REGISTRANTS on REGISTRANTS.JOINID = REGISTRATIONS.REGISTRANTID
inner join dbo.REGISTRANTREGISTRATIONMAP with (nolock) on
REGISTRANTS.ID = REGISTRANTREGISTRATIONMAP.REGISTRANTID
inner join dbo.REGISTRANTREGISTRATION with (nolock) on
REGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = REGISTRANTREGISTRATION.ID
inner join dbo.EVENTPRICE with (nolock) on
REGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
inner join dbo.REGISTRANTBENEFIT with (nolock)
on REGISTRANTS.ID = REGISTRANTBENEFIT.REGISTRANTID
outer apply (
select
case
when REGISTRANTREGISTRATION.AMOUNT = 0 and EVENTPRICE.AMOUNT > 0 then 0
else REGISTRANTBENEFIT.UNITVALUE
end VALUE
) UNIT
inner join dbo.EVENTREGISTRANTPAYMENT with (nolock) on
[REGISTRATIONS].REGISTRANTID = EVENTREGISTRANTPAYMENT.REGISTRANTID
inner join dbo.FINANCIALTRANSACTIONLINEITEM with (nolock) on
FINANCIALTRANSACTIONLINEITEM.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
where
REGISTRANTS.BENEFITSWAIVED = 0 and
[REGISTRATIONS].BALANCE = 0 and
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID and
FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID is null -- Do not get the line item for the designation here.
group by
REGISTRANTBENEFIT.BENEFITID,
REGISTRANTBENEFIT.DETAILS,
REGISTRANTBENEFIT.BASECURRENCYID,
FINANCIALTRANSACTIONLINEITEM.ID,
REGISTRANTREGISTRATION.ID,
REGISTRANTREGISTRATION.AMOUNT,
UNIT.VALUE
) as [BENEFITDATA]
group by
BENEFITID,
DETAILS,
BASECURRENCYID,
REVENUESPLITID,
VALUE;
if @@rowcount > 0 begin
declare @UNITVALUESUMS table (
ID uniqueidentifier,
UNITSUM money
)
insert into @UNITVALUESUMS
select REVENUESPLITID, sum(UNITVALUE) from @BENEFITS
group by REVENUESPLITID
update @BENEFITS
set PERCENTAPPLICABLEAMOUNT -= (select UNITSUM from @UNITVALUESUMS where REVENUESPLITID = ID)
where PERCENTAPPLICABLEAMOUNT > 0
update @BENEFITS
set PERCENTAPPLICABLEAMOUNT = 0
where PERCENTAPPLICABLEAMOUNT < 0
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORIGINCODE tinyint;
select @ORIGINCODE = coalesce(ORGANIZATIONAMOUNTORIGINCODE, 0)
from dbo.MULTICURRENCYCONFIGURATION
declare @REVENUETRANSACTIONCURRENCYID uniqueidentifier
select
@REVENUETRANSACTIONCURRENCYID = FT.TRANSACTIONCURRENCYID
from
dbo.FINANCIALTRANSACTION as FT
inner join
dbo.REVENUE_EXT as EXT on EXT.ID = FT.ID
where
FT.ID = @REVENUEID
and FT.DELETEDON is null
insert into dbo.REVENUEBENEFIT
(
REVENUEID,
BENEFITID,
QUANTITY,
UNITVALUE,
DETAILS,
SEQUENCE,
ADDEDBYID,
CHANGEDBYID,
SENDBENEFIT,
PERCENTAPPLICABLEAMOUNT,
VALUEPERCENT,
TRANSACTIONTOTALVALUE,
ORGANIZATIONTOTALVALUE,
BASECURRENCYID,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID,
REVENUESPLITID
)
(
select
@REVENUEID,
BENEFITID,
QUANTITY,
UNITVALUE,
DETAILS,
SEQUENCE,
@CHANGEAGENTID,
@CHANGEAGENTID,
0, -- Send benefit: 0 to create gl distribution when committed.
PERCENTAPPLICABLEAMOUNT,
VALUEPERCENT,
TRANSACTIONTOTALVALUE,
case
when @ORIGINCODE = 0 then
case
when BASECURRENCYID = @ORGANIZATIONCURRENCYID
then TOTALVALUE
else dbo.UFN_CURRENCY_CONVERT(TOTALVALUE, ORGANIZATIONEXCHANGERATEID)
end
when @ORIGINCODE = 1 then
case
when @REVENUETRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID
then CONVERSION.TRANSACTIONTOTALVALUE
else dbo.UFN_CURRENCY_CONVERT(CONVERSION.TRANSACTIONTOTALVALUE, ORGANIZATIONEXCHANGERATEID)
end
end ORGANIZATIONTOTALVALUE,
BASECURRENCYID,
@REVENUETRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID,
REVENUESPLITID
from(
select
BENEFITID,
QUANTITY,
UNITVALUE,
cast(coalesce((QUANTITY * UNITVALUE),0) + coalesce((PERCENTAPPLICABLEAMOUNT * VALUEPERCENT * 0.01),0) as money) TOTALVALUE,
DETAILS,
SEQUENCE,
PERCENTAPPLICABLEAMOUNT,
VALUEPERCENT,
BASECURRENCYID,
REVENUESPLITID,
case
when BASECURRENCYID <> @REVENUETRANSACTIONCURRENCYID
then dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(BASECURRENCYID,@REVENUETRANSACTIONCURRENCYID, @CURRENTDATE, 1, null)
else null
end BASEEXCHANGERATEID,
case
when @ORIGINCODE = 0 then
case
when BASECURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null)
else null
end
when @ORIGINCODE = 1 then
case
when @REVENUETRANSACTIONCURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@REVENUETRANSACTIONCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null)
else null
end
end ORGANIZATIONEXCHANGERATEID
from @BENEFITS
) BASE
outer apply(
select
case
when BASECURRENCYID <> @REVENUETRANSACTIONCURRENCYID
then dbo.UFN_CURRENCY_CONVERT(TOTALVALUE, BASEEXCHANGERATEID)
else TOTALVALUE
end TRANSACTIONTOTALVALUE
) CONVERSION
)
end
end