aboutsummaryrefslogtreecommitdiff
path: root/src/db.c
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-19 21:10:54 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-19 21:10:54 +0200
commitbeb52c4a2ca23f29dc992e145810a47241c7d43b (patch)
treeb8fff8dce1cb01d42a1783040d7270558831bd2e /src/db.c
parent77c298b3b64f2493e509734df0084068ad24441f (diff)
downloadbokf-beb52c4a2ca23f29dc992e145810a47241c7d43b.tar.gz
bokf-beb52c4a2ca23f29dc992e145810a47241c7d43b.zip
årsredovisning: Information om året per räkenskapsår (schema v6)v0.1.34
Diffstat (limited to 'src/db.c')
-rw-r--r--src/db.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/db.c b/src/db.c
index ebee37b..d3bd15f 100644
--- a/src/db.c
+++ b/src/db.c
@@ -38,6 +38,8 @@ static const char SCHEMA_V1[] =
" country TEXT NOT NULL DEFAULT 'SE',"
" email TEXT,"
" phone TEXT,"
+ " description TEXT NOT NULL DEFAULT '',"
+ " shares INTEGER NOT NULL DEFAULT 0,"
" fiscal_year_start_month INTEGER NOT NULL DEFAULT 1"
" CHECK (fiscal_year_start_month BETWEEN 1 AND 12),"
" moms_period TEXT NOT NULL DEFAULT 'month'"
@@ -49,6 +51,15 @@ static const char SCHEMA_V1[] =
" archived_at TEXT"
") STRICT;\n"
+ "CREATE TABLE board_members ("
+ " org_id INTEGER NOT NULL REFERENCES orgs(id),"
+ " id INTEGER PRIMARY KEY,"
+ " name TEXT NOT NULL,"
+ " title TEXT NOT NULL,"
+ " created_at TEXT NOT NULL,"
+ " UNIQUE (org_id, id)"
+ ") STRICT;\n"
+
"CREATE TABLE memberships ("
" org_id INTEGER NOT NULL REFERENCES orgs(id),"
" user_id INTEGER NOT NULL REFERENCES users(id),"
@@ -97,6 +108,11 @@ static const char SCHEMA_V1[] =
" status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open','closed')),"
" locked_until TEXT,"
" dividend_ore INTEGER NOT NULL DEFAULT 0,"
+ " events TEXT NOT NULL DEFAULT '',"
+ " agm_date TEXT NOT NULL DEFAULT '',"
+ " dividend_date TEXT NOT NULL DEFAULT '',"
+ " employees TEXT NOT NULL DEFAULT '',"
+ " notes TEXT NOT NULL DEFAULT '',"
" created_at TEXT NOT NULL,"
" closed_at TEXT,"
" closed_by INTEGER REFERENCES users(id),"
@@ -372,6 +388,47 @@ static int db_upgrade_v4(sqlite3 *db, char **err)
err);
}
+/* v5: årsredovisning details — the company description and share count,
+ the year's material events, and a board-member list for signatures. */
+static int db_upgrade_v5(sqlite3 *db, char **err)
+{
+ if (db_exec(db, "ALTER TABLE orgs ADD COLUMN description TEXT NOT NULL"
+ " DEFAULT ''", err) != 0)
+ return -1;
+ if (db_exec(db, "ALTER TABLE orgs ADD COLUMN shares INTEGER NOT NULL"
+ " DEFAULT 0", err) != 0)
+ return -1;
+ if (db_exec(db, "ALTER TABLE fiscal_years ADD COLUMN events TEXT NOT NULL"
+ " DEFAULT ''", err) != 0)
+ return -1;
+ return db_exec(db,
+ "CREATE TABLE IF NOT EXISTS board_members ("
+ " org_id INTEGER NOT NULL REFERENCES orgs(id),"
+ " id INTEGER PRIMARY KEY,"
+ " name TEXT NOT NULL,"
+ " title TEXT NOT NULL,"
+ " created_at TEXT NOT NULL,"
+ " UNIQUE (org_id, id)"
+ ") STRICT",
+ err);
+}
+
+/* v6: "Information om året" — the year-specific årsredovisning details. */
+static int db_upgrade_v6(sqlite3 *db, char **err)
+{
+ if (db_exec(db, "ALTER TABLE fiscal_years ADD COLUMN agm_date TEXT NOT NULL"
+ " DEFAULT ''", err) != 0)
+ return -1;
+ if (db_exec(db, "ALTER TABLE fiscal_years ADD COLUMN dividend_date TEXT"
+ " NOT NULL DEFAULT ''", err) != 0)
+ return -1;
+ if (db_exec(db, "ALTER TABLE fiscal_years ADD COLUMN employees TEXT NOT NULL"
+ " DEFAULT ''", err) != 0)
+ return -1;
+ return db_exec(db, "ALTER TABLE fiscal_years ADD COLUMN notes TEXT NOT NULL"
+ " DEFAULT ''", err);
+}
+
static int db_upgrade(sqlite3 *db, int from, char **err)
{
if (db_exec(db, "BEGIN IMMEDIATE", err) != 0)
@@ -388,6 +445,14 @@ static int db_upgrade(sqlite3 *db, int from, char **err)
db_exec(db, "ROLLBACK", NULL);
return -1;
}
+ if (from < 5 && db_upgrade_v5(db, err) != 0) {
+ db_exec(db, "ROLLBACK", NULL);
+ return -1;
+ }
+ if (from < 6 && db_upgrade_v6(db, err) != 0) {
+ db_exec(db, "ROLLBACK", NULL);
+ return -1;
+ }
char *sql = sqlite3_mprintf(
"UPDATE meta SET value='%d' WHERE key='schema_version'",
BOKF_SCHEMA_VERSION);