From 5f25180b3d79d9a03952217cd77a16601ae0a6d0 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Sat, 25 Oct 2025 15:00:38 +0200 Subject: refactor tax rate loading --- src/administration.cpp | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) (limited to 'src/administration.cpp') 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; } -- cgit v1.2.3-70-g09d2