USP_DATAFORMTEMPLATE_EDIT_AUCTIONDONATION_2
The save procedure used by the edit dataform template "Auction Donation Edit Data 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. |
@AMOUNT | money | IN | Value |
@DATE | datetime | IN | Date |
@EXPIRATIONDATE | datetime | IN | Expiration date |
@DESIGNATIONID | uniqueidentifier | IN | Designation |
@POSTDATE | datetime | IN | Post date |
@POSTSTATUSCODE | tinyint | IN | Post status |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate ID |
@EXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_AUCTIONDONATION_2
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@AMOUNT money,
@DATE datetime,
@EXPIRATIONDATE datetime,
@DESIGNATIONID uniqueidentifier,
@POSTDATE datetime,
@POSTSTATUSCODE tinyint,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @DONOTPOST bit;
set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;
declare @ORGANIZATIONAMOUNT money;
declare @BASEAMOUNT money;
declare @BASECURRENCYID uniqueidentifier;
declare @ORIGINTOORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @PREVIOUSDATE datetime;
declare @OLDSPOTRATEID uniqueidentifier;
begin try
-- Check GL business rule for this account system and set to 'Do not post' if needed.
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @ID;
if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @DONOTPOST = 1
set @POSTDATE = null
end;
declare @SITEID uniqueidentifier;
select @SITEID = dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(@DESIGNATIONID);
declare @EVENTAUCTIONID uniqueidentifier;
select @EVENTAUCTIONID = AUCTIONITEM.EVENTAUCTIONID from dbo.AUCTIONITEM where REVENUEAUCTIONDONATIONID = @ID;
if (@EVENTAUCTIONID is not null)
and (
(@SITEID is null and exists(select 1 from dbo.EVENTSITE where EVENTID = @EVENTAUCTIONID))
or
(@SITEID is not null and not exists(select 1 from dbo.EVENTSITE where EVENTID = @EVENTAUCTIONID and SITEID = @SITEID))
)
raiserror('BBERR_AUCTIONITEM_DESIGNATIONNOTVALID',13,1);
declare @ISPOSTED bit = 0;
declare @ORIGINALAMOUNT money = 0;
select
@ISPOSTED = case when FINANCIALTRANSACTION.POSTSTATUSCODE != 2 then 0 else 1 end,
@ORIGINALAMOUNT = FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
@BASECURRENCYID = V.BASECURRENCYID,
@PREVIOUSDATE = FINANCIALTRANSACTION.DATE,
@OLDSPOTRATEID =
case
when CURRENCYEXCHANGERATE.TYPECODE = 2
and not (@BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID or (@BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001' and @EXCHANGERATE = CURRENCYEXCHANGERATE.RATE))
then CURRENCYEXCHANGERATE.ID
else
null
end,
@ORIGINTOORGANIZATIONEXCHANGERATEID = FINANCIALTRANSACTION.ORGEXCHANGERATEID
from
dbo.FINANCIALTRANSACTION
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTION.ID = V.FINANCIALTRANSACTIONID
left join dbo.CURRENCYEXCHANGERATE on FINANCIALTRANSACTION.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
where FINANCIALTRANSACTION.ID = @ID;
if @ISPOSTED = 1
raiserror('BBERR_AUCTIONDONATION_SHOULDBEADJUSTMENT', 13, 1);
if @EXPIRATIONDATE < @DATE
raiserror('BBERR_AUCTIONDONATION_DONATIONDATEMUSTNOTBEAFTEREXPIRAITONDATE', 13, 1);
declare @LOOKUPORGANZIATIONEXCHANGERATE bit = 0;
if @ORIGINTOORGANIZATIONEXCHANGERATEID is null
begin
set @LOOKUPORGANZIATIONEXCHANGERATE = 1;
end
declare @HASWRITEOFF bit = 0;
select
@HASWRITEOFF = case when count(*) > 0 then 1 else 0 end
from
dbo.FINANCIALTRANSACTION
inner join
dbo.WRITEOFF_EXT on FINANCIALTRANSACTION.ID = WRITEOFF_EXT.ID
where
FINANCIALTRANSACTION.TYPECODE = 20
and FINANCIALTRANSACTION.DELETEDON is null
and FINANCIALTRANSACTION.PARENTID = @ID
and isnull(FINANCIALTRANSACTION.POSTSTATUSCODE, 3) != 3;
if @HASWRITEOFF = 1 and @AMOUNT <> @ORIGINALAMOUNT
raiserror('BBERR_AUCTIONDONATION_CANNOTADJUSTWRITTENOFFAMOUNT', 13, 1);
-- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @ID;
--If the record uses a new spot rate, create it and set the rate ID.
if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @BASEEXCHANGERATEID = newid();
--Replace with call to USP_CURRENCYEXCHANGERATE_ENSURESPOTRATEEXISTS for PBI 102747 in the future
/*if not dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID,'911f104d-ba5f-4469-b0ae-184c879aea99') = 1
and not dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
begin
raiserror('User does not have the right to add a new spot rate.', 13, 1);
return 1;
end*/
insert into dbo.CURRENCYEXCHANGERATE
(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@EXCHANGERATE,
@DATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORIGINTOORGANIZATIONEXCHANGERATEID output, @LOOKUPORGANZIATIONEXCHANGERATE;
-- handle updating the data
update dbo.FINANCIALTRANSACTION set
BASEAMOUNT = @BASEAMOUNT,
DATE = @DATE,
POSTDATE = @POSTDATE,
POSTSTATUSCODE = case FINANCIALTRANSACTION.POSTSTATUSCODE when 2 then 2 else case when @DONOTPOST = 1 then 3 else case @POSTSTATUSCODE when 0 then 2 else 1 end end end,
TRANSACTIONAMOUNT = @AMOUNT,
ORGAMOUNT = @ORGANIZATIONAMOUNT,
ORGEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
FINANCIALTRANSACTION.ID = @ID
and FINANCIALTRANSACTION.POSTSTATUSCODE <> 2;
update dbo.REVENUE_EXT set
RECEIPTAMOUNT = @AMOUNT,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from dbo.REVENUE_EXT
where
REVENUE_EXT.ID = @ID;
update dbo.FINANCIALTRANSACTIONLINEITEM set
POSTSTATUSCODE = case FINANCIALTRANSACTION.POSTSTATUSCODE when 2 then 2 else case when @DONOTPOST = 1 then 3 else case @POSTSTATUSCODE when 0 then 2 else 1 end end end,
POSTDATE = @POSTDATE,
BASEAMOUNT = @BASEAMOUNT,
TRANSACTIONAMOUNT = @AMOUNT,
ORGAMOUNT = @ORGANIZATIONAMOUNT,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
left outer join dbo.FINANCIALTRANSACTIONLINEITEM REVERSE on FINANCIALTRANSACTIONLINEITEM.ID = REVERSE.REVERSEDLINEITEMID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
and REVERSE.ID is null;
update dbo.REVENUESPLIT_EXT set
DESIGNATIONID = @DESIGNATIONID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from
dbo.REVENUESPLIT_EXT
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID;
update dbo.REVENUESPLIT_EXT set
DESIGNATIONID = @DESIGNATIONID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from dbo.REVENUESPLIT_EXT
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
where
FINANCIALTRANSACTION.PARENTID = @ID
and FINANCIALTRANSACTION.TYPECODE = 20 --Write off
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null;
update dbo.AUCTIONITEM set
VALUE = @BASEAMOUNT,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID,
TRANSACTIONVALUE = @AMOUNT,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
ORGANIZATIONVALUE = @ORGANIZATIONAMOUNT,
ORIGINTOORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID
where REVENUEAUCTIONDONATIONID = @ID;
update dbo.REVENUEPAYMENTMETHOD set
REVENUEPAYMENTMETHOD.AMOUNT = @BASEAMOUNT,
REVENUEPAYMENTMETHOD.CHANGEDBYID = @CHANGEAGENTID,
REVENUEPAYMENTMETHOD.DATECHANGED = @CURRENTDATE
where REVENUEPAYMENTMETHOD.REVENUEID = @ID
delete from dbo.REVENUEGLDISTRIBUTION
where REVENUEID = @ID
and OUTDATED = 0;
delete from dbo.WRITEOFFGLDISTRIBUTION
where REVENUEID = @ID
and OUTDATED = 0;
--Collect the IDs of revenue that will need new GL distributions
--as a result of editing this auction donation.
declare @AUCTIONPAYMENT table
(
ID uniqueidentifier
);
--Auction purchase for this item
insert into @AUCTIONPAYMENT (ID)
select top 1
AUCTIONITEMREVENUEPURCHASE.REVENUEPURCHASEID
from
dbo.AUCTIONITEM
inner join dbo.AUCTIONITEMREVENUEPURCHASE on AUCTIONITEM.ID = AUCTIONITEMREVENUEPURCHASE.AUCTIONITEMID
where
AUCTIONITEM.REVENUEAUCTIONDONATIONID = @ID
and AUCTIONITEM.PACKAGEID is null
and AUCTIONITEMREVENUEPURCHASE.REVENUEPURCHASEID is not null;
--Purchases involving items that share a package with this auction donation
insert into @AUCTIONPAYMENT (ID)
select
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
from
dbo.AUCTIONITEM
inner join dbo.AUCTIONITEM as SAMEPACKAGEAUCTIONITEM on AUCTIONITEM.PACKAGEID = SAMEPACKAGEAUCTIONITEM.PACKAGEID
inner join dbo.AUCTIONITEMPURCHASE on AUCTIONITEMPURCHASE.AUCTIONITEMID = SAMEPACKAGEAUCTIONITEM.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = AUCTIONITEMPURCHASE.PURCHASEID
where
AUCTIONITEM.REVENUEAUCTIONDONATIONID = @ID;
delete from dbo.AUCTIONPURCHASEGLDISTRIBUTION
where AUCTIONPURCHASEGLDISTRIBUTION.REVENUEPURCHASEID in (select ID from @AUCTIONPAYMENT)
and AUCTIONPURCHASEGLDISTRIBUTION.OUTDATED = 0;
if @POSTSTATUSCODE <> 2
begin
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
end
--Need to update purchase GL because gains and losses may have changed
exec dbo.USP_AUCTIONITEM_ADJUSTPURCHASEGLFORDONATION @ID, 1, @CHANGEAGENTID, @CURRENTDATE;
if @OLDSPOTRATEID is not null and not exists (select 1 from dbo.REVENUE where ID = @ID and BASEEXCHANGERATEID = @OLDSPOTRATEID)
begin
exec dbo.USP_CURRENCYEXCHANGERATE_DELETEBYID_WITHCHANGEAGENTID @OLDSPOTRATEID, @CHANGEAGENTID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;