USP_DATAFORMTEMPLATE_EDIT_AUCTIONDONATIONADJUST_2
The save procedure used by the edit dataform template "Posted Auction Donation 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 |
@ADJUSTMENTDATE | datetime | IN | Adjusted date |
@ADJUSTMENTPOSTDATE | datetime | IN | Adjusted post date |
@ADJUSTMENTREASON | nvarchar(300) | IN | Adjustment description |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | Adjustment reason |
@BASECURRENCYID | uniqueidentifier | IN | Base currency |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | Transaction currency |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate ID |
@EXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@HADSPOTRATE | bit | IN | Had spot rate |
@RATECHANGED | bit | IN | Rate changed |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_AUCTIONDONATIONADJUST_2
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@AMOUNT money,
@DATE datetime,
@EXPIRATIONDATE datetime,
@DESIGNATIONID uniqueidentifier,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTREASON nvarchar(300),
@ADJUSTMENTREASONCODEID uniqueidentifier,
@BASECURRENCYID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@HADSPOTRATE bit,
@RATECHANGED bit,
@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 @ADJUSTMENTID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
begin try
--Transaction currency cannot be changed, make sure it is the same as the revenue
select
@TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
@ORGANIZATIONEXCHANGERATEID = FINANCIALTRANSACTION.ORGEXCHANGERATEID
from
dbo.FINANCIALTRANSACTION
where
FINANCIALTRANSACTION.ID = @ID;
declare @LOOKUPORGANZIATIONEXCHANGERATE bit = 0;
if @ORGANIZATIONEXCHANGERATEID is null
begin
set @LOOKUPORGANZIATIONEXCHANGERATE = 1;
end
--Multicurrency - If the revenue previously used a spot rate, but
-- its rate has changed, store the old rate's ID, so we can remove it later.
declare @OLDSPOTRATE uniqueidentifier;
if @HADSPOTRATE = 1 and @RATECHANGED = 1
begin
select
@OLDSPOTRATE = FINANCIALTRANSACTION.BASEEXCHANGERATEID
from
dbo.FINANCIALTRANSACTION
where
FINANCIALTRANSACTION.ID = @ID;
end
--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
--Multicurrency - Retrieve and calculate the necessary multicurrency values.
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @MINIMUMBID money = 0;
select @MINIMUMBID = coalesce(AUCTIONITEM.TRANSACTIONMINIMUMBID, 0)
from dbo.AUCTIONITEM
where AUCTIONITEM.REVENUEAUCTIONDONATIONID = @ID;
declare @BASEAMOUNT money;
declare @BASEMINIMUMBID money;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONMINIMUMBID money;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES
@AMOUNT,
@DATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID output,
@BASEAMOUNT output,
@ORGANIZATIONCURRENCYID output,
@ORGANIZATIONAMOUNT output,
@ORGANIZATIONEXCHANGERATEID output,
@LOOKUPORGANZIATIONEXCHANGERATE;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES
@MINIMUMBID,
@DATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID output,
@BASEMINIMUMBID output,
@ORGANIZATIONCURRENCYID output,
@ORGANIZATIONMINIMUMBID output,
@ORGANIZATIONEXCHANGERATEID output,
@LOOKUPORGANZIATIONEXCHANGERATE;
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 @ORIGINALAMOUNT money = 0;
select
@ORIGINALAMOUNT = AMOUNT
from dbo.REVENUE
where REVENUE.ID = @ID;
declare @HASWRITEOFF bit = 0;
if exists
(
select top 1
1
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
)
begin
set @HASWRITEOFF = 1;
end
if @HASWRITEOFF = 1 and @AMOUNT <> @ORIGINALAMOUNT
raiserror('BBERR_AUCTIONDONATION_CANNOTADJUSTWRITTENOFFAMOUNT', 13, 1);
if @EXPIRATIONDATE < @DATE
raiserror('BBERR_AUCTIONDONATION_DONATIONDATEMUSTNOTBEAFTEREXPIRAITONDATE', 13, 1);
declare @ADJUST bit;
declare @CLEARGLDISTRIBUTION bit = 0;
set @ADJUSTMENTID = null;
if (
select
count(FINANCIALTRANSACTION.ID)
from
dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTION.ID = V.FINANCIALTRANSACTIONID
where
FINANCIALTRANSACTION.ID = @ID
and FINANCIALTRANSACTION.TRANSACTIONAMOUNT = @AMOUNT
and FINANCIALTRANSACTION.BASEAMOUNT = @BASEAMOUNT
and ((FINANCIALTRANSACTION.BASEEXCHANGERATEID is null and @BASEEXCHANGERATEID is null) or (FINANCIALTRANSACTION.BASEEXCHANGERATEID = @BASEEXCHANGERATEID))
and ((FINANCIALTRANSACTION.ORGEXCHANGERATEID is null and @ORGANIZATIONEXCHANGERATEID is null) or (FINANCIALTRANSACTION.ORGEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID))
and FINANCIALTRANSACTION.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
and V.BASECURRENCYID = @BASECURRENCYID
and REVENUESPLIT_EXT.DESIGNATIONID = @DESIGNATIONID
) = 0
begin
set @CLEARGLDISTRIBUTION = 1;
end
-- Check GL business rule for this account system and set to 'Do not post' if needed.
declare @POSTSTATUSCODE tinyint = 1;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @ID;
if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
set @POSTSTATUSCODE = 2; -- Do not post
select
@ADJUST = 1
from
dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTION.ID = V.FINANCIALTRANSACTIONID
where
FINANCIALTRANSACTION.ID = @ID
and
(
FINANCIALTRANSACTION.TRANSACTIONAMOUNT <> @AMOUNT
or
FINANCIALTRANSACTION.BASEAMOUNT <> @BASEAMOUNT
or
FINANCIALTRANSACTION.BASEEXCHANGERATEID <> @BASEEXCHANGERATEID
or
FINANCIALTRANSACTION.ORGEXCHANGERATEID <> @ORGANIZATIONEXCHANGERATEID
or
FINANCIALTRANSACTION.TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID
or
V.BASECURRENCYID <> @BASECURRENCYID
or
FINANCIALTRANSACTION.DATE <> @DATE
or
REVENUESPLIT_EXT.DESIGNATIONID <> @DESIGNATIONID
);
if @ADJUST = 1
begin
if @ADJUSTMENTREASONCODEID is null
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1);
exec dbo.USP_SAVE_ADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE;
end
-- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @ID;
-- handle updating the data
update dbo.FINANCIALTRANSACTION set
BASEAMOUNT = @BASEAMOUNT,
TRANSACTIONAMOUNT = @AMOUNT,
DATE = @DATE,
ORGAMOUNT = @ORGANIZATIONAMOUNT,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
ORGEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
update dbo.REVENUE_EXT set
RECEIPTAMOUNT = @AMOUNT,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from
dbo.REVENUE_EXT
where
REVENUE_EXT.ID = @ID;
update dbo.FINANCIALTRANSACTIONLINEITEM set
BASEAMOUNT = @BASEAMOUNT,
TRANSACTIONAMOUNT = @AMOUNT,
ORGAMOUNT = @ORGANIZATIONAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where FINANCIALTRANSACTIONID = @ID;
update dbo.AUCTIONITEM set
VALUE = @BASEAMOUNT,
TRANSACTIONVALUE = @AMOUNT,
ORGANIZATIONVALUE = @ORGANIZATIONAMOUNT,
MINIMUMBID = @BASEMINIMUMBID,
ORGANIZATIONMINIMUMBID = @ORGANIZATIONMINIMUMBID,
BASECURRENCYID = @BASECURRENCYID,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
ORIGINTOORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where REVENUEAUCTIONDONATIONID = @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
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID;
if @CLEARGLDISTRIBUTION = 1
begin
-- Clear GL
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;
-- Add new GL distributions
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;
end
if @ADJUST = 1
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @ID, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTID;
--Multicurrency - If we stored an old spot rate earlier, now is the time to
--remove it.
if @OLDSPOTRATE is not null
begin
delete CURRENCYEXCHANGERATE
where ID=@OLDSPOTRATE;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;