diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/administration.cpp | 44 | ||||
| -rw-r--r-- | src/ui/ui_contacts.cpp | 5 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 58 | ||||
| -rw-r--r-- | src/ui/ui_main.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_projects.cpp | 9 |
5 files changed, 101 insertions, 17 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index c6ece04..edbc933 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -9,6 +9,11 @@ administration g_administration; +static s32 administration_create_id() +{ + return g_administration.next_id; +} + #define ADD_BRACKET(_country, _rate, _description)\ {\ country_tax_bracket* tb = (country_tax_bracket*)malloc(sizeof(country_tax_bracket));\ @@ -27,7 +32,6 @@ static int compare_tax_countries(const void *a, const void *b) return strcmp(objA->country_code, objB->country_code); } - static void administration_create_default_tax_brackets() { // General brackets shared between countries. @@ -197,6 +201,9 @@ static void administration_create_default_cost_centers() void administration_create() { + g_administration.next_id = 1; + g_administration.next_sequence_number = 1; + list_init(&g_administration.contacts); list_init(&g_administration.projects); list_init(&g_administration.tax_brackets); @@ -270,11 +277,6 @@ bool administration_remove_contact(contact data) return false; } -s32 administration_create_id() -{ - return g_administration.next_id; -} - u32 administration_get_contact_count() { return list_size(&g_administration.contacts); @@ -543,4 +545,34 @@ bool administration_update_cost_center(cost_center data) list_iterator_stop(&g_administration.cost_centers); return false; +} + +static s32 administration_create_sequence_number() +{ + return g_administration.next_sequence_number; +} + +invoice administration_create_empty_invoice() +{ + invoice result; + memset(&result, 0, sizeof(invoice)); + snprintf(result.id, sizeof(result.id), "I/%d", administration_create_id()); + snprintf(result.sequential_number, sizeof(result.id), "INV%010d", administration_create_sequence_number()); + return result; +} + +contact administration_create_empty_contact() +{ + contact result; + memset(&result, 0, sizeof(contact)); + snprintf(result.id, IM_ARRAYSIZE(result.id), "C/%d", administration_create_id()); + return result; +} + +project administration_create_empty_project() +{ + project result; + memset(&result, 0, sizeof(project)); + snprintf(result.id, IM_ARRAYSIZE(result.id), "P/%d", administration_create_id()); + return project; }
\ No newline at end of file diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp index 0ade9b0..e19f571 100644 --- a/src/ui/ui_contacts.cpp +++ b/src/ui/ui_contacts.cpp @@ -14,7 +14,7 @@ static contact active_contact; void ui_setup_contacts() { current_view_state = view_state::LIST; - memset(&active_contact, 0, sizeof(contact)); + active_contact = active_contact = administration_create_empty_contact(); memset(&selected_for_removal, 0, sizeof(contact)); } @@ -156,8 +156,7 @@ static void draw_contact_list() if (ImGui::Button(localize("form.create"))) { current_view_state = view_state::CREATE; - memset(&active_contact, 0, sizeof(contact)); - snprintf(active_contact.id, IM_ARRAYSIZE(active_contact.id), "C/%d", administration_create_id()); + active_contact = administration_create_empty_contact(); } if (current_page >= max_page-1) current_page = max_page-1; diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index ea45f4e..26f60c4 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -6,10 +6,64 @@ #include "administration.hpp" #include "locales.hpp" -static view_state current_view_state = LIST; +static view_state current_view_state = view_state::LIST; static invoice active_invoice; -void ui_draw_invoices() +void ui_setup_invoices() +{ + current_view_state = view_state::LIST; + active_invoice = administration_create_empty_invoice(); +} + +bool draw_invoice_form(invoice* buffer, bool back_button_enabled = true, bool viewing_only = false) { + if (back_button_enabled) + { + if (ImGui::Button(localize("form.back"))) { + current_view_state = view_state::LIST; + return false; + } + } + ImGui::Spacing(); + float widthAvailable = ImGui::GetContentRegionAvail().x; + + // 1. Identifier + //ImGui::BeginDisabled(); + //ImGui::SetNextItemWidth(widthAvailable*0.2f); + //ImGui::InputText(localize("contact.form.identifier"), buffer->id, IM_ARRAYSIZE(buffer->id)); + // 2. Sequential number + ImGui::SetNextItemWidth(widthAvailable*0.5f); + ImGui::InputTextWithHint("Invoice number", "Invoice number", buffer->sequential_number, IM_ARRAYSIZE(buffer->sequential_number)); + ImGui::SameLine();ui_helper_draw_required_tag(); + if (!viewing_only) ImGui::EndDisabled(); + + return false; +} + +void draw_invoices_list() +{ + // Table header controls: create button and pagination. + if (ImGui::Button(localize("form.create"))) + { + current_view_state = view_state::CREATE; + active_invoice = administration_create_empty_invoice(); + } +} + +void ui_draw_invoices() +{ + switch(current_view_state) + { + case view_state::LIST: draw_invoices_list(); break; + case view_state::CREATE: + if (draw_invoice_form(&active_invoice)) + { + //administration_create_invoice(active_invoice); + current_view_state = view_state::LIST; + } + break; + case view_state::EDIT: break; + case view_state::VIEW: break; + } }
\ No newline at end of file diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp index 10f9cea..05a98b4 100644 --- a/src/ui/ui_main.cpp +++ b/src/ui/ui_main.cpp @@ -28,7 +28,7 @@ void (*drawcalls[dashboard_view_state::END])(void) = { }; void (*setupcalls[dashboard_view_state::END])(void) = { - 0, + ui_setup_invoices, 0, ui_setup_contacts, 0, diff --git a/src/ui/ui_projects.cpp b/src/ui/ui_projects.cpp index 377155e..5cb412f 100644 --- a/src/ui/ui_projects.cpp +++ b/src/ui/ui_projects.cpp @@ -13,7 +13,7 @@ static project active_project; void ui_setup_projects() { current_view_state = view_state::LIST; - memset(&active_project, 0, sizeof(contact)); + active_project = administration_create_empty_project(); } static void draw_project_form() @@ -22,7 +22,7 @@ static void draw_project_form() if (ImGui::Button(localize("form.back"))) { current_view_state = view_state::LIST; - memset(&active_project, 0, sizeof(project)); + active_project = administration_create_empty_project(); selected_country = 0; return; } @@ -57,9 +57,9 @@ static void draw_project_form() else if (current_view_state == view_state::EDIT) administration_update_project(active_project); - memset(&active_project, 0, sizeof(project)); current_view_state = view_state::LIST; selected_country = 0; + active_project = administration_create_empty_project(); } if (!can_save) ImGui::EndDisabled(); } @@ -78,8 +78,7 @@ static void draw_project_list() if (ImGui::Button(localize("form.create"))) { current_view_state = view_state::CREATE; - memset(&active_project, 0, sizeof(project)); - snprintf(active_project.id, IM_ARRAYSIZE(active_project.id), "P/%d", administration_create_id()); + active_project = administration_create_empty_project(); } if (current_page >= max_page-1) current_page = max_page-1; |
