示例#1
0
        private void ShowBalance()
        {
            int[]    columnWidths = { 12, 11, 11, 11, 11 };
            DateTime startDate    = CustomActionUI.InputDate("Введите начало периода: ", true) ?? ledger.MinWorkingDate.AddDays(1);
            DateTime endDate      = CustomActionUI.InputDate("Введите конец периода: ", true) ?? DateTime.Today;
            Balance  balance      = ledger.GetBalance(startDate, endDate);

            Console.Clear();
            Console.WriteLine($"Обороты за период с {startDate.ToString("dd.MM.yyyy")} по {endDate.ToString("dd.MM.yyyy")}");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.HEADER_BORDER_SYMBOLS);
            Console.WriteLine("\u2502    Дата    \u2502 Начальный \u2502  Приход   \u2502  Расход   \u2502 Конечный  \u2502");
            Console.WriteLine("\u2502            \u2502  остаток  \u2502           \u2502           \u2502  остаток  \u2502");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            decimal totalIncome = 0, totalExpense = 0;

            foreach (var item in balance)
            {
                Console.WriteLine($"\u2502 {item.Date.ToString("dd.MM.yyyy")} \u2502 " +
                                  $"{item.InitialBalance,9:F2} \u2502 " +
                                  $"{((item.Credit == 0) ? "" : item.Credit.ToString("F2")),9} \u2502 " +
                                  $"{((item.Debet == 0) ? "" : item.Debet.ToString("F2")),9} \u2502 " +
                                  $"{item.FinalBalance,9:F2} \u2502");
                totalIncome  += item.Credit;
                totalExpense += item.Debet;
            }
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            Console.WriteLine($"\u2502 Всего:     \u2502           \u2502 {totalIncome,9:F2} \u2502           \u2502 {totalExpense,9:F2} \u2502");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.FOOTER_BORDER_SYMBOLS);
            Console.ReadKey();
        }
示例#2
0
 private void DeleteByIndex()
 {
     while (true)
     {
         ShowTable(ledger.MinWorkingDate, DateTime.Today, false);
         if (!CustomActionUI.InputIntegers("Введите индексы удаляемых записей: ",
                                           0, ledger.Incomes.Count, out int[] indexes))
示例#3
0
        private void OutputToConsole()
        {
            DateTime startDate = CustomActionUI.InputDate("Введите начальную дату периода", true) ?? ledger.MinWorkingDate;
            DateTime endDate   = CustomActionUI.InputDate("Введите конечную дату периода", true) ?? DateTime.Today;

            ShowTable(startDate, endDate, true);
            Console.Write("Нажмите любую клавишу для возврата в главное меню");
            Console.ReadKey();
        }
示例#4
0
        private void InputFromConsole()
        {
            Console.Clear();
            bool     working = true;
            DateTime?date;
            decimal? value;
            string   incomeFrom = "";
            string   notes;

            while (working)
            {
                date = CustomActionUI.InputDate("Введите дату получения дохода (пустая строка - завершить): ", true);
                if (date == null)
                {
                    return;
                }
                if (date < ledger.MinWorkingDate)
                {
                    Console.WriteLine($"Минимальная допустимая дата {ledger.MinWorkingDate.ToString("dd.MM.yyyy")}");
                    continue;
                }
                value = CustomActionUI.InputDecimal($"Укажите сумму дохода: ", false);
                string[] articles =
                {
                    "Заработная плата",
                    "по договору подряда",
                    "кредит в банке",
                    "проценты по депозиту",
                    "выигрыш в казино",
                    "прочие"
                };
                int choice = CustomActionUI.ShowMenu("Выберите источник дохода", articles, false);
                if (choice < articles.Length - 1)
                {
                    incomeFrom = articles[choice - 1];
                }
                else if (choice == articles.Length)
                {
                    Console.Write("Укажите иной источник дохода: ");
                    incomeFrom = Console.ReadLine();
                }
                double taxRate = (CustomActionUI.ShowYesNo("Облагается налогом?")) ? 13 : 0;
                Console.Write("\r\nПримечание: ");
                notes = Console.ReadLine();
                try
                {
                    ledger.AddIncome((DateTime)date, (decimal)value, incomeFrom, taxRate, notes);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
示例#5
0
        public void ShowAnalysis()
        {
            string[] menuItems =
            {
                "анализ доходов за период по источнику",
                "анализ расходов за период по статье",
                "обороты за период",
                "Уплачено налогов за период",
                "Необрлагаемый доход"
            };
            while (true)
            {
                int result = CustomActionUI.ShowMenu("Анализ доходов и расходов", menuItems, true);
                switch (result)
                {
                case 1:
                {
                    OutputIncomesByArticle();
                    break;
                }

                case 2:
                {
                    OutputExpensesByArticle();
                    break;
                }

                case 3:
                {
                    ShowBalance();
                    break;
                }

                case 4:
                {
                    ShowTaxByPeriod();
                    break;
                }

                case 5:
                {
                    ShowTaxFreeIncomes();
                    break;
                }

                default:
                {
                    return;
                }
                }
            }
        }
示例#6
0
        private void ShowTaxByPeriod()
        {
            int[]    columnWidths = { 12, 11, 11, 11, 11 };
            DateTime startDate    = CustomActionUI.InputDate("Введите начало периода: ", true) ?? ledger.MinWorkingDate.AddDays(1);
            DateTime endDate      = CustomActionUI.InputDate("Введите конец периода: ", true) ?? DateTime.Today;
            decimal  tax          = 0;

            ledger.Incomes.ForEachConditional(x => x.Date.Between(startDate, endDate),
                                              x => tax += ((IncomeOperation)x).TaxValue);
            Console.WriteLine($"За период с {startDate.ToString("dd.MM.yyyy")} по {endDate.ToString("dd.MM.yyyy")} уплачено {tax:F2} рублей подоходного налога");
            Console.WriteLine("Нажмите любую клавишу для продолжения");
            Console.ReadKey();
        }
示例#7
0
        private void ExportToFile()
        {
            if (!CustomActionUI.InputFilename("Введите имя файла для экспорта: ", false, out string filename))
            {
                return;
            }
            OperationExport exporter = new OperationTextExport();

            if (exporter.ExportToFile(filename, ledger.Incomes))
            {
                Console.WriteLine("Экспорт в файл завершен. " + exporter.ErrorMessage);
            }
            else
            {
                Console.WriteLine($"Error: {exporter.ErrorMessage}");
            }
            Console.ReadKey();
        }
示例#8
0
        private void ShowTable(DateTime startDate, DateTime endDate, bool showTotals)
        {
            int[] columnWidths = { 6, 12, 11, 45 };
            void ShowTitle()
            {
                Console.Clear();
                Console.WriteLine($"Расходы за период с {startDate.ToString("dd.MM.yyyy")} по {endDate.ToString("dd.MM.yyyy")}");
                CustomActionUI.DrawBorders(columnWidths, CustomActionUI.HEADER_BORDER_SYMBOLS);
                Console.WriteLine($"\u2502 №п/п \u2502    Дата    \u2502   Сумма   \u2502 {"Статья",-43} \u2502");
                CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            }

            Operations selectedItems = ledger.Expenses.GetOperationsByRange(startDate, endDate);

            ShowTitle();
            int index = 1;

            foreach (Operation item in selectedItems)
            {
                if (!(item is ExpenseOperation))
                {
                    continue;
                }
                ExpenseOperation expense         = item as ExpenseOperation;
                string           articleAndNotes = item.Article;
                if (!String.IsNullOrWhiteSpace(item.Notes))
                {
                    articleAndNotes += $" ({item.Notes})";
                    if (articleAndNotes.Length > 43)
                    {
                        articleAndNotes = articleAndNotes.Substring(0, 40) + "...";
                    }
                }
                Console.WriteLine($"\u2502 {index++,4} \u2502 {expense.Date.ToString("dd.MM.yyy")} \u2502 {expense.Value,9:F2} \u2502 {articleAndNotes,-43} \u2502");
            }
            if (showTotals)
            {
                CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
                decimal sum = 0;
                selectedItems.ForEach(x => sum += x.Value);
                Console.WriteLine($"\u2502 {" ",4} \u2502 Всего:     \u2502 {sum,9:F2} \u2502 {" ",43} \u2502");
            }
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.FOOTER_BORDER_SYMBOLS);
        }
示例#9
0
        private void OutputIncomesByArticle()
        {
            int[]      columnWidths  = { 11, 59 };
            DateTime   startDate     = CustomActionUI.InputDate("Введите начало периода: ", true) ?? ledger.MinWorkingDate;
            DateTime?  endDate       = CustomActionUI.InputDate("Введите конец периода: ", true);
            Operations selectedItems = ledger.Incomes.GetOperationsByArticle(startDate, endDate);

            Console.Clear();
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.HEADER_BORDER_SYMBOLS);
            Console.WriteLine($"\u2502   Сумма   \u2502 {"Статья дохода",-57} \u2502");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            foreach (Operation item in selectedItems)
            {
                string article = (item.Article.Length > 57) ? item.Article.Substring(0, 54) + "..." : item.Article;
                Console.WriteLine($"\u2502 {item.Value,9:F2} \u2502 {article,-57} \u2502");
            }
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.FOOTER_BORDER_SYMBOLS);
            Console.ReadKey();
        }
示例#10
0
        public void Run()
        {
            string[] menuItems =
            {
                "Обработка доходов",
                "Обработка расходов",
                "Анализ"
            };
            bool running = true;

            while (running)
            {
                int choice = CustomActionUI.ShowMenu("Выберите действие: ", menuItems, true);
                switch (choice)
                {
                case 0:
                {
                    running = !CustomActionUI.ShowYesNo("Вы действительно хотите выйти?");
                    break;
                }

                case 1:
                {
                    incomesUI.Show();
                    break;
                }

                case 2:
                {
                    expensesUI.Show();
                    break;
                }

                case 3:
                {
                    analysisUI.ShowAnalysis();
                    break;
                }
                }
            }
        }
示例#11
0
        private void ShowTaxFreeIncomes()
        {
            int[]      columnWidths  = { 6, 12, 11, 10, 34 };
            DateTime   startDate     = CustomActionUI.InputDate("Введите начало периода: ", true) ?? ledger.MinWorkingDate.AddDays(1);
            DateTime   endDate       = CustomActionUI.InputDate("Введите конец периода: ", true) ?? DateTime.Today;
            Operations selectedItems = ledger.GetTaxFree(startDate, endDate);

            Console.Clear();
            Console.WriteLine($"Необлагаемые доходы за период с {startDate.ToString("dd.MM.yyyy")} по {endDate.ToString("dd.MM.yyyy")}");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.HEADER_BORDER_SYMBOLS);
            Console.WriteLine($"\u2502 №п/п \u2502    Дата    \u2502   Сумма   \u2502   Налог  \u2502 {"Статья",-32} \u2502");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            int index = 1;

            foreach (Operation item in selectedItems)
            {
                if (!(item is IncomeOperation))
                {
                    continue;
                }
                IncomeOperation income          = item as IncomeOperation;
                string          articleAndNotes = item.Article;
                if (!String.IsNullOrWhiteSpace(item.Notes))
                {
                    articleAndNotes += $" ({item.Notes})";
                    if (articleAndNotes.Length > 32)
                    {
                        articleAndNotes = articleAndNotes.Substring(0, 29) + "...";
                    }
                }
                Console.WriteLine($"\u2502 {index++,4} \u2502 {income.Date.ToString("dd.MM.yyy")} \u2502 {income.Value,9:F2} \u2502 {income.GetTaxValue(),8:F2} \u2502 {articleAndNotes,-32} \u2502");
            }
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            decimal sum = 0, taxSum = 0;

            selectedItems.ForEach(x => { sum += x.Value; taxSum += ((IncomeOperation)x).TaxValue; });
            Console.WriteLine($"\u2502 {" ",4} \u2502 Всего:     \u2502 {sum,9:F2} \u2502 {taxSum,8:F2} \u2502 {" ",32} \u2502");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.FOOTER_BORDER_SYMBOLS);
            Console.WriteLine("Нажмите любую клавишу для продолжения");
            Console.ReadKey();
        }
示例#12
0
        private void ShowTable(DateTime startDate, DateTime endDate, bool ShowTotals)
        {
            int[]      columnWidths  = { 6, 12, 11, 10, 34 };
            Operations selectedItems = ledger.Incomes.GetOperationsByRange(startDate, endDate);

            Console.Clear();
            Console.WriteLine($"Доходы за период с {startDate.ToString("dd.MM.yyyy")} по {endDate.ToString("dd.MM.yyyy")}");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.HEADER_BORDER_SYMBOLS);
            Console.WriteLine($"\u2502 №п/п \u2502    Дата    \u2502   Сумма   \u2502   Налог  \u2502 {"Статья",-32} \u2502");
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
            int index = 1;

            foreach (Operation item in selectedItems)
            {
                if (!(item is IncomeOperation))
                {
                    continue;
                }
                IncomeOperation income          = item as IncomeOperation;
                string          articleAndNotes = item.Article;
                if (!String.IsNullOrWhiteSpace(item.Notes))
                {
                    articleAndNotes += $" ({item.Notes})";
                    if (articleAndNotes.Length > 32)
                    {
                        articleAndNotes = articleAndNotes.Substring(0, 29) + "...";
                    }
                }
                Console.WriteLine($"\u2502 {index++,4} \u2502 {income.Date.ToString("dd.MM.yyy")} \u2502 {income.Value,9:F2} \u2502 {income.GetTaxValue(),8:F2} \u2502 {articleAndNotes,-32} \u2502");
            }
            if (ShowTotals)
            {
                CustomActionUI.DrawBorders(columnWidths, CustomActionUI.MIDDLE_BORDER_SYMBOLS);
                decimal sum = 0, taxSum = 0;
                selectedItems.ForEach(x => { sum += x.Value; taxSum += ((IncomeOperation)x).TaxValue; });
                Console.WriteLine($"\u2502 {" ",4} \u2502 Всего:     \u2502 {sum,9:F2} \u2502 {taxSum,8:F2} \u2502 {" ",32} \u2502");
            }
            CustomActionUI.DrawBorders(columnWidths, CustomActionUI.FOOTER_BORDER_SYMBOLS);
        }
示例#13
0
        private void InputFromConsole()
        {
            Console.Clear();
            bool     working = true;
            DateTime?date;
            decimal? value;
            string   incomeFrom;
            string   notes;

            while (working)
            {
                date = CustomActionUI.InputDate("Введите дату расхода (пустая строка - завершить): ", true);
                if (date == null)
                {
                    return;
                }
                if (date < ledger.MinWorkingDate)
                {
                    Console.WriteLine($"Минимальная допустимая дата {ledger.MinWorkingDate.ToString("dd.MM.yyyy")}");
                    continue;
                }
                value = CustomActionUI.InputDecimal($"Укажите сумму расхода: ", false);
                string[] articleItems =
                {
                    "Питание",
                    "Коммунальные платежи",
                    "Проезд",
                    "Одежда/обувь",
                    "Хобби",
                    "Обустройство дома, ремонт",
                    "Развлечение",
                    "Подардки",
                    "Прочие"
                };
                int choice = CustomActionUI.ShowMenu("Выберите статью расхода: ", articleItems, false);
                if (choice == articleItems.Length - 1)
                {
                    Console.WriteLine("Укажите иную статью расхода: ");
                    incomeFrom = Console.ReadLine();
                }
                else
                {
                    incomeFrom = articleItems[choice - 1];
                }
                Console.Write("Примечание: ");
                notes = Console.ReadLine();
                try
                {
                    if (!ledger.AddExpense((DateTime)date, (decimal)value, incomeFrom, notes))
                    {
                        Console.WriteLine(ledger.ErrorMessage);
                        Console.ReadKey();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.ReadKey();
                }
            }
        }