summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index 8af6e86..b3d5ad4 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -149,9 +149,20 @@ static void administration_destroy_list(list_t *list)
list_destroy(list);
}
-void administration_destroy()
+static void administration_destroy_invoices()
+{
+ list_iterator_start(&g_administration.invoices);
+ while (list_iterator_hasnext(&g_administration.invoices)) {
+ invoice* c = (invoice *)list_iterator_next(&g_administration.invoices);
+ administration_destroy_list(&c->billing_items);
+ }
+ list_iterator_stop(&g_administration.invoices);
+}
+
+void administration::destroy()
{
is_initialized = false;
+ administration_destroy_invoices();
administration_destroy_list(&g_administration.invoices);
administration_destroy_list(&g_administration.contacts);
administration_destroy_list(&g_administration.projects);
@@ -161,7 +172,7 @@ void administration_destroy()
void administration::create_from_file(char* save_file)
{
- if (is_initialized) administration_destroy();
+ if (is_initialized) administration::destroy();
administration_create();
strops::copy(g_administration.path, save_file, sizeof(g_administration.path));
@@ -170,7 +181,7 @@ void administration::create_from_file(char* save_file)
void administration::create_empty(char* save_file)
{
- if (is_initialized) administration_destroy();
+ if (is_initialized) administration::destroy();
administration_create();
g_administration.next_id = 2;
@@ -1337,6 +1348,11 @@ bool administration::invoice_has_intra_community_services(invoice* invoice)
return false;
}
+void administration::invoice_destroy(invoice* invoice)
+{
+ administration_destroy_list(&invoice->billing_items);
+}
+
invoice administration::invoice_create_empty()
{
invoice result;
@@ -1348,7 +1364,7 @@ invoice administration::invoice_create_empty()
result.delivered_at = result.issued_at;
result.expires_at = result.issued_at + administration::get_default_invoice_expire_duration();
- list_init(&result.billing_items); // @leak
+ list_init(&result.billing_items);
strops::copy(result.currency, get_default_currency_for_country(g_administration.company_info.address.country_code), MAX_LEN_CURRENCY);
return result;
}