Poniżej wstawię calą procedurę gdyż zmian jest dość dużo.
Naj wązniejsza zmiana to rozróżnienie zlecenia o statusie kPKC i kCU. Pokażdej cenie mamy cenę równą 0 (zero), cenę pobieramy z tabeli Stock i na tej podstawie wyliczamy ile pieniędzy potrzebujemy zabrać z portfela, a przy okazji czyszczenia rynku pieniądze będą zwracane (jeżeli zlecenie się przeterminuje) na podstawie wyliczonej wartości zlecenia przy składaniu transakcji ( pCreateBuyTransaction). Przy realizacji zlecenia na rynku istnieje rekord w którym mamy zarezerwowaną pewną kwotę (to jakby zaliczka), wtedy będzie ponownie sprawdzona cena na rynku i z równania wyjdzie nam różnica którą użytkownik musi zapłacić lub zostanie mu zwrócona albo się wstrzeli w cenę i nie będzie musiał dopłacać.
KOD:
BEGIN
--pomocnicze
declare
@wallet_id int
declare @stock_id
int
declare
@stockN_id int
declare
@walletMoneyLimit money
declare
@userLogin varchar(50)
--wyszukanie portfela oraz akcji
select
@wallet_id = wal_id from
UserTable where usr_id =@user_id
select
@walletMoneyLimit = wal_MoneyLimit from Wallet where
wal_id = @wallet_id
select
@stockN_id = stockN_id from
StockName where stockN_name = @stock_name
select @stock_id
= stock_id from
Stock where stockN_id =
@stockN_id
if
(@priceStatusId = 1)
begin
-- sprawdzenie portfela
declare @result money
declare @PriceTransaction money
set @result =
@numberBuyStock * @stockPrice
--transakcja na rynek
if(@result <=
@walletMoneyLimit)
begin
INSERT INTO [dbo].[MarketSquare]
([stock_id],[wal_id],[mark_numberOfShares]
,[mark_aktywny],[mark_sharePriceBuy]
,[bs_id],[mark_sharePriceSell]
,[mark_dataStart],[mark_dataEnd]
,[mark_TransactionPrice],[priceStatus_id])
VALUES (@stock_id,@wallet_id,@numberBuyStock,1,@stockPrice,2,0,GETDATE(),@dataEnd,@result,@priceStatusId)
--get
money from wallet and set to transaction
set @PriceTransaction =
@walletMoneyLimit - @result
update Wallet set
wal_MoneyLimit
= @PriceTransaction
where
wal_id
= @wallet_id
end
else
begin
select @userLogin =
usr_login
from UserTable
where
usr_id = @user_id
from UserTable
where
usr_id = @user_id
exec pAddInfoToLog 2,@userLogin,
'zamałe srodki na zakup
akcji, zmniejsz liczbe akcji, kCU'
end
end
if(@priceStatusId = 3)
begin
declare @stockPriceFromStockTable money
declare @priceInThisTime money
--priceStatus = kPKC stockPrice = 0, get price of stock
from Stock Table
select @stockPriceFromStockTable = stock_priceBuy
from Stock
where stock_id = @stock_id
from Stock
where stock_id = @stock_id
set @priceInThisTime =
@stockPriceFromStockTable * @numberBuyStock
if(@result <= @walletMoneyLimit)
begin
INSERT INTO [dbo].[MarketSquare]
([stock_id],[wal_id],[mark_numberOfShares]
,[mark_aktywny],[mark_sharePriceBuy]
,[bs_id],[mark_sharePriceSell]
,[mark_dataStart],[mark_dataEnd]
,[mark_TransactionPrice],[priceStatus_id])
VALUES
(@stock_id,@wallet_id,@numberBuyStock,1,0e,2,0,GETDATE(),@dataEnd,@priceInThisTime,@priceStatusId)
--get
money from wallet and set to transaction
set @PriceTransaction =
@walletMoneyLimit - @result
update Wallet set
wal_MoneyLimit
= @PriceTransaction
where
wal_id
= @wallet_id
end
else
begin
select @userLogin =
usr_login
from UserTable
where
usr_id = @user_id
from UserTable
where
usr_id = @user_id
exec pAddInfoToLog 2,@userLogin
,'zamałe srodki na zakup
akcji, zmniejsz liczbe akcji, kPKC'
end
end
end