summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/administration.cpp75
-rw-r--r--src/administration_writer.cpp12
-rw-r--r--src/main.cpp2
-rw-r--r--src/ui/ui_settings.cpp4
4 files changed, 53 insertions, 40 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index 2a18747..c5f863b 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -443,29 +443,11 @@ void administration_set_project_changed_event_callback(project_changed_event ev)
// Setup functions.
// =======================
-void administration_create_from_file(char* save_file)
-{
- strops_copy(g_administration.path, save_file, sizeof(g_administration.path));
- strops_copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
-}
-
-void administration_create_empty(char* save_file)
-{
- g_administration.next_id = 2;
- g_administration.next_sequence_number = 1;
-
- strops_copy(g_administration.path, save_file, sizeof(g_administration.path));
- strops_copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
- administration_company_info_set(administration_contact_create_empty());
-
- administration_create_default_tax_brackets();
- administration_create_default_cost_centers();
-
- //administration_create_debug_data();
-}
+static bool is_initialized = false;
void administration_create()
{
+ is_initialized = true;
STOPWATCH_START;
list_init(&g_administration.invoices);
@@ -491,6 +473,7 @@ static void administration_destroy_list(list_t *list)
void administration_destroy()
{
+ is_initialized = false;
administration_destroy_list(&g_administration.invoices);
administration_destroy_list(&g_administration.contacts);
administration_destroy_list(&g_administration.projects);
@@ -498,6 +481,33 @@ void administration_destroy()
administration_destroy_list(&g_administration.cost_centers);
}
+void administration_create_from_file(char* save_file)
+{
+ if (is_initialized) administration_destroy();
+ administration_create();
+
+ strops_copy(g_administration.path, save_file, sizeof(g_administration.path));
+ strops_copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
+}
+
+void administration_create_empty(char* save_file)
+{
+ if (is_initialized) administration_destroy();
+ administration_create();
+
+ g_administration.next_id = 2;
+ g_administration.next_sequence_number = 1;
+
+ strops_copy(g_administration.path, save_file, sizeof(g_administration.path));
+ strops_copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
+ administration_company_info_set(administration_contact_create_empty());
+
+ administration_create_default_tax_brackets();
+ administration_create_default_cost_centers();
+
+ //administration_create_debug_data();
+}
+
// Other functions.
// =======================
bool administration_has_save_path()
@@ -1181,6 +1191,16 @@ project administration_project_create_empty()
// Tax bracket functions.
// =======================
+
+country_tax_bracket administration_tax_bracket_create_empty()
+{
+ country_tax_bracket result;
+ memset(&result, 0, sizeof(country_tax_bracket));
+ snprintf(result.id, sizeof(result.id), "T/%d", administration_create_id());
+ snprintf(result.category_code, sizeof(result.category_code), "S"); // S = standard rate.
+ return result;
+}
+
static bool administration_get_tax_bracket_by_id(country_tax_bracket* buffer, char* id)
{
assert(buffer);
@@ -1201,7 +1221,7 @@ static bool administration_get_tax_bracket_by_id(country_tax_bracket* buffer, ch
}
// TODO refactor
-bool administration_tax_bracket_get_by_id(char* id, country_tax_bracket* buffer)
+bool administration_tax_bracket_get_by_id(country_tax_bracket* buffer, char* id)
{
return administration_get_tax_bracket_by_id(buffer, id);
}
@@ -1227,7 +1247,6 @@ bool administration_tax_bracket_add(country_tax_bracket data)
{
country_tax_bracket* tb = (country_tax_bracket*)malloc(sizeof(country_tax_bracket));
memcpy((void*)tb, (void*)&data, sizeof(country_tax_bracket));
- snprintf(tb->id, sizeof(tb->id), "T/%d", administration_create_id());
list_append(&g_administration.tax_brackets, tb);
@@ -1303,6 +1322,14 @@ u32 administration_cost_center_count()
return list_size(&g_administration.cost_centers);
}
+cost_center administration_cost_center_create_empty()
+{
+ cost_center cc;
+ memset(&cc, 0, sizeof(cost_center));
+ snprintf(cc.id, sizeof(cc.id), "E/%d", administration_create_id());
+ return cc;
+}
+
bool administration_cost_center_get_by_id(cost_center* buffer, char* id)
{
assert(buffer);
@@ -1384,9 +1411,7 @@ bool administration_cost_center_add(cost_center data)
if (found) return false;
cost_center* tb = (cost_center*)malloc(sizeof(cost_center));
- snprintf(tb->id, sizeof(tb->id), "E/%d", administration_create_id());
- memcpy(tb->description, data.description, sizeof(tb->description));
- memcpy(tb->code, data.code, sizeof(tb->code));
+ memcpy((void*)tb, (void*)&data, sizeof(cost_center));
list_append(&g_administration.cost_centers, tb);
g_administration.next_id++;
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index 779a5f1..4d4f5fe 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -6,7 +6,6 @@
#include <threads.h>
#include "log.hpp"
-#include "ui.hpp"
#include "strops.hpp"
#include "administration_reader.hpp"
#include "administration_writer.hpp"
@@ -15,12 +14,6 @@
mtx_t _save_file_mutex;
-bool administration_writer_save_project_blocking(project project);
-bool administration_writer_save_cost_center_blocking(cost_center cost);
-bool administration_writer_save_tax_bracket_blocking(country_tax_bracket bracket);
-bool administration_writer_save_contact_blocking(contact c);
-bool administration_writer_save_invoice_blocking(invoice inv);
-
static void on_administration_data_changed()
{
administration_writer_save_all_administration_info_blocking();
@@ -370,7 +363,7 @@ bool administration_writer_save_invoice_blocking(invoice inv)
billing_item bi = billing_item_buffer[i];
country_tax_bracket bracket;
- administration_tax_bracket_get_by_id(bi.tax_bracket_id, &bracket);
+ administration_tax_bracket_get_by_id(&bracket, bi.tax_bracket_id);
strops_replace(billing_item_file_content, billing_item_buf_length, "{{CURRENCY}}", inv.currency);
strops_replace(billing_item_file_content, billing_item_buf_length, "{{LINE_ID}}", bi.id);
@@ -698,14 +691,11 @@ static int administration_writer_write_all_t(void *arg) {
mtx_unlock(&_save_file_mutex);
- ui_set_status_loading(false);
return result;
}
bool administration_writer_save_all_async()
{
- ui_set_status_loading(true);
-
thrd_t thr;
if (thrd_create(&thr, administration_writer_write_all_t, 0) != thrd_success) {
return false;
diff --git a/src/main.cpp b/src/main.cpp
index d579a19..ba7a2e5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -91,7 +91,6 @@ int main()
timer_lib_initialize();
administration_writer_create();
- administration_create();
// Main loop
bool done = false;
@@ -147,7 +146,6 @@ int main()
g_SwapChainOccluded = (hr == DXGI_STATUS_OCCLUDED);
}
- administration_destroy();
administration_writer_destroy();
timer_lib_shutdown();
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index dfe6b96..ae251d9 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -98,7 +98,7 @@ static void ui_draw_vat_rates()
if (ImGui::Button(btn_name, ImVec2(20,20))) {
is_adding_item = true;
is_editing_item = false;
- memset(&new_tax_bracket, 0, sizeof(new_tax_bracket));
+ new_tax_bracket = administration_tax_bracket_create_empty();
strops_copy(new_tax_bracket.country_code, c.country_code, 3);
}
ImGui::PopStyleVar();
@@ -308,9 +308,9 @@ static void ui_draw_cost_centers()
// If not adding a new item already, show create button at bottom of list.
if (!is_adding_item && ImGui::Button(localize("form.create")))
{
+ new_cost_center = administration_cost_center_create_empty();
is_adding_item = true;
is_editing_item = false;
- memset(&new_cost_center, 0, sizeof(new_cost_center));
}
}