summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-08-10 15:25:22 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-08-10 15:25:22 +0200
commita88456ec309edb6778cf50c139cab6ab8e99e963 (patch)
tree10b86e0964bee9a6670b2a064fd9863290eb970b /src/administration.cpp
parent0327e06b59aa20dbfec137b2287b950b5cb84960 (diff)
move id generation out of UI and into administration
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp44
1 files changed, 38 insertions, 6 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index c6ece04..edbc933 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -9,6 +9,11 @@
administration g_administration;
+static s32 administration_create_id()
+{
+ return g_administration.next_id;
+}
+
#define ADD_BRACKET(_country, _rate, _description)\
{\
country_tax_bracket* tb = (country_tax_bracket*)malloc(sizeof(country_tax_bracket));\
@@ -27,7 +32,6 @@ static int compare_tax_countries(const void *a, const void *b)
return strcmp(objA->country_code, objB->country_code);
}
-
static void administration_create_default_tax_brackets()
{
// General brackets shared between countries.
@@ -197,6 +201,9 @@ static void administration_create_default_cost_centers()
void administration_create()
{
+ g_administration.next_id = 1;
+ g_administration.next_sequence_number = 1;
+
list_init(&g_administration.contacts);
list_init(&g_administration.projects);
list_init(&g_administration.tax_brackets);
@@ -270,11 +277,6 @@ bool administration_remove_contact(contact data)
return false;
}
-s32 administration_create_id()
-{
- return g_administration.next_id;
-}
-
u32 administration_get_contact_count()
{
return list_size(&g_administration.contacts);
@@ -543,4 +545,34 @@ bool administration_update_cost_center(cost_center data)
list_iterator_stop(&g_administration.cost_centers);
return false;
+}
+
+static s32 administration_create_sequence_number()
+{
+ return g_administration.next_sequence_number;
+}
+
+invoice administration_create_empty_invoice()
+{
+ invoice result;
+ memset(&result, 0, sizeof(invoice));
+ snprintf(result.id, sizeof(result.id), "I/%d", administration_create_id());
+ snprintf(result.sequential_number, sizeof(result.id), "INV%010d", administration_create_sequence_number());
+ return result;
+}
+
+contact administration_create_empty_contact()
+{
+ contact result;
+ memset(&result, 0, sizeof(contact));
+ snprintf(result.id, IM_ARRAYSIZE(result.id), "C/%d", administration_create_id());
+ return result;
+}
+
+project administration_create_empty_project()
+{
+ project result;
+ memset(&result, 0, sizeof(project));
+ snprintf(result.id, IM_ARRAYSIZE(result.id), "P/%d", administration_create_id());
+ return project;
} \ No newline at end of file