diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-17 16:10:48 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-17 16:10:48 +0200 |
| commit | b676299f983b6fc00458953d90efe3f784b86d62 (patch) | |
| tree | 1129be0f65eb4d0ce734c8f7074d985a70869202 /src/administration.cpp | |
| parent | c4ae6cfd53a0fc3ec94ab2aae9e2984a2b48da8f (diff) | |
expense views
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index 66e4a46..45a1125 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -293,7 +293,6 @@ void administration_create() g_administration.next_sequence_number = 1; list_init(&g_administration.invoices); - list_init(&g_administration.expenses); list_init(&g_administration.contacts); list_init(&g_administration.projects); list_init(&g_administration.tax_brackets); @@ -319,7 +318,6 @@ static void administration_destroy_list(list_t *list) void administration_destroy() { administration_destroy_list(&g_administration.invoices); - administration_destroy_list(&g_administration.expenses); administration_destroy_list(&g_administration.contacts); administration_destroy_list(&g_administration.projects); administration_destroy_list(&g_administration.tax_brackets); @@ -927,6 +925,19 @@ bool administration_invoice_update(invoice* inv) inv->customer = new_contact; } + // Supplier is valid but supplier id is unset means we need to register a new contact. + if (strcmp(inv->supplier_id, "") == 0) + { + contact new_contact = administration_contact_create_empty(); + strops_copy(inv->supplier_id, new_contact.id, sizeof(new_contact.id)); + strops_copy(inv->supplier.id, new_contact.id, sizeof(new_contact.id)); + + memcpy(&new_contact, &inv->supplier, sizeof(contact)); + administration_contact_add(new_contact); + + inv->supplier = new_contact; + } + // Addressee is same as customer. if (!inv->is_triangulation) { @@ -986,6 +997,19 @@ bool administration_invoice_add(invoice* inv) inv->customer = new_contact; } + // Supplier is valid but supplier id is unset means we need to register a new contact. + if (strcmp(inv->supplier_id, "") == 0) + { + contact new_contact = administration_contact_create_empty(); + strops_copy(inv->supplier_id, new_contact.id, sizeof(new_contact.id)); + strops_copy(inv->supplier.id, new_contact.id, sizeof(new_contact.id)); + + memcpy(&new_contact, &inv->supplier, sizeof(contact)); + administration_contact_add(new_contact); + + inv->supplier = new_contact; + } + // Addressee is same as customer. if (!inv->is_triangulation) { @@ -995,8 +1019,6 @@ bool administration_invoice_add(invoice* inv) invoice copy = administration_invoice_create_copy(inv); // Create copy to make copy of billing item list. invoice* new_inv = (invoice*)malloc(sizeof(invoice)); memcpy(new_inv, ©, sizeof(invoice)); - - new_inv->status = invoice_status::INVOICE_CONCEPT; list_append(&g_administration.invoices, new_inv); @@ -1011,17 +1033,20 @@ u32 administration_invoice_count() return list_size(&g_administration.invoices); } -u32 administration_invoice_get_partial_list(u32 page_index, u32 page_size, invoice* buffer) +static u32 administration_invoice_get_partial_list(u32 page_index, u32 page_size, invoice* buffer, bool want_outgoing) { assert(buffer); u32 write_cursor = 0; u32 read_start = page_index * page_size; + u32 read_cursor = 0; list_iterator_start(&g_administration.invoices); while (list_iterator_hasnext(&g_administration.invoices)) { invoice c = *(invoice *)list_iterator_next(&g_administration.invoices); - if (g_administration.invoices.iter_pos <= read_start) continue; + if (c.is_outgoing != want_outgoing) continue; // Continue without incrementing read cursor + read_cursor++; + if (read_cursor <= read_start) continue; buffer[write_cursor++] = c; if (write_cursor >= page_size) break; @@ -1031,6 +1056,16 @@ u32 administration_invoice_get_partial_list(u32 page_index, u32 page_size, invoi return write_cursor; } +u32 administration_invoice_get_partial_list_outgoing(u32 page_index, u32 page_size, invoice* buffer) +{ + return administration_invoice_get_partial_list(page_index, page_size, buffer, 1); +} + +u32 administration_invoice_get_partial_list_incomming(u32 page_index, u32 page_size, invoice* buffer) +{ + return administration_invoice_get_partial_list(page_index, page_size, buffer, 0); +} + char* administration_invoice_get_status_string(invoice* invoice) { switch(invoice->status) @@ -1043,6 +1078,7 @@ char* administration_invoice_get_status_string(invoice* invoice) case invoice_status::INVOICE_CANCELLED: return "invoice.status.cancelled"; case invoice_status::INVOICE_REFUNDED: return "invoice.status.refunded"; case invoice_status::INVOICE_CORRECTED: return "invoice.status.corrected"; + case invoice_status::INVOICE_RECEIVED: return "invoice.status.received"; default: assert(0); break; } return ""; |
