summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-09-27 09:47:26 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-09-27 09:47:26 +0200
commit58edcf619ee9d589dd7b54b8a9cbd4271740c13b (patch)
treefccd23132f96eb3f5da3b530b78ad826f534687f /src/administration.cpp
parentbd3f2b84742067d0b9049b9f42f2266f94dbb0f9 (diff)
fix shipping info r/w issue. fix date r/w timezone issue.
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index b6dfcbb..af276f3 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -871,6 +871,18 @@ int administration_contact_get_autocompletions(contact* buffer, int buf_size, ch
return write_cursor;
}
+a_err administration_addressee_is_valid(delivery_info data)
+{
+ a_err result = A_ERR_SUCCESS;
+ if (strlen(data.name) == 0) result |= A_ERR_MISSING_NAME;
+ if (strlen(data.address.city) == 0) result |= A_ERR_MISSING_CITY;
+ if (strlen(data.address.postal) == 0) result |= A_ERR_MISSING_POSTAL;
+ if (strlen(data.address.address1) == 0) result |= A_ERR_MISSING_ADDRESS1;
+ if (strlen(data.address.country_code) == 0) result |= A_ERR_MISSING_COUNTRYCODE;
+
+ return result;
+}
+
a_err administration_contact_is_valid(contact data)
{
a_err result = A_ERR_SUCCESS;
@@ -879,7 +891,6 @@ a_err administration_contact_is_valid(contact data)
if (strlen(data.address.city) == 0) result |= A_ERR_MISSING_CITY;
if (strlen(data.address.postal) == 0) result |= A_ERR_MISSING_POSTAL;
if (strlen(data.address.address1) == 0) result |= A_ERR_MISSING_ADDRESS1;
- //if (strlen(data.address.address2) == 0) return 0;
if (strlen(data.address.country_code) == 0) result |= A_ERR_MISSING_COUNTRYCODE;
if (data.type == contact_type::CONTACT_BUSINESS)
@@ -1080,6 +1091,7 @@ project administration_project_create_empty()
memset(&result, 0, sizeof(project));
result.state = project_state::PROJECT_RUNNING;
result.start_date = time(NULL);
+ result.start_date -= (result.start_date % 86400);
result.end_date = 0;
snprintf(result.id, sizeof(result.id), "P/%d", administration_create_id());
return result;
@@ -1461,7 +1473,7 @@ a_err administration_invoice_is_valid(invoice* invoice)
{
a_err result = A_ERR_SUCCESS;
if (list_size(&invoice->billing_items) == 0) result |= A_ERR_MISSING_BILLING_ITEMS;
- if (invoice->is_triangulation && administration_contact_is_valid(invoice->addressee) != A_ERR_SUCCESS) result |= A_ERR_INVALID_ADDRESSEE;
+ if (invoice->is_triangulation && administration_addressee_is_valid(invoice->addressee) != A_ERR_SUCCESS) result |= A_ERR_INVALID_ADDRESSEE;
if (administration_contact_is_valid(invoice->customer) != A_ERR_SUCCESS) result |= A_ERR_INVALID_CUSTOMER;
if (administration_contact_is_valid(invoice->supplier) != A_ERR_SUCCESS) result |= A_ERR_INVALID_SUPPLIER;
@@ -1500,16 +1512,24 @@ a_err administration_invoice_remove(invoice* inv)
return A_ERR_NOT_FOUND;
}
+static void _administration_invoice_set_addressee(invoice* inv, contact contact)
+{
+ memcpy(&inv->addressee.name, &contact.name, sizeof(inv->addressee.name));
+ memcpy(&inv->addressee.address.address1, &contact.address.address1, sizeof(inv->addressee.address.address1));
+ memcpy(&inv->addressee.address.address2, &contact.address.address2, sizeof(inv->addressee.address.address2));
+ memcpy(&inv->addressee.address.city, &contact.address.city, sizeof(inv->addressee.address.city));
+ memcpy(&inv->addressee.address.postal, &contact.address.postal, sizeof(inv->addressee.address.postal));
+ memcpy(&inv->addressee.address.region, &contact.address.region, sizeof(inv->addressee.address.region));
+ memcpy(&inv->addressee.address.country_code, &contact.address.country_code, sizeof(inv->addressee.address.country_code));
+}
+
a_err administration_invoice_update(invoice* inv)
{
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));
- }
+ if (!inv->is_triangulation) _administration_invoice_set_addressee(inv, inv->customer);
list_iterator_start(&g_administration.invoices);
while (list_iterator_hasnext(&g_administration.invoices)) {
@@ -1535,10 +1555,7 @@ a_err administration_invoice_import(invoice* inv)
a_err result = administration_invoice_is_valid(inv);
if (result != A_ERR_SUCCESS) return result;
- if (!inv->is_triangulation)
- {
- memcpy(&inv->addressee, &inv->customer, sizeof(contact));
- }
+ inv->is_triangulation = !(memcmp(&inv->addressee.address, &inv->customer.address, sizeof(address)) == 0);
inv->issued_at -= (inv->issued_at % 86400);
inv->delivered_at -= (inv->delivered_at % 86400);
@@ -1563,11 +1580,7 @@ a_err administration_invoice_add(invoice* inv)
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));
- }
+ if (!inv->is_triangulation) _administration_invoice_set_addressee(inv, inv->customer);
inv->issued_at -= (inv->issued_at % 86400);
inv->delivered_at -= (inv->delivered_at % 86400);