summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-08-16 12:57:53 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-08-16 12:57:53 +0200
commit12afa4c63e642452676f77830ec0383a6132883e (patch)
tree63e23c4892e2d399e23040016e0f10cffd01d341 /src/ui
parent05bc81cd42c5aeff7cfb6cf6b18f88792e7c16c9 (diff)
working on invoice form
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/ui_contacts.cpp3
-rw-r--r--src/ui/ui_invoices.cpp101
2 files changed, 66 insertions, 38 deletions
diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp
index 7d03ba6..eca6ee3 100644
--- a/src/ui/ui_contacts.cpp
+++ b/src/ui/ui_contacts.cpp
@@ -77,6 +77,8 @@ void ui_setup_contacts()
void draw_contact_form_ex(contact* buffer, bool viewing_only = false, bool with_autocomplete = false, bool* on_autocomplete = 0)
{
+ ImGui::PushID(buffer);
+
ImGui::Spacing();
float widthAvailable = ImGui::GetContentRegionAvail().x;
@@ -152,6 +154,7 @@ void draw_contact_form_ex(contact* buffer, bool viewing_only = false, bool with_
ImGui::InputTextWithHint(localize("contact.form.bankaccount"), localize("contact.form.bankaccount"), buffer->bank_account, IM_ARRAYSIZE(buffer->bank_account));
if (viewing_only) ImGui::EndDisabled();
+ ImGui::PopID();
}
void draw_contact_form(contact* buffer, bool viewing_only = false)
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index 036d85b..8c0943c 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -225,14 +225,15 @@ static void draw_invoice_items_form(invoice* invoice)
billing_item* buffer = (billing_item*)malloc(sizeof(billing_item) * invoice_items);
administration_get_all_billing_items_for_invoice(invoice, buffer);
- if (ImGui::BeginTable("TableBillingItems", 8, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
+ 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, 170);
+ ImGui::TableSetupColumn("Tax %", ImGuiTableColumnFlags_WidthFixed, 120);
ImGui::TableSetupColumn("Tax", ImGuiTableColumnFlags_WidthFixed, 100);
ImGui::TableSetupColumn("Total", ImGuiTableColumnFlags_WidthFixed, 100);
@@ -246,8 +247,14 @@ static void draw_invoice_items_form(invoice* invoice)
ImGui::TableNextRow();
ImGui::PushID(i);
+
+ ImGui::TableSetColumnIndex(0);
+ if (ImGui::Button("X"))
+ {
+ administration_remove_billing_item_from_invoice(invoice, item);
+ }
- ImGui::TableSetColumnIndex(0);
+ ImGui::TableSetColumnIndex(1);
ImGui::InputFloat("##amount", &item.amount, 0.0f, 0.0f, "%.0f");
ImGui::SameLine();
@@ -268,13 +275,17 @@ static void draw_invoice_items_form(invoice* invoice)
}
}
- ImGui::TableSetColumnIndex(1);
+ ImGui::TableSetColumnIndex(2);
+ ImGui::PushItemWidth(-1);
ImGui::InputText("##desc", item.description, IM_ARRAYSIZE(item.description));
+ ImGui::PopItemWidth();
- ImGui::TableSetColumnIndex(2);
+ ImGui::TableSetColumnIndex(3);
+ ImGui::PushItemWidth(-1);
ImGui::InputFloat("##price", &item.net_per_item, 0.0f, 0.0f, "%.2f");
+ ImGui::PopItemWidth();
- ImGui::TableSetColumnIndex(3);
+ ImGui::TableSetColumnIndex(4);
ImGui::InputFloat("##discount", &item.discount, 0.0f, 0.0f, "%.0f");
ImGui::SameLine();
@@ -295,16 +306,18 @@ static void draw_invoice_items_form(invoice* invoice)
}
}
- ImGui::TableSetColumnIndex(4);
+ ImGui::TableSetColumnIndex(5);
ImGui::Text("%.2f %s", item.net, item.currency);
- ImGui::TableSetColumnIndex(5);
+ ImGui::TableSetColumnIndex(6);
+ ImGui::PushItemWidth(-1);
draw_tax_bracket_selector(item.tax_bracket_id);
+ ImGui::PopItemWidth();
- ImGui::TableSetColumnIndex(6);
+ ImGui::TableSetColumnIndex(7);
ImGui::Text("%.2f %s", item.tax, item.currency);
- ImGui::TableSetColumnIndex(7);
+ ImGui::TableSetColumnIndex(8);
ImGui::Text("%.2f %s", item.total, item.currency);
ImGui::PopID();
@@ -312,6 +325,18 @@ static void draw_invoice_items_form(invoice* invoice)
administration_update_billing_item_of_invoice(invoice, item);
}
+ ImGui::TableNextRow();
+ ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0, IM_COL32(70, 70, 70, 255));
+
+ ImGui::TableSetColumnIndex(5);
+ ImGui::Text("%.2f %s", invoice->net, invoice->currency);
+
+ ImGui::TableSetColumnIndex(7);
+ ImGui::Text("%.2f %s", invoice->tax, invoice->currency);
+
+ ImGui::TableSetColumnIndex(8);
+ ImGui::Text("%.2f %s", invoice->total, invoice->currency);
+
ImGui::EndTable();
}
}
@@ -323,7 +348,6 @@ void draw_invoice_form(invoice* buffer, bool viewing_only = false)
// 1. Identifier
//ImGui::SetNextItemWidth(widthAvailable*0.2f);
//ImGui::InputText(localize("contact.form.identifier"), buffer->id, IM_ARRAYSIZE(buffer->id));
- if (!viewing_only) ImGui::EndDisabled();
// 2. Sequential number
ImGui::Text("Invoice number: %s", buffer->sequential_number);
@@ -332,7 +356,6 @@ void draw_invoice_form(invoice* buffer, bool viewing_only = false)
ImGui::Text("Supplier: %s", buffer->supplier.name);
// 4. Invoice issued at
- ImGui::BeginDisabled();
tm issued_at_date = *gmtime(&buffer->issued_at);
if (ImGui::DatePicker("##issuedAt", issued_at_date))
{
@@ -340,10 +363,8 @@ void draw_invoice_form(invoice* buffer, bool viewing_only = false)
}
ImGui::SameLine();
ImGui::Text("Invoice issued at");
- ImGui::EndDisabled();
// 5. Invoice expires at
- ImGui::BeginDisabled();
tm expires_at_date = *gmtime(&buffer->expires_at);
if (ImGui::DatePicker("##expiresAt", expires_at_date))
{
@@ -374,22 +395,21 @@ void draw_invoice_form(invoice* buffer, bool viewing_only = false)
}
// 8. (optional) shipping address.
- static bool shipping_is_billing_addr = true;
- ImGui::Checkbox("Shipping information is billing information", &shipping_is_billing_addr);
- if (!shipping_is_billing_addr) {
+ ImGui::Checkbox("Shipping information differs from billing information (triangulation)", &buffer->is_triangulation);
+ if (buffer->is_triangulation) {
ImGui::Spacing();
ImGui::Text("Shipping information");
- ui_draw_address_form(&buffer->shipping_address);
+ draw_contact_form_ex(&buffer->addressee, 0,0,0);
}
ImGui::Separator();
// 9. Project selection
- draw_project_selector(buffer->project_id);
+ //draw_project_selector(buffer->project_id);
// 10. Cost center selection
- draw_costcenter_selector(buffer->cost_center_id);
+ //draw_costcenter_selector(buffer->cost_center_id);
+ //ImGui::Separator();
- ImGui::Separator();
ImGui::Spacing();
ImGui::Spacing();
ImGui::Spacing();
@@ -412,12 +432,8 @@ void draw_invoice_form(invoice* buffer, bool viewing_only = false)
// 13. Invoice items form
draw_invoice_items_form(buffer);
-
- ImGui::Separator();
-
- // 14. Totals overview.
- if (viewing_only) ImGui::EndDisabled();
+ //if (viewing_only) ImGui::EndDisabled();
}
void draw_invoices_list()
@@ -432,23 +448,32 @@ void draw_invoices_list()
}
}
+static void ui_draw_invoice_create()
+{
+ if (ImGui::Button(localize("form.back"))) {
+ current_view_state = view_state::LIST;
+ }
+
+ draw_invoice_form(&active_invoice);
+
+ bool can_save = administration_is_invoice_valid(&active_invoice);
+ if (!can_save) ImGui::BeginDisabled();
+
+ ImGui::Spacing();
+ if (ImGui::Button(localize("form.save"))) {
+ administration_add_invoice(&active_invoice);
+ current_view_state = view_state::LIST;
+ }
+
+ if (!can_save) ImGui::EndDisabled();
+}
+
void ui_draw_invoices()
{
switch(current_view_state)
{
case view_state::LIST: draw_invoices_list(); break;
- case view_state::CREATE:
-
- if (ImGui::Button(localize("form.back"))) {
- current_view_state = view_state::LIST;
- }
- draw_invoice_form(&active_invoice);
-
- //if () {
- //administration_create_invoice(active_invoice);
- //current_view_state = view_state::LIST;
- //}
- break;
+ case view_state::CREATE: ui_draw_invoice_create(); break;
case view_state::EDIT: break;
case view_state::VIEW: break;
}