Enhance Rota Management System

- Updated .gitignore to exclude 'cons/' directory.
- Refactored gen_cons.py to extract leave and rota assignments from calendar data, and added functionality to handle shift assignments from rota data.
- Modified timetable.css to include styles for force-assigned shifts.
- Enhanced shifts.py to manage forced assignments and handle leave conflicts, including new methods for date-based assignments.
- Updated workers.py to introduce structured hard day dependencies and exclusions, allowing for more flexible scheduling.
- Adjusted test_workers.py to reflect changes in hard day dependency and exclusion methods, ensuring compatibility with new data structures.
This commit is contained in:
Ross
2025-08-09 22:11:39 +01:00
parent 6bd47ba5b4
commit 48710f50e8
6 changed files with 612 additions and 116 deletions
+21 -21
View File
@@ -1024,9 +1024,9 @@ def test_worker_hard_day_dependency():
worker2 = workers[1]
worker3 = workers[2]
worker1.add_hard_day_dependency("Mon", "Tue")
worker2.add_hard_day_dependency("Mon", "Wed")
worker3.add_hard_day_dependency("Mon", "Thu")
worker1.add_hard_day_dependency({"Mon", "Tue"})
worker2.add_hard_day_dependency({"Mon", "Wed"})
worker3.add_hard_day_dependency({"Mon", "Thu"})
Rota.add_shifts(
SingleShift(
@@ -1080,15 +1080,15 @@ def test_worker_hard_day_dependency_weekend():
worker3 = workers[2]
worker4 = workers[3]
worker1.add_hard_day_dependency("Fri", "Sun")
worker2.add_hard_day_dependency("Fri", "Sun")
worker3.add_hard_day_dependency("Fri", "Sun")
worker4.add_hard_day_dependency("Fri", "Sun")
worker1.add_hard_day_dependency({"Fri", "Sun"})
worker2.add_hard_day_dependency({"Fri", "Sun"})
worker3.add_hard_day_dependency({"Fri", "Sun"})
worker4.add_hard_day_dependency({"Fri", "Sun"})
worker1.add_hard_day_exclusion("Fri", "Sat")
worker2.add_hard_day_exclusion("Fri", "Sat")
worker3.add_hard_day_exclusion("Fri", "Sat")
worker4.add_hard_day_exclusion("Fri", "Sat")
worker1.add_hard_day_exclusion({"Fri", "Sat"})
worker2.add_hard_day_exclusion({"Fri", "Sat"})
worker3.add_hard_day_exclusion({"Fri", "Sat"})
worker4.add_hard_day_exclusion({"Fri", "Sat"})
Rota.add_shifts(
SingleShift(
@@ -1128,15 +1128,15 @@ def test_worker_hard_day_dependency_weekend2():
worker3 = workers[2]
worker4 = workers[3]
worker1.add_hard_day_dependency("Fri", "Sun")
worker2.add_hard_day_dependency("Fri", "Sun")
worker3.add_hard_day_dependency("Fri", "Sun")
worker4.add_hard_day_dependency("Fri", "Sun")
worker4.add_hard_day_dependency("Fri", "Sat")
worker1.add_hard_day_dependency({"Fri", "Sun"})
worker2.add_hard_day_dependency({"Fri", "Sun"})
worker3.add_hard_day_dependency({"Fri", "Sun"})
worker4.add_hard_day_dependency({"Fri", "Sun"})
worker4.add_hard_day_dependency({"Fri", "Sat"})
worker1.add_hard_day_exclusion("Fri", "Sat")
worker2.add_hard_day_exclusion("Fri", "Sat")
worker3.add_hard_day_exclusion("Fri", "Sat")
worker1.add_hard_day_exclusion({"Fri", "Sat"})
worker2.add_hard_day_exclusion({"Fri", "Sat"})
worker3.add_hard_day_exclusion({"Fri", "Sat"})
Rota.add_shifts(
SingleShift(
@@ -1260,7 +1260,7 @@ def test_worker_force_assign_with_and_hard_days():
worker.add_force_assign_with("a", "b")
#worker.add_hard_day_dependency("Sat", "Sun")
worker.add_hard_day_dependency("Mon", "Tue")
worker.add_hard_day_dependency({"Mon", "Tue"})
Rota.add_shifts(
SingleShift(
@@ -1294,7 +1294,7 @@ def test_worker_force_assign_with_and_hard_days_weekend():
worker.add_force_assign_with("a", "b")
#worker.add_hard_day_dependency("Sat", "Sun")
worker.add_hard_day_dependency("Sat", "Sun")
worker.add_hard_day_dependency({"Sat", "Sun"})
Rota.add_shifts(
SingleShift(