summaryrefslogtreecommitdiff
path: root/src/ui/ui_invoices.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-11-08 14:13:43 +0100
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-11-08 14:13:43 +0100
commit6abbea56a6bfa69cb5e576223301f0c992b646fa (patch)
tree97dabe37ef08202303c9a7a5187de77ac4b286e9 /src/ui/ui_invoices.cpp
parent887d5f9f8d1309134c72b1f35afc7d007a5c64aa (diff)
activity sidebar for invoices.HEADmaster
Diffstat (limited to 'src/ui/ui_invoices.cpp')
-rw-r--r--src/ui/ui_invoices.cpp74
1 files changed, 61 insertions, 13 deletions
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index 0e81259..ff3c73b 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -25,23 +25,38 @@
#include "administration.hpp"
#include "administration_writer.hpp"
+static activity* activity_buffer = 0;
+static u32 activity_count;
static ui::view_state current_view_state = ui::view_state::LIST_ALL;
static invoice active_invoice = {0};
static invoice selected_for_removal = {0};
static const float sidepanel_width = 200.0f;
-
static billing_item* invoice_items_buffer = 0;
+static void _reload_activities()
+{
+ activity_count = administration::activity_get_all_for_object(activity_buffer, active_invoice.id);
+}
+
+static void _set_active_invoice(invoice inv)
+{
+ active_invoice = inv;
+ _reload_activities();
+}
+
void ui::destroy_invoices()
{
memops::unalloc(invoice_items_buffer);
+ memops::unalloc(activity_buffer);
}
void ui::setup_invoices()
{
+ activity_buffer = (activity*)memops::alloc(sizeof(activity) * 250);
+
current_view_state = ui::view_state::LIST_ALL;
- active_invoice = administration::invoice_create_empty();
+ _set_active_invoice(administration::invoice_create_empty());
u32 invoice_items_count = MAX_BILLING_ITEMS;
invoice_items_buffer = (billing_item*)memops::alloc(sizeof(billing_item) * invoice_items_count);
@@ -279,7 +294,7 @@ static void draw_invoices_list()
if (ImGui::Button(locale::get("form.create")))
{
current_view_state = ui::view_state::CREATE;
- active_invoice = administration::invoice_create_empty(); // @leak
+ _set_active_invoice(administration::invoice_create_empty());
active_invoice.supplier = administration::company_info_get();
active_invoice.is_outgoing = 1;
active_invoice.status = invoice_status::INVOICE_CONCEPT;
@@ -328,7 +343,7 @@ static void draw_invoices_list()
bool selected = false;
if (ImGui::Selectable("##invisible_selectable", selected, selectable_flags, ImVec2(0, ImGui::GetFrameHeight()-4.0f)))
{
- active_invoice = c;
+ _set_active_invoice(c);
current_view_state = ui::view_state::VIEW_EXISTING;
}
ImGui::SetItemAllowOverlap();
@@ -372,11 +387,44 @@ static void _reset_to_default_view()
current_view_state = ui::view_state::LIST_ALL;
ui::destroy_invoices();
ui::setup_invoices();
+ activity_count = 0;
+}
+
+static void _draw_activity_sidepanel()
+{
+ ImGui::SameLine();
+ ImGui::SeparatorEx(1 << 1, 3.0f);
+ ImGui::SameLine();
+
+ ImGui::BeginChild("##historyPanel", ImVec2(sidepanel_width, 0), ImGuiChildFlags_None);
+ {
+ for (u32 i = 0; i < activity_count; i++)
+ {
+ activity ac = activity_buffer[i];
+
+ char time_buffer[26];
+ struct tm* tm_info;
+ tm_info = localtime(&ac.timestamp);
+ strftime(time_buffer, 26, "%d/%m/%Y %H:%M", tm_info);
+
+ ImGui::Text(time_buffer);
+
+ ImGui::PushFont(ui::fontBold);
+ ImGui::Text(ac.user_name);
+ ImGui::PopFont();
+ ImGui::SameLine();
+
+ ImGui::TextWrapped("%s", locale::get(ac.message));
+ ImGui::Spacing();
+ }
+ }
+
+ ImGui::EndChild();
}
static void draw_invoice_update()
{
- if (ImGui::Button(locale::get("form.back"), true, false)) {
+ if (ImGui::Button(locale::get("form.cancel"), true, false)) {
current_view_state = ui::view_state::VIEW_EXISTING;
}
@@ -387,6 +435,8 @@ static void draw_invoice_update()
if (ImGui::Button(locale::get("form.save"), true)) {
administration_writer::set_write_completed_event_callback(_reset_to_invoice_view);
administration::invoice_update(&active_invoice);
+
+ _reload_activities();
}
if (!can_save) ImGui::EndDisabled();
}
@@ -399,6 +449,8 @@ static void draw_invoice_update()
ImGui::BeginChild("##invoicePanel", ImVec2(availableWidth - sidepanel_width, 0), ImGuiChildFlags_None);
draw_invoice_form(&active_invoice);
ImGui::EndChild();
+
+ _draw_activity_sidepanel();
}
static void draw_invoice_create()
@@ -414,6 +466,8 @@ static void draw_invoice_create()
if (ImGui::Button(locale::get("form.save"), true)) {
administration_writer::set_write_completed_event_callback(_reset_to_invoice_view);
administration::invoice_add(&active_invoice);
+
+ _reload_activities();
}
if (!can_save) ImGui::EndDisabled();
}
@@ -437,7 +491,7 @@ static void draw_invoice_view()
ImGui::SameLine();
if (ImGui::Button(locale::get("form.change"))) {
- active_invoice = administration::invoice_create_copy(&active_invoice); // We create a copy because of billing item list pointers.
+ _set_active_invoice(administration::invoice_create_copy(&active_invoice)); // We create a copy because of billing item list pointers.
current_view_state = ui::view_state::EDIT_EXISTING;
}
@@ -480,13 +534,7 @@ static void draw_invoice_view()
draw_invoice_form(&active_invoice, true);
ImGui::EndChild();
- ImGui::SameLine();
- ImGui::SeparatorEx(1 << 1, 3.0f);
- ImGui::SameLine();
-
- ImGui::BeginChild("##historyPanel", ImVec2(sidepanel_width, 0), ImGuiChildFlags_None);
- // Sidepanel
- ImGui::EndChild();
+ _draw_activity_sidepanel();
}
void ui::draw_invoices()