summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp17
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);