Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE PROCEDURE [dbo].[sp_GL_Prop_SecAgent_MtMValue_Profit_EndOfMonth_CleanPrice]
- @BookingID varchar(32),
- @Date datetime,
- @LastDate datetime,
- @Value float output
- AS
- if datediff(m, @LastDate, @Date) = 0
- select @Value = 0
- else
- begin
- declare @AgentTicket varchar(10),
- @Ticket varchar(10),
- @AmortisedCost float,
- @SecInfoCurrency varchar(3),
- @LastDayOfMonth datetime
- set @Value = 0
- select @AgentTicket = Ticket from GL_Transaction where BookingId = @BookingID
- select @LastDayOfMonth = dbo.f_LastDayOfMonth(@LastDate)
- declare si_cursor cursor
- for select Ticket, abs(AmortisedCost), Currency from v_Security_Info where Agent = @AgentTicket and [Date] = @LastDayOfMonth
- open si_cursor
- fetch next from si_cursor into @Ticket, @AmortisedCost, @SecInfoCurrency
- while @@FETCH_STATUS = 0
- begin
- --ma kapjuk meg a tegnapi valós értéket, ezért a tegnapi napra mentett valós értéket kell könyvelnünk
- --BB-ben csak minden hónap végén könyvelünk valós értéket, tehát az eljárásnak csak a hónap első könyvelési napján kell visszaadnia az előző hónap utolsó napjára számolt valós értéket
- declare @ValueId int
- ,@MtmValue float
- ,@Rate float
- ,@Currency varchar(3)
- --Amortised cost forintosítás - ritkán lehet rá szükség, de előfordulhat
- if @SecInfoCurrency != 'HUF'
- begin
- select @Rate = dbo.f_Get_Last_GL_Reval_Rate(@SecInfoCurrency, @LastDayOfMonth)
- if dbo.f_Currency_RateOrder('HUF') > dbo.f_Currency_RateOrder(@SecInfoCurrency)
- select @AmortisedCost = @AmortisedCost * @Rate
- else
- select @AmortisedCost = @AmortisedCost / @Rate
- end
- --az MtMValues táblából kellene az ügylethez tartozó SumMtMValue oszlop értéke
- --ha egy napon többször is mentettek valós értéket, akkor a legutolsó mentett valós értéket vegye ki: MtMSaved legutolsó id-hoz tartozó MtmValue érték
- select @ValueId = max(ValueId)
- from MtMSaved
- where ValueDate = @LastDayOfMonth
- select @MtmValue = isnull(sum(MtMValue-Interest),0)
- ,@Currency = Currency
- from Mtmvalues
- where Ticket = @Ticket
- and Id = @ValueId
- group by Ticket, Currency
- --amennyiben nem forintban mentették le a valós értéket, akkor a legutolsó MNB közép árfolyammal forintosítsuk ezt az értéket
- if @Currency != 'HUF'
- begin
- select @Rate = dbo.f_Get_Last_GL_Reval_Rate(@Currency, @LastDayOfMonth)
- if dbo.f_Currency_RateOrder('HUF') > dbo.f_Currency_RateOrder(@Currency)
- select @MtmValue = @MtmValue * @Rate
- else
- select @MtmValue = @MtmValue / @Rate
- end
- --Az agent minden ügyletére összeadjuk az (amortisedcost - clean price) különbséget
- select @Value = @Value + @AmortisedCost - @MtmValue
- fetch next from si_cursor into @Ticket, @AmortisedCost, @SecInfoCurrency
- end
- close si_cursor
- deallocate si_cursor
- --az eljárás csak akkor adjon vissza értéket, ha a SumMtmValue > 0, különben nullát adjon vissza
- if @Value < 0
- select @Value = 0
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement