From 83a9739b3aff75cf767db687bd531fa5283e0e72 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Sat, 3 Jan 2026 11:03:50 +0100 Subject: move invoice status to invoice extras struct. implement r/w --- src/administration_reader.cpp | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'src/administration_reader.cpp') diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp index d790b91..3706e72 100644 --- a/src/administration_reader.cpp +++ b/src/administration_reader.cpp @@ -92,7 +92,7 @@ bool administration_reader::open_existing(char* file_path) } else if (strops::is_prefixed("I/", name)) { - administration_reader::import_invoice(buffer, (size_t)size); + administration_reader::import_invoice(zip, buffer, (size_t)size); } memops::unalloc(buffer); } @@ -123,7 +123,7 @@ bool administration_reader::read_invoice_from_xml(invoice* result, char* buffer, xml_get_str(root, data.id, MAX_LEN_ID, "cbc:ID"); xml_get_str_x(root, data.sequential_number, MAX_LEN_ID, "cac:OrderReference", "cbc:ID", 0); xml_get_str(root, data.currency, MAX_LEN_CURRENCY, "cbc:DocumentCurrencyCode"); - data.status = (invoice_status)xml_get_s32_x(root, "cac:DespatchDocumentReference", "cbc:ID", 0); + //data.status = (invoice_status)xml_get_s32_x(root, "cac:DespatchDocumentReference", "cbc:ID", 0); // Dates data.issued_at = xml_get_date_x(root, "cbc:IssueDate", 0); @@ -232,12 +232,46 @@ bool administration_reader::read_invoice_from_xml(invoice* result, char* buffer, return true; } -bool administration_reader::import_invoice(char* buffer, size_t buffer_size) +static bool _import_invoice_extras(zip_t* zip, invoice* data) +{ + STOPWATCH_START; + + char final_path[50]; + strops::format(final_path, 50, "EXTRAS/%s.xml", data->sequential_number); + if (zip_entry_open(zip, final_path) < 0) { + logger::error("ERROR loading invoice extras for '%s', file '%s' does not exist.", data->sequential_number, final_path); + return false; + } + + // Load into buffer. + char* buffer; + unsigned long long size; + zip_entry_read(zip, (void**)&buffer, (size_t*)&size); + + xml_document* document = xml_parse_document((uint8_t *)buffer, size); + if (!document) return false; + + struct xml_node* root = xml_document_root(document); + if (!root) { + xml_document_free(document, false); + return false; + } + + data->extras.status = (invoice_status)xml_get_s32_x(root, "Status", 0); + + logger::info("Loaded invoice extras '%s' in %.3fms.", final_path, STOPWATCH_TIME); + + return true; +} + +bool administration_reader::import_invoice(zip_t* zip, char* buffer, size_t buffer_size) { STOPWATCH_START; invoice data; if (!administration_reader::read_invoice_from_xml(&data, buffer, buffer_size)) return false; + if (!_import_invoice_extras(zip, &data)) return false; + printf("%d\n", data.extras.status); a_err result = administration::invoice_import(&data); if (result == A_ERR_SUCCESS) { -- cgit v1.2.3-70-g09d2