USP_DATAFORMTEMPLATE_EDIT_SALESORDERPAYMENT
The save procedure used by the edit dataform template "Sales Order Payment Edit Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@DATE | datetime | IN | Date |
@AMOUNT | money | IN | Amount |
@POSTSTATUSCODE | tinyint | IN | Post status |
@POSTDATE | datetime | IN | Post date |
@PAYMENTMETHODCODE | tinyint | IN | Payment method |
@OTHERPAYMENTMETHODCODEID | uniqueidentifier | IN | Other method |
@CHECKDATE | UDT_FUZZYDATE | IN | Check date |
@CHECKNUMBER | nvarchar(20) | IN | Check number |
@CARDHOLDERNAME | nvarchar(255) | IN | Name on card |
@CREDITCARDNUMBER | nvarchar(4) | IN | Card number |
@CREDITTYPECODEID | uniqueidentifier | IN | Card type |
@AUTHORIZATIONCODE | nvarchar(20) | IN | Authorization code |
@EXPIRESON | UDT_FUZZYDATE | IN | Expires on |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SALESORDERPAYMENT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@DATE datetime,
@AMOUNT money,
@POSTSTATUSCODE tinyint,
@POSTDATE datetime,
@PAYMENTMETHODCODE tinyint,
@OTHERPAYMENTMETHODCODEID uniqueidentifier,
@CHECKDATE dbo.UDT_FUZZYDATE,
@CHECKNUMBER nvarchar(20),
@CARDHOLDERNAME nvarchar(255),
@CREDITCARDNUMBER nvarchar(4),
@CREDITTYPECODEID uniqueidentifier,
@AUTHORIZATIONCODE nvarchar(20),
@EXPIRESON dbo.UDT_FUZZYDATE
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = GetDate();
declare @CLEARGLDISTRIBUTIONS bit;
set @CLEARGLDISTRIBUTIONS = 0;
declare @contextCache varbinary(128);
--cache current context information
set @contextCache = CONTEXT_INFO();
--set CONTEXT_INFO to @CHANGEAGENTID
set CONTEXT_INFO @CHANGEAGENTID;
declare @PAYMENTID uniqueidentifier;
select @PAYMENTID = PAYMENTID from dbo.SALESORDERPAYMENT where ID = @ID;
begin try
if @POSTSTATUSCODE = 0
raiserror('You cannot edit a posted payment.', 13, 1)
if @AMOUNT <= 0
raiserror('BBERR_AMOUNTREQUIRED.', 13, 1)
declare @DONOTPOST bit;
select @DONOTPOST = case when @POSTSTATUSCODE = 2 then 1 else 0 end;
declare @ORIGINALPAYMETHODID uniqueidentifier, @ORIGINALPAYMENTMETHODCODE tinyint
select
@ORIGINALPAYMETHODID = ID,
@ORIGINALPAYMENTMETHODCODE = PAYMENTMETHODCODE
from dbo.REVENUEPAYMENTMETHOD
where REVENUEID = @PAYMENTID;
-- check to see if amount, post status or payment method has changed
if (
select count(REVENUE.ID) from dbo.REVENUE
where REVENUE.ID = @PAYMENTID
and AMOUNT = @AMOUNT
and POSTDATE = @POSTDATE
and ((@POSTSTATUSCODE = 2 and DONOTPOST = 1) or (@POSTSTATUSCODE = 1 and DONOTPOST = 0))
) = 0 or @ORIGINALPAYMENTMETHODCODE <> @PAYMENTMETHODCODE
begin
set @CLEARGLDISTRIBUTIONS = 1;
end
if @AMOUNT < 0
raiserror('BBERR_NEGATIVEAMOUNT.', 13, 1);
-- check to see if amount or receipt amount have changed
declare @FIELDCHANGED bit;
set @FIELDCHANGED = 0;
declare @ORIGINALAMOUNT money;
select @ORIGINALAMOUNT = AMOUNT from dbo.REVENUE where REVENUE.ID = @PAYMENTID;
if @ORIGINALAMOUNT <> @AMOUNT
set @FIELDCHANGED = 1;
-- if a field has changed, determine if the revenue needs to be re-receipted or re-acknowledged
if @FIELDCHANGED = 1
begin
declare @CHANGEDUE money;
declare @AMOUNTTENDERED money;
declare @ORDERAMOUNT money;
--get balance before original payment amount
declare @SALESORDERID uniqueidentifier;
select @SALESORDERID = SALESORDERID
from dbo.SALESORDERPAYMENT
where ID = @ID;
set @ORDERAMOUNT = dbo.UFN_SALESORDER_GETAMOUNTDUE(@SALESORDERID) + @ORIGINALAMOUNT;
set @AMOUNTTENDERED = @AMOUNT;
set @CHANGEDUE = 0;
if @PAYMENTMETHODCODE = 0 --cash
begin
if @AMOUNT > @ORDERAMOUNT
begin
set @CHANGEDUE = @AMOUNT - @ORDERAMOUNT;
set @AMOUNT = @ORDERAMOUNT;
end
end
else
begin
if @AMOUNT > @ORDERAMOUNT
raiserror('BBERR_OVERPAY.', 13, 1);
end
exec dbo.USP_REVENUE_UPDATERERECEIPTS @PAYMENTID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @PAYMENTID, @CHANGEAGENTID, @CURRENTDATE;
update dbo.SALESORDERPAYMENT
set AMOUNT = @AMOUNT,
AMOUNTTENDERED = @AMOUNTTENDERED,
CHANGEDUE = @CHANGEDUE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
end
if @ORIGINALAMOUNT <> @AMOUNT
-- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @PAYMENTID;
--Update Transaction
update dbo.REVENUE
set DATE = @DATE,
AMOUNT = @AMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @PAYMENTID;
update dbo.REVENUEPAYMENTMETHOD set
PAYMENTMETHODCODE = @PAYMENTMETHODCODE,
AMOUNT = @AMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ORIGINALPAYMETHODID;
exec dbo.USP_REVENUE_UPDATEPAYMENTDETAILS
@PAYMENTMETHODID = @ORIGINALPAYMETHODID,
@PAYMENTMETHODCODE = @PAYMENTMETHODCODE,
@CHECKDATE = @CHECKDATE,
@CHECKNUMBER = @CHECKNUMBER,
@CARDHOLDERNAME = @CARDHOLDERNAME,
@CREDITCARDNUMBER = @CREDITCARDNUMBER,
@CREDITTYPECODEID = @CREDITTYPECODEID,
@AUTHORIZATIONCODE = @AUTHORIZATIONCODE,
@EXPIRESON = @EXPIRESON,
@CHANGEAGENTID = @CHANGEAGENTID,
@CHANGEDATE = @CURRENTDATE,
@KEYALREADYOPEN = 0,
@OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
@REVENUEAMOUNT = @AMOUNT,
@ORIGINALPAYMENTMETHODCODE=@ORIGINALPAYMENTMETHODCODE;
if @FIELDCHANGED = 1
begin
--need to update the applications.
declare @MAPPING table
(PAYMENTSPLITID uniqueidentifier,
AMOUNT money);
insert into @MAPPING(PAYMENTSPLITID, AMOUNT)
select
a.ID,
a.AMOUNT
from dbo.UFN_PLEDGE_GETSPLITSFORPAYMENT(@PAYMENTID, @AMOUNT) as a;
merge dbo.REVENUESPLIT as target
using @MAPPING as source
on (target.ID = source.PAYMENTSPLITID)
when matched then update set
AMOUNT = source.AMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE;
end
declare @OLDPOSTDATE datetime;
declare @OLDDONOTPOST bit;
select @OLDPOSTDATE = POSTDATE, @OLDDONOTPOST = DONOTPOST from dbo.REVENUE where ID = @PAYMENTID;
if @OLDPOSTDATE <> @POSTDATE or @OLDDONOTPOST <> @DONOTPOST
begin
update dbo.REVENUE
set POSTDATE = @POSTDATE,
DONOTPOST = case when @POSTSTATUSCODE = 2 then 1 else 0 end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @PAYMENTID;
end
declare @SALESMETHODTYPECODE tinyint;
declare @STATUSCODE tinyint;
declare @CONSTITUENTID uniqueidentifier;
select
@SALESMETHODTYPECODE = SALESORDER.SALESMETHODTYPECODE,
@STATUSCODE = STATUSCODE,
@CONSTITUENTID = CONSTITUENTID
from dbo.SALESORDER
inner join dbo.SALESORDERPAYMENT on SALESORDER.ID = SALESORDERPAYMENT.SALESORDERID
where SALESORDERPAYMENT.ID = @ID;
if @STATUSCODE = 1 or @SALESMETHODTYPECODE = 3
begin
-- clear the user-defined gl distributions
if @CLEARGLDISTRIBUTIONS = 1
begin
-- Clear GL
delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @PAYMENTID and OUTDATED = 0;
-- Add new GL distributions
if @POSTSTATUSCODE <> 2
begin
-- Add new GL distributions
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @PAYMENTID, @CHANGEAGENTID, @CURRENTDATE;
end
end
end
-- Order is no longer completed automatically
--else
-- begin
-- if @SALESMETHODTYPECODE <> 3 and @AMOUNT >= @ORDERAMOUNT
-- begin
-- --mark the order as complete
-- exec dbo.USP_SALESORDER_COMPLETEORDER @SALESORDERID, @DATE, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
-- end
-- end
if @FIELDCHANGED = 1 and @SALESMETHODTYPECODE = 3
--group sales reservation, progress status
exec dbo.USP_RESERVATION_UPDATESTATUSANDHISTORY @SALESORDERID, @CHANGEAGENTID
end try
begin catch
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
return 0;