diff options
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 75 |
1 files changed, 50 insertions, 25 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++; |
