diff options
| author | Anders Betts <anders.betts@gmail.com> | 2026-09-19 21:10:54 +0200 |
|---|---|---|
| committer | Anders Betts <anders.betts@gmail.com> | 2026-09-19 21:10:54 +0200 |
| commit | beb52c4a2ca23f29dc992e145810a47241c7d43b (patch) | |
| tree | b8fff8dce1cb01d42a1783040d7270558831bd2e /src/db.c | |
| parent | 77c298b3b64f2493e509734df0084068ad24441f (diff) | |
| download | bokf-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.c | 65 |
1 files changed, 65 insertions, 0 deletions
@@ -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); |
