summaryrefslogtreecommitdiff
path: root/src/administration_reader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/administration_reader.cpp')
-rw-r--r--src/administration_reader.cpp40
1 files changed, 37 insertions, 3 deletions
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) {