// aktualizacja danych obiektu po odebraniu ich z sieci internal void Update(DTO.AccountData data) { AvailableCash = data.AvailableCash; AvailableFunds = data.AvailableFunds; DepositDeficit = data.DepositDeficit; DepositBlocked = data.DepositBlocked; DepositValue = data.DepositValue; PortfolioValue = data.PortfolioValue; Papers.Update(data.Papers); UpdateTime = DateTime.Now; }
// aktualizacja stanu jednego z rachunków private void AccountUpdateHandler(AccountData acccountData) { var account = Accounts[acccountData.Number]; account.Update(acccountData); InvokeUpdate(account); }
// wewnętrzna obsługa komunikatu "Statement" // - wywołuje zdarzenia "AccountUpdateEvent", po jednym na każdy rachunek private void StatementMsgHandler(StatementMsg msg) { if (AccountUpdateEvent != null) { foreach (var statement in msg.Statements) { var account = new AccountData(); account.Number = statement.AccountNumber; // otwarte pozycje... account.Papers = statement.Positions. Select(p => new Paper { Instrument = p.Key.Convert(), Account110 = p.Value.Acc110, Account120 = p.Value.Acc120, }).ToArray(); // najważniejsze kwoty... account.AvailableCash = statement.Funds[StatementFundType.Cash]; if (!statement.Funds.ContainsKey(StatementFundType.Deposit)) { // rachunek akcyjny account.AvailableFunds = statement.Funds[StatementFundType.CashReceivables]; } else { // rachunek kontraktowy account.AvailableFunds = account.AvailableCash + statement.Funds[StatementFundType.DepositFree]; if (statement.Funds.ContainsKey(StatementFundType.DepositDeficit)) account.DepositDeficit = statement.Funds[StatementFundType.DepositDeficit]; account.DepositBlocked = statement.Funds[StatementFundType.DepositBlocked]; account.DepositValue = statement.Funds[StatementFundType.Deposit]; } account.PortfolioValue = statement.Funds[StatementFundType.PortfolioValue]; // wywołanie zdarzenia z przygotowanymi danymi AccountUpdateEvent(account); } } }