update
This commit is contained in:
@@ -26,17 +26,12 @@ days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
|
||||
|
||||
full_weekend_count = 2
|
||||
|
||||
# weeks = [i for i in range(1,weeks_to_rota+1)]
|
||||
|
||||
# weeks_days_product = list(itertools.product(weeks, days))
|
||||
|
||||
from govuk_bank_holidays.bank_holidays import BankHolidays
|
||||
|
||||
bank_holidays = BankHolidays()
|
||||
bank_holiday_map = {}
|
||||
for bank_holiday in bank_holidays.get_holidays():
|
||||
bank_holiday_map[bank_holiday['date']] = bank_holiday['title']
|
||||
# see BankHolidays source file for more methods and arguments
|
||||
|
||||
|
||||
class SingleShift(object):
|
||||
@@ -183,6 +178,34 @@ class RotaBuilder(object):
|
||||
self.week_day_date_map[(week, day)] = d
|
||||
n = n + 1
|
||||
|
||||
def solve_model(self, solver='cbc', use_neos=False, options={}):
|
||||
print("Setting up solver")
|
||||
self.opt = SolverFactory(solver)
|
||||
|
||||
print("Solving")
|
||||
if use_neos:
|
||||
solver_manager = SolverManagerFactory('neos') # Solve in neos server
|
||||
#results = solver_manager.solve(Rota.model, opt=opt, logfile="test.log")
|
||||
results = solver_manager.solve(self.model, keepfiles=True, tee=True, opt=self.opt, logfile="test.log")
|
||||
else:
|
||||
results = self.opt.solve(
|
||||
self.model,
|
||||
tee=True,
|
||||
options=options,
|
||||
#options={
|
||||
# "threads": 10,
|
||||
#},
|
||||
logfile="test.log"
|
||||
)
|
||||
|
||||
self.results = results
|
||||
|
||||
print(results)
|
||||
results.solver.status
|
||||
if not results.solver.status:
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def build_model(self):
|
||||
# Initialize model
|
||||
self.model = ConcreteModel()
|
||||
@@ -1314,7 +1337,7 @@ class RotaBuilder(object):
|
||||
|
||||
Must be called prior to attempting to solve
|
||||
"""
|
||||
self.build_shifts()
|
||||
#self.build_shifts()
|
||||
|
||||
self.workers = sorted(self.workers)
|
||||
|
||||
@@ -1592,6 +1615,10 @@ class RotaResults(object):
|
||||
self.rota = rota
|
||||
self.results = results
|
||||
|
||||
def export_rota_to_html(self, filename="rota"):
|
||||
with open("{}.html".format(filename), "w") as f:
|
||||
f.write(self.get_worker_timetable_html(True))
|
||||
|
||||
def export_rota_to_csv(self, filename="rota"):
|
||||
works = self.rota.model.works
|
||||
with open("{}.csv".format(filename), 'w', newline='') as f:
|
||||
@@ -1722,7 +1749,7 @@ class RotaResults(object):
|
||||
|
||||
def get_worker_timetable_html(self,
|
||||
include_html_tag=False,
|
||||
table_name="Test"):
|
||||
table_name="rota-table"):
|
||||
model = self.rota.model
|
||||
|
||||
timetable = []
|
||||
@@ -1826,8 +1853,6 @@ class RotaResults(object):
|
||||
weekend_target=worker.weekend_shift_target_number, nights_at_derriford=worker.night_at_derriford, grade=worker.grade, pair=worker.pair
|
||||
)
|
||||
|
||||
#print(shift_count_dict)
|
||||
|
||||
shift_count = shift_count + "#weekends_worked: {}\\#".format(
|
||||
model.worker_weekend_count[worker.id].value)
|
||||
|
||||
@@ -2013,7 +2038,6 @@ class RotaResults(object):
|
||||
"balance: {},".format(
|
||||
self.rota.model.night_shift_count_w[worker.id].value),
|
||||
)
|
||||
"""
|
||||
|
||||
def get_weekend_details(self):
|
||||
for worker in self.rota.workers:
|
||||
@@ -2035,3 +2059,4 @@ class RotaResults(object):
|
||||
self.rota.model.weekend_shift_count_w[worker.id].value),
|
||||
)
|
||||
|
||||
"""
|
||||
Reference in New Issue
Block a user