From beb52c4a2ca23f29dc992e145810a47241c7d43b Mon Sep 17 00:00:00 2001 From: Anders Betts Date: Sat, 19 Sep 2026 21:10:54 +0200 Subject: årsredovisning: Information om året per räkenskapsår (schema v6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'src/db.c') 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); -- cgit v1.3