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(); }
private void DeleteByIndex() { while (true) { ShowTable(ledger.MinWorkingDate, DateTime.Today, false); if (!CustomActionUI.InputIntegers("Введите индексы удаляемых записей: ", 0, ledger.Incomes.Count, out int[] indexes))
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(); }
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); } } }
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; } } } }
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(); }
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(); }
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); }
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(); }
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; } } } }
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(); }
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); }
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(); } } }