diff options
| -rw-r--r-- | include/administration.hpp | 1 | ||||
| -rw-r--r-- | src/administration.cpp | 18 | ||||
| -rw-r--r-- | src/locales/en.cpp | 37 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 55 |
4 files changed, 75 insertions, 36 deletions
diff --git a/include/administration.hpp b/include/administration.hpp index 3415b3a..9c07f30 100644 --- a/include/administration.hpp +++ b/include/administration.hpp @@ -156,6 +156,7 @@ typedef struct list_t contacts; list_t projects; list_t invoices; + list_t expenses; list_t tax_brackets; list_t cost_centers; } administration; diff --git a/src/administration.cpp b/src/administration.cpp index ace1383..66e4a46 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -293,6 +293,7 @@ void administration_create() g_administration.next_sequence_number = 1; list_init(&g_administration.invoices); + list_init(&g_administration.expenses); list_init(&g_administration.contacts); list_init(&g_administration.projects); list_init(&g_administration.tax_brackets); @@ -318,6 +319,7 @@ static void administration_destroy_list(list_t *list) void administration_destroy() { administration_destroy_list(&g_administration.invoices); + administration_destroy_list(&g_administration.expenses); administration_destroy_list(&g_administration.contacts); administration_destroy_list(&g_administration.projects); administration_destroy_list(&g_administration.tax_brackets); @@ -1033,14 +1035,14 @@ char* administration_invoice_get_status_string(invoice* invoice) { switch(invoice->status) { - case invoice_status::INVOICE_CONCEPT: return "invoice.state.concept"; - case invoice_status::INVOICE_SENT: return "invoice.state.sent"; - case invoice_status::INVOICE_REMINDED: return "invoice.state.reminded"; - case invoice_status::INVOICE_PAID: return "invoice.state.paid"; - case invoice_status::INVOICE_EXPIRED: return "invoice.state.expired"; - case invoice_status::INVOICE_CANCELLED: return "invoice.state.cancelled"; - case invoice_status::INVOICE_REFUNDED: return "invoice.state.refunded"; - case invoice_status::INVOICE_CORRECTED: return "invoice.state.corrected"; + case invoice_status::INVOICE_CONCEPT: return "invoice.status.concept"; + case invoice_status::INVOICE_SENT: return "invoice.status.sent"; + case invoice_status::INVOICE_REMINDED: return "invoice.status.reminded"; + case invoice_status::INVOICE_PAID: return "invoice.status.paid"; + case invoice_status::INVOICE_EXPIRED: return "invoice.status.expired"; + case invoice_status::INVOICE_CANCELLED: return "invoice.status.cancelled"; + case invoice_status::INVOICE_REFUNDED: return "invoice.status.refunded"; + case invoice_status::INVOICE_CORRECTED: return "invoice.status.corrected"; default: assert(0); break; } return ""; diff --git a/src/locales/en.cpp b/src/locales/en.cpp index 5aba4e2..9badbc1 100644 --- a/src/locales/en.cpp +++ b/src/locales/en.cpp @@ -114,6 +114,43 @@ locale_entry en_locales[] = { {"settings.vat.table.rates", "Rates"}, {"settings.costcenters.table.code", "Code"}, {"settings.costcenters.table.description", "Description"}, + + // Invoice strings. + {"invoice.form.costcenter", "Cost center"}, + {"invoice.form.project", "Project"}, + {"invoice.form.invoicenumber", "Invoice number"}, + {"invoice.form.supplier", "Supplier"}, + {"invoice.form.issuedat", "Invoice issued at"}, + {"invoice.form.expiresat", "Invoice expires at"}, + {"invoice.form.deliveredat", "Product/service delivered at"}, + {"invoice.form.billinginformation", "Billing information"}, + {"invoice.form.triangulation", "Shipping information differs from billing information (triangulation)"}, + {"invoice.form.shippinginformation", "Shipping information"}, + {"invoice.form.add", "+ Billing item"}, + {"invoice.form.currency", "Currency"}, + + {"invoice.table.invoicenumber", "Invoice number"}, + {"invoice.table.amount", "Amount"}, + {"invoice.table.description", "Description"}, + {"invoice.table.price", "Price"}, + {"invoice.table.discount", "Discount"}, + {"invoice.table.net", "Net"}, + {"invoice.table.tax%", "Tax %"}, + {"invoice.table.tax", "Tax"}, + {"invoice.table.total", "Total"}, + {"invoice.table.customer", "Customer"}, + {"invoice.table.addressee", "Addressee"}, + {"invoice.table.issuedat", "Issued At"}, + {"invoice.table.status", "Status"}, + + {"invoice.status.concept", "Concept"}, + {"invoice.status.sent", "Sent"}, + {"invoice.status.reminded", "Reminded"}, + {"invoice.status.paid", "Paid"}, + {"invoice.status.expired", "Expired"}, + {"invoice.status.cancelled", "Cancelled"}, + {"invoice.status.refunded", "Refunded"}, + {"invoice.status.corrected", "Corrected"}, }; const int en_locale_count = sizeof(en_locales) / sizeof(en_locales[0]);
\ No newline at end of file diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index 320392a..5dd2286 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -176,7 +176,7 @@ void draw_costcenter_selector(char* costcenter_id) } int selected_costcenter_index = -1; - if (ImGui::BeginCombo("Cost center", selected_costcenter == NULL ? NULL : localize(selected_costcenter->description))) + if (ImGui::BeginCombo(localize("invoice.form.costcenter"), selected_costcenter == NULL ? NULL : localize(selected_costcenter->description))) { for (u32 n = 0; n < costcenter_count; n++) { @@ -213,7 +213,7 @@ void draw_project_selector(char* project_id) } int selected_project_index = -1; - if (ImGui::BeginCombo("Project", selected_project == NULL ? NULL : selected_project->description)) + if (ImGui::BeginCombo(localize("invoice.form.project"), selected_project == NULL ? NULL : selected_project->description)) { for (u32 n = 0; n < project_count; n++) { @@ -238,16 +238,15 @@ static void draw_invoice_items_form(invoice* invoice) if (ImGui::BeginTable("TableBillingItems", 9, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) { ImGui::TableSetupColumn("##actions", ImGuiTableColumnFlags_WidthFixed, 20); - ImGui::TableSetupColumn("Amount", ImGuiTableColumnFlags_WidthFixed, 80); - ImGui::TableSetupColumn("Description"); - ImGui::TableSetupColumn("Price", ImGuiTableColumnFlags_WidthFixed, 100); - ImGui::TableSetupColumn("Discount", ImGuiTableColumnFlags_WidthFixed, 100); - ImGui::TableSetupColumn("Net", ImGuiTableColumnFlags_WidthFixed, 100); - ImGui::TableSetupColumn("Tax %", ImGuiTableColumnFlags_WidthFixed, 120); - ImGui::TableSetupColumn("Tax", ImGuiTableColumnFlags_WidthFixed, 100); - ImGui::TableSetupColumn("Total", ImGuiTableColumnFlags_WidthFixed, 100); - - //ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableSetupColumn(localize("invoice.table.amount"), ImGuiTableColumnFlags_WidthFixed, 80); + ImGui::TableSetupColumn(localize("invoice.table.description")); + ImGui::TableSetupColumn(localize("invoice.table.price"), ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableSetupColumn(localize("invoice.table.discount"), ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableSetupColumn(localize("invoice.table.net"), ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableSetupColumn(localize("invoice.table.tax%"), ImGuiTableColumnFlags_WidthFixed, 120); + ImGui::TableSetupColumn(localize("invoice.table.tax"), ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableSetupColumn(localize("invoice.table.total"), ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableHeadersRow(); for (u32 i = 0; i < invoice_items; i++) @@ -360,10 +359,10 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) //ImGui::InputText(localize("contact.form.identifier"), buffer->id, IM_ARRAYSIZE(buffer->id)); // 2. Sequential number - ImGui::Text("Invoice number: %s", buffer->sequential_number); + ImGui::Text("%s: %s", localize("invoice.form.invoicenumber"), buffer->sequential_number); // 3. Supplier (you) - ImGui::Text("Supplier: %s", buffer->supplier.name); + ImGui::Text("%s: %s", localize("invoice.form.supplier"), buffer->supplier.name); // 4. Invoice issued at tm issued_at_date = *gmtime(&buffer->issued_at); @@ -372,7 +371,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) buffer->issued_at = mktime(&issued_at_date); } ImGui::SameLine(); - ImGui::Text("Invoice issued at"); + ImGui::Text(localize("invoice.form.issuedat")); // 5. Invoice expires at tm expires_at_date = *gmtime(&buffer->expires_at); @@ -381,7 +380,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) buffer->expires_at = mktime(&expires_at_date); } ImGui::SameLine(); - ImGui::Text("Invoice expires at"); + ImGui::Text(localize("invoice.form.expiresat")); if (!viewing_only) ImGui::EndDisabled(); // 6. Product/service delivered at @@ -391,12 +390,12 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) buffer->delivered_at = mktime(&delivered_at_date); } ImGui::SameLine(); - ImGui::Text("Product/service delivered at"); + ImGui::Text(localize("invoice.form.deliveredat")); ImGui::Separator(); // 7. Customer information - ImGui::Text("Billing information"); + ImGui::Text(localize("invoice.form.billinginformation")); bool on_autocomplete; draw_contact_form_ex(&buffer->customer, false, true, &on_autocomplete); @@ -416,10 +415,10 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) } // 8. (optional) shipping address. - ImGui::Checkbox("Shipping information differs from billing information (triangulation)", &buffer->is_triangulation); + ImGui::Checkbox(localize("invoice.form.triangulation"), &buffer->is_triangulation); if (buffer->is_triangulation) { ImGui::Spacing(); - ImGui::Text("Shipping information"); + ImGui::Text(localize("invoice.form.shippinginformation")); draw_contact_form_ex(&buffer->addressee, 0,0,0); } ImGui::Separator(); @@ -438,7 +437,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) // 11. New billing item button. bool max_items_reached = administration_billing_item_count(buffer) >= MAX_BILLING_ITEMS; if (max_items_reached) ImGui::BeginDisabled(); - if (ImGui::Button(localize("+ Billing item"))) + if (ImGui::Button(localize(localize("invoice.form.add")))) { billing_item item = administration_billing_item_create_empty(); administration_billing_item_add_to_invoice(buffer, item); @@ -447,7 +446,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) // 12. Dropdown for invoice currency. ImGui::SameLine(); - ImGui::Text("| Currency: "); + ImGui::Text("| %s: ", localize("invoice.form.currency")); ImGui::SameLine(); if (draw_currency_selector(buffer->currency)) { @@ -500,12 +499,12 @@ static void ui_draw_invoices_list() if (ImGui::BeginTable("TableInvoices", 7, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) { - ImGui::TableSetupColumn("Invoice Number", ImGuiTableColumnFlags_WidthFixed, 120); - ImGui::TableSetupColumn("Customer"); - ImGui::TableSetupColumn("Addressee"); - ImGui::TableSetupColumn("Issued At"); - ImGui::TableSetupColumn("Total"); - ImGui::TableSetupColumn("Status"); + ImGui::TableSetupColumn(localize("invoice.table.invoicenumber"), ImGuiTableColumnFlags_WidthFixed, 120); + ImGui::TableSetupColumn(localize("invoice.table.customer")); + ImGui::TableSetupColumn(localize("invoice.table.addressee")); + ImGui::TableSetupColumn(localize("invoice.table.issuedat")); + ImGui::TableSetupColumn(localize("invoice.table.total")); + ImGui::TableSetupColumn(localize("invoice.table.status")); ImGui::TableSetupColumn(""); ImGui::TableHeadersRow(); |
