diff options
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 43 |
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); |
