def arrangement_info(): if request.method == "GET": # make sure start_date is before end_date user_id = 1 # get logged in user's ID same_day_scheduling = False # get this from user start_date = "1-1-2020" # get this from user # start_date = str(datetimeHelp.next_weekday(dt.today(), 6)) - date of next Sunday end_date = "7-1-2020" # get this from user # end_time = str(datetimeHelp.next_weekday(dt.today(), 12)) - date of next Saturday org_id = db.get_org_by_usr(user_id)[0][0] # get user org_id sol_num = db.sol_exists(org_id) # gets the max sol number from DB if sol_num[0]: # if solution exists in DB session["sol"] = sol_num[0] + 1 else: session["sol"] += 1 raw_employees = db.get_employees_by_date_range(org_id, start_date, end_date) employees = Employee.create_from_DB(raw_employees) raw_shifts = db.get_shifts_by_date_range(org_id, start_date, end_date) shifts = Shift.create_from_DB(raw_shifts) raw_workdays = db.get_wdays_by_date_range(org_id, start_date, end_date) workdays = WorkDay.create_from_DB(org_id, raw_workdays) # add shifts to corresponding days for shift in shifts: for i in range(len(workdays)): if shift.get_date() == workdays[i].get_date(): workdays[i].add_shift(shift) ww = WorkWeek(workdays) dic, sol = ww.create_arrangement(employees, same_day_scheduling) employees, shifts = ww.extract_solution(sol) mat = Matrix(employees, shifts) # dic is a dictionary that maps number of shifts assigned to a employee # sol is the actual solved arrangement # for example {1:[E1,E2], 2:[E3,E4]..} # add arrangement to DB # db.register_arrangement(sol, session["sol"]) #print(WorkWeek.min_shifts_swap(dic,sol)) # 2: [Employee 5, tom col, dict_keys(['waitress', 'bartender']), Employee 7, itzik shawarma, dict_keys(['waitress']), Employee 8, roni kofif, dict_keys(['waitress', 'bartender'])], # 3: [Employee 6, pagi pagi, dict_keys(['waitress', 'bartender']), Employee 4, niv mali, dict_keys(['bartender']), Employee 9, some guy, dict_keys(['waitress']), Employee 1, ben mali, dict_keys(['bartender']), Employee 2, paz mali, dict_keys(['waitress']), Employee 3, rom mali, dict_keys(['bartender'])], # 4: [Employee 10, another guy, dict_keys(['bartender', 'waitress'])], 5: [], 6: [], 7: [], 8: [], 9: [], 10: []}] #2: [Employee 5, tom col, dict_keys(['waitress', 'bartender']), Employee 7, itzik shawarma, dict_keys(['waitress']), Employee 8, roni kofif, dict_keys(['waitress', 'bartender'])], # 3: [Employee 6, pagi pagi, dict_keys(['waitress', 'bartender']), Employee 4, niv mali, dict_keys(['bartender']), Employee 9, some guy, dict_keys(['waitress']), Employee 1, ben mali, dict_keys(['bartender']), Employee 10, another guy, dict_keys(['bartender', 'waitress']), Employee 3, rom mali, dict_keys(['bartender'])], # 4: [Employee 2, paz mali, dict_keys(['waitress'])] #swap 2 and 10 set 10 to 4 min dic, solution = ww.min_shifts_swap(dic, sol) js_dict = {} for i in range(len(solution)): js_dict["shift {}".format(i+1)] = solution[i].get_json() return js_dict else: return render_template("error_page.html")
wd4 = WorkDay("4-1-2020", "16:00", "Tom") wd5 = WorkDay("5-1-2020", "16:00", "Tom") wd6 = WorkDay("6-1-2020", "16:00", "Tom") wd7 = WorkDay("7-1-2020", "16:00", "Tom") wd.add_shift(s1) wd.add_shift(s2) wd2.add_shift(s3) wd2.add_shift(s4) wd3.add_shift(s5) wd3.add_shift(s6) wd4.add_shift(s7) wd4.add_shift(s8) wd5.add_shift(s9) wd5.add_shift(s10) wd6.add_shift(s11) wd6.add_shift(s12) wd7.add_shift(s13) wd7.add_shift(s14) ww = WorkWeek([wd, wd2, wd3, wd4, wd5, wd6, wd7]) shifts = Shift.create_from_DB( db.get_shifts_by_date_range(1, "2020-01-01", "2020-01-07")) t1 = db.get_employees_by_date_range(1, "2020-01-01", "2020-01-07") employees = Employee.create_from_DB( db.get_employees_by_date_range(1, "2020-01-01", "2020-01-07")) mat = Matrix(shifts, employees) # get employees and shifts AFTER initial solution~ print(employees) print("sd") # db.register_arrangement(sol)