USP_DATAFORMTEMPLATE_ADJUST_GIFTINKINDSALE
The save procedure used by the edit dataform template "Gift-in-Kind Sale By Transaction 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. |
@SALEDATE | date | IN | Date of sale |
@SALEAMOUNT | money | IN | Sale amount |
@NUMBEROFUNITS | int | IN | Units sold |
@ADJUSTMENTPOSTDATE | datetime | IN | Adjustment post date |
@ADJUSTMENTDATE | datetime | IN | Adjustment date |
@ADJUSTMENTREASON | nvarchar(100) | IN | Adjustment details |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | Adjustment reason |
@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_ADJUST_GIFTINKINDSALE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@SALEDATE date,
@SALEAMOUNT money,
@NUMBEROFUNITS integer,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTREASON nvarchar(100),
@ADJUSTMENTREASONCODEID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount on
begin try
declare
@ORGANIZATIONSALEAMOUNT money,
@BASESALEAMOUNT money,
@BASEFEE money,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier,
@CURRENTDATE datetime,
@OLDSPOTRATEID uniqueidentifier,
@ADJUSTMENTPOSTSTATUSCODE tinyint;
set @CURRENTDATE = getdate()
select top 1 @ADJUSTMENTPOSTSTATUSCODE = POSTSTATUSCODE
from dbo.GIFTINKINDSALEADJUSTMENT
where GIFTINKINDSALEID = @ID and POSTSTATUSCODE <> 0
order by DATEADDED desc;
if @ADJUSTMENTPOSTSTATUSCODE is null
set @ADJUSTMENTPOSTSTATUSCODE = 1
select
@TRANSACTIONCURRENCYID = GIFTINKINDSALE.TRANSACTIONCURRENCYID,
@BASECURRENCYID = GIFTINKINDSALE.BASECURRENCYID,
@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
from
dbo.GIFTINKINDSALE
left join dbo.CURRENCYEXCHANGERATE on GIFTINKINDSALE.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
where
GIFTINKINDSALE.ID = @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();
insert into dbo.CURRENCYEXCHANGERATE
(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@EXCHANGERATE,
@SALEDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @SALEAMOUNT,
@SALEDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASESALEAMOUNT output,
@ORGANIZATIONCURRENCYID output,
@ORGANIZATIONSALEAMOUNT output,
@ORGANIZATIONEXCHANGERATEID output,
1; --Get an organization currency and exchange rate on the first call
declare
@ORIGINALSALEAMOUNT money,
@ORIGINALBASESALEAMOUNT money,
@ORIGINALORGANIZATIONSALEAMOUNT money,
@ORIGINALTRANSACTIONCURRENCYID uniqueidentifier,
@ORIGINALBASECURRENCYID uniqueidentifier,
@ORIGINALBASEEXCHANGERATEID uniqueidentifier,
@ORIGINALORGANIZATIONEXCHANGERATEID uniqueidentifier,
@ORIGINALNUMBEROFUNITS int,
@SALEPOSTSTATUSCODE tinyint,
@GIFTINKINDPAYMENTMETHODDETAILID uniqueidentifier,
@REVENUEID uniqueidentifier;
select
@ORIGINALSALEAMOUNT = GIFTINKINDSALE.TRANSACTIONSALEAMOUNT,
@ORIGINALBASESALEAMOUNT = GIFTINKINDSALE.SALEAMOUNT,
@ORIGINALORGANIZATIONSALEAMOUNT = GIFTINKINDSALE.ORGANIZATIONSALEAMOUNT,
@ORIGINALTRANSACTIONCURRENCYID = GIFTINKINDSALE.TRANSACTIONCURRENCYID,
@ORIGINALBASECURRENCYID = GIFTINKINDSALE.BASECURRENCYID,
@ORIGINALBASEEXCHANGERATEID = GIFTINKINDSALE.BASEEXCHANGERATEID,
@ORIGINALORGANIZATIONEXCHANGERATEID = GIFTINKINDSALE.ORGANIZATIONEXCHANGERATEID,
@SALEPOSTSTATUSCODE = GIFTINKINDSALE.SALEPOSTSTATUSCODE,
@GIFTINKINDPAYMENTMETHODDETAILID = GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID,
@ORIGINALNUMBEROFUNITS = GIFTINKINDSALE.NUMBEROFUNITS,
@REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
from dbo.GIFTINKINDSALE
inner join dbo.REVENUEPAYMENTMETHOD on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = REVENUEPAYMENTMETHOD.ID
where GIFTINKINDSALE.ID = @ID
declare @NEEDSADJUSTMENT bit
set @NEEDSADJUSTMENT = 0
if
coalesce(@ORIGINALSALEAMOUNT, 0) <> coalesce(@SALEAMOUNT, 0) or
coalesce(@ORIGINALBASESALEAMOUNT, 0) <> coalesce(@BASESALEAMOUNT, 0) or
coalesce(@ORIGINALORGANIZATIONSALEAMOUNT, 0) <> coalesce(@ORGANIZATIONSALEAMOUNT, 0) or
coalesce(@ORIGINALNUMBEROFUNITS, 0) <> coalesce(@NUMBEROFUNITS, 0) or
@ORIGINALTRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID or
@ORIGINALBASECURRENCYID <> @BASECURRENCYID or
@ORIGINALBASEEXCHANGERATEID <> @BASEEXCHANGERATEID or
(@ORIGINALBASEEXCHANGERATEID is not null and @BASEEXCHANGERATEID is null) or
(@ORIGINALBASEEXCHANGERATEID is null and @BASEEXCHANGERATEID is not null) or
@ORIGINALORGANIZATIONEXCHANGERATEID <> @ORGANIZATIONEXCHANGERATEID or
(@ORIGINALORGANIZATIONEXCHANGERATEID is not null and @ORGANIZATIONEXCHANGERATEID is null) or
(@ORIGINALORGANIZATIONEXCHANGERATEID is null and @ORGANIZATIONEXCHANGERATEID is not null)
begin
set @NEEDSADJUSTMENT = 1
end
-- Verify the transaction has already been posted
if @SALEPOSTSTATUSCODE <> 0 -- Posted
begin
raiserror('GIFTINKINDSALEMUSTBEPOSTED', 13, 1)
return 1
end
-- Already adjusted
if @NEEDSADJUSTMENT = 0
if exists ( select 1 from dbo.GIFTINKINDSALEADJUSTMENT
where GIFTINKINDSALEID = @ID and POSTSTATUSCODE = 1)
set @NEEDSADJUSTMENT = 1
-- Make sure the adjustment date fields are set if it will be adjusted
if @NEEDSADJUSTMENT = 1 and @ADJUSTMENTPOSTDATE is null and @ADJUSTMENTPOSTSTATUSCODE <> 2
begin
raiserror('ADJUSTMENTPOSTDATEREQUIRED', 13, 1)
return 1
end
if @NEEDSADJUSTMENT = 1 and @ADJUSTMENTDATE is null
begin
raiserror('ADJUSTMENTDATEREQUIRED', 13, 1)
return 1
end
if @NEEDSADJUSTMENT = 1 and @ADJUSTMENTREASONCODEID is null
begin
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)
return 1
end
declare @ADJUSTMENTID uniqueidentifier
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENTID @CHANGEAGENTID output
if @NEEDSADJUSTMENT = 1
begin
exec dbo.USP_SAVE_GIFTINKINDSALEADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE
end
if @NUMBEROFUNITS <= 0
raiserror ('CK_GIFTINKINDSALE_NUMBEROFUNITSPOSITIVE', 16, 1);
if @NUMBEROFUNITS > dbo.UFN_GIFTINKINDPAYMENTMETHODDETAIL_REMAININGUNITS(@GIFTINKINDPAYMENTMETHODDETAILID,@ID)
raiserror ('CK_GIFTINKINDSALE_NUMBEROFUNITSVALID2', 16, 1);
if @BASESALEAMOUNT < 0
raiserror ('CK_GIFTINKINDSALE_SALEAMOUNTPOSITIVE', 16, 1);
update FINANCIALTRANSACTION set
DATE = @SALEDATE
,TRANSACTIONAMOUNT = @SALEAMOUNT
,BASEAMOUNT = @BASESALEAMOUNT
,ORGAMOUNT = @ORGANIZATIONSALEAMOUNT
,TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID = @BASEEXCHANGERATEID
,ORGEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
,DATECHANGED = @CURRENTDATE
,CHANGEDBYID = @CHANGEAGENTID
where ID = @ID;
update dbo.GIFTINKINDSALE_EXT set
SALEDATE = @SALEDATE
,NUMBEROFUNITS = @NUMBEROFUNITS
,DATECHANGED = @CURRENTDATE
,CHANGEDBYID = @CHANGEAGENTID
where ID = @ID;
update dbo.FINANCIALTRANSACTIONLINEITEM set
TRANSACTIONAMOUNT = isnull(@SALEAMOUNT, 0)
,BASEAMOUNT = isnull(@BASESALEAMOUNT, 0)
,ORGAMOUNT = isnull(@ORGANIZATIONSALEAMOUNT, 0)
,DATECHANGED = @CURRENTDATE
,CHANGEDBYID = @CHANGEAGENTID
where FINANCIALTRANSACTIONID = @ID and POSTSTATUSCODE != 2 and TYPECODE != 1;
if @NEEDSADJUSTMENT = 1
begin
--Clear GL
--Cache CONTEXT INFO
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
delete from dbo.GIFTINKINDSALEGLDISTRIBUTION where GIFTINKINDSALEID = @ID and OUTDATED = 0
exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE, @ID
--Restore CONTEXT_INFO
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @ADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKINDSALE_SAVEHISTORY @ID, @CHANGEAGENTID, null, @ADJUSTMENTID
end
if @OLDSPOTRATEID is not null
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