diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/administration.cpp | 12 | ||||
| -rw-r--r-- | src/administration_reader.cpp | 47 | ||||
| -rw-r--r-- | src/administration_writer.cpp | 2 |
3 files changed, 59 insertions, 2 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index 0b1a0db..182dabd 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -1933,6 +1933,18 @@ billing_item administration::billing_item_create_empty() // Activity functions. // =================== +a_err administration::activity_import(activity ac) +{ + activity* new_activity = (activity*)memops::alloc(sizeof(activity)); + memops::copy(new_activity, &ac, sizeof(activity)); + + if (!list_append(&g_administration.activities, new_activity)) { + return A_ERR_GENERIC; + } + + return A_ERR_SUCCESS; +} + a_err administration::activity_add(char* user, char* ref_id, char* message) { activity* new_activity = (activity*)memops::alloc(sizeof(activity)); diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp index 6c7234d..2c94028 100644 --- a/src/administration_reader.cpp +++ b/src/administration_reader.cpp @@ -74,6 +74,10 @@ bool administration_reader::open_existing(char* file_path) { administration_reader::import_administration_info(buffer, (size_t)size); } + else if (strops::equals(name, ACTIVITY_FILE)) + { + administration_reader::import_activities(buffer, (size_t)size); + } else if (strops::is_prefixed("T/", name)) { administration_reader::import_tax_rate(buffer, (size_t)size); @@ -271,7 +275,7 @@ bool administration_reader::import_invoice(zip_t* zip, char* buffer, size_t buff 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) { @@ -470,4 +474,45 @@ bool administration_reader::import_administration_info(char* buffer, size_t buff xml_document_free(document, false); return true; +} + +bool administration_reader::import_activities(char* buffer, size_t buffer_size) +{ + STOPWATCH_START; + + xml_document* document = xml_parse_document((uint8_t *)buffer, buffer_size); + if (!document) return false; + + struct xml_node* root = xml_document_root(document); + if (!root) { + xml_document_free(document, false); + return false; + } + + size_t child_count = xml_node_children(root); + for (size_t x = 0; x < child_count; x++) + { + xml_node* child = xml_node_child(root, x); + + char* child_name = (char*)xml_easy_name(child); + if (strops::equals(child_name, "Activity")) + { + activity ac = {0}; + time_t timestamp; + + ac.timestamp = xml_get_s64(child, "Timestamp"); + xml_get_str(child, ac.user_name, MAX_LEN_SHORT_DESC, "User"); + xml_get_str(child, ac.ref_id, MAX_LEN_ID, "RefId"); + xml_get_str(child, ac.message, MAX_LEN_LONG_DESC, "Message"); + + administration::activity_import(ac); + } + + memops::unalloc(child_name); + } + + logger::info("Loaded %d activities in %.3fms.", child_count, STOPWATCH_TIME); + + xml_document_free(document, false); + return true; }
\ No newline at end of file diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp index 8cd1dcf..da9ee77 100644 --- a/src/administration_writer.cpp +++ b/src/administration_writer.cpp @@ -967,7 +967,7 @@ bool administration_writer::save_activities_blocking() int buf_length = 0; char* file_content = copy_template(file_template::activity_template, &buf_length); - strops::replace_int32(file_content, buf_length, "{{TIMESTAMP}}", ac.timestamp); + strops::replace_int64(file_content, buf_length, "{{TIMESTAMP}}", ac.timestamp); strops::replace(file_content, buf_length, "{{USERNAME}}", ac.user_name); strops::replace(file_content, buf_length, "{{REF_ID}}", ac.ref_id); strops::replace(file_content, buf_length, "{{MESSAGE}}", ac.message); |
