diff options
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 24 |
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; } |
