From bd3f2b84742067d0b9049b9f42f2266f94dbb0f9 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Fri, 26 Sep 2025 18:41:40 +0200 Subject: refactor customer_id and supplier_id out of invoice --- src/administration.cpp | 84 ++++++------------------------------------- src/administration_reader.cpp | 2 -- src/log.cpp | 6 ++++ 3 files changed, 16 insertions(+), 76 deletions(-) (limited to 'src') diff --git a/src/administration.cpp b/src/administration.cpp index a724892..b6dfcbb 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -294,8 +294,9 @@ static bool is_initialized = false; void administration_create() { - is_initialized = true; STOPWATCH_START; + log_clear(); + is_initialized = true; list_init(&g_administration.invoices); list_init(&g_administration.contacts); @@ -1499,85 +1500,16 @@ a_err administration_invoice_remove(invoice* inv) return A_ERR_NOT_FOUND; } -static void administration_invoice_set_refs(invoice* inv) +a_err administration_invoice_update(invoice* inv) { - // This function makes sure that contact info referenced in the IDs actually - // matches the contact info stored in administration, if not we make new contacts. - - // Check if supplier info is equal to contact stored in supplier id, in case we autocomplete and edit data after, - // this should be handled as a new contact. - contact lookup_buffer; - if (administration_contact_get_by_id(&lookup_buffer, inv->supplier.id) == A_ERR_SUCCESS) - { - if (!administration_contact_equals(lookup_buffer, inv->supplier)) - { - // Zero id so new contact is created for supplier. - inv->supplier_id[0] = '\0'; - inv->supplier.id[0] = '\0'; - } - else - { - // Store supplier id in invoice, (only id is stored to disk, supplier field is filled on load). - strops_copy(inv->supplier_id, inv->supplier.id, sizeof(inv->supplier_id)); - } - } - - // 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; - } - - // Check if customer info is equal to contact stored in customer id, in case we autocomplete and edit data after, - // this should be handled as a new contact. - if (administration_contact_get_by_id(&lookup_buffer, inv->customer.id) == A_ERR_SUCCESS) - { - if (!administration_contact_equals(lookup_buffer, inv->customer)) - { - // Zero id so new contact is created for supplier. - inv->customer_id[0] = '\0'; - inv->customer.id[0] = '\0'; - } - else - { - // Store customer id in invoice. - strops_copy(inv->customer_id, inv->customer.id, sizeof(inv->customer_id)); - } - } - - // Invoice is valid but customer id is unset means we need to register a new contact. - if (strcmp(inv->customer_id, "") == 0) - { - contact new_contact = administration_contact_create_empty(); - strops_copy(inv->customer_id, new_contact.id, sizeof(new_contact.id)); - strops_copy(inv->customer.id, new_contact.id, sizeof(new_contact.id)); - - memcpy(&new_contact, &inv->customer, sizeof(contact)); - administration_contact_add(new_contact); - - inv->customer = new_contact; - } + a_err result = administration_invoice_is_valid(inv); + if (result != A_ERR_SUCCESS) return result; // Addressee is same as customer. if (!inv->is_triangulation) { memcpy(&inv->addressee, &inv->customer, sizeof(contact)); } -} - -a_err administration_invoice_update(invoice* inv) -{ - a_err result = administration_invoice_is_valid(inv); - if (result != A_ERR_SUCCESS) return result; - - administration_invoice_set_refs(inv); list_iterator_start(&g_administration.invoices); while (list_iterator_hasnext(&g_administration.invoices)) { @@ -1631,7 +1563,11 @@ a_err administration_invoice_add(invoice* inv) a_err result = administration_invoice_is_valid(inv); if (result != A_ERR_SUCCESS) return result; - administration_invoice_set_refs(inv); + // Addressee is same as customer. + if (!inv->is_triangulation) + { + memcpy(&inv->addressee, &inv->customer, sizeof(contact)); + } inv->issued_at -= (inv->issued_at % 86400); inv->delivered_at -= (inv->delivered_at % 86400); diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp index fb2fbf0..09a4a0a 100644 --- a/src/administration_reader.cpp +++ b/src/administration_reader.cpp @@ -163,7 +163,6 @@ bool administration_reader_import_invoice(char* buffer, size_t buffer_size) // Supplier xml_get_str_x(root, data.supplier.id, MAX_LEN_ID, "cac:AccountingSupplierParty", "cac:Party", "cac:Contact", "cbc:Name", 0); - strops_copy(data.supplier_id, data.supplier.id, MAX_LEN_ID); strops_copy(data.supplier.bank_account, data.payment_means.payee_bank_account, MAX_LEN_BANK); xml_get_str_x(root, data.supplier.name, MAX_LEN_LONG_DESC, "cac:AccountingSupplierParty", "cac:Party", "cac:PartyName", "cbc:Name", 0); xml_get_str_x(root, data.supplier.address.address1, MAX_LEN_ADDRESS, "cac:AccountingSupplierParty", "cac:Party", "cac:PostalAddress", "cbc:StreetName", 0); @@ -179,7 +178,6 @@ bool administration_reader_import_invoice(char* buffer, size_t buffer_size) // Customer xml_get_str_x(root, data.customer.id, MAX_LEN_ID, "cac:AccountingCustomerParty", "cac:Party", "cac:Contact", "cbc:Name", 0); - strops_copy(data.customer_id, data.customer.id, MAX_LEN_ID); strops_copy(data.customer.bank_account, data.payment_means.payer_bank_account, MAX_LEN_BANK); xml_get_str_x(root, data.customer.name, MAX_LEN_LONG_DESC, "cac:AccountingCustomerParty", "cac:Party", "cac:PartyName", "cbc:Name", 0); xml_get_str_x(root, data.customer.address.address1, MAX_LEN_ADDRESS, "cac:AccountingCustomerParty", "cac:Party", "cac:PostalAddress", "cbc:StreetName", 0); diff --git a/src/log.cpp b/src/log.cpp index 839ebbe..5180705 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -27,6 +27,12 @@ log* get_log() return &g_log; } +void log_clear() +{ + g_log.write_cursor = 0; + g_log.history_length = 0; +} + static void log_message(const char* fmt, ImVec4 color, va_list args) { vsnprintf(g_log.history[g_log.write_cursor], MAX_LEN_LOG_TXT, fmt, args); -- cgit v1.2.3-70-g09d2