piątek, 9 listopada 2018

Giełda - pCreateBuyTransaction - rozszerzenie

Przy okazji tworzenia procedury "Czyszczenia rynku" z przeterminowanych akcji, potrzeba zmusiła mnie do rozszerzenia procedury pCreateBuyTransaction o obsługę zleceń "kPKC" oraz "kCU". Wcześniejsza wersja robiła tylko inserta do  tabeli MarketSquare bez uwzględnienia różnic pomiędzy typami zleceń.
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
                               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
                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
                               exec pAddInfoToLog 2,@userLogin
                                    ,'zamałe srodki na zakup akcji, zmniejsz liczbe akcji, kPKC'
                        end
        end
end


Brak komentarzy:

Prześlij komentarz

 Po wielu miesiącach przerwy Czteroletnim exodusie do bloga ismartdev, który zdechł w zeszłym roku w listopadzie, na powrót wstąpiłem w ten ...