diff options
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index 09bb560..690fcd9 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -1633,6 +1633,13 @@ a_err administration_invoice_is_valid(invoice* invoice) 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; + list_iterator_start(&invoice->billing_items); + while (list_iterator_hasnext(&invoice->billing_items)) { + billing_item* c = (billing_item *)list_iterator_next(&invoice->billing_items); + if (administration_billing_item_is_valid(*c) != A_ERR_SUCCESS) result |= A_ERR_INVALID_BILLING_ITEM; + } + list_iterator_stop(&invoice->billing_items); + return result; } @@ -2049,6 +2056,15 @@ a_err administration_billing_item_update_in_invoice(invoice* invoice, billing_it return A_ERR_NOT_FOUND; } +a_err administration_billing_item_is_valid(billing_item item) +{ + a_err result = A_ERR_SUCCESS; + if (strlen(item.description) == 0) result |= A_ERR_MISSING_DESCRIPTION; + if (strlen(item.tax_rate_id) == 0) result |= A_ERR_MISSING_TAX_RATE; + + return result; +} + a_err administration_billing_item_add_to_invoice(invoice* invoice, billing_item item) { if (administration_billing_item_count(invoice) >= MAX_BILLING_ITEMS) return A_ERR_MAX_ITEMS_REACHED; @@ -2058,7 +2074,6 @@ a_err administration_billing_item_add_to_invoice(invoice* invoice, billing_item memcpy(tb, &item, sizeof(billing_item)); snprintf(tb->id, sizeof(tb->id), "B/%d", administration_create_id()); - strops_copy(tb->invoice_id, invoice->id, sizeof(tb->invoice_id)); strops_copy(tb->currency, invoice->currency, MAX_LEN_CURRENCY); // Set billing item currency to invoice currency. administration_recalculate_billing_item_totals(tb); |
