123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
- <!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
- <script:module xmlns:script="http://openoffice.org/2000/script" script:name="Depot" script:language="StarBasic">Option Explicit
- Sub Initialize(Optional bChooseMarketPlace as Boolean)
- Dim bEnableHistory as Boolean
- GlobalScope.BasicLibraries.LoadLibrary("Tools")
- ' oMarketModel = GetControlModel(oDocument.Sheets(0), "CmdHistory")
- ' bEnableHistory = oMarketModel.Enabled
- ToggleWindow(False)
- Today = Date()
- bDebugmode = False
- oDocument = ThisComponent
- oController = oDocument.GetCurrentController
- oSheets = oDocument.Sheets
- oFirstSheet = oSheets(0)
- oMovementSheet = oSheets(1)
- oBankSheet = oSheets(2)
- oDocFormats = oDocument.NumberFormats
- oNumberFormatter = CreateUnoService("com.sun.star.util.NumberFormatter")
- oNumberFormatter.AttachNumberFormatsSupplier(oDocument)
- oDocLocale = oDocument.CharLocale
- sDocLanguage = oDocLocale.Language
- sDocCountry = oDocLocale.Country
- LoadLanguage()
- ToggleWindow(True)
- ' oMarketModel.Enabled = bEnableHistory
- If Not IsMissing(bChooseMarketPlace) Then
- If bChoosemarketPlace Then
- ChooseMarket()
- End If
- Else
- ChooseMarket()
- End If
- If Not IsMissing(bChooseMarketPlace) Then
- If bChooseMarketPlace Then
- oMarketModel.Enabled = bEnableMarket
- oInternetModel.Enabled = bEnableInternet
- End If
- End If
- End Sub
- Sub Buy()
- Initialize(True)
- FillListbox(DlgTransaction.GetControl("lstBuyStocks"), TransactTitle(SBDIALOGBUY), False)
- SetupTransactionControls(SBDIALOGBUY)
- EnableTransactionControls(False)
- DlgTransaction.Execute()
- End Sub
- Sub Sell()
- Initialize(True)
- If FillListbox(DlgTransaction.GetControl("lstSellStocks"), TransactTitle(SBDIALOGSELL), True) Then
- SetupTransactionControls(SBDIALOGSELL)
- EnableTransactionControls(False)
- DlgTransaction.Execute()
- End If
- End Sub
- Sub Reset()
- Dim TransactionCount as Integer
- Dim StockCount, iStartRow, i as Integer
- Dim oRows, oRange as Object
- Dim StockName as String
- Initialize(True)
- ' Delete transactions and reset overview
- If MsgBox(sMsgDeleteAll, SBMSGYESNO+SBMSGQUESTION+SBMSGDEFAULTBTN2, sMsgAuthorization) = 6 Then
- ' Assumption: If and only if there is an overview, then there are transactions, too
- UnprotectSheets(oSheets)
- StockCount = GetStocksCount(iStartRow)
- For i = 1 To StockCount
- StockName = oFirstSheet.GetCellbyPosition(SBCOLUMNNAME1, iStartRow + i).String
- If oSheets.HasbyName(StockName) Then
- oSheets.RemoveByName(StockName)
- End If
- Next
- oDocument.AddActionLock
- RemoveStockRows(oFirstSheet, iStartRow + 1, StockCount)
- TransactionCount = GetTransactionCount(iStartRow)
- RemoveStockRows(oMovementSheet, iStartRow + 2, TransactionCount)
- ProtectSheets(oSheets)
- oDocument.RemoveActionLock
- End If
- End Sub
- Sub TransactionOk
- Dim Sold as Long
- Dim RestQuantity, Value, PartialValue, Profit
- Dim iNewRow as Integer, iRow as Integer
- Dim iStockRow as Long, iRestQuantity as Long
- Dim oNameCell as Object
- Dim CellStockName as String, SelStockName as String
- Dim CurRate as Double
- Dim TransactDate as Date
- Dim LocStockName as String
- ' Check for rate entered
- If TransactModel.txtRate.Value = 0 Then
- If TransactModel.Step = SBDIALOGBUY Then
- If MsgBox(sMsgFreeStock, SBMSGYESNO+SBMSGQUESTION, sMsgConfirm)=7 Then
- Exit Sub
- End If
- Else
- If MsgBox(sMsgTotalLoss, SBMSGYESNO+SBMSGQUESTION, sMsgConfirm)=7 Then
- Exit Sub
- End If
- End If
- End If
- CurRate = TransactModel.txtRate.Value
- TransactDate = CDateFromUNODate(TransactModel.txtDate.Date)
- DlgTransaction.EndExecute()
- UnprotectSheets(oSheets)
- iNewRow = DuplicateRow(oMovementSheet, "HiddenRow3")
- If TransactModel.Step = SBDIALOGBUY Then
- CellStockName = TransactModel.lstBuyStocks.Text
- If Instr(1,CellStockName,"$") <> 0 Then
- CellStockName = "'" & CellStockName & "'"
- End If
- oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iNewRow).String = CellStockName
- oMovementSheet.GetCellByPosition(SBCOLUMNQUANTITY2, iNewRow).Value = TransactModel.txtQuantity.Value
- Else
- CellStockName = DlgTransaction.GetControl("lstSellStocks").GetSelectedItem()
- oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iNewRow).String = CellStockName
- oMovementSheet.GetCellByPosition(SBCOLUMNQUANTITY2, iNewRow).Value = -TransactModel.txtQuantity.Value
- End If
-
- oMovementSheet.GetCellByPosition(SBCOLUMNDATE2, iNewRow).Value = CDateFromUNODate(TransactModel.txtDate.Date)
- oMovementSheet.GetCellByPosition(SBCOLUMNRATE2, iNewRow).Value = TransactModel.txtRate.Value
- oMovementSheet.GetCellByPosition(SBCOLUMNPROVPERCENT2, iNewRow).Value = TransactModel.txtCommission.EffectiveValue
- oMovementSheet.GetCellByPosition(SBCOLUMNPROVMIN2, iNewRow).Value = TransactModel.txtMinimum.Value
- oMovementSheet.GetCellByPosition(SBCOLUMNPROVFIX2, iNewRow).Value = TransactModel.txtFix.Value
-
- ' Buy stocks: Update overview for new stocks
- If TransactModel.Step = SBDIALOGBUY Then
- iStockRow = GetStockRowIndex(CellStockName)
- If iStockRow = -1 Then
- iNewRow = DuplicateRow(oFirstSheet, "HiddenRow2")
- oFirstSheet.GetCellByPosition(SBCOLUMNNAME1, iNewRow).String = CellStockName
- oFirstSheet.GetCellByPosition(SBCOLUMNID1, iNewRow).String = TransactModel.txtStockID.Text
- iStockRow = GetStockRowIndex(CellStockName)
- End If
- ' Sell stocks: Get transaction value, then update Transaction sheet
- ElseIf TransactModel.Step = SBDIALOGSELL Then
- Profit = oMovementSheet.GetCellByPosition(SBCOLUMNPROCEEDS2, iNewRow).Value
- Value = Profit
- Sold = TransactModel.txtQuantity.Value
- SelStockName = DlgTransaction.GetControl("lstSellStocks").GetSelectedItem()
- ' Go to first name
- If TransactMode = FIFO Then
- iRow = SBROWFIRSTTRANSACT2
- Else
- iRow = iNewRow-1
- End If
-
- ' Check that no transaction after split date exists else cancel split
- Do While Sold > 0
- oNameCell = oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iRow)
- CellStockName = oNameCell.String
- If CellStockName = SelStockName Then
- ' Update transactions: Note quantity sold
- RestQuantity = oMovementSheet.GetCellByPosition(SBCOLUMNQTYREST2, iRow).Value
- ' If there still is a rest left ...
- If RestQuantity > 0 Then
- If RestQuantity < Sold Then
- ' Recalculate profit of new transaction
- Profit = Profit - oMovementSheet.GetCellByPosition(SBCOLUMNPRCREST2, iRow).Value
- AddValueToCellContent(SBCOLUMNQTYSOLD2, iRow, RestQuantity)
- PartialValue = RestQuantity / Sold * Value
- AddValueToCellContent(SBCOLUMNREALPROC2, iRow, PartialValue)
- Sold = Sold - RestQuantity
- Value = Value - PartialValue
- Else
- ' Recalculate profit of neTransactModel.lstBuyStocks.Textw transaction
- PartialValue = oMovementSheet.GetCellByPosition(SBCOLUMNPRCREST2, iRow).Value
- Profit = Profit - PartialValue/RestQuantity * Sold
- ' Update sold shares cell
- AddValueToCellContent(SBCOLUMNQTYSOLD2, iRow, Sold)
- ' Update sales turnover cell
- AddValueToCellContent(SBCOLUMNREALPROC2, iRow, Value)
- ' Update variables for rest of transaction
- Sold = 0
- Value = 0
- End If
- End If
- End If
- iRow = iRow + TransactMode
- Loop
- oMovementSheet.GetCellByPosition(SBCOLUMNREALPROFIT2,iNewRow).Value = Profit
- iStockRow = GetStockRowIndex(SelStockName)
- iRestQuantity = oFirstSheet.GetCellbyPosition(SBCOLUMNQUANTITY1, iStockRow).Value
- ' If iRestQuantity = 0 Then
- ' If oSheets.HasbyName(SelStockName) Then
- ' oSheets.RemoveByName(SelStockName)
- ' End If
- ' Else
-
- ' End If
- End If
- InsertCurrentValue(CurRate, iStockRow,TransactDate)
- ProtectSheets(oSheets)
- End Sub
- Sub SelectStockname(aEvent as Object)
- Dim iCurRow as Integer
- Dim CurStockName as String
- With TransactModel
- ' Find row with stock name
- If TransactModel.Step = SBDIALOGBUY Then
- CurStockName = .lstBuyStocks.Text
- iCurRow = GetStockRowIndex(CurStockName)
- .txtQuantity.ValueMax = 10000000
- Else
- Dim ListBoxList() as String
- ListBoxList() = GetSelectedListboxItems(aEvent.Source.getModel())
- CurStockName = ListBoxList(0)
- ' CurStockName = DlgTransaction.GetControl(aEvent.Source.getModel.Name).GetSelectedItem()
- iCurRow = GetStockRowIndex(CurStockName)
- Dim fdouble as Double
- fdouble = oFirstSheet.GetCellByPosition(SBCOLUMNQUANTITY1, iCurRow).Value
- .txtQuantity.Value = fdouble
- .txtQuantity.ValueMax = oFirstSheet.GetCellByPosition(SBCOLUMNQUANTITY1, iCurRow).Value
- .txtRate.Value = oFirstSheet.GetCellbyPosition(SBCOLUMNRATE1, iCurRow).Value
- End If
- .txtStockID.Enabled = .Step = SBDIALOGBUY
- .lblStockID.Enabled = .Step = SBDIALOGBUY
- ' Default settings for quantity and rate
- .txtStockID.Text = GetStockID(CurStockName, iCurRow)
- End With
- EnableTransactionControls(CurStockName <> "")
- TransactModel.cmdGoOn.DefaultButton = True
- End Sub
- Sub HandleStocks(Mode as Integer, oDialog as Object)
- Dim DividendPerShare, DividendTotal, RestQuantity, OldValue
- Dim SelStockName, CellStockName as String
- Dim oNameCell as Object, oDateCell as Object
- Dim iRow as Integer
- Dim oDividendCell as Object
- Dim Amount
- Dim OldNumber, NewNumber as Integer
- Dim NoteText as String
- Dim TotalStocksCount as Long
- Dim oModel as Object
- oDocument.AddActionLock
- oDialog.EndExecute()
- oModel = oDialog.Model
- SelStockName = DlgStockRates.GetControl("lstStockNames").GetSelectedItem()
- Select Case Mode
- Case HANDLEDIVIDEND
- Dim bTakeTotal as Boolean
- ' Update transactions: Enter dividend paid for all Buy transactions not sold completely
- bTakeTotal = oModel.optTotal.State = 1
- If bTakeTotal Then
- DividendTotal = oModel.txtDividend.Value
- iRow = GetStockRowIndex(SelStockName)
- TotalStocksCount = oFirstSheet.GetCellByPosition(SBCOLUMNQUANTITY1,iRow).Value
- DividendPerShare = DividendTotal/TotalStocksCount
- Else
- DividendPerShare = oModel.txtDividend.Value
- End If
- Case HANDLESPLIT
- ' Store entered values in variables
- OldNumber = oModel.txtOldRate.Value
- NewNumber = oModel.txtNewRate.Value
- SplitDate = CDateFromUNODate(oModel.txtDate.Date)
- iRow = SBROWFIRSTTRANSACT2
- NoteText = cSplit & SplitDate & ", " & oModel.txtOldRate.Value & oModel.lblColon.Label & oModel.txtNewRate.Value
- Do
- oNameCell = oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iRow)
- CellStockName = oNameCell.String
- If CellStockName = SelStockName Then
- oDateCell = oMovementSheet.GetCellByPosition(SBCOLUMNDATE2, iRow)
- If oDateCell.Value >= SplitDate Then
- MsgBox sMsgWrongExchangeDate, SBMSGOK + SBMSGSTOP, sMsgError
- Exit Sub
- End If
- End If
- iRow = iRow + 1
- Loop Until CellStockName = ""
- End Select
- iRow = SBROWFIRSTTRANSACT2
- UnprotectSheets(oSheets)
- Do
- oNameCell = oMovementSheet.GetCellByPosition(SBCOLUMNNAME2, iRow)
- CellStockName = oNameCell.String
- If CellStockName = SelStockName Then
- Select Case Mode
- Case HANDLEDIVIDEND
- RestQuantity = oMovementSheet.GetCellByPosition(SBCOLUMNQTYREST2, iRow).Value
- If RestQuantity > 0 Then
- oDividendCell = oMovementSheet.GetCellByPosition(SBCOLUMNDIVIDEND2, iRow)
- OldValue = oDividendCell.Value
- oDividendCell.Value = OldValue + RestQuantity * DividendPerShare
- End If
- Case HANDLESPLIT
- oDateCell = oMovementSheet.GetCellByPosition(SBCOLUMNDATE2, iRow)
- SplitCellValue(oMovementSheet, NewNumber, OldNumber, SBCOLUMNQUANTITY2, iRow, NoteText)
- SplitCellValue(oMovementSheet, OldNumber, NewNumber, SBCOLUMNRATE2, iRow, "")
- SplitCellValue(oMovementSheet, NewNumber, OldNumber, SBCOLUMNQTYSOLD2, iRow, "")
- End Select
- End If
- iRow = iRow + 1
- Loop Until CellStockName = ""
- If Mode = HANDLESPLIT Then
- CalculateChartafterSplit(SelStockName, NewNumber, OldNumber, NoteText, SplitDate)
- End If
- oDocument.CalculateAll()
- ProtectSheets(oSheets)
- oDocument.RemoveActionLock
- End Sub
- Sub CancelStockRate()
- DlgStockRates.EndExecute()
- End Sub
- Sub CancelTransaction()
- DlgTransaction.EndExecute()
- End Sub
- Sub CommitStockRate()
- Dim CurStep as Integer
- CurStep = StockRatesModel.Step
- Select Case CurStep
- Case 1
- ' Check for quantity entered
- If StockRatesModel.txtDividend.Value = 0 Then
- MsgBox sMsgNoDividend, SBMSGSTOP+SBMSGSTOP, sMsgError
- Exit Sub
- End If
- HandleStocks(HANDLEDIVIDEND, DlgStockRates)
- Case 2
- HandleStocks(HANDLESPLIT, DlgStockRates)
- Case 3
- InsertCompanyHistory()
- End Select
- End Sub
- Sub EnableTransactionControls(bEnable as Boolean)
- With TransactModel
- .lblQuantity.Enabled = bEnable
- .txtQuantity.Enabled = bEnable
- .lblRate.Enabled = bEnable
- .txtRate.Enabled = bEnable
- .lblDate.Enabled = bEnable
- .txtDate.Enabled = bEnable
- .lblCommission.Enabled = bEnable
- .txtCommission.Enabled = bEnable
- .lblMinimum.Enabled = bEnable
- .txtMinimum.Enabled = bEnable
- .lblFix.Enabled = bEnable
- .txtFix.Enabled = bEnable
- If TransactModel.Step = SBDIALOGSELL Then
- .cmdGoOn.Enabled = Ubound(TransactModel.lstSellStocks.SelectedItems()) > -1
- DlgTransaction.GetControl("lstSellStocks").SetFocus()
- Else
- .cmdGoOn.Enabled = TransactModel.lstBuyStocks.Text <> ""
- DlgTransaction.GetControl("lstBuyStocks").SetFocus()
- End If
- If bEnable Then
- TransactModel.cmdGoOn.DefaultButton = True
- End If
- End With
- End Sub
- Sub SetupTransactionControls(CurStep as Integer)
- DlgReference = DlgTransaction
- With TransactModel
- .txtDate.Date = CDateToUNODate(Date())
- .txtDate.DateMax = CDateToUNODate(Date())
- .txtStockID.Enabled = False
- .lblStockID.Enabled = False
- .lblStockID.Label = sCurStockIDLabel
- .txtRate.CurrencySymbol = sCurCurrency
- .txtFix.CurrencySymbol = sCurCurrency
- .Step = CurStep
- End With
- DlgTransaction.Title = TransactTitle(CurStep)
- CellValuetoControl(oBankSheet, TransactModel.txtCommission, "ProvisionPercent")
- CellValuetoControl(oBankSheet, TransactModel.txtMinimum, "ProvisionMinimum")
- CellValuetoControl(oBankSheet, TransactModel.txtFix, "ProvisionFix")
- End Sub
- Sub AddShortCuttoControl()
- Dim SelCompany as String
- Dim iRow, SelIndex as Integer
- SelIndex = DlgTransaction.GetControl("lstBuyStocks").GetSelectedItemPos()
- If SelIndex <> -1 Then
- SelCompany = TransactModel.lstBuyStocks.StringItemList(SelIndex)
- iRow = GetStockRowIndex(SelCompany)
- If iRow <> -1 Then
- TransactModel.txtStockID.Text = oFirstSheet.GetCellByPosition(SBCOLUMNID1,iRow).String
- TransactModel.txtRate.Value = oFirstSheet.GetCellByPosition(SBCOLUMNRATE1,iRow).Value
- Else
- TransactModel.txtStockID.Text = ""
- TransactModel.txtRate.Value = 0
- End If
- Else
- TransactModel.txtStockID.Text = ""
- TransactModel.txtRate.Value = 0
- End If
- End Sub
- Sub OpenStockRatePage(aEvent)
- Dim CurStep as Integer
- Initialize(True)
- CurStep = aEvent.Source.Model.Tag
- If FillListbox(DlgStockRates.GetControl("lstStockNames"), StockRatesTitle(CurStep), True) Then
- StockRatesModel.Step = CurStep
- ToggleStockRateControls(False, CurStep)
- InitializeStockRatesControls(CurStep)
- DlgStockRates.Execute()
- End If
- End Sub
- Sub SelectStockNameForRates()
- Dim StockName as String
- StockName = DlgStockRates.GetControl("lstStockNames").GetSelectedItem()
- If StockName <> "" Then
- StockRatesModel.txtStockID.Text = GetStockID(StockName)
- ToggleStockRateControls(True, StockRatesModel.Step)
- End If
- StockRatesModel.cmdGoOn.DefaultButton = True
- End Sub
- Sub ToggleStockRateControls(bDoEnable as Boolean, CurStep as Integer)
- With StockRatesModel
- .lblStockID.Enabled = False
- .txtStockID.Enabled = False
- .cmdGoOn.Enabled = Ubound(StockRatesModel.lstStockNames.SelectedItems()) <> -1
- Select Case CurStep
- Case 1
- .optPerShare.Enabled = bDoEnable
- .optTotal.Enabled = bDoEnable
- .lblDividend.Enabled = bDoEnable
- .txtDividend.Enabled = bDoEnable
- Case 2
- .lblExchangeRate.Enabled = bDoEnable
- .lblDate.Enabled = bDoEnable
- .lblColon.Enabled = bDoEnable
- .txtOldRate.Enabled = bDoEnable
- .txtNewRate.Enabled = bDoEnable
- .txtDate.Enabled = bDoEnable
- Case 3
- .lblStartDate.Enabled = bDoEnable
- .lblEndDate.Enabled = bDoEnable
- .txtStartDate.Enabled = bDoEnable
- .txtEndDate.Enabled = bDoEnable
- .hlnInterval.Enabled = bDoEnable
- .optDaily.Enabled = bDoEnable
- .optWeekly.Enabled = bDoEnable
- End Select
- End With
- End Sub
- Sub InitializeStockRatesControls(CurStep as Integer)
- DlgReference = DlgStockRates
- DlgStockRates.Title = StockRatesTitle(CurStep)
- With StockRatesModel
- .txtStockID.Text = ""
- .lblStockID.Label = sCurStockIDLabel
- Select Case CurStep
- Case 1
- .txtDividend.Value = 0
- .optPerShare.State = 1
- .txtDividend.CurrencySymbol = sCurCurrency
- Case 2
- .txtOldRate.Value = 1
- .txtNewRate.Value = 1
- .txtDate.Date = CDateToUNODate(Date())
- Case 3
- .txtStartDate.DateMax = CDateToUNODate(CDate(Date())-1)
- .txtEndDate.DateMax = CDateToUNODate(CDate(Date())-1)
- .txtStartDate.Date = CDateToUNODate(CDate(Date())-8)
- .txtEndDate.Date = CDateToUNODate(CDate(Date())-1)
- .optDaily.State = 1
- End Select
- End With
- End Sub
- </script:module>
|