Ejemplo n.º 1
0
        public Customer(IBalance customerBalance)
        {
            if (customerBalance == null)
                throw new ArgumentNullException();

            _customerBalance = customerBalance;
        }
Ejemplo n.º 2
0
        public BalanceSubstationView(IBalance balance)
        {
            _balance = balance;

            _task = new Task(() =>
            {
                //System.Threading.Thread.Sleep(5000);
                table.Dispatcher.BeginInvoke(
                    new Action(delegate()
                {
                    table.BeginInit();
                    Create_tableColumns();
                    //ate = State.Idle;
                    table.ItemsSource = _balance.Items;
                    table.EndInit();
                    IsBusy = false;
                }));
            });

            _task.ContinueWith((t) =>
            {
                //State = State.Idle;
                EmcosSiteWrapperApp.LogError("Просмотр баланса подстанции - ошибка: " + t.Exception.Message);
                EmcosSiteWrapperApp.ShowError("Произошла ошибка.\n" + t.Exception.Message);
            }, TaskContinuationOptions.OnlyOnFaulted);

            InitializeComponent();

            _task.Start();

            DataContext          = this;
            rootGrid.DataContext = _balance;

            _balance.PropertyChanged += Balance_PropertyChanged;
        }
Ejemplo n.º 3
0
        private void button1_Click(object sender, EventArgs e)
        {
            IBalance balance = (IBalance)atm;

            if (radioButton1.Checked)
            {
                balance.PayMoney(0, (int)numericUpDown1.Value);
                MessageBox.Show("Деньги успешно положены на карту!");
            }

            if (radioButton2.Checked)
            {
                int money = 0;
                balance.GetMoney(ref money);
                if ((int)numericUpDown1.Value < money)
                {
                    balance.WithdrawMoney(0, (int)numericUpDown1.Value);
                    MessageBox.Show("Деньги успешно сняты с карты!");
                }
                else
                {
                    MessageBox.Show("Error: нет столько денег в банкомате.");
                }
            }

            numericUpDown1.Value = 0;
        }
Ejemplo n.º 4
0
 public Account(string name, string password, IBalance balance)
 {
     Transactions = new List <ITransaction>();
     Name         = name;
     Password     = password;
     Balance      = balance;
 }
Ejemplo n.º 5
0
        protected static IEnumerable <string> GetChildAccountIds(IBalance balance, string account)
        {
            var accountPredicate = new QueryAccountPredicate(account + ":**");
            var accountIds       = balance.Items.GetBalanceItems(accountPredicate).Select(balanceItem => ((Account)balanceItem.Account).Id);
            var level            = account.Split(':').Length;

            return(accountIds.Select(accountId => string.Join(":", accountId.Split(':').Take(level))).Distinct());
        }
Ejemplo n.º 6
0
 public CurrencyController(
     IBalance balance,
     IUser user
     )
 {
     _balance = balance;
     _user    = user;
 }
Ejemplo n.º 7
0
 public UserService(
     ICurrencyDataManager currencyDataManager,
     IBalance balance
     )
 {
     _currencyDataManager = currencyDataManager;
     _balance             = balance;
 }
Ejemplo n.º 8
0
        public Fond(string name, IBalance initialBalance)
        {
            this.Name        = name;
            this.FondBalance = initialBalance;

            this.Members      = new List <IAccount>();
            this.Transactions = new List <ITransaction>();
        }
Ejemplo n.º 9
0
        public IResult ConvertToEUR(IBalance balance)
        {
            IResult result = _stateResult.Clone();

            result.Success = false;
            result.Message = MessageHolder.GetMessage(MessageType.AlreadyIn)
                             + this.Name;
            return(result);
        }
Ejemplo n.º 10
0
        [NotNull] public static string FormatBalance([NotNull] BaseModule module, [NotNull] IBalance balance)
        {
            var a = module.Name(balance.UserA);
            var b = module.Name(balance.UserB);

            var(borrower, lender) = balance.Amount < 0 ? (a, b) : (b, a);

            return($"{borrower} owes {FormatCurrency(Math.Abs(balance.Amount), balance.Unit)} to {lender}");
        }
Ejemplo n.º 11
0
        public static IBalance Subtract(this IBalance endBalance, IBalance startBalance)
        {
            // Performance.MarkStart("BalanceHelper.Subtract");

            var balance = new Balance();

            balance.Index = endBalance.Index;
            balance.Book  = endBalance.Book;

            foreach (var endBalanceItem in endBalance.Items)
            {
                var startBalanceItem = startBalance.Items.GetBalanceItem(endBalanceItem.Account);

                var balanceItem = new BalanceItem();

                if (startBalanceItem != null)
                {
                    if (!endBalanceItem.Asset.Equals(startBalanceItem.Asset))
                    {
                        throw new ValidationException("Assets not equal.");
                    }

                    balanceItem.Asset   = endBalanceItem.Asset;
                    balanceItem.Account = endBalanceItem.Account;
                    balanceItem.Balance = endBalance;

                    var totalDebit  = endBalanceItem.TotalDebit - startBalanceItem.TotalDebit;
                    var totalCredit = endBalanceItem.TotalCredit - startBalanceItem.TotalCredit;

                    if (totalDebit < 0)
                    {
                        totalCredit -= totalDebit;
                        totalDebit   = 0;
                    }

                    if (totalCredit < 0)
                    {
                        totalDebit -= totalCredit;
                        totalCredit = 0;
                    }

                    balanceItem.TotalDebit  = totalDebit;
                    balanceItem.TotalCredit = totalCredit;
                }
                else
                {
                    balanceItem = (BalanceItem)endBalanceItem;
                }

                balance.Items.Add(balanceItem);
            }

            // Performance.MarkEnd("BalanceHelper.Subtract");

            return(balance);
        }
Ejemplo n.º 12
0
        public SubstationExport(IBalance balance)
        {
            if (_balance == null)
            {
                throw new ArgumentNullException("SubstationExport - constructor: argument Balance<ENERGY> is null");
            }
            this._balance = balance;

            tableStyle = CreateStyle("style_table");
            tableStyle.Border.Left.Style               =
                tableStyle.Border.Top.Style            =
                    tableStyle.Border.Right.Style      =
                        tableStyle.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            tableStyle.VerticalAlignment               = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
            tableStyle.HorizontalAlignment             = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;

            tableHeaderStyle = CreateStyle("style_table_header");
            tableHeaderStyle.Border.Left.Style               =
                tableHeaderStyle.Border.Top.Style            =
                    tableHeaderStyle.Border.Right.Style      =
                        tableHeaderStyle.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            tableHeaderStyle.VerticalAlignment               = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
            tableHeaderStyle.HorizontalAlignment             = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
            tableHeaderStyle.WrapText         = true;
            tableHeaderStyle.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
            tableHeaderStyle.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 255, 153));

            cellDateStyle = CreateStyle("cellDateStyle");
            cellDateStyle.Border.Left.Style               =
                cellDateStyle.Border.Top.Style            =
                    cellDateStyle.Border.Right.Style      =
                        cellDateStyle.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            cellDateStyle.VerticalAlignment               = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
            cellDateStyle.HorizontalAlignment             = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
            cellDateStyle.Numberformat.Format             = "dd.MM.yyyy";

            cellTextStyle = CreateStyle("cellTextStyle");
            cellTextStyle.Border.Left.Style               =
                cellTextStyle.Border.Top.Style            =
                    cellTextStyle.Border.Right.Style      =
                        cellTextStyle.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            cellTextStyle.VerticalAlignment               = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
            cellTextStyle.HorizontalAlignment             = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
            cellTextStyle.Numberformat.Format             = "@";

            cellNumbersStyle = CreateStyle("cellNumbersStyle");
            cellNumbersStyle.Border.Left.Style               =
                cellNumbersStyle.Border.Top.Style            =
                    cellNumbersStyle.Border.Right.Style      =
                        cellNumbersStyle.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            cellNumbersStyle.VerticalAlignment               = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
            cellNumbersStyle.HorizontalAlignment             = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
            cellNumbersStyle.Numberformat.Format             = @"[$-419]#,#0.0_ ;[Red]\-#,#0.0, ";
        }
Ejemplo n.º 13
0
        public static void Copy(this IBalance sourceBalance, IBalance destinationBalance, IAccountMap accountMap)
        {
            // Performance.MarkStart("BalanceHelper.Copy(balance)");

            var sourceAccounts   = new List <IAccount>(sourceBalance.Items.Select(balanceItem => balanceItem.Account));
            var selectedAccounts = new List <IAccount>();

            foreach (var accountMapItem in accountMap.Items)
            {
                if (!accountMapItem.Book.Equals(sourceBalance.Book))
                {
                    continue;
                }

                var balanceItems = sourceBalance.Items.GetBalanceItems(accountMapItem.AccountPredicate);

                if (!balanceItems.Any())
                {
                    continue;
                }

                var newBalanceItem = new BalanceItem();
                newBalanceItem.Balance     = destinationBalance;
                newBalanceItem.Account     = accountMapItem.Account;
                newBalanceItem.Asset       = balanceItems.First().Asset;
                newBalanceItem.TotalDebit  = balanceItems.Sum(balanceItem => balanceItem.TotalDebit);
                newBalanceItem.TotalCredit = balanceItems.Sum(balanceItem => balanceItem.TotalCredit);

                destinationBalance.Items.Add(newBalanceItem);

                selectedAccounts.AddRange(balanceItems.Select(balanceItem => balanceItem.Account));
            }

            // Performance.MarkStart("BalanceHelper.Copy(balance):Validate");

            var missedSourceAccounts = sourceAccounts.Except(selectedAccounts).ToList();

            if (missedSourceAccounts.Any())
            {
                throw new ValidationException($"Missed accounts:{Environment.NewLine}{string.Join(Environment.NewLine, missedSourceAccounts)}");
            }

            var duplicateSelectedSourceAccounts = selectedAccounts.GroupBy(account => account).Where(group => group.Count() > 1).Select(group => group.Key).ToList();

            if (duplicateSelectedSourceAccounts.Any())
            {
                throw new ValidationException($"Duplicate selected accounts:{Environment.NewLine}{string.Join(Environment.NewLine, duplicateSelectedSourceAccounts)}");
            }

            // Performance.MarkEnd("BalanceHelper.Copy(balance):Validate");

            // Performance.MarkEnd("BalanceHelper.Copy(balance)");
        }
Ejemplo n.º 14
0
        public static async Task <string> Format(this IBalance balance, IUserService users)
        {
            var a = await users.Name(balance.UserA);

            var b = await users.Name(balance.UserB);

            var(borrower, lender) = balance.Amount < 0 ? (a, b) : (b, a);

            var currency = TransactionFormatting.FormatCurrency(Math.Abs(balance.Amount), balance.Unit);

            return($"{borrower} owes {currency} to {lender}");
        }
        public void Validate(IBalance balance)
        {
            if (!balance.Book.Equals(_book))
            {
                return;
            }

            foreach (var balanceItem in balance.Items.GetBalanceItems(_accountPredicate))
            {
                if (balanceItem.BalanceCredit > 0)
                {
                    throw new ValidationException($"Balance ({balance}) account ({balanceItem.Account}) balance credit must be zero.");
                }
            }
        }
Ejemplo n.º 16
0
        public IResult ConvertToUAH(IBalance balance)
        {
            UAHBalanceState uah = (UAHBalanceState)StateFactoryHolder
                                  .factory.GetBalanceState(CurrencyType.UAH.ToString());

            balance.Count = balance.Count * balance.Currency.IndexToDollar
                            / uah.IndexToDollar;
            balance.Currency = uah;

            IResult result = _stateResult.Clone();

            result.Message = MessageHolder.GetMessage(MessageType.Convert)
                             + uah.Name;
            result.Success = true;
            return(result);
        }
Ejemplo n.º 17
0
        public IResult ConvertToEUR(IBalance balance)
        {
            EURBalanceState eur = (EURBalanceState)StateFactoryHolder
                                  .factory.GetBalanceState(CurrencyType.EUR.ToString());

            balance.Count = balance.Count * balance.Currency.IndexToDollar
                            / eur.IndexToDollar;
            balance.Currency = eur;

            IResult result = _stateResult.Clone();

            result.Message = MessageHolder.GetMessage(MessageType.Convert)
                             + eur.Name;
            result.Success = true;
            return(result);
        }
Ejemplo n.º 18
0
        protected static IEnumerable <string> GetAllAccountIds(IBalance balance, IAccountPredicate accountPredicate)
        {
            var accountIds     = balance.Items.GetBalanceItems(accountPredicate).Select(balanceItem => ((Account)balanceItem.Account).Id);
            var accountIdsList = new List <string>();

            foreach (var accountId in accountIds)
            {
                var accountIdParts = accountId.Split(':');

                for (var i = 1; i <= accountIdParts.Length; i++)
                {
                    accountIdsList.Add(string.Join(":", accountIdParts.Take(i)));
                }
            }

            return(accountIdsList.Distinct());
        }
Ejemplo n.º 19
0
        public AccountDecorator(IAccount account)
        {
            this._account = account;

            this.Name     = account.Name;
            this.Password = account.Password;
            this.Balance  = account.Balance;

            if (account.Transactions != null)
            {
                this.Transactions = account.Transactions;
            }
            else
            {
                this.Transactions = new List <ITransaction>();
            }
        }
Ejemplo n.º 20
0
        public IResult MakeContribution(IFond fond, IBalance balance)
        {
            IResult result = Result.GetDefaultResult();

            if (fond.HasMember(this).Success)
            {
                ITransaction accountSpending = new Transaction();
                accountSpending.Name = TransactionNameHolder
                                       .GetName(TransactionName.FondSpending);
                accountSpending.Description = string.Format("{0} - {1}", fond.Name,
                                                            balance.GetStrValue());
                accountSpending.Type = new TransactionType(TransactionTypes
                                                           .Spending.ToString());
                accountSpending.Time   = DateTime.Now.ToLongTimeString();
                accountSpending.Amount = balance;

                ITransaction fondEarning = new Transaction();
                fondEarning.Name = TransactionNameHolder
                                   .GetName(TransactionName.AccountContribution);
                fondEarning.Description = string.Format("{0} - {1}", this.Name,
                                                        balance.GetStrValue());
                fondEarning.Type = new TransactionType(TransactionTypes
                                                       .Earning.ToString());
                fondEarning.Time   = DateTime.Now.ToLongTimeString();
                fondEarning.Amount = balance;

                this.SpendMoney(accountSpending);

                fond.ReceiveMoney(fondEarning);

                result.Success = true;
                result.Message = string.Format(MessageHolder
                                               .GetMessage(MessageType.MakeContribution), this.Name, fond.Name);
            }
            else
            {
                result.Message = fond.HasMember(this).Message;
            }

            return(result);
        }
        public void Validate(IBalance balance)
        {
            if (!balance.Book.Equals(_book))
            {
                return;
            }

            var balanceItems1 = balance.Items.GetBalanceItemsCombined(_accountPredicate1);
            var balanceItems2 = balance.Items.GetBalanceItemsCombined(_accountPredicate2);
            var assets        = balanceItems1.Select(x => x.Asset).Union(balanceItems2.Select(x => x.Asset));

            foreach (var asset in assets)
            {
                var balanceItem1 = balanceItems1.SingleOrDefault(x => x.Asset.Equals(asset)) ?? new BalanceItem();
                var balanceItem2 = balanceItems2.SingleOrDefault(x => x.Asset.Equals(asset)) ?? new BalanceItem();

                if (balanceItem1.BalanceDebit - balanceItem1.BalanceCredit != balanceItem2.BalanceCredit - balanceItem2.BalanceDebit)
                {
                    throw new ValidationException($"Balance ({balance}) asset ({asset}) are not equal.");
                }
            }
        }
Ejemplo n.º 22
0
        private void AddTransaction(ITransaction transaction, IBalance balance, DateTime?atTime = null, bool lrFlag = true)
        {
            var dt        = atTime.GetValueOrDefault(DateTime.UtcNow);
            var note      = GetAsNote(transaction);
            var toAccount = Get(note.Name) ?? Add(note.Name, note.AssociatedAccountType ?? KindsOfAccounts.Asset,
                                                  false, null, transaction.AtTime);
            var traceId = transaction.GetThisAsTraceId(dt, balance as IVoca);
            var isDup   = IsDuplicate(toAccount, traceId);

            if (isDup)
            {
                return;
            }
            if (lrFlag)
            {
                toAccount.Debit(transaction.Cash, null, transaction.AtTime, traceId);
            }
            else
            {
                toAccount.Credit(transaction.Cash, null, transaction.AtTime, traceId);
            }
        }
Ejemplo n.º 23
0
        public static void Copy(this IBalance sourceBalance, IEntry entry)
        {
            // Performance.MarkStart("BalanceHelper.Copy(entry)");

            foreach (var balanceItem in sourceBalance.Items)
            {
                if (balanceItem.BalanceDebit == 0 && balanceItem.BalanceCredit == 0)
                {
                    continue;
                }

                var item = new EntryItem();
                item.Entry   = entry;
                item.Book    = sourceBalance.Book;
                item.Account = balanceItem.Account;
                item.Asset   = balanceItem.Asset;
                item.Debit   = balanceItem.BalanceDebit;
                item.Credit  = balanceItem.BalanceCredit;

                entry.Items.Add(item);
            }

            // Performance.MarkEnd("BalanceHelper.Copy(entry)");
        }
Ejemplo n.º 24
0
        public void PostBalance(IBalance balance, DateTime?atTime = null)
        {
            if (balance == null)
            {
                return;
            }
            var credits = balance.GetCredits() ?? new List <ITransaction>();
            var debits  = balance.GetDebits() ?? new List <ITransaction>();

            if (!credits.Any() && !debits.Any())
            {
                return;
            }

            foreach (var credit in credits)
            {
                AddTransaction(credit, balance, atTime, false);
            }

            foreach (var debit in debits)
            {
                AddTransaction(debit, balance, atTime);
            }
        }
 public static bool HasBalance(this IBalance document)
 => document.DocBal.IsNonZero() &&
 document.CuryDocBal.IsNonZero();
Ejemplo n.º 26
0
        //[SlashCommand("transactions", "I will show all your transactions")]
        //public async Task ListTransactions(IUser? other = null)
        //{
        //    //Get all transactions in both directions
        //    var all = (await _transactions.GetAllTransactions(Context.User.Id, other?.Id)).ToList();
        //    if (all.Count == 0)
        //        await RespondAsync("No transactions");
        //    else
        //        await DisplayTransactions(all);
        //}

        #region balance query
        //[SlashCommand("io", "I will tell you what you owe")]
        //public async Task ListDebtsByBorrower(IUser? lender = null)
        //{
        //    await ShowBalances(lender, b => b.UserA == Context.User.Id ^ b.Amount > 0, "You are debt free");
        //}

        //[SlashCommand("oi", "I will tell you what you are owed")]
        //public async Task ListDebtsByLender(IUser? borrower = null)
        //{
        //    await ShowBalances(borrower, b => b.UserB == Context.User.Id ^ b.Amount > 0, "Nobody owes you anything");
        //}

        //[SlashCommand("balance", "I will tell you your balance")]
        //public async Task ShowBalance(IUser? other = null)
        //{
        //    await ShowBalances(other, _ => true, "No non-zero balances");
        //}

        //private async Task ShowBalances(IUser? other, Func<IBalance, bool> filter, string none)
        //{
        //    var balances = (await _transactions.GetBalances(Context.User.Id, other?.Id)).Where(filter).ToArray();
        //    if (balances.Length == 0)
        //        await RespondAsync(none);
        //    else
        //        await DisplayBalances(balances);
        //}
        #endregion

        #region helpers
        private async Task <string> FormatBalance(IBalance bal)
        {
            return(await bal.Format(_users));
        }
 public void PutMoney(IBalance money)
 {
     _balance.PutMoney(money);
     CustomerDeposit += money.Overall;
 }
 public VendingMachineBalance(IEnumerable<Coin> coins)
 {
     _balance = new Balance(coins);
 }
 public VendingMachineBalance(IDictionary<Coin, int> coins)
 {
     _balance = new Balance(coins);
 }
 public VendingMachineBalance(IBalance balance)
 {
     _balance = (balance == null) ? new Balance() : balance;
 }
Ejemplo n.º 31
0
 /// <summary>
 /// creates account with given account number, balance and empty record
 /// </summary>
 /// <param name="accountNumber">account number</param>
 /// <param name="balance">account balance</param>
 public Account(AccountNumber accountNumber, IBalance balance)
     : this(accountNumber, balance, new List <OperationRecord>())
 {
 }
Ejemplo n.º 32
0
 /// <summary>
 /// creates account with given account number, balance and record
 /// </summary>
 /// <param name="accountNumber">account number</param>
 /// <param name="balance">account balance</param>
 /// <param name="operationRecord">operations history</param>
 public Account(AccountNumber accountNumber, IBalance balance, IList <OperationRecord> operationRecord)
 {
     AccountNumber     = accountNumber;
     Balance           = balance;
     _operationHistory = operationRecord;
 }
Ejemplo n.º 33
0
 [NotNull] private string FormatBalance([NotNull] IBalance bal)
 {
     return(TransactionFormatting.FormatBalance(this, bal));
 }
Ejemplo n.º 34
0
 protected static IEnumerable <string> GetAccountIds(IBalance balance, IAccountPredicate accountPredicate)
 {
     return(balance.Items.GetBalanceItems(accountPredicate).Select(balanceItem => ((Account)balanceItem.Account).Id).Distinct());
 }
 public Loan(ICustomer customer, IBalance initialBalance, decimal interestRate)
     : base(customer, initialBalance, interestRate)
 {
 }