summaryrefslogtreecommitdiff
path: root/src/ui/ui_expenses.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/ui_expenses.cpp')
-rw-r--r--src/ui/ui_expenses.cpp61
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