USP_SALESORDER_DISTRIBUTEITEMFEES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ORDERID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_SALESORDER_DISTRIBUTEITEMFEES
(
@ORDERID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null
)
as begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
-- SALESORDERITEM records for fees have QUANTITY = 1 and PRICE = (ticket quantity * fee amount),
-- so we'll need to divide their price by the number of tickets to get the per-ticket amount.
-- Also: if some subset of these tickets with fees were refunded before 2014 S1, the fees went with them.
-- We need to set the REFUNDEDAMOUNT to the full per-ticket fee amount in those cases.
insert into dbo.SALESORDERITEMTICKETFEE
(ID, SALESORDERITEMFEEID, TICKETID, AMOUNT, REFUNDEDAMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
newid(),
FEE.ID,
TICKET.ID,
FEEITEM.PRICE / TICKETITEM.QUANTITY, -- Divide fee by original quantity for per-ticket amount
case
when TICKET.ISREFUNDED = 0 then 0.0
else FEEITEM.PRICE / TICKETITEM.QUANTITY
end,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.SALESORDERITEM FEEITEM
inner join dbo.SALESORDERITEMFEE FEE on FEE.ID = FEEITEM.ID
inner join dbo.SALESORDERITEM TICKETITEM on TICKETITEM.ID = FEE.SALESORDERITEMID
inner join dbo.TICKET on TICKET.SALESORDERITEMTICKETID = TICKETITEM.ID
left join dbo.SALESORDERITEMTICKETFEE TICKETFEE on TICKETFEE.SALESORDERITEMFEEID = FEE.ID
where FEEITEM.SALESORDERID = @ORDERID
and TICKETFEE.ID is null; -- Only distribute fees that haven't been yet
end