#include #include #include "strops.hpp" #include "ui.hpp" #include "imgui.h" #include "administration.hpp" #include "locales.hpp" extern bool draw_contact_form(contact* buffer, bool back_button_enabled = true, bool viewing_only = false); static contact company_info; country_tax_bracket* tax_brackets; u32 tax_bracket_count; cost_center* cost_centers; u32 cost_center_count; void ui_destroy_settings() { free(tax_brackets); free(cost_centers); } void ui_setup_settings() { company_info = administration_get_company_info(); tax_bracket_count = administration_get_tax_bracket_count(); tax_brackets = (country_tax_bracket*)malloc(tax_bracket_count * sizeof(country_tax_bracket)); administration_get_tax_brackets(tax_brackets); cost_center_count = administration_get_cost_center_count(); cost_centers = (cost_center*)malloc(cost_center_count * sizeof(cost_center)); administration_get_cost_centers(cost_centers); } 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.rates")); char prev_country[3]; prev_country[0] = 0; for (u32 i = 0; i < tax_bracket_count; i++) { country_tax_bracket c = tax_brackets[i]; if (strcmp(c.country_code, "00") == 0) { strops_copy(prev_country, c.country_code, 3); } else if (strcmp(c.country_code, prev_country) != 0) { strops_copy(prev_country, c.country_code, 3); ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::Text(""); ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, IM_COL32(69, 69, 69, 255)); ImGui::TableSetColumnIndex(1); ImGui::Text(""); ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, IM_COL32(69, 69, 69, 255)); ImGui::TableNextRow(); char locale_buf[20]; snprintf(locale_buf, sizeof(locale_buf), "country.%s", c.country_code); ImGui::TableSetColumnIndex(0); ImGui::Text(localize(locale_buf)); ImGui::TableSetColumnIndex(1); ImGui::Text(""); } ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::Text(localize(c.description)); ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f%%", c.rate); } ImGui::EndTable(); } } static void ui_draw_cost_centers() { static bool is_adding_item = false; static cost_center new_cost_center; static bool is_editing_item = false; static u32 editing_item_index = 0; if (ImGui::BeginTable("TableCostCenters", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) { ImGui::TableSetupColumn(localize("settings.costcenters.table.code"), ImGuiTableColumnFlags_WidthFixed, 140); ImGui::TableSetupColumn(localize("settings.costcenters.table.description")); for (u32 i = 0; i < cost_center_count; i++) { cost_center c = cost_centers[i]; ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::Text(c.code); ImGui::TableSetColumnIndex(1); if (is_editing_item && editing_item_index == i) { ImGui::InputText("##Description", new_cost_center.description, IM_ARRAYSIZE(new_cost_center.description)); bool is_desc_valid = administration_verify_cost_center_description(new_cost_center.description); if (!is_desc_valid) ImGui::BeginDisabled(); ImGui::SameLine(); if (ImGui::Button(localize("form.save"))) { is_editing_item = false; is_adding_item = false; administration_update_cost_center(new_cost_center); ui_destroy_settings(); ui_setup_settings(); } if (!is_desc_valid) ImGui::EndDisabled(); } else { ImGui::Text(localize(c.description)); } if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { is_editing_item = true; is_adding_item = false; editing_item_index = i; new_cost_center = c; } } if (is_adding_item) { ImGui::TableNextRow(); bool is_code_valid = administration_verify_cost_center_code(new_cost_center.code); if (!is_code_valid) ImGui::PushStyleColor(ImGuiCol_FrameBg, IM_COL32(255, 0, 0, 64)); ImGui::TableSetColumnIndex(0); ImGui::InputText("##Code", new_cost_center.code, IM_ARRAYSIZE(new_cost_center.code)); if (!is_code_valid) ImGui::PopStyleColor(); bool is_desc_valid = administration_verify_cost_center_description(new_cost_center.description); if (!is_desc_valid) ImGui::PushStyleColor(ImGuiCol_FrameBg, IM_COL32(255, 0, 0, 64)); ImGui::TableSetColumnIndex(1); ImGui::InputText("##Description", new_cost_center.description, IM_ARRAYSIZE(new_cost_center.description)); if (!is_desc_valid) ImGui::PopStyleColor(); bool can_save = is_code_valid && is_desc_valid; if (!can_save) ImGui::BeginDisabled(); ImGui::SameLine(); if (ImGui::Button(localize("form.create"))) { is_adding_item = false; is_editing_item = false; administration_add_cost_center(new_cost_center); ui_destroy_settings(); ui_setup_settings(); } if (!can_save) ImGui::EndDisabled(); } ImGui::EndTable(); } if (!is_adding_item && ImGui::Button(localize("form.create"))) { is_adding_item = true; is_editing_item = false; memset(&new_cost_center, 0, sizeof(new_cost_center)); } } void ui_draw_settings() { if (ImGui::BeginTabBar("SettingsTabBar")) { if (ImGui::BeginTabItem(localize("settings.table.company"))) { bool save = draw_contact_form(&company_info, false); if (save) { administration_set_company_info(company_info); } ImGui::EndTabItem(); } if (ImGui::BeginTabItem(localize("settings.table.vatrates"))) { ui_draw_vat_rates(); ImGui::EndTabItem(); } if (ImGui::BeginTabItem(localize("settings.table.costcenters"))) { ui_draw_cost_centers(); ImGui::EndTabItem(); } ImGui::EndTabBar(); } }