def display(self, item_list, page, max_page, list_filter, buttons, time): Render.clear() Render.header(self.header) filter_info_list = [] for filt in self.filters: if filt == list_filter: filter_info_list += ["# "+filt.upper()+" #"] else: filter_info_list += [filt] Render.tool_bar(filter_info_list) item_info_list = [] if list_filter == "working": self.list_header = Employee.get_working_header() for item in item_list: item_info_list += [LL_API.get_working_list_info(item, time).split("#")] else: self.list_header = Employee.get_header() for item in item_list: item_info_list += [LL_API.get_list_info(item).split("#")] Render.display_list(self.list_header, item_info_list) Render.page_bar(page, max_page) Render.tool_bar(buttons) Render.the_border()
def run(self): page = 1 max_page = None search = None time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") item_list = [] list_filter = "all" buttons = [] + BUTTONS + ["|F| Filter"] + ["|C| Clear Filters"] while True: if self.filters == None: number_of_items = self.get_number_of_items_func(search) item_list = self.get_item_list_func(search, page, ITEMS_PER_PAGE) else: number_of_items = self.get_number_of_items_func( search, list_filter) item_list = self.get_item_list_func(search, page, ITEMS_PER_PAGE, list_filter) max_page = math.ceil(number_of_items / ITEMS_PER_PAGE) if number_of_items == 0: max_page = 1 self.display(item_list, page, max_page, list_filter, buttons, time) user_input = self.get_input() if user_input.lower() == "c": time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") LL_API.set_filter_time(time) if user_input.lower() == "b": return 0 elif user_input.lower() == "f": time = Select_Time_Window.run(True, "minute") if time is None: time = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") LL_API.set_filter_time(str(time)) elif user_input.lower() == "n": if page < max_page: page += 1 elif user_input.lower() == "p": if page > 1: page -= 1 elif user_input.lower() == "s": search = input("Search keyword: ") page = 1 elif user_input.lower() == "a": self.add_window.run() elif user_input.isdigit(): if 1 <= int(user_input) <= len(item_list): item = item_list[int(user_input) - 1] self.info_window.run(item)
def display(self, item, buttons): Render.clear() Render.header(self.header) item_info = LL_API.get_info(item) Render.indent_info_window(item_info) Render.tool_bar(buttons) Render.the_border()
def display(self, item): Render.clear() Render.header(self.header) item_info = LL_API.get_info(item) Render.the_info_window(item_info) if self.edit_window != None: Render.tool_bar(BUTTONS) Render.the_border()
def display(self, item_page, page, max_page): Render.clear() Render.header(self.header) item_info_list = [] for item in item_page: item_info_list += [LL_API.get_list_info(item).split("#")] Render.display_list(self.list_header, item_info_list) Render.page_bar(page, max_page) Render.tool_bar(BUTTONS) Render.the_border()
def display(self, item_list, page, max_page, list_filter, buttons, time): Render.clear() Render.header(self.header) Render.tool_bar(["Showing aircrafts for time: " + str(time)]) item_info_list = [] for item in item_list: item_info_list += [LL_API.get_list_info(item).split("#")] Render.display_list(self.list_header, item_info_list) Render.page_bar(page, max_page) Render.tool_bar(buttons) Render.the_border()
def run(self, item): while True: self.display(item) user_input = self.get_input() if user_input.lower() == "b": return 0 elif user_input.lower() == "e" and (self.edit_window != None): self.edit_window.run(item) elif user_input.lower() == "w": time = Select_Time_Window.run(True, "day") if time is not None: work_week = LL_API.get_work_week(item, time) ww_window = Work_Week_List("Work Week: {} for {}".format(str(time).split()[0], item.get_name()), ["Day", "Work Destination"]) ww_window.run(work_week)
def run(self, item): edited_info = LL_API.get_edit_info(item) # Edit index must start on allowed index edit_index = 0 while edited_info[edit_index][INDEX_OF_EDIT_PERMISSION_BOOL] == False: edit_index += 1 if edit_index > len(edited_info) - 1: edit_index = 0 while True: self.display(edited_info, edit_index, BUTTONS) user_input = self.get_input() if user_input.lower() == "b": return 0 elif user_input.lower() == "c": new_info = [] for info in edited_info: new_info += [info[INDEX_OF_INFO]] item.set_info(new_info) self.change_item_func(item.get_id(), new_info) return 0 elif user_input.lower() == "u": edit_index -= 1 if edit_index < 0: edit_index = len(edited_info) - 1 while edited_info[edit_index][ INDEX_OF_EDIT_PERMISSION_BOOL] == False: edit_index -= 1 if edit_index < 0: edit_index = len(edited_info) - 1 elif user_input.lower() == "d": edit_index += 1 if edit_index > len(edited_info) - 1: edit_index = 0 while edited_info[edit_index][ INDEX_OF_EDIT_PERMISSION_BOOL] == False: edit_index += 1 if edit_index > len(edited_info) - 1: edit_index = 0 else: edited_info[edit_index][INDEX_OF_INFO] = user_input
def display(self, item_list, page, max_page, list_filter, buttons): Render.clear() Render.header(self.header) if self.filters != None: filter_info_list = [] for filt in self.filters: if filt == list_filter: filter_info_list += ["# " + filt.upper() + " #"] else: filter_info_list += [filt] Render.tool_bar(filter_info_list) item_info_list = [] for item in item_list: item_info_list += [LL_API.get_list_info(item).split("#")] Render.display_list(self.list_header, item_info_list) Render.page_bar(page, max_page) Render.tool_bar(buttons) Render.the_border()
def run(self): new_item_info = [None, "+"] edit_index = 0 while True: self.display(new_item_info, edit_index, BUTTONS) user_input = self.get_input() if user_input == "": if edit_index == DESTINATION_INDEX: all_available_destinations = LL_API.get_available_destinations( ) new_destination = self.destination_select_window.run( all_available_destinations) if new_destination is not None: new_item_info[DESTINATION_INDEX] = new_destination edit_index += 1 elif edit_index == DEPARTURE_TIME_INDEX: time = Select_Time_Window.run(True, "minute") if time is not None: new_item_info[DEPARTURE_TIME_INDEX] = time elif user_input.lower() == "b": return 0 elif user_input.lower() == "c": self.store_item_func(new_item_info) return 0 elif user_input.lower() == "d": if edit_index != len(self.info_names) - 1: edit_index += 1 else: edit_index = 0 elif user_input.lower() == "u": if edit_index != 0: edit_index -= 1 else: edit_index = len(self.info_names) - 1 else: if edit_index == DEPARTURE_TIME_INDEX: new_item_info[DEPARTURE_TIME_INDEX] = user_input if edit_index != len(self.info_names) - 1: edit_index += 1 else: edit_index = 0
def run(self, item_list): search = "" page = 1 max_page = 1 item_page = [] while True: # Update item_page item_page = [] for item in item_list[0]: if search.lower() in LL_API.get_list_info(item).lower(): item_page += [item] if len(item_page) == 0: max_page = 1 max_page = math.ceil(len(item_page) / OBJECTS_PER_PAGE) item_page = item_page[(page - 1) * OBJECTS_PER_PAGE:page * OBJECTS_PER_PAGE] # Display and get input self.display(item_page, page, max_page) user_input = self.get_input() if user_input == "b": return None elif user_input.lower() == "n": if page < max_page: page += 1 elif user_input.lower() == "p": if page > 1: page -= 1 elif user_input.lower() == "s": search = input("Search keyword: ") page = 0 elif user_input.isdigit(): if 1 <= int(user_input) <= len(item_page): return item_page[1][int(user_input) - 1]
def run(self): page = 1 max_page = None search = None item_list = [] list_filter = "all" time_filter = None if self.filters is None: buttons = [] + BUTTONS else: buttons = [] + BUTTONS + ["|F| Filter"] while True: number_of_items = LL_API.get_number_of_voyage_page_time( search, list_filter, time_filter) item_list = LL_API.get_voyage_page_time(search, page, ITEMS_PER_PAGE, list_filter, time_filter) max_page = math.ceil(number_of_items / ITEMS_PER_PAGE) if number_of_items == 0: max_page = 1 self.display(item_list, page, max_page, list_filter, buttons) user_input = self.get_input() if user_input.lower() == "b": return 0 elif user_input.lower() == "f": filter_buttons = [] for filt in self.filters: filter_buttons += [ "|{}| {}".format(filt[0].upper(), filt[0].upper() + filt[1:]) ] self.display(item_list, page, max_page, list_filter, filter_buttons) user_input = self.get_input() for filt in self.filters: if user_input.lower() == filt[0]: list_filter = filt page = 1 if user_input.lower() == "b": return 0 elif user_input.lower() == "n": if page < max_page: page += 1 elif user_input.lower() == "p": if page > 1: page -= 1 elif user_input.lower() == "s": search = input("Search keyword: ") page = 1 elif user_input.lower() == "a": self.add_window.run() elif user_input.lower() == "t": time = Select_Time_Window.run(True, "day") if time is not None: delta_time = input( "Enter how many days you want to check from previous entered date: " ) if delta_time.isdigit(): time_filter = time, time + datetime.timedelta( int(delta_time)) elif user_input.isdigit(): if 1 <= int(user_input) <= len(item_list): item = item_list[int(user_input) - 1] self.info_window.run(item)
def get_object_page(self, object_id, search, page, objects_per_page): return LL_API.get_object_page(object_id, search, page, objects_per_page)
def run(self): page = 1 max_page = None search = None time = None item_list = [] list_filter = "all" while True: number_of_items = LL_API.get_number_of_employees(search, list_filter, time) item_list = LL_API.get_employee_page(search, page, ITEMS_PER_PAGE, list_filter, time) max_page = math.ceil(number_of_items / ITEMS_PER_PAGE) if number_of_items == 0: max_page = 1 self.display(item_list, page, max_page, list_filter, BUTTONS, time) user_input = self.get_input() if user_input.lower() == "b": return 0 elif user_input.lower() == "f": filter_buttons = ["|A| all", "|P| pilots", "|C| cabin crew", "|W| working", "|N| not working"] self.display(item_list, page, max_page, list_filter, filter_buttons, time) user_input = self.get_input() if user_input.lower() == "w": time = Select_Time_Window.run(True, detail="day") if time is not None: filter_time = time list_filter = "working" elif user_input.lower() == "n": time = Select_Time_Window.run(True, detail="day") if time is not None: filter_time = time list_filter = "not_working" elif user_input.lower() == "a": list_filter = "all" page = 1 elif user_input.lower() == "p": list_filter = "pilot" page = 1 elif user_input.lower() == "c": list_filter = "cabin_crew" page = 1 elif user_input.lower() == "n": if page < max_page: page += 1 elif user_input.lower() == "p": if page > 1: page -= 1 elif user_input.lower() == "s": search = input("Search keyword: ") page = 1 elif user_input.lower() == "a": self.add_window.run() elif user_input.isdigit(): if 1 <= int(user_input) <= len(item_list): item = item_list[int(user_input) - 1] self.info_window.run(item)
def store_item_func(self, item_info): LL_API.store_new_voyage(item_info[DESTINATION_INDEX].get_id(), item_info[DEPARTURE_TIME_INDEX])
def run(self, voyage): edit_index = 0 #[aircraft, captain, [copilots], flight_service_manager, [flight_attendant]] edit_info = LL_API.get_edit_info(voyage) aircraft = edit_info[AIRCRAFT_INDEX] captain = edit_info[CAPTAIN_INDEX] copilot_list = edit_info[COPILOT_LIST_INDEX] + [None] flight_service_manager = edit_info[FLIGHT_SERVICE_MANAGER_INDEX] flight_attendant_list = edit_info[FLIGHT_ATTENDANT_LIST_INDEX] + [None] original_crew_list_with_none = [captain] + copilot_list + [flight_service_manager] + flight_attendant_list original_crew_list = [] for employee in original_crew_list_with_none: if employee is not None: original_crew_list += [employee] original_aircraft_list = [] if aircraft is not None: original_aircraft_list = [aircraft] available_employees = LL_API.get_available_employees(voyage.get_departure_time()) + original_crew_list available_aircraft = LL_API.get_available_aircraft(voyage.get_departure_time()) + original_aircraft_list for employee in available_employees: if employee.get_job() == "pilot": print(employee.get_licence()) else: print() while True: edit_info = [aircraft, captain, copilot_list, flight_service_manager, flight_attendant_list] self.display(edit_info, edit_index, BUTTONS) user_input = self.get_input() item_selected, item_type_str = Voyage_Edit_Window.__get_edit_info_item_and_type(edit_info, edit_index) size_of_list = 3 + len(edit_info[COPILOT_LIST_INDEX]) + len(edit_info[FLIGHT_ATTENDANT_LIST_INDEX]) # back is pressed if user_input.lower() == "b": return 0 # if down is pressed elif user_input.lower() == "d": # amount of items - 1 if edit_index == size_of_list - 1: # arrow wrapping edit_index = 0 else: edit_index += 1 # if upp is pressed elif user_input.lower() == "u": if edit_index == 0: edit_index = size_of_list - 1 else: edit_index -= 1 elif user_input.lower() == "r": if item_type_str == "aircraft": aircraft = None captain = None copilot_list = [None] flight_service_manager = None flight_attendant_list = [None] elif item_type_str == "captain": captain = None elif item_type_str == "copilot": edit_info.remove(item_selected) elif item_type_str == "flight_service_manager": flight_service_manager = None elif item_type_str == "flight_attendant": edit_info.remove(item_selected) elif user_input.lower() == "": if item_selected is None: if item_type_str == "aircraft": new_aircraft = self.select_aircraft_window.run(available_aircraft) if new_aircraft is not None: aircraft = new_aircraft elif aircraft is not None: if item_type_str == "captain": available_captains = Voyage_Edit_Window.__filter_employees_by_rank(available_employees, "captain") available_captains = Voyage_Edit_Window.__filter_pilots_by_licence(available_captains, aircraft) new_captain = self.select_captain_window.run(available_captains) if new_captain is not None: captain = new_captain elif item_type_str == "copilot": available_copilots = Voyage_Edit_Window.__filter_employees_by_rank(available_employees, "copilot") available_copilots = Voyage_Edit_Window.__filter_pilots_by_licence(available_copilots, aircraft) available_copilots = list(set(available_copilots) - set(copilot_list)) new_copilot = self.select_copilot_window.run(available_copilots) if new_copilot is not None: copilot_list[-1] = new_copilot copilot_list += [None] elif item_type_str == "flight_service_manager": available_flight_service_managers = Voyage_Edit_Window.__filter_employees_by_rank(available_employees, "flight_service_manager") new_flight_service_manager = self.select_flight_service_manager_window.run(available_flight_service_managers) if new_flight_service_manager is not None: flight_service_manager = new_flight_service_manager elif item_type_str == "flight_attendant": available_flight_attendants = Voyage_Edit_Window.__filter_employees_by_rank(available_employees, "flight_attendant") available_flight_attendants = list(set(available_flight_attendants) - set(flight_attendant_list)) new_flight_attendant = self.select_flight_attendant_window.run(available_flight_attendants) if new_flight_attendant is not None: flight_attendant_list[-1] = new_flight_attendant flight_attendant_list += [None] else: Error_Window.run("select + to add new item to voyage") # if user confirms voyage elif user_input.lower() == "c": employees = [edit_info[CAPTAIN_INDEX]]\ + edit_info[COPILOT_LIST_INDEX]\ + [edit_info[FLIGHT_SERVICE_MANAGER_INDEX]]\ + edit_info[FLIGHT_ATTENDANT_LIST_INDEX] employee_ids = [] voyage.manned_bool = False if edit_info[CAPTAIN_INDEX] is not None: if len(edit_info[COPILOT_LIST_INDEX]) > 1: if edit_info[FLIGHT_SERVICE_MANAGER_INDEX]: voyage.manned_bool = True for employee in employees: if employee is not None: employee_ids += [employee.get_id()] voyage_info = [ edit_info[AIRCRAFT_INDEX].get_id(), voyage.get_destination_id(), voyage.get_departure_time(), voyage.flight1_number, voyage.flight2_number, employee_ids, voyage.manned_bool, voyage.id_int ] LL_API.change_voyage(voyage.get_id(), voyage_info) voyage.set_info(voyage_info) return 0
def run(self, item): edit_info = LL_API.get_edit_info(item) # Edit index must start on allowed index edit_index = 0 while edit_info[edit_index][INDEX_OF_EDIT_PERMISSION_BOOL] == False: edit_index += 1 if edit_index > len(edit_info) - 1: edit_index = 0 while True: self.display(edit_info, edit_index, BUTTONS) user_input = self.get_input() # User goes back if user_input.lower() == "b": return 0 # User moves arrow up elif user_input.lower() == "u": edit_index -= 1 if edit_index < 0: edit_index = len(edit_info) - 1 while edit_info[edit_index][INDEX_OF_EDIT_PERMISSION_BOOL] == False: edit_index -= 1 if edit_index < 0: edit_index = len(edit_info) - 1 # User moves arrow down elif user_input.lower() == "d": edit_index += 1 if edit_index > len(edit_info) - 1: edit_index = 0 while edit_info[edit_index][INDEX_OF_EDIT_PERMISSION_BOOL] == False: edit_index += 1 if edit_index > len(edit_info) - 1: edit_index = 0 # User removes info elif user_input.lower() == "r": if edit_index == JOB_INDEX: edit_info[JOB_INDEX][INDEX_OF_INFO] = "+" edit_info[RANK_INDEX][INDEX_OF_INFO] = "+" elif edit_index == RANK_INDEX: edit_info[RANK_INDEX][INDEX_OF_INFO] = "+" # User goes to a select window elif user_input == "": if edit_index == JOB_INDEX: jobs = Employee.get_job_types() job = self.select_job_window.run(jobs) edit_info[RANK_INDEX][INDEX_OF_INFO] = "+" if job == "pilot": licences = Aircraft.get_model_types() licence = self.select_licence_window.run(licences) job = job + ":" + licence edit_info[edit_index][INDEX_OF_INFO] = job elif job == "cabin_crew": edit_info[edit_index][INDEX_OF_INFO] = job elif edit_index == RANK_INDEX: if edit_info[JOB_INDEX][INDEX_OF_INFO] != "+": ranks = Employee.get_rank_types(edit_info[JOB_INDEX][INDEX_OF_INFO]) rank = self.select_rank_window.run(ranks) edit_info[edit_index][INDEX_OF_INFO] = rank else: Error_Window.run("you need to select a job before you select rank") # User confirms changes elif user_input == "c": new_info = [] for info in edit_info: new_info += [info[INDEX_OF_INFO]] item.set_info(new_info) self.change_item_func(item.get_id(), new_info) return 0 # User inputs info else: if edit_index != JOB_INDEX and edit_index != RANK_INDEX: if check_employee_input(user_input, edit_index): edit_info[edit_index][INDEX_OF_INFO] = user_input else: Error_Window.run("Invalid information")
def get_number_of_objects(self, object_id, search): return LL_API.get_number_of_objects(object_id, search)