summaryrefslogtreecommitdiff
path: root/src/db.c
diff options
context:
space:
mode:
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);