USP_DATAFORMTEMPLATE_EDIT_MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ORIGINALAMOUNT | money | IN |
Definition
Copy
create procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@ORIGINALAMOUNT money
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
--Multicurrency - RobertDi 4/15/10 - Convert @ORIGINALAMOUNT (in transaction currency) to base and org currency.
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @BASEAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONAMOUNT money;
select
@TRANSACTIONCURRENCYID = coalesce(MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT.TRANSACTIONCURRENCYID, FINANCIALTRANSACTION.TRANSACTIONCURRENCYID),
@BASECURRENCYID = coalesce(MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT.BASECURRENCYID, CURRENCYSET.BASECURRENCYID),
@BASEEXCHANGERATEID = coalesce(MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT.BASEEXCHANGERATEID, FINANCIALTRANSACTION.BASEEXCHANGERATEID),
@ORGANIZATIONEXCHANGERATEID = coalesce(MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT.ORGANIZATIONEXCHANGERATEID, FINANCIALTRANSACTION.ORGEXCHANGERATEID)
from dbo.FINANCIALTRANSACTION
inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
left join dbo.MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT on MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT.ID = FINANCIALTRANSACTION.ID
where
FINANCIALTRANSACTION.ID = @ID
-- This section taken from UFN_CURRENCY_GETCURRENCYVALUES and modified to keep the old
-- transaction currency and organization exchange rate the same.
-- Note that we don't want these to update to new data; we're changing an amount
-- that lies in the past, not updating an amount from the past to be an amount from the present.
-- ***
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @BASEAMOUNTISVALID bit;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
set @BASEAMOUNTISVALID = 1;
if @TRANSACTIONCURRENCYID = @BASECURRENCYID
set @BASEAMOUNT = @ORIGINALAMOUNT;
else if @BASEEXCHANGERATEID is null
begin
set @BASEAMOUNT = 0;
set @BASEAMOUNTISVALID = 0;
end
else
set @BASEAMOUNT = dbo.UFN_CURRENCY_CONVERT(@ORIGINALAMOUNT, @BASEEXCHANGERATEID);
if (@BASEAMOUNTISVALID = 0)
set @ORGANIZATIONAMOUNT = 0;
else
begin
declare @ORGANIZATIONAMOUNTORIGINCODE tinyint;
select top 1
@ORGANIZATIONAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE
from
dbo.MULTICURRENCYCONFIGURATION;
if (@BASECURRENCYID = @ORGANIZATIONCURRENCYID) and (@ORGANIZATIONAMOUNTORIGINCODE = 0)
set @ORGANIZATIONAMOUNT = @BASEAMOUNT;
else if (@TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID) and (@ORGANIZATIONAMOUNTORIGINCODE = 1)
set @ORGANIZATIONAMOUNT = @ORIGINALAMOUNT;
else
begin
set @ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(@BASEAMOUNT, @ORGANIZATIONEXCHANGERATEID, @ORIGINALAMOUNT);
end
end
-- ***
update dbo.MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT set
TRANSACTIONAMOUNT = @ORIGINALAMOUNT,
ORIGINALAMOUNT = @BASEAMOUNT,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
if @@ROWCOUNT = 0
insert into dbo.MEMBERSHIPINSTALLMENTPLANORIGINALAMOUNT
(
ID,
ORIGINALAMOUNT,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
DATEADDED,
DATECHANGED,
ADDEDBYID,
CHANGEDBYID
)
values
(
@ID,
@BASEAMOUNT,
@ORIGINALAMOUNT,
@ORGANIZATIONAMOUNT,
@BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
)
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;