summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-09-26 18:41:40 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-09-26 18:41:40 +0200
commitbd3f2b84742067d0b9049b9f42f2266f94dbb0f9 (patch)
tree6cec399009a035fbdf0204a10d43a7a81cea8c93 /src/administration.cpp
parent52effd42917e2dc8bc6b900df145bc13107e1478 (diff)
refactor customer_id and supplier_id out of invoice
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp84
1 files changed, 10 insertions, 74 deletions
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);