USP_DATAFORMTEMPLATE_ADJUST_STOCKSALE_3
The save procedure used by the edit dataform template "Stock Sale By Transaction 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 | date | IN | Date of sale |
@SALEAMOUNT | money | IN | Sale amount |
@FEE | money | IN | Fees |
@NUMBEROFUNITS | decimal(20, 3) | IN | Units sold |
@LOWPRICE | decimal(19, 4) | IN | Low |
@MEDIANPRICE | decimal(19, 4) | IN | Median |
@HIGHPRICE | decimal(19, 4) | IN | High |
@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_STOCKSALE_3
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@SALEDATE date,
@SALEAMOUNT money,
@FEE money,
@NUMBEROFUNITS decimal(20,3),
@LOWPRICE decimal(19,4),
@MEDIANPRICE decimal(19,4),
@HIGHPRICE decimal(19,4),
@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,
@ORGANIZATIONFEE money,
@ORGANIZATIONLOWPRICE decimal(19,4),
@ORGANIZATIONMEDIANPRICE decimal(19,4),
@ORGANIZATIONHIGHPRICE decimal(19,4),
@BASESALEAMOUNT money,
@BASEFEE money,
@BASELOWPRICE decimal(19,4),
@BASEMEDIANPRICE decimal(19,4),
@BASEHIGHPRICE decimal(19,4),
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier;
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @OLDSPOTRATEID uniqueidentifier;
declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
select top 1 @ADJUSTMENTPOSTSTATUSCODE = POSTSTATUSCODE
from dbo.STOCKSALEADJUSTMENT
where STOCKSALEID = @ID and POSTSTATUSCODE <> 0
order by DATEADDED desc;
if @ADJUSTMENTPOSTSTATUSCODE is null
set @ADJUSTMENTPOSTSTATUSCODE = 1
select
@TRANSACTIONCURRENCYID = STOCKSALE.TRANSACTIONCURRENCYID,
@BASECURRENCYID = STOCKSALE.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.STOCKSALE
left join dbo.CURRENCYEXCHANGERATE on STOCKSALE.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
where
STOCKSALE.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,
@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
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @FEE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEFEE output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONFEE output, @ORGANIZATIONEXCHANGERATEID, 0;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @LOWPRICE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASELOWPRICE output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONLOWPRICE output, @ORGANIZATIONEXCHANGERATEID, 0;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @MEDIANPRICE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEMEDIANPRICE output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONMEDIANPRICE output, @ORGANIZATIONEXCHANGERATEID, 0;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @HIGHPRICE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEHIGHPRICE output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONHIGHPRICE output, @ORGANIZATIONEXCHANGERATEID, 0;
declare
@ORIGINALSALEAMOUNT money,
@ORIGINALFEE money,
@ORIGINALLOWPRICE decimal(19,4),
@ORIGINALMEDIANPRICE decimal(19,4),
@ORIGINALHIGHPRICE decimal(19,4);
declare
@ORIGINALBASESALEAMOUNT money,
@ORIGINALBASEFEE money,
@ORIGINALBASELOWPRICE decimal(19,4),
@ORIGINALBASEMEDIANPRICE decimal(19,4),
@ORIGINALBASEHIGHPRICE decimal(19,4);
declare
@ORIGINALORGANIZATIONSALEAMOUNT money,
@ORIGINALORGANIZATIONFEE money,
@ORIGINALORGANIZATIONLOWPRICE decimal(19,4),
@ORIGINALORGANIZATIONMEDIANPRICE decimal(19,4),
@ORIGINALORGANIZATIONHIGHPRICE decimal(19,4);
declare
@ORIGINALTRANSACTIONCURRENCYID uniqueidentifier,
@ORIGINALBASECURRENCYID uniqueidentifier,
@ORIGINALBASEEXCHANGERATEID uniqueidentifier,
@ORIGINALORGANIZATIONEXCHANGERATEID uniqueidentifier,
@ORIGINALNUMBEROFUNITS int;
declare
@SALEPOSTSTATUSCODE tinyint,
@STOCKDETAILID uniqueidentifier,
@REVENUEID uniqueidentifier
select
@ORIGINALSALEAMOUNT = STOCKSALE.TRANSACTIONSALEAMOUNT,
@ORIGINALFEE = STOCKSALE.TRANSACTIONFEE,
@ORIGINALLOWPRICE = STOCKSALE.TRANSACTIONLOWPRICE,
@ORIGINALMEDIANPRICE = STOCKSALE.TRANSACTIONMEDIANPRICE,
@ORIGINALHIGHPRICE = STOCKSALE.TRANSACTIONHIGHPRICE,
@ORIGINALBASESALEAMOUNT = STOCKSALE.SALEAMOUNT,
@ORIGINALBASEFEE = STOCKSALE.FEE,
@ORIGINALBASELOWPRICE = STOCKSALE.LOWPRICE,
@ORIGINALBASEMEDIANPRICE = STOCKSALE.MEDIANPRICE,
@ORIGINALBASEHIGHPRICE = STOCKSALE.HIGHPRICE,
@ORIGINALORGANIZATIONSALEAMOUNT = STOCKSALE.ORGANIZATIONSALEAMOUNT,
@ORIGINALORGANIZATIONFEE = STOCKSALE.ORGANIZATIONFEE,
@ORIGINALORGANIZATIONLOWPRICE = STOCKSALE.ORGANIZATIONLOWPRICE,
@ORIGINALORGANIZATIONMEDIANPRICE = STOCKSALE.ORGANIZATIONMEDIANPRICE,
@ORIGINALORGANIZATIONHIGHPRICE = STOCKSALE.ORGANIZATIONHIGHPRICE,
@ORIGINALTRANSACTIONCURRENCYID = STOCKSALE.TRANSACTIONCURRENCYID,
@ORIGINALBASECURRENCYID = STOCKSALE.BASECURRENCYID,
@ORIGINALBASEEXCHANGERATEID = STOCKSALE.BASEEXCHANGERATEID,
@ORIGINALORGANIZATIONEXCHANGERATEID = STOCKSALE.ORGANIZATIONEXCHANGERATEID,
@SALEPOSTSTATUSCODE = STOCKSALE.SALEPOSTSTATUSCODE,
@STOCKDETAILID = STOCKSALE.STOCKDETAILID,
@ORIGINALNUMBEROFUNITS = STOCKSALE.NUMBEROFUNITS,
@REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
from dbo.STOCKSALE
inner join dbo.REVENUEPAYMENTMETHOD on STOCKSALE.STOCKDETAILID = REVENUEPAYMENTMETHOD.ID
where STOCKSALE.ID = @ID
declare @NEEDSADJUSTMENT bit
set @NEEDSADJUSTMENT = 0
if
coalesce(@ORIGINALSALEAMOUNT, 0) <> coalesce(@SALEAMOUNT, 0) or
coalesce(@ORIGINALFEE, 0) <> coalesce(@FEE, 0) or
coalesce(@ORIGINALBASESALEAMOUNT, 0) <> coalesce(@BASESALEAMOUNT, 0) or
coalesce(@ORIGINALBASEFEE, 0) <> coalesce(@BASEFEE, 0) or
coalesce(@ORIGINALORGANIZATIONSALEAMOUNT, 0) <> coalesce(@ORGANIZATIONSALEAMOUNT, 0) or
coalesce(@ORIGINALORGANIZATIONFEE, 0) <> coalesce(@ORGANIZATIONFEE, 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('STOCKSALEMUSTBEPOSTED', 13, 1)
return 1
end
-- Already adjusted
if @NEEDSADJUSTMENT = 0
if exists ( select 1 from dbo.STOCKSALEADJUSTMENT
where STOCKSALEID = @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
if @LOWPRICE < 0
begin
raiserror('BBERR_LOWPRICEPERSHARENEGATIVE', 13, 1)
return 1
end
if @MEDIANPRICE < 0
begin
raiserror('BBERR_MEDIANPRICEPERSHARENEGATIVE', 13, 1)
return 1
end
if @HIGHPRICE < 0
begin
raiserror('BBERR_HIGHPRICEPERSHARENEGATIVE', 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_STOCKSALEADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE
end
if @BASESALEAMOUNT < 0
raiserror('CK_STOCKSALE_SALEAMOUNTPOSITIVE', 13, 1);
update dbo.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.STOCKSALE_EXT set
SALEDATE = @SALEDATE
,NUMBEROFUNITS = @NUMBEROFUNITS
,TRANSACTIONFEE = @FEE
,FEE = @BASEFEE
,ORGANIZATIONFEE = @ORGANIZATIONFEE
,TRANSACTIONLOWPRICE = @LOWPRICE
,TRANSACTIONMEDIANPRICE = @MEDIANPRICE
,TRANSACTIONHIGHPRICE = @HIGHPRICE
,LOWPRICE = @BASELOWPRICE
,MEDIANPRICE = @BASEMEDIANPRICE
,HIGHPRICE = @BASEHIGHPRICE
,ORGANIZATIONLOWPRICE = @ORGANIZATIONLOWPRICE
,ORGANIZATIONMEDIANPRICE = @ORGANIZATIONMEDIANPRICE
,ORGANIZATIONHIGHPRICE = @ORGANIZATIONHIGHPRICE
,DATECHANGED = @CURRENTDATE
,CHANGEDBYID = @CHANGEAGENTID
where ID = @ID;
update dbo.FINANCIALTRANSACTIONLINEITEM set
TRANSACTIONAMOUNT = isnull(@SALEAMOUNT, 0) + isnull(@FEE, 0)
,BASEAMOUNT = isnull(@BASESALEAMOUNT, 0) + isnull(@BASEFEE, 0)
,ORGAMOUNT = isnull(@ORGANIZATIONSALEAMOUNT, 0) + isnull(@ORGANIZATIONFEE, 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.STOCKSALEGLDISTRIBUTION where STOCKSALEID = @ID and OUTDATED = 0
exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @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_STOCKSALE_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