summaryrefslogtreecommitdiff
path: root/src/administration.cpp
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/administration.cpp
parentebefd3d10af8d79e765030c263aa560cbb6420d2 (diff)
refactor tax rate loading
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp47
1 files changed, 29 insertions, 18 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;
}