Rollback - PDF Import funzt so semi
Dieser Commit ist enthalten in:
@ -376,6 +376,119 @@ export function initializeDatabase() {
|
||||
)
|
||||
`)
|
||||
|
||||
// Organizational Structure Tables
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS organizational_units (
|
||||
id TEXT PRIMARY KEY,
|
||||
code TEXT NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
type TEXT NOT NULL CHECK(type IN ('direktion', 'abteilung', 'dezernat', 'sachgebiet', 'teildezernat', 'fuehrungsstelle', 'stabsstelle', 'sondereinheit')),
|
||||
level INTEGER NOT NULL,
|
||||
parent_id TEXT,
|
||||
position_x INTEGER,
|
||||
position_y INTEGER,
|
||||
color TEXT,
|
||||
order_index INTEGER DEFAULT 0,
|
||||
description TEXT,
|
||||
has_fuehrungsstelle INTEGER DEFAULT 0,
|
||||
fuehrungsstelle_name TEXT,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
FOREIGN KEY (parent_id) REFERENCES organizational_units(id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_org_units_parent ON organizational_units(parent_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_org_units_type ON organizational_units(type);
|
||||
CREATE INDEX IF NOT EXISTS idx_org_units_level ON organizational_units(level);
|
||||
`)
|
||||
|
||||
// Employee Unit Assignments
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS employee_unit_assignments (
|
||||
id TEXT PRIMARY KEY,
|
||||
employee_id TEXT NOT NULL,
|
||||
unit_id TEXT NOT NULL,
|
||||
role TEXT NOT NULL CHECK(role IN ('leiter', 'stellvertreter', 'mitarbeiter', 'beauftragter')),
|
||||
start_date TEXT NOT NULL,
|
||||
end_date TEXT,
|
||||
is_primary INTEGER DEFAULT 1,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (unit_id) REFERENCES organizational_units(id) ON DELETE CASCADE,
|
||||
UNIQUE(employee_id, unit_id, role)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_emp_units_employee ON employee_unit_assignments(employee_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_emp_units_unit ON employee_unit_assignments(unit_id);
|
||||
`)
|
||||
|
||||
// Special Positions (Personalrat, Beauftragte, etc.)
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS special_positions (
|
||||
id TEXT PRIMARY KEY,
|
||||
employee_id TEXT NOT NULL,
|
||||
position_type TEXT NOT NULL CHECK(position_type IN ('personalrat', 'schwerbehindertenvertretung', 'datenschutzbeauftragter', 'gleichstellungsbeauftragter', 'inklusionsbeauftragter', 'informationssicherheitsbeauftragter', 'geheimschutzbeauftragter', 'extremismusbeauftragter')),
|
||||
unit_id TEXT,
|
||||
start_date TEXT NOT NULL,
|
||||
end_date TEXT,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (unit_id) REFERENCES organizational_units(id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_special_pos_employee ON special_positions(employee_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_special_pos_type ON special_positions(position_type);
|
||||
`)
|
||||
|
||||
// Deputy Assignments (Vertretungen)
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS deputy_assignments (
|
||||
id TEXT PRIMARY KEY,
|
||||
principal_id TEXT NOT NULL,
|
||||
deputy_id TEXT NOT NULL,
|
||||
unit_id TEXT,
|
||||
valid_from TEXT NOT NULL,
|
||||
valid_until TEXT NOT NULL,
|
||||
reason TEXT,
|
||||
can_delegate INTEGER DEFAULT 1,
|
||||
created_by TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
FOREIGN KEY (principal_id) REFERENCES employees(id),
|
||||
FOREIGN KEY (deputy_id) REFERENCES employees(id),
|
||||
FOREIGN KEY (unit_id) REFERENCES organizational_units(id),
|
||||
FOREIGN KEY (created_by) REFERENCES users(id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_deputy_principal ON deputy_assignments(principal_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_deputy_deputy ON deputy_assignments(deputy_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_deputy_dates ON deputy_assignments(valid_from, valid_until);
|
||||
`)
|
||||
|
||||
// Deputy Delegations (Vertretungs-Weitergaben)
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS deputy_delegations (
|
||||
id TEXT PRIMARY KEY,
|
||||
original_assignment_id TEXT NOT NULL,
|
||||
from_deputy_id TEXT NOT NULL,
|
||||
to_deputy_id TEXT NOT NULL,
|
||||
reason TEXT,
|
||||
delegated_at TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
FOREIGN KEY (original_assignment_id) REFERENCES deputy_assignments(id),
|
||||
FOREIGN KEY (from_deputy_id) REFERENCES employees(id),
|
||||
FOREIGN KEY (to_deputy_id) REFERENCES employees(id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_delegation_assignment ON deputy_delegations(original_assignment_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_delegation_from ON deputy_delegations(from_deputy_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_delegation_to ON deputy_delegations(to_deputy_id);
|
||||
`)
|
||||
|
||||
// Audit Log für Änderungsverfolgung
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS audit_log (
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren