many improvements
This commit is contained in:
+113
-45
@@ -50,10 +50,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
force_as_block=False,
|
||||
),
|
||||
@@ -90,10 +87,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
force_as_block=False,
|
||||
),
|
||||
@@ -128,10 +122,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
force_as_block=False,
|
||||
),
|
||||
@@ -173,10 +164,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
force_as_block=False,
|
||||
),
|
||||
@@ -218,10 +206,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -255,10 +240,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -312,10 +294,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=3,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -356,10 +335,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -401,10 +377,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"a",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=1,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -417,10 +390,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"c",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="c", length= 12.5, days=days,
|
||||
workers_required=1,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -432,10 +402,7 @@ class TestWorkerRequests:
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
("group1", "group2"),
|
||||
"b",
|
||||
12.5,
|
||||
days,
|
||||
sites=("group1", "group2"), name="b", length= 12.5, days=days,
|
||||
workers_required=1,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
@@ -460,4 +427,105 @@ class TestWorkerRequests:
|
||||
)
|
||||
|
||||
with pytest.raises(InvalidShift):
|
||||
Rota.build_and_solve(options={"ratio": 0.000})
|
||||
Rota.build_and_solve(options={"ratio": 0.000})
|
||||
|
||||
def test_work_requests_generic(self):
|
||||
"""_summary_"""
|
||||
Rota = generate_basic_rota()
|
||||
Rota.constraint_options["balance_bank_holidays"] = False
|
||||
|
||||
Rota.add_workers(
|
||||
[Worker(
|
||||
name="worker3", site="group1", grade=1,
|
||||
work_requests=(
|
||||
[
|
||||
{"date": i, "shift": "*"}
|
||||
for i in list(date_generator(datetime.date(2022, 3, 7), 35))
|
||||
]
|
||||
),
|
||||
),
|
||||
Worker(
|
||||
name="worker4", site="group1", grade=1,
|
||||
work_requests=(
|
||||
[
|
||||
{"date": i, "shift": "*"}
|
||||
for i in list(date_generator(datetime.date(2022, 3, 7), 35))
|
||||
]
|
||||
),
|
||||
),]
|
||||
)
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days,
|
||||
workers_required=2,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
),
|
||||
)
|
||||
|
||||
Rota.build_and_solve(options={"ratio": 0.000})
|
||||
Rota.export_rota_to_html("work_requests")
|
||||
|
||||
shift_summary = Rota.get_shift_summary_dict()
|
||||
for worker_name in shift_summary:
|
||||
worker_shifts = shift_summary[worker_name]
|
||||
|
||||
worker = Rota.get_worker_by_name(worker_name)
|
||||
|
||||
assert worker_shifts["a"] == 35
|
||||
|
||||
shift_string = Rota.get_worker_shift_list_string(worker)
|
||||
|
||||
if worker.name in ("worker3", "worker4"):
|
||||
assert shift_string.startswith("a"*35)
|
||||
|
||||
def test_work_requests_generic2(self):
|
||||
"""_summary_"""
|
||||
Rota = generate_basic_rota()
|
||||
Rota.constraint_options["balance_bank_holidays"] = False
|
||||
|
||||
Rota.add_workers(
|
||||
[Worker(
|
||||
name="worker3", site="group1", grade=1,
|
||||
work_requests=(
|
||||
[
|
||||
{"date": i, "shift": "*"}
|
||||
for i in list(date_generator(datetime.date(2022, 3, 7), 20))
|
||||
]
|
||||
),
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
Rota.add_shifts(
|
||||
SingleShift(
|
||||
sites=("group1", "group2"), name="a", length= 12.5, days=days[3:],
|
||||
workers_required=2,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
),
|
||||
SingleShift(
|
||||
sites=("group1", "group2"), name="b", length= 12.5, days=days[:3],
|
||||
workers_required=1,
|
||||
balance_offset=1,
|
||||
force_as_block=False,
|
||||
),
|
||||
)
|
||||
|
||||
Rota.build_and_solve(options={"ratio": 0.1})
|
||||
Rota.export_rota_to_html("work_requests")
|
||||
|
||||
shift_summary = Rota.get_shift_summary_dict()
|
||||
for worker_name in shift_summary:
|
||||
worker_shifts = shift_summary[worker_name]
|
||||
|
||||
worker = Rota.get_worker_by_name(worker_name)
|
||||
|
||||
assert worker_shifts["a"] in (26, 27)
|
||||
assert worker_shifts["b"] == 10
|
||||
|
||||
shift_string = Rota.get_worker_shift_list_string(worker)
|
||||
|
||||
if worker.name in ("worker3",):
|
||||
assert "-" not in shift_string[:20]
|
||||
Reference in New Issue
Block a user