diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-16 15:36:17 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-16 15:36:17 +0200 |
| commit | 50848b2dd97093dd407ed7199118bca011f1aa4c (patch) | |
| tree | 176a0aa8a1ce966123a56e0988511f6ddfcd42eb /src/administration.cpp | |
| parent | b2a5ae0b5b628cca712bb80d485393800de34172 (diff) | |
more refactor work
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index 245809b..4d8233e 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -760,7 +760,7 @@ bool administration_billing_item_add_to_invoice(invoice* invoice, billing_item i snprintf(tb->id, sizeof(tb->id), "B/%d", administration_create_id()); strops_copy(tb->invoice_id, invoice->id, sizeof(tb->invoice_id)); list_append(&invoice->billing_items, tb); - strops_copy(tb->currency, invoice->currency, CURRENCY_LENGTH); // Set billing item currency to invoice currency. + strops_copy(tb->currency, invoice->currency, MAX_LEN_CURRENCY); // Set billing item currency to invoice currency. g_administration.next_id++; @@ -817,7 +817,7 @@ invoice administration_invoice_create_empty() result.delivered_at = time(NULL); result.expires_at = time(NULL) + administration_get_default_invoice_expire_duration(); list_init(&result.billing_items); // @leak - strops_copy(result.currency, administration_get_default_currency_for_country(g_administration.company_info.address.country_code), CURRENCY_LENGTH); + strops_copy(result.currency, administration_get_default_currency_for_country(g_administration.company_info.address.country_code), MAX_LEN_CURRENCY); return result; } @@ -944,13 +944,13 @@ bool administration_billing_item_update_in_invoice(invoice* invoice, billing_ite void administration_invoice_set_currency(invoice* invoice, char* currency) { - strops_copy(invoice->currency, currency, CURRENCY_LENGTH); + strops_copy(invoice->currency, currency, MAX_LEN_CURRENCY); list_iterator_start(&invoice->billing_items); while (list_iterator_hasnext(&invoice->billing_items)) { billing_item* c = (billing_item *)list_iterator_next(&invoice->billing_items); - strops_copy(c->currency, currency, CURRENCY_LENGTH); + strops_copy(c->currency, currency, MAX_LEN_CURRENCY); } list_iterator_stop(&invoice->billing_items); } @@ -1003,6 +1003,27 @@ bool administration_invoice_update(invoice* inv) return false; } +invoice administration_invoice_create_copy(invoice* inv) +{ + invoice new_inv = administration_invoice_create_empty(); + list_t billing_items = new_inv.billing_items; + + memcpy((void*)&new_inv, (void*)inv, sizeof(invoice)); + new_inv.billing_items = billing_items; + + list_iterator_start(&inv->billing_items); + while (list_iterator_hasnext(&inv->billing_items)) { + billing_item* c = (billing_item *)list_iterator_next(&inv->billing_items); + + billing_item* item_copy = (billing_item*)malloc(sizeof(billing_item)); + memcpy(item_copy, c, sizeof(billing_item)); + list_append(&new_inv.billing_items, item_copy); + } + list_iterator_stop(&inv->billing_items); + + return new_inv; +} + bool administration_invoice_add(invoice* inv) { if (!administration_invoice_is_valid(inv)) return false; @@ -1026,9 +1047,10 @@ bool administration_invoice_add(invoice* inv) memcpy(&inv->addressee, &inv->customer, sizeof(contact)); } + invoice copy = administration_invoice_create_copy(inv); // Create copy to make copy of billing item list. invoice* new_inv = (invoice*)malloc(sizeof(invoice)); - memcpy((void*)new_inv, (void*)inv, sizeof(invoice)); - + memcpy(new_inv, ©, sizeof(invoice)); + new_inv->status = invoice_status::INVOICE_CONCEPT; list_append(&g_administration.invoices, new_inv); @@ -1047,9 +1069,7 @@ u32 administration_invoice_count() u32 administration_invoice_get_partial_list(u32 page_index, u32 page_size, invoice* buffer) { assert(buffer); - u32 write_cursor = 0; - u32 read_start = page_index * page_size; list_iterator_start(&g_administration.invoices); |
