diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-09-07 15:24:11 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-09-07 15:24:11 +0200 |
| commit | 12f306e2144081e00c36ed9942068462604bef55 (patch) | |
| tree | d0279fa5b3fbd976cd18cc05e4e6d245dcd63ea0 /src/ui | |
| parent | 026e38982f5388cede0cd7ebad2ea7571d1d57ed (diff) | |
income statement finalization
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/helpers.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_earnings.cpp | 220 | ||||
| -rw-r--r-- | src/ui/ui_settings.cpp | 2 |
3 files changed, 136 insertions, 88 deletions
diff --git a/src/ui/helpers.cpp b/src/ui/helpers.cpp index 37c4b36..0a93cf7 100644 --- a/src/ui/helpers.cpp +++ b/src/ui/helpers.cpp @@ -5,6 +5,8 @@ #include "locales.hpp" #include "strops.hpp" +ImFont* fontBold; + static ui_status current_status; void ui_draw_status() diff --git a/src/ui/ui_earnings.cpp b/src/ui/ui_earnings.cpp index 81e31b5..4f545d2 100644 --- a/src/ui/ui_earnings.cpp +++ b/src/ui/ui_earnings.cpp @@ -21,131 +21,177 @@ void ui_destroy_earnings() void ui_draw_earnings() { - if (ImGui::BeginTable("QuarterlyResultsTable", 5, - ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit)) + static s32 current_page = 0; + s32 max_page = ((statement->quarter_count) / 4); + + if (current_page >= max_page-1) current_page = max_page-1; + if (current_page < 0) current_page = 0; + + bool enable_prev = current_page > 0; + if (!enable_prev) ImGui::BeginDisabled(); + if (ImGui::Button("<< Prev") && current_page > 0) current_page--; + if (!enable_prev) ImGui::EndDisabled(); + + ImGui::SameLine(); + ImGui::Text("(%d/%d)", current_page+1, max_page); + + ImGui::SameLine(); + bool enable_next = current_page < max_page-1; + if (!enable_next) ImGui::BeginDisabled(); + if (ImGui::Button("Next >>") && current_page < max_page-1) current_page++; + if (!enable_next) ImGui::EndDisabled(); + + ImGui::Spacing(); + + char* currency_symbol = administration_get_currency_symbol_from_currency(administration_get_default_currency()); + + if (ImGui::BeginTable("QuarterlyResultsTable", 5, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Hideable)) { - ImGui::TableSetupColumn("##names"); + ImGui::TableSetupColumn("##names", ImGuiTableColumnFlags_WidthFixed, 300); - int quarter_start = 0; int quarter_count = 4; + int quarter_start = current_page*quarter_count; - // Table header + ImGui::PushFont(fontBold); for (int q = 0; q < quarter_count; q++) { - ImGui::TableSetupColumn(statement->quarters[q].quarter_str, ImGuiTableColumnFlags_WidthStretch); + ImGui::TableSetupColumn(statement->quarters[quarter_start+q].quarter_str, ImGuiTableColumnFlags_WidthStretch); } ImGui::TableHeadersRow(); + ImGui::PopFont(); - // Uncategorized income and expenses - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::Text("(Uncategorized)"); - ImGui::TableSetColumnIndex(1); ImGui::Text(""); - ImGui::TableSetColumnIndex(2); ImGui::Text(""); - ImGui::TableSetColumnIndex(3); ImGui::Text(""); - ImGui::TableSetColumnIndex(4); ImGui::Text(""); + bool has_uncategorized_revenue = (statement->quarters[quarter_start + 0].uncategorized_revenue + + statement->quarters[quarter_start + 1].uncategorized_revenue + + statement->quarters[quarter_start + 2].uncategorized_revenue + + statement->quarters[quarter_start + 3].uncategorized_revenue) != 0.0f; - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(" Revenue"); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].uncategorized_revenue); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].uncategorized_revenue); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].uncategorized_revenue); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].uncategorized_revenue); + bool has_uncategorized_taxes = (statement->quarters[quarter_start + 0].uncategorized_taxes + + statement->quarters[quarter_start + 1].uncategorized_taxes + + statement->quarters[quarter_start + 2].uncategorized_taxes + + statement->quarters[quarter_start + 3].uncategorized_taxes) != 0.0f; - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(" Tax"); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].uncategorized_taxes); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].uncategorized_taxes); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].uncategorized_taxes); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].uncategorized_taxes); + bool has_uncategorized_expenses = (statement->quarters[quarter_start + 0].uncategorized_expenses + + statement->quarters[quarter_start + 1].uncategorized_expenses + + statement->quarters[quarter_start + 2].uncategorized_expenses + + statement->quarters[quarter_start + 3].uncategorized_expenses) != 0.0f; - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(" Expenses"); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].uncategorized_expenses); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].uncategorized_expenses); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].uncategorized_expenses); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].uncategorized_expenses); + // Uncategorized income and expenses + if (has_uncategorized_revenue || has_uncategorized_taxes || has_uncategorized_expenses) { + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); ImGui::Text("(%s)", localize("statement.uncategorized")); + ImGui::TableSetColumnIndex(1); ImGui::Text(""); + ImGui::TableSetColumnIndex(2); ImGui::Text(""); + ImGui::TableSetColumnIndex(3); ImGui::Text(""); + ImGui::TableSetColumnIndex(4); ImGui::Text(""); + } + + if (has_uncategorized_revenue) { + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize("statement.revenue")); + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].uncategorized_revenue, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].uncategorized_revenue, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].uncategorized_revenue, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].uncategorized_revenue, currency_symbol); + } + + if (has_uncategorized_taxes) { + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize("statement.tax")); + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].uncategorized_taxes, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].uncategorized_taxes, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].uncategorized_taxes, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].uncategorized_taxes, currency_symbol); + } + + if (has_uncategorized_expenses) { + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize("statement.expenses")); + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].uncategorized_expenses, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].uncategorized_expenses, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].uncategorized_expenses, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].uncategorized_expenses, currency_symbol); + } quarterly_report default_quater = statement->quarters[0]; for (u32 p = 0; p < default_quater.report_count; p++) { - ImGui::TableNextRow(); project_report* report = &default_quater.reports[p]; - ImGui::TableSetColumnIndex(0); ImGui::Text("(%s)", report->description); + + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); + bool toggled = ImGui::TreeNodeEx(report->description, + ImGuiTreeNodeFlags_SpanFullWidth | + ImGuiTreeNodeFlags_DefaultOpen); + ImGui::TableSetColumnIndex(1); ImGui::Text(""); ImGui::TableSetColumnIndex(2); ImGui::Text(""); ImGui::TableSetColumnIndex(3); ImGui::Text(""); ImGui::TableSetColumnIndex(4); ImGui::Text(""); + if (!toggled) continue; + + ImGui::PushFont(fontBold); ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(" Revenue"); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].reports[p].revenue); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].reports[p].revenue); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].reports[p].revenue); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].reports[p].revenue); + ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize("statement.revenue")); + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].reports[p].revenue, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].reports[p].revenue, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].reports[p].revenue, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].reports[p].revenue, currency_symbol); + ImGui::PopFont(); ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(" Tax"); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].reports[p].taxes); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].reports[p].taxes); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].reports[p].taxes); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].reports[p].taxes); + ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize("statement.tax")); + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].reports[p].taxes, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].reports[p].taxes, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].reports[p].taxes, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].reports[p].taxes, currency_symbol); + ImGui::PushFont(fontBold); ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(" Expenses"); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].reports[p].expenses_total); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].reports[p].expenses_total); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].reports[p].expenses_total); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].reports[p].expenses_total); + ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize("statement.expenses")); + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].reports[p].expenses_total, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].reports[p].expenses_total, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].reports[p].expenses_total, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].reports[p].expenses_total, currency_symbol); + ImGui::PopFont(); for (u32 e = 0; e < report->expense_count; e++) { - ImGui::TableNextRow(); project_expense* expense = &report->expenses[e]; + if (!expense->expense_used_in_project) continue; + ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::Text(" %s", localize(expense->description)); - ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f", statement->quarters[quarter_start + 0].reports[p].expenses[e].total); - ImGui::TableSetColumnIndex(2); ImGui::Text("%.2f", statement->quarters[quarter_start + 1].reports[p].expenses[e].total); - ImGui::TableSetColumnIndex(3); ImGui::Text("%.2f", statement->quarters[quarter_start + 2].reports[p].expenses[e].total); - ImGui::TableSetColumnIndex(4); ImGui::Text("%.2f", statement->quarters[quarter_start + 3].reports[p].expenses[e].total); - - + ImGui::TableSetColumnIndex(1); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 0].reports[p].expenses[e].total, currency_symbol); + ImGui::TableSetColumnIndex(2); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 1].reports[p].expenses[e].total, currency_symbol); + ImGui::TableSetColumnIndex(3); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 2].reports[p].expenses[e].total, currency_symbol); + ImGui::TableSetColumnIndex(4); ImGui::Text("%.0f %s", statement->quarters[quarter_start + 3].reports[p].expenses[e].total, currency_symbol); } + + ImGui::TreePop(); } - /* - for (int i = 0; i < 1; i++) - { - quarterly_report quarter = statement->quarters[quarter_start + quarter_index]; + ImGui::PushFont(fontBold); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); ImGui::TextUnformatted(localize("statement.profit")); + + #define PUSH_PROFIT_COLUMN(_profit)\ + ImGui::TableNextColumn(); \ + if (_profit < 0.0f) {\ + ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(235, 64, 52, 255));\ + ImGui::Text("(%.0f %s)", _profit, currency_symbol);\ + ImGui::PopStyleColor();\ + }\ + else {\ + ImGui::Text("%.0f %s", _profit, currency_symbol);\ + } - for (u32 p = 0; p < quarter.report_count; p++) - { - ImGui::TableNextRow(); - project_report* report = &quarter.reports[p]; - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(report->description); - ImGui::TableSetColumnIndex(1); ImGui::Text(""); - ImGui::TableSetColumnIndex(2); ImGui::Text(""); - ImGui::TableSetColumnIndex(3); ImGui::Text(""); - ImGui::TableSetColumnIndex(4); ImGui::Text(""); - - - // for (u32 e = 0; e < report->expense_count; e++) - // { - // project_expense* expense = &report->expenses[e]; - // ImGui::TableNextColumn(); ImGui::TextUnformatted(expense->description); - // } - } - }*/ - - // // Rows - // for (int i = 0; i < results_count; i++) - // { - // ImGui::TableNextRow(); - // ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(results[i].quarter); - // ImGui::TableSetColumnIndex(1); ImGui::TextUnformatted(results[i].revenue); - // ImGui::TableSetColumnIndex(2); ImGui::TextUnformatted(results[i].profit); - // ImGui::TableSetColumnIndex(3); ImGui::TextUnformatted(results[i].expenses); - // } + PUSH_PROFIT_COLUMN(statement->quarters[quarter_start + 0].profit); + PUSH_PROFIT_COLUMN(statement->quarters[quarter_start + 1].profit); + PUSH_PROFIT_COLUMN(statement->quarters[quarter_start + 2].profit); + PUSH_PROFIT_COLUMN(statement->quarters[quarter_start + 3].profit); + ImGui::PopFont(); ImGui::EndTable(); } }
\ No newline at end of file diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp index dea58ec..1746111 100644 --- a/src/ui/ui_settings.cpp +++ b/src/ui/ui_settings.cpp @@ -47,7 +47,7 @@ static void ui_draw_vat_rates() if (ImGui::BeginTable("TableVatRates", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) { - ImGui::TableSetupColumn(localize("settings.vat.table.country"), ImGuiTableColumnFlags_WidthFixed, 140); + ImGui::TableSetupColumn(localize("settings.vat.table.country"), ImGuiTableColumnFlags_WidthFixed, 220); ImGui::TableSetupColumn(localize("settings.vat.table.rates")); // Used to generate headers for each individual country. |
