summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-10-25 15:00:38 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-10-25 15:00:38 +0200
commit5f25180b3d79d9a03952217cd77a16601ae0a6d0 (patch)
tree2f06334f7d1ad7728c145143e7cbf86a72b24e0e /src
parentebefd3d10af8d79e765030c263aa560cbb6420d2 (diff)
refactor tax rate loading
Diffstat (limited to 'src')
-rw-r--r--src/administration.cpp47
-rw-r--r--src/administration_reader.cpp3
-rw-r--r--src/ai_providers/openAI.cpp1
-rw-r--r--src/importer.cpp5
-rw-r--r--src/ui/ui_settings.cpp6
5 files changed, 35 insertions, 27 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index b1e3198..d51b1b9 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -130,11 +130,27 @@ void administration_create()
list_init(&g_administration.contacts);
list_init(&g_administration.projects);
list_init(&g_administration.tax_rates);
+ list_init(&g_administration.all_tax_rates);
list_init(&g_administration.cost_centers);
strops::copy(g_administration.path, "", sizeof(g_administration.path));
memops::zero(&g_administration.ai_service, sizeof(ai_service));
+ // Load all tax rates.
+ for (s32 i = 0; i < country::get_count(); i++)
+ {
+ tax_rate* tax_rates = (tax_rate*)memops::alloc(sizeof(tax_rate) * 400);
+ u32 tax_rate_count = country::get_available_tax_rates(country::get_code_by_index(i), tax_rates, 400);
+
+ for (u32 x = 0; x < tax_rate_count; x++)
+ {
+ tax_rate* rate = (tax_rate*)memops::alloc(sizeof(tax_rate));
+ memops::copy(rate, &tax_rates[x], sizeof(tax_rate));
+
+ list_append(&g_administration.all_tax_rates, rate);
+ }
+ }
+
logger::info("Setup took %.3fms.", STOPWATCH_TIME);
}
@@ -167,6 +183,7 @@ void administration::destroy()
administration_destroy_list(&g_administration.contacts);
administration_destroy_list(&g_administration.projects);
administration_destroy_list(&g_administration.tax_rates);
+ administration_destroy_list(&g_administration.all_tax_rates);
administration_destroy_list(&g_administration.cost_centers);
}
@@ -1054,7 +1071,7 @@ tax_rate administration::tax_rate_create_empty()
return result;
}
-a_err administration::tax_rate_remove(tax_rate data)
+a_err administration::tax_rate_disable(tax_rate data)
{
list_iterator_start(&g_administration.tax_rates);
while (list_iterator_hasnext(&g_administration.tax_rates)) {
@@ -1077,7 +1094,7 @@ a_err administration::tax_rate_remove(tax_rate data)
return A_ERR_NOT_FOUND;
}
-a_err administration::tax_rate_exists(tax_rate data)
+a_err administration::tax_rate_is_enabled(tax_rate data)
{
list_iterator_start(&g_administration.tax_rates);
while (list_iterator_hasnext(&g_administration.tax_rates)) {
@@ -1098,17 +1115,17 @@ a_err administration::tax_rate_get_by_internal_code(tax_rate* buffer, char* id)
{
assert(buffer);
- list_iterator_start(&g_administration.tax_rates);
- while (list_iterator_hasnext(&g_administration.tax_rates)) {
- tax_rate c = *(tax_rate *)list_iterator_next(&g_administration.tax_rates);
+ list_iterator_start(&g_administration.all_tax_rates);
+ while (list_iterator_hasnext(&g_administration.all_tax_rates)) {
+ tax_rate c = *(tax_rate *)list_iterator_next(&g_administration.all_tax_rates);
if (strops::equals(c.internal_code, id))
{
*buffer = c;
- list_iterator_stop(&g_administration.tax_rates);
+ list_iterator_stop(&g_administration.all_tax_rates);
return A_ERR_SUCCESS;
}
}
- list_iterator_stop(&g_administration.tax_rates);
+ list_iterator_stop(&g_administration.all_tax_rates);
return A_ERR_NOT_FOUND;
}
@@ -1131,7 +1148,7 @@ a_err administration::tax_rate_import(tax_rate data)
return A_ERR_SUCCESS;
}
-a_err administration::tax_rate_add(tax_rate data)
+a_err administration::tax_rate_enable(tax_rate data)
{
tax_rate* tb = (tax_rate*)memops::alloc(sizeof(tax_rate));
if (!tb) return A_ERR_GENERIC;
@@ -1575,16 +1592,6 @@ invoice administration::invoice_create_copy(invoice* inv)
return new_inv;
}
-void administration::invoice_recalculate_totals()
-{
- list_iterator_start(&g_administration.invoices);
- while (list_iterator_hasnext(&g_administration.invoices)) {
- invoice* c = (invoice *)list_iterator_next(&g_administration.invoices);
- administration_recalculate_invoice_totals(c);
- }
- list_iterator_stop(&g_administration.invoices);
-}
-
u32 administration::invoice_count()
{
return list_size(&g_administration.invoices);
@@ -1775,6 +1782,10 @@ static void administration_recalculate_billing_item_totals(billing_item* item)
{
item->tax = item->net * (rate.rate/100.0f);
}
+ else
+ {
+ assert(0);
+ }
item->total = item->net + item->tax;
}
diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp
index 91325ea..80d0eac 100644
--- a/src/administration_reader.cpp
+++ b/src/administration_reader.cpp
@@ -116,9 +116,6 @@ bool administration_reader::open_existing(char* file_path)
zip_close(zip);
- // Tax rates might be loaded after invoices so we need to recalculate all totals.
- administration::invoice_recalculate_totals();
-
logger::info("Imported '%s' in %.3fms.", file_path, STOPWATCH_TIME);
return true;
diff --git a/src/ai_providers/openAI.cpp b/src/ai_providers/openAI.cpp
index 64e7a6a..3e5104d 100644
--- a/src/ai_providers/openAI.cpp
+++ b/src/ai_providers/openAI.cpp
@@ -30,6 +30,7 @@ static bool _openAI_batch_query_with_file(char** queries, size_t query_count, ch
httplib::SSLClient cli("api.openai.com", 443);
thrd_t threads[20];
+ assert(query_count <= 20);
for (u32 i = 0; i < query_count; i++)
{
diff --git a/src/importer.cpp b/src/importer.cpp
index 4f78d20..e3d8048 100644
--- a/src/importer.cpp
+++ b/src/importer.cpp
@@ -257,9 +257,8 @@ static int _ai_document_to_invoice_t(void *arg)
inv.status = invoice_status::INVOICE_RECEIVED;
- // Set customer or supplier depending on incomming or outgoing.
- contact my_info = administration::company_info_get();
- //memops::copy(&inv.customer, &my_info, sizeof(contact));
+ inv.is_triangulation = !memops::equals(&inv.addressee.address, &inv.customer.address, sizeof(address));
+
strops::copy(inv.customer.id, MY_COMPANY_ID, MAX_LEN_ID);
// Project and cost centers cannot be interpreted from file so are set to 0.
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index 51beafe..2a310d3 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -85,10 +85,10 @@ static void draw_vat_rates()
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
- bool toggle = administration::tax_rate_exists(c) == A_ERR_SUCCESS;
+ bool toggle = administration::tax_rate_is_enabled(c) == A_ERR_SUCCESS;
if (ImGui::Checkbox("##toggle", &toggle)) {
- if (toggle) administration::tax_rate_add(c);
- else administration::tax_rate_remove(c);
+ if (toggle) administration::tax_rate_enable(c);
+ else administration::tax_rate_disable(c);
}
char localized_code[MAX_LEN_LONG_DESC];