summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/administration.hpp1
-rw-r--r--include/file_templates.hpp1
-rw-r--r--src/administration.cpp1
-rw-r--r--src/administration_reader.cpp1
-rw-r--r--src/administration_writer.cpp10
-rw-r--r--src/countries/nl.cpp44
-rw-r--r--tests/administration_rw_tests.cpp52
-rw-r--r--tests/nl_tax_tests.cpp68
-rw-r--r--tests/peppol_write_tests.cpp10
-rw-r--r--tests/test_helper.cpp78
10 files changed, 136 insertions, 130 deletions
diff --git a/include/administration.hpp b/include/administration.hpp
index 40e58fe..56e0830 100644
--- a/include/administration.hpp
+++ b/include/administration.hpp
@@ -62,6 +62,7 @@ typedef struct
u32 tax_section_count;
char tax_sections[MAX_TAX_SECTION_PER_RATE][MAX_LEN_SHORT_DESC]; // Country specific tax section
tax_rate_type type;
+ char category_code[MAX_LEN_CODE];
} tax_rate;
typedef struct
diff --git a/include/file_templates.hpp b/include/file_templates.hpp
index c44e624..15637a7 100644
--- a/include/file_templates.hpp
+++ b/include/file_templates.hpp
@@ -38,6 +38,7 @@ namespace file_template {
" <Rate>{{TAXBRACKET_RATE}}</Rate>\n"
" <Type>{{TAXBRACKET_TYPE}}</Type>\n"
" <TaxSections>{{TAXBRACKET_SECTIONS}}</TaxSections>\n"
+ " <Category>{{TAXBRACKET_CATEGORY}}</Category>\n"
"</CountryTaxBracket>";
static const char* contact_save_template =
diff --git a/src/administration.cpp b/src/administration.cpp
index 7a10ac0..e77dfdb 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -184,7 +184,6 @@ void administration::create_default(char* save_file)
{
administration::create_empty(save_file);
create_default_cost_centers();
- //administration::create_debug_data();
}
// Other functions.
diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp
index 6a79b57..afe2d4c 100644
--- a/src/administration_reader.cpp
+++ b/src/administration_reader.cpp
@@ -370,6 +370,7 @@ bool administration_reader::import_tax_rate(char* buffer, size_t buffer_size)
tax_rate data = {0};
xml_get_str(root, data.internal_code, MAX_LEN_ID, "Id");
+ xml_get_str(root, data.category_code, MAX_LEN_CODE, "Category");
data.rate = xml_get_float(root, "Rate");
data.type = static_cast<tax_rate_type>(xml_get_s32(root, "Type"));
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index ebc0056..aae264b 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -427,10 +427,7 @@ bool administration_writer::save_invoice_blocking(invoice inv)
strops::replace_float(tax_entry_file_content, tax_entry_buf_length, "{{TAXABLE_AMOUNT}}", subtotal.net, 2);
strops::replace_float(tax_entry_file_content, tax_entry_buf_length, "{{TAX_AMOUNT}}", subtotal.tax, 2);
- char tax_category[10];
- tax_category[0] = 0; // TODO get tax category
-
- strops::replace(tax_entry_file_content, tax_entry_buf_length, "{{TAX_CATEGORY}}", tax_category);
+ strops::replace(tax_entry_file_content, tax_entry_buf_length, "{{TAX_CATEGORY}}", tax_rate_buffer[i].category_code);
strops::replace_float(tax_entry_file_content, tax_entry_buf_length, "{{TAX_PERCENT}}", tax_rate_buffer[i].rate, 2);
u32 content_len = (u32)strlen(tax_entry_file_content);
@@ -475,7 +472,7 @@ bool administration_writer::save_invoice_blocking(invoice inv)
strops::replace(billing_item_file_content, billing_item_buf_length, "{{LINE_ID}}", bi.id);
strops::replace(billing_item_file_content, billing_item_buf_length, "{{LINE_TAX_ID}}", bi.tax_internal_code);
strops::replace(billing_item_file_content, billing_item_buf_length, "{{ITEM_NAME}}", bi.description);
- strops::replace(billing_item_file_content, billing_item_buf_length, "{{LINE_TAX_CATEGORY}}", "S"); // TODO get from tax code
+ strops::replace(billing_item_file_content, billing_item_buf_length, "{{LINE_TAX_CATEGORY}}", rate.category_code);
strops::replace_float(billing_item_file_content, billing_item_buf_length, "{{LINE_TAX_PERCENT}}", rate.rate, 2);
strops::replace_float(billing_item_file_content, billing_item_buf_length, "{{LINE_AMOUNT}}", bi.net, 2); // line amount = net_per_item * items_count - discount
strops::replace_float(billing_item_file_content, billing_item_buf_length, "{{QUANTITY}}", bi.amount, 2);
@@ -670,7 +667,8 @@ bool administration_writer::save_tax_rate_blocking(tax_rate rate)
strops::replace(file_content, buf_length, "{{TAXBRACKET_INTERNAL_CODE}}", rate.internal_code);
strops::replace_float(file_content, buf_length, "{{TAXBRACKET_RATE}}", rate.rate, 2);
- strops::replace_int32(file_content, buf_length, "{{TAXBRACKET_TYPE}}", static_cast<int>(rate.type));
+ strops::replace_int32(file_content, buf_length, "{{TAXBRACKET_TYPE}}", static_cast<int>(rate.type));
+ strops::replace(file_content, buf_length, "{{TAXBRACKET_CATEGORY}}", rate.category_code);
char tax_sections_buffer[MAX_LEN_LONG_DESC];
char* write_cursor = tax_sections_buffer;
diff --git a/src/countries/nl.cpp b/src/countries/nl.cpp
index 22a4ee2..8fe3c7f 100644
--- a/src/countries/nl.cpp
+++ b/src/countries/nl.cpp
@@ -139,6 +139,31 @@ time_t _nl_get_invoice_date_to_use_for_tax_report(invoice* inv)
return inv->issued_at;
}
+static tax_rate _create_tax_rate(tax_rate_type type, char* internal_code, char* category_code, float rate, ...)
+{
+ tax_rate result;
+ result.type = type;
+ result.tax_section_count = 0;
+ result.rate = rate;
+ strops::copy(result.internal_code, internal_code, sizeof(result.internal_code));
+ strops::copy(result.category_code, category_code, sizeof(result.category_code));
+
+ va_list args;
+ va_start(args, rate);
+
+ char* tax_category = 0;
+ do
+ {
+ tax_category = va_arg(args, char*);
+ if (tax_category) strops::copy(result.tax_sections[result.tax_section_count++], tax_category, MAX_LEN_SHORT_DESC);
+ else break;
+ } while (1);
+
+ va_end(args);
+
+ return result;
+}
+
static tax_rate _create_tax_rate(tax_rate_type type, char* internal_code, float rate, ...)
{
tax_rate result;
@@ -146,6 +171,7 @@ static tax_rate _create_tax_rate(tax_rate_type type, char* internal_code, float
result.tax_section_count = 0;
result.rate = rate;
strops::copy(result.internal_code, internal_code, sizeof(result.internal_code));
+ strops::copy(result.category_code, "S", sizeof(result.category_code));
va_list args;
va_start(args, rate);
@@ -171,15 +197,15 @@ u32 _nl_get_available_tax_rates(tax_rate* buffer, u32 buffer_size)
#define ADD(_line) if (cc < buffer_size) buffer[cc++] = _line; else assert(0);
// Outgoing
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/21", 21.00, "NL/1a", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/9", 9.00, "NL/1b", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/0", 0.00, "NL/1e", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BTV", 0.00, "", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BVB", 0.00, "NL/1e", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PBEU", 0.00, "NL/3a", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PIEU", 0.00, "NL/3b", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DIEU", 0.00, "NL/3b", 0));
- ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/NBTW", 0.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/21", "S", 21.00, "NL/1a", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/9", "AA", 9.00, "NL/1b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/0", "Z", 0.00, "NL/1e", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BTV", "E", 0.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BVB", "AE", 0.00, "NL/1e", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PBEU", "G", 0.00, "NL/3a", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PIEU", "G", 0.00, "NL/3b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DIEU", "G", 0.00, "NL/3b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/NBTW", "O", 0.00, "", 0));
// Unieregeling diensten
ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/18/D", 18.00, "OBU", 0));
diff --git a/tests/administration_rw_tests.cpp b/tests/administration_rw_tests.cpp
index 36353f7..224a689 100644
--- a/tests/administration_rw_tests.cpp
+++ b/tests/administration_rw_tests.cpp
@@ -26,9 +26,11 @@ TEST _administration_rw_taxrate(void)
administration::create_empty(test_file_path);
{
pw = administration::tax_rate_create_empty();
- strops::copy(pw.country_code, "NL", sizeof(pw.country_code));
pw.rate = 10.0f;
+ pw.type = tax_rate_type::TAX_RATE_OUTGOING_INVOICE;
+ strops::copy(pw.internal_code, "NL/21", sizeof(pw.internal_code));
strops::copy(pw.category_code, "S", sizeof(pw.category_code));
+ strops::copy(pw.tax_sections[pw.tax_section_count++], "NL/1a", MAX_LEN_SHORT_DESC);
count = administration::tax_rate_count();
administration::tax_rate_add(pw);
@@ -39,7 +41,7 @@ TEST _administration_rw_taxrate(void)
administration_reader::open_existing(test_file_path);
{
ASSERT_EQ(count+1, administration::tax_rate_count());
- ASSERT_EQ(A_ERR_SUCCESS, administration::tax_rate_get_by_id(&pr, pw.id));
+ ASSERT_EQ(A_ERR_SUCCESS, administration::tax_rate_get_by_internal_code(&pr, pw.internal_code));
ASSERT_MEM_EQ(&pw, &pr, sizeof(tax_rate));
}
@@ -202,7 +204,7 @@ TEST _assert_invoices_are_equal(invoice inv, invoice invr)
ASSERT_EQ(b1->allowance, b2->allowance);
ASSERT_EQ(b1->net, b2->net);
ASSERT_STR_EQ(b1->currency, b2->currency);
- ASSERT_STR_EQ(b1->tax_rate_id, b2->tax_rate_id);
+ ASSERT_STR_EQ(b1->tax_internal_code, b2->tax_internal_code);
ASSERT_EQ(b1->tax, b2->tax);
ASSERT_EQ(b1->total, b2->total);
}
@@ -236,9 +238,10 @@ TEST _administration_rw_b2b_invoice(void)
invoice invr;
administration_writer::create();
-
+
administration::create_default(test_file_path);
{
+ add_default_nl_tax_rates();
contact pw1 = _create_nl_business();
contact pw2 = _create_nl_business();
@@ -251,10 +254,10 @@ TEST _administration_rw_b2b_invoice(void)
inv.delivered_at = inv.issued_at;
inv.expires_at = inv.issued_at + 1000;
- administration::billing_item_add_to_invoice(&inv, _create_bi3(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi4(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi5(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi6(&inv));
+ administration::billing_item_add_to_invoice(&inv, _create_bi3());
+ administration::billing_item_add_to_invoice(&inv, _create_bi4());
+ administration::billing_item_add_to_invoice(&inv, _create_bi5());
+ administration::billing_item_add_to_invoice(&inv, _create_bi6());
count = administration::invoice_count();
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
@@ -279,9 +282,10 @@ TEST _administration_rw_b2c_invoice(void)
invoice invr;
administration_writer::create();
-
+
administration::create_default(test_file_path);
{
+ add_default_nl_tax_rates();
contact pw1 = _create_nl_business();
contact pw2 = _create_nl_consumer();
@@ -294,10 +298,10 @@ TEST _administration_rw_b2c_invoice(void)
inv.delivered_at = inv.issued_at;
inv.expires_at = inv.issued_at + 1000;
- administration::billing_item_add_to_invoice(&inv, _create_bi3(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi4(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi5(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi6(&inv));
+ administration::billing_item_add_to_invoice(&inv, _create_bi3());
+ administration::billing_item_add_to_invoice(&inv, _create_bi4());
+ administration::billing_item_add_to_invoice(&inv, _create_bi5());
+ administration::billing_item_add_to_invoice(&inv, _create_bi6());
count = administration::invoice_count();
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
@@ -322,9 +326,10 @@ TEST _administration_rw_b2b2c_invoice(void)
invoice invr;
administration_writer::create();
-
+
administration::create_default(test_file_path);
{
+ add_default_nl_tax_rates();
inv = administration::invoice_create_empty();
inv.supplier = _create_nl_business();
inv.customer = _create_nl_business();
@@ -337,10 +342,10 @@ TEST _administration_rw_b2b2c_invoice(void)
inv.delivered_at = inv.issued_at;
inv.expires_at = inv.issued_at + 1000;
- administration::billing_item_add_to_invoice(&inv, _create_bi3(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi4(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi5(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi6(&inv));
+ administration::billing_item_add_to_invoice(&inv, _create_bi3());
+ administration::billing_item_add_to_invoice(&inv, _create_bi4());
+ administration::billing_item_add_to_invoice(&inv, _create_bi5());
+ administration::billing_item_add_to_invoice(&inv, _create_bi6());
count = administration::invoice_count();
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
@@ -365,9 +370,10 @@ TEST _administration_rw_b2c_2currency_invoice(void)
invoice invr;
administration_writer::create();
-
+
administration::create_default(test_file_path);
{
+ add_default_nl_tax_rates();
contact pw1 = _create_nl_business();
contact pw2 = _create_nl_consumer();
@@ -382,10 +388,10 @@ TEST _administration_rw_b2c_2currency_invoice(void)
administration::invoice_set_currency(&inv, "USD");
- administration::billing_item_add_to_invoice(&inv, _create_bi3(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi4(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi5(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi6(&inv));
+ administration::billing_item_add_to_invoice(&inv, _create_bi3());
+ administration::billing_item_add_to_invoice(&inv, _create_bi4());
+ administration::billing_item_add_to_invoice(&inv, _create_bi5());
+ administration::billing_item_add_to_invoice(&inv, _create_bi6());
// Finals are set manually for multi currency invoices.
inv.total = 20.0f;
diff --git a/tests/nl_tax_tests.cpp b/tests/nl_tax_tests.cpp
index 20d70c8..0fce093 100644
--- a/tests/nl_tax_tests.cpp
+++ b/tests/nl_tax_tests.cpp
@@ -4,22 +4,23 @@ TEST _nl_tax_1a(void)
{
administration::create_default(test_file_path);
administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
invoice inv = _create_nl_b2b_inv_outgoing();
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21.00"));
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/21.00"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/21"));
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
tax_statement statement;
administration::create_tax_statement(&statement);
ASSERT_EQ(statement.report_count, 1);
- tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1a");
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/1a");
ASSERT_EQ(tl->total_net, 50.0f);
ASSERT_EQ(tl->total_tax, 50.0f * 0.21f);
- tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
ASSERT_EQ(tl2->total_tax, 50.0f * 0.21f);
PASS();
@@ -29,78 +30,49 @@ TEST _nl_tax_1b(void)
{
administration::create_default(test_file_path);
administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
invoice inv = _create_nl_b2b_inv_outgoing();
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 10.0f, "NL/9.00"));
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 15.0f, "NL/9.00"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 10.0f, "NL/9"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 15.0f, "NL/9"));
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
tax_statement statement;
administration::create_tax_statement(&statement);
ASSERT_EQ(statement.report_count, 1);
- tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1b");
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/1b");
ASSERT_EQ(tl->total_net, 25.0f);
ASSERT_EQ(tl->total_tax, 25.0f * 0.09f);
- tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
ASSERT_EQ(tl2->total_tax, 25.0f * 0.09f);
PASS();
}
-TEST _nl_tax_1c(void)
-{
- administration::create_default(test_file_path);
- administration::company_info_set(_create_nl_business());
-
- tax_rate new_tax_rate = administration::tax_rate_create_empty();
- new_tax_rate.rate = 5.0f;
- strops::copy(new_tax_rate.category_code, "S", MAX_LEN_CODE);
- strops::copy(new_tax_rate.country_code, "NL", MAX_LEN_COUNTRY_CODE);
- administration::tax_rate_add(new_tax_rate);
-
- invoice inv = _create_nl_b2b_inv_outgoing();
-
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/5.00"));
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 15.0f, "NL/5.00"));
- ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
-
- tax_statement statement;
- administration::create_tax_statement(&statement);
- ASSERT_EQ(statement.report_count, 1);
-
- tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1c");
- ASSERT_EQ(tl->total_net, 45.0f);
- ASSERT_EQ(tl->total_tax, 45.0f * 0.05f);
-
- tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
- ASSERT_EQ(tl2->total_tax, 45.0f * 0.05f);
-
- PASS();
-}
-
TEST _nl_tax_1e(void)
{
administration::create_default(test_file_path);
administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
invoice inv = _create_nl_b2b_inv_outgoing();
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "00/E"));
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "00/E"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/0"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 50.0f, "NL/0"));
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
tax_statement statement;
administration::create_tax_statement(&statement);
ASSERT_EQ(statement.report_count, 1);
- tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1e");
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/1e");
ASSERT_EQ(tl->total_net, 80.0f);
ASSERT_EQ(tl->total_tax, 0.0f);
- tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
ASSERT_EQ(tl2->total_tax, 0.0f);
PASS();
@@ -110,12 +82,13 @@ TEST _nl_tax_2currency(void)
{
administration::create_default(test_file_path);
administration::company_info_set(_create_nl_business());
+ add_default_nl_tax_rates();
invoice inv = _create_nl_b2b_inv_outgoing();
administration::invoice_set_currency(&inv, "USD");
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21.00"));
- administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/21.00"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 20.0f, "NL/21"));
+ administration::billing_item_add_to_invoice(&inv, _create_bi(1, 30.0f, "NL/21"));
float eur_usd_exchange_rate = 1.2f;
@@ -130,11 +103,11 @@ TEST _nl_tax_2currency(void)
administration::create_tax_statement(&statement);
ASSERT_EQ(statement.report_count, 1);
- tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "1a");
+ tax_line* tl = administration::get_tax_line_from_report(&statement.reports[0], "NL/1a");
GREATEST_ASSERT_FEQ(tl->total_net, inv.net);
GREATEST_ASSERT_FEQ(tl->total_tax, inv.tax);
- tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "5a");
+ tax_line* tl2 = administration::get_tax_line_from_report(&statement.reports[0], "NL/5a");
GREATEST_ASSERT_FEQ(tl2->total_tax, inv.tax);
PASS();
@@ -143,7 +116,6 @@ TEST _nl_tax_2currency(void)
SUITE(nl_tax_statement) {
RUN_TEST(_nl_tax_1a);
RUN_TEST(_nl_tax_1b);
- RUN_TEST(_nl_tax_1c);
RUN_TEST(_nl_tax_1e);
RUN_TEST(_nl_tax_2currency);
} \ No newline at end of file
diff --git a/tests/peppol_write_tests.cpp b/tests/peppol_write_tests.cpp
index 7caa102..d0bdee5 100644
--- a/tests/peppol_write_tests.cpp
+++ b/tests/peppol_write_tests.cpp
@@ -6,6 +6,7 @@ TEST _peppol_write_nl2nl_b2b(void)
{
administration_writer::create();
administration::create_default(test_file_path);
+ add_default_nl_tax_rates();
invoice inv = administration::invoice_create_empty();
inv.supplier = _create_nl_business();
@@ -16,8 +17,8 @@ TEST _peppol_write_nl2nl_b2b(void)
inv.delivered_at = inv.issued_at;
inv.expires_at = inv.issued_at + 1000;
- administration::billing_item_add_to_invoice(&inv, _create_bi1(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi2(&inv));
+ administration::billing_item_add_to_invoice(&inv, _create_bi1());
+ administration::billing_item_add_to_invoice(&inv, _create_bi2());
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
if (_test_peppol_file(inv.id)) { PASS(); } else { FAIL(); }
@@ -27,6 +28,7 @@ TEST _peppol_write_nl2nl_b2c(void)
{
administration_writer::create();
administration::create_default(test_file_path);
+ add_default_nl_tax_rates();
invoice inv = administration::invoice_create_empty();
inv.supplier = _create_nl_business();
@@ -37,8 +39,8 @@ TEST _peppol_write_nl2nl_b2c(void)
inv.delivered_at = inv.issued_at;
inv.expires_at = inv.issued_at + 1000;
- administration::billing_item_add_to_invoice(&inv, _create_bi1(&inv));
- administration::billing_item_add_to_invoice(&inv, _create_bi2(&inv));
+ administration::billing_item_add_to_invoice(&inv, _create_bi1());
+ administration::billing_item_add_to_invoice(&inv, _create_bi2());
ASSERT_EQ(administration::invoice_add(&inv), A_ERR_SUCCESS);
if (_test_peppol_file(inv.id)) { PASS(); } else { FAIL(); }
diff --git a/tests/test_helper.cpp b/tests/test_helper.cpp
index 85d228a..fc09fd6 100644
--- a/tests/test_helper.cpp
+++ b/tests/test_helper.cpp
@@ -5,6 +5,7 @@
#include "memops.hpp"
#include "strops.hpp"
+#include "countries.hpp"
#include "administration.hpp"
#include "administration_reader.hpp"
#include "administration_writer.hpp"
@@ -48,7 +49,7 @@ static contact _create_nl_consumer()
}
-static billing_item _create_bi1(invoice *inv)
+static billing_item _create_bi1()
{
billing_item item = administration::billing_item_create_empty();
item.amount = 1;
@@ -58,16 +59,14 @@ static billing_item _create_bi1(invoice *inv)
item.discount = 2.0f;
item.discount_is_percentage = 0;
- tax_rate buffer[20];
- char* _country_codes[2] = {inv->supplier.address.country_code, inv->customer.address.country_code};
- u32 tax_rate_count = administration::tax_rate_get_by_country(buffer, 2, _country_codes);
- tax_rate rand_rate = buffer[tax_rate_count-1];
- strops::copy(item.tax_internal_code, rand_rate.id, MAX_LEN_ID);
+ tax_rate rate;
+ administration::tax_rate_get_by_internal_code(&rate, "NL/21");
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
-static billing_item _create_bi2(invoice *inv)
+static billing_item _create_bi2()
{
billing_item item = administration::billing_item_create_empty();
item.amount = 2;
@@ -77,16 +76,14 @@ static billing_item _create_bi2(invoice *inv)
item.discount = 5.0f;
item.discount_is_percentage = 1;
- tax_rate buffer[20];
- char* _country_codes[2] = {inv->supplier.address.country_code, inv->customer.address.country_code};
- u32 tax_rate_count = administration::tax_rate_get_by_country(buffer, 2, _country_codes);
- tax_rate rand_rate = buffer[tax_rate_count-1];
- strops::copy(item.tax_internal_code, rand_rate.id, MAX_LEN_ID);
+ tax_rate rate;
+ administration::tax_rate_get_by_internal_code(&rate, "NL/21");
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
-static billing_item _create_bi3(invoice *inv)
+static billing_item _create_bi3()
{
billing_item item = administration::billing_item_create_empty();
item.amount = 1;
@@ -96,16 +93,14 @@ static billing_item _create_bi3(invoice *inv)
item.discount = 2.0f;
item.discount_is_percentage = 0;
- tax_rate buffer[20];
- char* _country_codes[2] = {inv->supplier.address.country_code, inv->customer.address.country_code};
- u32 tax_rate_count = administration::tax_rate_get_by_country(buffer, 2, _country_codes);
- tax_rate rand_rate = buffer[tax_rate_count-1];
- strops::copy(item.tax_internal_code, rand_rate.id, MAX_LEN_ID);
+ tax_rate rate;
+ administration::tax_rate_get_by_internal_code(&rate, "NL/21");
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
-static billing_item _create_bi4(invoice *inv)
+static billing_item _create_bi4()
{
billing_item item = administration::billing_item_create_empty();
item.amount = 3;
@@ -115,16 +110,14 @@ static billing_item _create_bi4(invoice *inv)
item.discount = 0.0f;
item.discount_is_percentage = 0;
- tax_rate buffer[20];
- char* _country_codes[2] = {inv->supplier.address.country_code, inv->customer.address.country_code};
- u32 tax_rate_count = administration::tax_rate_get_by_country(buffer, 2, _country_codes);
- tax_rate rand_rate = buffer[tax_rate_count-1];
- strops::copy(item.tax_internal_code, rand_rate.id, MAX_LEN_ID);
+ tax_rate rate;
+ administration::tax_rate_get_by_internal_code(&rate, "NL/21");
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
-static billing_item _create_bi5(invoice *inv)
+static billing_item _create_bi5()
{
billing_item item = administration::billing_item_create_empty();
item.amount = 5;
@@ -134,16 +127,14 @@ static billing_item _create_bi5(invoice *inv)
item.discount = 5.0f;
item.discount_is_percentage = 1;
- tax_rate buffer[20];
- char* _country_codes[2] = {inv->supplier.address.country_code, inv->customer.address.country_code};
- u32 tax_rate_count = administration::tax_rate_get_by_country(buffer, 2, _country_codes);
- tax_rate rand_rate = buffer[tax_rate_count-1];
- strops::copy(item.tax_internal_code, rand_rate.id, MAX_LEN_ID);
+ tax_rate rate;
+ administration::tax_rate_get_by_internal_code(&rate, "NL/21");
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
-static billing_item _create_bi6(invoice *inv)
+static billing_item _create_bi6()
{
billing_item item = administration::billing_item_create_empty();
item.amount = 10;
@@ -153,11 +144,9 @@ static billing_item _create_bi6(invoice *inv)
item.discount = 0.0f;
item.discount_is_percentage = 0;
- tax_rate buffer[20];
- char* _country_codes[2] = {inv->supplier.address.country_code, inv->customer.address.country_code};
- u32 tax_rate_count = administration::tax_rate_get_by_country(buffer, 2, _country_codes);
- tax_rate rand_rate = buffer[tax_rate_count-1];
- strops::copy(item.tax_internal_code, rand_rate.id, MAX_LEN_ID);
+ tax_rate rate;
+ administration::tax_rate_get_by_internal_code(&rate, "NL/21");
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
@@ -172,8 +161,8 @@ static billing_item _create_bi(float amount, float npi, char* taxrate)
item.discount = 0.0f;
item.discount_is_percentage = 0;
tax_rate rate;
- //administration::tax_rate_get_by_shorthandle(&rate, taxrate);
- strops::copy(item.tax_internal_code, rate.id, MAX_LEN_ID);
+ administration::tax_rate_get_by_internal_code(&rate, taxrate);
+ strops::copy(item.tax_internal_code, rate.internal_code, MAX_LEN_SHORT_DESC);
return item;
}
@@ -243,4 +232,15 @@ static bool _test_peppol_file(char* id)
}
return result;
-} \ No newline at end of file
+}
+
+static void add_default_nl_tax_rates()
+{
+ tax_rate* tr_buffer = (tax_rate*)memops::alloc(sizeof(tax_rate) * 500);
+ country::get_available_tax_rates("NL", tr_buffer, 500);
+
+ for (u32 i = 0; i < 10; i++) {
+ administration::tax_rate_add(tr_buffer[i]);
+ }
+ memops::unalloc(tr_buffer);
+}