diff options
Diffstat (limited to 'src/ui/ui_expenses.cpp')
| -rw-r--r-- | src/ui/ui_expenses.cpp | 61 |
1 files changed, 57 insertions, 4 deletions
diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index 153e6b7..c02cdce 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -27,7 +27,9 @@ #include "administration.hpp" #include "administration_writer.hpp" #include "locales.hpp" -#include "ai_service.hpp" +#include "import_service.hpp" + +static import_invoice_request* active_import_request = 0; static view_state current_view_state = view_state::LIST; static invoice active_invoice = {0}; @@ -46,7 +48,13 @@ void ui_destroy_expenses() void ui_setup_expenses() { - current_view_state = view_state::LIST; + if (active_import_request != 0) { + current_view_state = view_state::VIEW_IMPORT_REQUEST; + } + else { + current_view_state = view_state::LIST; + } + active_invoice = administration_invoice_create_empty(); u32 invoice_items_count = MAX_BILLING_ITEMS; @@ -176,13 +184,13 @@ static void ui_draw_expenses_list() char import_file_path[MAX_LEN_PATH] = {0}; ImGui::SameLine(); if (ImGui::FormInvoiceFileSelector("+ Import", import_file_path)) { // @localize - //current_view_state = view_state::CREATE; + current_view_state = view_state::VIEW_IMPORT_REQUEST; active_invoice = administration_invoice_create_empty(); // @leak active_invoice.customer = administration_company_info_get(); active_invoice.is_outgoing = 0; active_invoice.status = invoice_status::INVOICE_RECEIVED; - ai_document_to_invoice(import_file_path); + active_import_request = ai_document_to_invoice(import_file_path); } if (current_page >= max_page-1) current_page = max_page-1; @@ -336,6 +344,50 @@ static void ui_draw_expense_view() draw_expense_form(&active_invoice, true); } +static void ui_draw_import_request() +{ + assert(active_import_request); + + if (active_import_request->status == import_status::IMPORT_DONE) { + if (active_import_request->error == I_ERR_SUCCESS) { + active_invoice = active_import_request->result; + current_view_state = view_state::CREATE; + active_import_request = 0; + return; + } + else { + if (ImGui::Button(localize("form.back"))) { + current_view_state = view_state::LIST; + active_import_request = 0; + return; + } + } + } + + ImGui::PushFont(fontBig); + + ImVec2 windowSize = ImGui::GetWindowSize(); + float radius = 60.0f; + + const char* text = import_status_to_str(active_import_request->status); + if (active_import_request->error != I_ERR_SUCCESS) text = import_error_to_str(active_import_request->error); + ImVec2 textSize = ImGui::CalcTextSize(text); + ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f, + (windowSize.y) * 0.5f - radius - 40.0f)); + ImGui::Text(text); + + if (active_import_request->error == I_ERR_SUCCESS) { + ImGui::SetCursorPos(ImVec2((windowSize.x - radius*2) * 0.5f, + (windowSize.y - radius*2) * 0.5f)); + + const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_ButtonHovered); + const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_Button); + ImGui::LoadingIndicatorCircle("##loadingAnim", radius, bg, col, 10, 4.0f); + } + + ImGui::PopFont(); +} + void ui_draw_expenses() { switch(current_view_state) @@ -344,5 +396,6 @@ void ui_draw_expenses() case view_state::CREATE: ui_draw_expense_create(); break; case view_state::EDIT: ui_draw_expense_update(); break; case view_state::VIEW: ui_draw_expense_view(); break; + case view_state::VIEW_IMPORT_REQUEST: ui_draw_import_request(); break; } }
\ No newline at end of file |
