USP_DATAFORMTEMPLATE_ADD_STOCKSALEBYTRANSACTION
The save procedure used by the add dataform template "Stock Sale By Transaction Add Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@REVENUEID | uniqueidentifier | IN | Input parameter indicating the context ID for the record being added. |
@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 |
@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 |
@SALEPOSTDATE | datetime | IN | GL post date |
@SALEPOSTSTATUSCODE | tinyint | IN | GL post status |
@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_ADD_STOCKSALEBYTRANSACTION
(
@ID uniqueidentifier = null output,
@REVENUEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@SALEDATE datetime,
@SALEAMOUNT money,
@FEE money = 0,
@NUMBEROFUNITS decimal(20,3),
@LOWPRICE decimal(19,4) = 0,
@MEDIANPRICE decimal(19,4) = 0,
@HIGHPRICE decimal(19,4) = 0,
@SALEPOSTDATE datetime = null,
@SALEPOSTSTATUSCODE tinyint = 1,
@BASEEXCHANGERATEID uniqueidentifier = null,
@EXCHANGERATE decimal(20,8) = null,
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount on;
-- Check GL business rule for this account system and set to 'Do not post' if needed.
-- ****
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID
from dbo.FINANCIALTRANSACTION
where ID = @REVENUEID;
declare @ALLOWGLDISTRIBUTIONS bit;
set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
if @ALLOWGLDISTRIBUTIONS = 0
begin
set @SALEPOSTSTATUSCODE = 2 -- Do not post
set @SALEPOSTDATE = null
end
-- ****
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENTID @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @ID is null
set @ID = newid();
-- The ID for STOCKDETAIL is the same as REVENUEPAYMENTMETHOD's ID
declare @STOCKDETAILID uniqueidentifier;
select top 1
@STOCKDETAILID = ID
from dbo.REVENUEPAYMENTMETHOD
where REVENUEID = @REVENUEID;
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
--JamesWill WI128968 2011-02-08 Don't allow a sale before the revenue date
if @SALEDATE < (select DATE from dbo.REVENUE where ID = @REVENUEID)
begin
raiserror('BBERR_SALEDATEBEFOREREVENUEDATE', 13, 1);
return 1;
end
--JamesWill WI128968 2011-02-08 Don't allow a sale to post before the revenue date
if @SALEPOSTDATE < (select DATE from dbo.REVENUE where ID = @REVENUEID)
begin
raiserror('BBERR_SALEPOSTDATEBEFOREREVENUEDATE', 13, 1);
return 1;
end
-- Raise error if the transaction is do not post but the stock sale isn't do not post
if @SALEPOSTSTATUSCODE <> 2 and (select top 1 DONOTPOST from dbo.REVENUE where ID = @REVENUEID) = 1
begin
raiserror('BBERR_TRANSACTIONDONOTPOSTSALEPOST', 13, 1);
return 1;
end
begin try
declare
@ORGANIZATIONSALEAMOUNT money,
@ORGANIZATIONFEE money,
@ORGANIZATIONLOWPRICE decimal(19,4),
@ORGANIZATIONMEDIANPRICE decimal(19,4),
@ORGANIZATIONHIGHPRICE decimal(19,4),
@BASEAMOUNT money,
@BASEFEE money,
@BASELOWPRICE decimal(19,4),
@BASEMEDIANPRICE decimal(19,4),
@BASEHIGHPRICE decimal(19,4),
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier;
select
@TRANSACTIONCURRENCYID = STOCKDETAIL.TRANSACTIONCURRENCYID,
@BASECURRENCYID = STOCKDETAIL.BASECURRENCYID
from
dbo.REVENUEPAYMENTMETHOD
inner join dbo.STOCKDETAIL on REVENUEPAYMENTMETHOD.ID = STOCKDETAIL.ID
where
REVENUEPAYMENTMETHOD.REVENUEID = @REVENUEID;
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, @BASEAMOUNT 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;
if @BASEAMOUNT < 0
raiserror('CK_STOCKSALE_SALEAMOUNTPOSITIVE', 13, 1);
insert into dbo.FINANCIALTRANSACTION (
ID
,PARENTID
,DATE
,POSTSTATUSCODE
,POSTDATE
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGEXCHANGERATEID
,PDACCOUNTSYSTEMID
,TYPECODE
,DESCRIPTION
,DELETEDON
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values (
@ID
,@REVENUEID
,@SALEDATE
,case isnull(@SALEPOSTSTATUSCODE, 1) when 0 then 2 when 1 then 1 when 2 then 3 end
,@SALEPOSTDATE
,@SALEAMOUNT
,@BASEAMOUNT
,@ORGANIZATIONSALEAMOUNT
,@TRANSACTIONCURRENCYID
,@BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID
,@PDACCOUNTSYSTEMID
,21
,''
,null
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
insert into dbo.STOCKSALE_EXT (
ID
,STOCKDETAILID
,SALEDATE
,NUMBEROFUNITS
,TRANSACTIONFEE
,ORGANIZATIONFEE
,FEE
,TRANSACTIONLOWPRICE
,TRANSACTIONMEDIANPRICE
,TRANSACTIONHIGHPRICE
,ORGANIZATIONLOWPRICE
,ORGANIZATIONMEDIANPRICE
,ORGANIZATIONHIGHPRICE
,LOWPRICE
,MEDIANPRICE
,HIGHPRICE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values (
@ID
,@STOCKDETAILID
,@SALEDATE
,@NUMBEROFUNITS
,@FEE
,@ORGANIZATIONFEE
,@BASEFEE
,@LOWPRICE
,@MEDIANPRICE
,@HIGHPRICE
,@ORGANIZATIONLOWPRICE
,@ORGANIZATIONMEDIANPRICE
,@ORGANIZATIONHIGHPRICE
,@BASELOWPRICE
,@BASEMEDIANPRICE
,@BASEHIGHPRICE
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
-- Add new stock detail GL distributions
if @SALEPOSTSTATUSCODE <> 2
exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE, @ID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;