110 lines
3.2 KiB
Python
110 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Seed-Script: erstellt Datenbank-Tabellen und fügt Test-Mitarbeiter ein.
|
||
|
||
python -m workforce_planner.seed
|
||
"""
|
||
|
||
from .database import init_db, SessionLocal
|
||
from .core.models import Employee, Practice, BalanceAccount
|
||
from .core.enums import EmployeeRole
|
||
from .api.auth import hash_password
|
||
|
||
|
||
def seed():
|
||
print("Erstelle Tabellen ...")
|
||
init_db()
|
||
|
||
db = SessionLocal()
|
||
try:
|
||
if db.query(Practice).count() > 0:
|
||
print("Datenbank enthält bereits Daten – überspringe Seed.")
|
||
return
|
||
|
||
praxis = Practice(
|
||
id="praxis_1",
|
||
name="Praxis Muster",
|
||
address="Musterstrasse 1, 8000 Zürich",
|
||
phone="+41 44 123 45 67",
|
||
)
|
||
db.add(praxis)
|
||
db.flush()
|
||
|
||
employees = [
|
||
Employee(
|
||
id="admin_1",
|
||
practice_id=praxis.id,
|
||
name="Dr. Admin",
|
||
email="admin@praxis.ch",
|
||
password_hash=hash_password("admin123"),
|
||
role=EmployeeRole.ADMIN,
|
||
vacation_days_per_year=25,
|
||
),
|
||
Employee(
|
||
id="manager_1",
|
||
practice_id=praxis.id,
|
||
name="Anna Meier",
|
||
email="anna@praxis.ch",
|
||
password_hash=hash_password("test123"),
|
||
role=EmployeeRole.MANAGER,
|
||
department="Leitung",
|
||
vacation_days_per_year=25,
|
||
),
|
||
Employee(
|
||
id="emp_1",
|
||
practice_id=praxis.id,
|
||
name="Stefan Müller",
|
||
email="stefan@praxis.ch",
|
||
password_hash=hash_password("test123"),
|
||
role=EmployeeRole.EMPLOYEE,
|
||
department="MPA",
|
||
vacation_days_per_year=25,
|
||
),
|
||
Employee(
|
||
id="emp_2",
|
||
practice_id=praxis.id,
|
||
name="Lisa Weber",
|
||
email="lisa@praxis.ch",
|
||
password_hash=hash_password("test123"),
|
||
role=EmployeeRole.EMPLOYEE,
|
||
department="MPA",
|
||
vacation_days_per_year=20,
|
||
),
|
||
Employee(
|
||
id="emp_3",
|
||
practice_id=praxis.id,
|
||
name="Marco Brunner",
|
||
email="marco@praxis.ch",
|
||
password_hash=hash_password("test123"),
|
||
role=EmployeeRole.EMPLOYEE,
|
||
department="Labor",
|
||
vacation_days_per_year=25,
|
||
),
|
||
]
|
||
|
||
for emp in employees:
|
||
db.add(emp)
|
||
db.flush()
|
||
|
||
import datetime
|
||
year = datetime.date.today().year
|
||
for emp in employees:
|
||
ba = BalanceAccount(
|
||
employee_id=emp.id,
|
||
year=year,
|
||
yearly_quota=emp.vacation_days_per_year,
|
||
)
|
||
db.add(ba)
|
||
|
||
db.commit()
|
||
print(f"Seed erfolgreich: 1 Praxis, {len(employees)} Mitarbeiter, Jahr {year}")
|
||
for emp in employees:
|
||
print(f" {emp.role.value:10s} {emp.name:20s} {emp.email} (Passwort: {'admin123' if emp.role == EmployeeRole.ADMIN else 'test123'})")
|
||
|
||
finally:
|
||
db.close()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
seed()
|