USP_DATAFORMTEMPLATE_EDIT_TRANSACTIONSELLPROPERTYADJUST_3
The save procedure used by the edit dataform template "Revenue Transaction Posted Sold Property Edit Form 2".
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 | datetime | IN | Date of sale |
@SALEAMOUNT | money | IN | Sale amount |
@BROKERFEE | money | IN | Fees |
@ADJUSTMENTDATE | datetime | IN | Adjustment date |
@ADJUSTMENTPOSTDATE | datetime | IN | Adjustment post date |
@ADJUSTMENTREASON | nvarchar(300) | IN | Adjustment details |
@POSTSTATUSCODE | tinyint | IN | GL post status |
@POSTDATE | datetime | IN | GL post date |
@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_EDIT_TRANSACTIONSELLPROPERTYADJUST_3
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@SALEDATE datetime,
@SALEAMOUNT money,
@BROKERFEE money,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTREASON nvarchar(300),
@POSTSTATUSCODE tinyint,
@POSTDATE datetime,
@ADJUSTMENTREASONCODEID uniqueidentifier,
@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 @CHANGEDATE datetime;
declare @PROPERTYDETAILADJUSTMENTID uniqueidentifier;
set @CHANGEDATE = GetDate();
declare @REVENUEPAYMETHODID uniqueidentifier;
declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
select top 1 @ADJUSTMENTPOSTSTATUSCODE = ADJUSTMENT.POSTSTATUSCODE
from dbo.ADJUSTMENT
where REVENUEID = @ID and POSTSTATUSCODE <> 0
order by DATEADDED desc;
if @ADJUSTMENTPOSTSTATUSCODE is null
set @ADJUSTMENTPOSTSTATUSCODE = 1
begin try
declare
@ORGANIZATIONSALEAMOUNT money,
@ORGANIZATIONBROKERFEE money,
@BASESALEAMOUNT money,
@BASEBROKERFEE money,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier;
declare @OLDSPOTRATEID uniqueidentifier;
select
@TRANSACTIONCURRENCYID = PROPERTYDETAIL.TRANSACTIONCURRENCYID,
@BASECURRENCYID = PROPERTYDETAIL.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.[REVENUE]
inner join dbo.[REVENUEPAYMENTMETHOD] on [REVENUEPAYMENTMETHOD].REVENUEID = REVENUE.ID
inner join dbo.[PROPERTYDETAIL] on REVENUEPAYMENTMETHOD.ID = PROPERTYDETAIL.ID
left join dbo.CURRENCYEXCHANGERATE on PROPERTYDETAIL.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
where
[REVENUE].[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();
--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,
@SALEDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
);
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
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @BROKERFEE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEBROKERFEE output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONBROKERFEE output, @ORGANIZATIONEXCHANGERATEID, 0;
declare @ADJUST bit;
declare @GIFTID uniqueidentifier;
declare @CLEARGLDISTRIBUTION bit;
select top 1
@REVENUEPAYMETHODID = ID
from REVENUEPAYMENTMETHOD where REVENUEID = @ID;
set @ADJUST = 0;
set @CLEARGLDISTRIBUTION = 0;
/* Check if sale amount or broker fee has changed */
if exists (
select 1
from dbo.PROPERTYDETAIL
where PROPERTYDETAIL.ID = @REVENUEPAYMETHODID
and (
PROPERTYDETAIL.TRANSACTIONSALEAMOUNT <> @SALEAMOUNT
or PROPERTYDETAIL.TRANSACTIONBROKERFEE <> @BROKERFEE
or PROPERTYDETAIL.SALEAMOUNT <> @BASESALEAMOUNT
or PROPERTYDETAIL.BROKERFEE <> @BASEBROKERFEE
or PROPERTYDETAIL.ORGANIZATIONSALEAMOUNT <> @ORGANIZATIONSALEAMOUNT
or PROPERTYDETAIL.ORGANIZATIONBROKERFEE <> @ORGANIZATIONBROKERFEE
or PROPERTYDETAIL.BASEEXCHANGERATEID <> @BASEEXCHANGERATEID
or PROPERTYDETAIL.ORGANIZATIONEXCHANGERATEID <> @ORGANIZATIONEXCHANGERATEID
)
)
begin
set @ADJUST = 1;
set @CLEARGLDISTRIBUTION = 1;
end
/* Already adjusted */
if @ADJUST = 0
if (select COUNT(PROPERTYDETAILADJUSTMENT.ID)
from dbo.PROPERTYDETAILADJUSTMENT
where PROPERTYDETAILID = @REVENUEPAYMETHODID and POSTSTATUSCODE = 1) > 0
set @ADJUST = 1;
/* If there was a change to GL related data log an adjustment */
if @ADJUST = 1
begin
if @ADJUSTMENTREASONCODEID is null
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)
exec dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT @REVENUEPAYMETHODID, @PROPERTYDETAILADJUSTMENTID output, @CHANGEAGENTID,
@CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE;
end
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if not (@SALEAMOUNT = 0 OR @SALEDATE is not null)
raiserror ('CK_PROPERTYDETAIL_SALEAMOUNT', 16, 1);
if not (@BASEBROKERFEE = 0 OR @SALEDATE is not null)
raiserror ('CK_PROPERTYDETAIL_BROKERFEE', 16, 1);
if not (@POSTDATE IS NULL OR @SALEDATE is not null)
raiserror ('CK_PROPERTYDETAIL_SALEPOSTDATE', 16, 1);
if not (isnull(@POSTSTATUSCODE,((2))) = 2 OR isnull(@POSTSTATUSCODE,((2))) = 1 OR @SALEDATE is not null)
raiserror ('CK_PROPERTYDETAIL_VALIDSALEPOSTSTATUSCODE', 16, 1);
if not ((@SALEDATE is null) or ((@POSTDATE is not null) or (@POSTSTATUSCODE = 2)))
raiserror ('CK_PROPERTYDETAIL_SALEPOSTDATE_REQUIRED', 16, 1);
if not ((@SALEDATE is null and @BASESALEAMOUNT = 0 and @BASEBROKERFEE = 0 and @POSTDATE is null and (isnull(@POSTSTATUSCODE,2) = 2)OR isnull(@POSTSTATUSCODE, 2) = 1) or (not @SALEDATE is null))
raiserror ('CK_PROPERTYDETAIL_SOLDORUNSOLD', 16, 1);
if not (dbo.UFN_PROPERTYDETAIL_VALIDFORPAYMENTTYPE(@REVENUEPAYMETHODID) = 1)
raiserror ('CK_PROPERTYDETAIL_VALIDFORPAYMENTTYPE', 16, 1);
select @POSTSTATUSCODE = case A.POSTSTATUSCODE when 2 then 3 else 1 end
from dbo.PROPERTYDETAILADJUSTMENT A
where A.ID = @PROPERTYDETAILADJUSTMENTID;
update dbo.FINANCIALTRANSACTION set
TRANSACTIONAMOUNT = @SALEAMOUNT
,BASEAMOUNT = @BASESALEAMOUNT
,ORGAMOUNT = @ORGANIZATIONSALEAMOUNT
,BASEEXCHANGERATEID = @BASEEXCHANGERATEID
,ORGEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
,CHANGEDBYID= @CHANGEAGENTID
,DATECHANGED= @CHANGEDATE
where ID = @REVENUEPAYMETHODID;
update dbo.PROPERTYDETAIL_EXT set
SALEDATE = @SALEDATE
,BROKERFEE = @BROKERFEE
,ORGANIZATIONBROKERFEE = @ORGANIZATIONBROKERFEE
,TRANSACTIONBROKERFEE = @BASEBROKERFEE
,ISNEGATIVE = case when @BASESALEAMOUNT < 0 then 1 else 0 end
,CHANGEDBYID= @CHANGEAGENTID
,DATECHANGED= @CHANGEDATE
where ID = @REVENUEPAYMETHODID;
update LI set
TRANSACTIONAMOUNT = abs(@SALEAMOUNT) + (case when @BROKERFEE > 0 then @BROKERFEE else 0 end)
,BASEAMOUNT = abs(@BASESALEAMOUNT) + (case when @BASEBROKERFEE > 0 then @BASEBROKERFEE else 0 end)
,ORGAMOUNT = abs(@ORGANIZATIONSALEAMOUNT) + (case when @ORGANIZATIONBROKERFEE > 0 then @ORGANIZATIONBROKERFEE else 0 end)
,POSTDATE = case when @POSTSTATUSCODE = 1 then @ADJUSTMENTPOSTDATE else null end
,POSTSTATUSCODE = @POSTSTATUSCODE
,CHANGEDBYID= @CHANGEAGENTID
,DATECHANGED= @CHANGEDATE
from dbo.FINANCIALTRANSACTIONLINEITEM LI
where LI.FINANCIALTRANSACTIONID = @REVENUEPAYMETHODID
and LI.TYPECODE = 98 and DELETEDON is null and LI.POSTSTATUSCODE != 2;
-- if the sale amount or broker fee has changed, clear any user-defined gl distributions for this record
if @CLEARGLDISTRIBUTION = 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.PROPERTYDETAILGLDISTRIBUTION where PROPERTYDETAILID = @REVENUEPAYMETHODID and OUTDATED = 0;
if @POSTSTATUSCODE = 1
exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
--Restore CONTEXT_INFO
if not @contextCache is null
set CONTEXT_INFO @contextCache;
end
if @ADJUST = 1
exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY @REVENUEPAYMETHODID, @CHANGEAGENTID, null, @PROPERTYDETAILADJUSTMENTID;
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;