USP_SALESORDERPAYMENT_DELETE
Deletes a sales order payment.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_SALESORDERPAYMENT_DELETE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null
)
as begin
declare @REVENUEID uniqueidentifier;
declare @STATUSCODE tinyint;
declare @SALESORDERID uniqueidentifier;
declare @SALESMETHOD tinyint;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
select
@STATUSCODE = [SALESORDER].[STATUSCODE],
@REVENUEID = [SALESORDERPAYMENT].[PAYMENTID],
@SALESORDERID = [SALESORDERPAYMENT].[SALESORDERID],
@SALESMETHOD = [SALESORDER].[SALESMETHODTYPECODE]
from dbo.[SALESORDER]
inner join dbo.[SALESORDERPAYMENT]
on [SALESORDER].[ID] = [SALESORDERPAYMENT].[SALESORDERID]
where [SALESORDERPAYMENT].[ID] = @ID
--check deletion rules, if any
if @STATUSCODE = 1
begin
raiserror('Payments cannot be deleted from completed sales orders.', 13, 1);
return 0;
end
-- use the system generated delete routine to allow proper recording of the deleting agent
exec dbo.USP_FINANCIALTRANSACTION_DELETEBYID_WITHCHANGEAGENTID @REVENUEID, @CHANGEAGENTID
if @SALESMETHOD < 2
begin
-- recalculate any cash payments
-- only if it's daily/advance sales
declare @AMOUNT money;
declare @AMOUNTTENDERED money;
select
@AMOUNT = AMOUNTPAID,
@AMOUNTTENDERED = AMOUNTTENDERED
from
dbo.UFN_SALESORDER_TOTALS(@SALESORDERID);
if @AMOUNTTENDERED > @AMOUNT
begin
declare @BALANCE money;
select @BALANCE = dbo.UFN_SALESORDER_GETAMOUNTDUE(@SALESORDERID);
select @REVENUEID = PAYMENTID
from dbo.SALESORDERPAYMENT
where SALESORDERID = @SALESORDERID
and AMOUNT < AMOUNTTENDERED;
if @AMOUNTTENDERED <= @BALANCE
begin
update dbo.SALESORDERPAYMENT
set AMOUNT = AMOUNTTENDERED, CHANGEDUE = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where PAYMENTID = @REVENUEID;
end
else
begin
-- Amount tendered is still greater than the balance, so we need to recalc
-- the cash amount
declare @CHANGEDUE money;
select @CHANGEDUE = AMOUNTTENDERED - @BALANCE
from dbo.SALESORDERPAYMENT
where SALESORDERID = @SALESORDERID
and AMOUNT < AMOUNTTENDERED;
update dbo.SALESORDERPAYMENT
set AMOUNT = @BALANCE,
CHANGEDUE = @CHANGEDUE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where PAYMENTID = @REVENUEID;
end
-- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @REVENUEID;
update REVENUE set
TRANSACTIONAMOUNT = SALESORDERPAYMENT.AMOUNT
,BASEAMOUNT = SALESORDERPAYMENT.AMOUNT
,ORGAMOUNT = SALESORDERPAYMENT.AMOUNT
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.FINANCIALTRANSACTION REVENUE
inner join dbo.SALESORDERPAYMENT on REVENUE.ID = SALESORDERPAYMENT.PAYMENTID
where REVENUE.ID = @REVENUEID;
end
end
return 0;
end