class AirplaneLL(LogicLayer): def __init__(self): self.IOAPI = IOAPI() super().__init__() def get_input_type(self, field_index): if field_index in [0, 1, 2]: return str if field_index == 3: return int def is_valid_input(self, field_index, new_input): if field_index == 0: return self.is_only_letters(new_input) and new_input != "" elif field_index == 3: return new_input.isdigit() else: return True def get_input_specifacation(self, field_index): if field_index == 0: return "insert the name of the airplane" elif field_index == 1: return "insert the name of the airplane's manufacturer" elif field_index == 2: return "insert the type of the airplane" elif field_index == 3: return "insert the amount of seats in the airplane" def get_schedule(self, airplane): schedule = [] for voyage in self.IOAPI.get_voyages(): if voyage.airplane == airplane.get_id(): schedule.append((self.str_to_datetime(voyage.departure_time), self.str_to_datetime(voyage.return_time))) return schedule def get_all(self): return self.IOAPI.get_airplanes() def add(self, airplane): self.IOAPI.add_airplane(airplane) # TODO: make this work and consolidate the get_manufacturer function above def set_sorting_method(self, sorting_method): self.load_asset_list() if sorting_method == AirplaneSortingMethods.ALL_AIRPLANES: self.asset_list.sort(key=lambda plane: plane.get_id()) elif sorting_method == AirplaneSortingMethods.ONLY_IN_USE: self.asset_list = list( filter(lambda plane: self.in_use(plane), self.asset_list)) elif sorting_method == AirplaneSortingMethods.ONLY_NOT_IN_USE: self.asset_list = list( filter(lambda plane: not self.in_use(plane), self.asset_list)) elif sorting_method == AirplaneSortingMethods.BY_NAME: self.asset_list.sort(key=lambda plane: plane.name.lower()) elif sorting_method == AirplaneSortingMethods.BY_MANUFACTURER: self.asset_list.sort(key=lambda plane: plane.manufacturer.lower())
def __init__(self): self.IOAPI = IOAPI() super().__init__()
class EmployeeLL(LogicLayer): def __init__(self): self.IOAPI = IOAPI() super().__init__() def get_pilots(self): return self.IOAPI.get_pilots() def is_pilot(self, employee): return employee.job_type == "Captain" or employee.job_type == "Co Pilot" def get_attendants(self): return self.IOAPI.get_attendants() def get_all(self): return self.IOAPI.get_employees() def get_by_id(self, item_id): return self.IOAPI.get_employee_by_id(item_id) def add(self, employee): self.IOAPI.add_employee(employee) def is_unique_ssn(self, new_ssn): employee_list = self.get_all() try: self.IOAPI.employee.employees[new_ssn] return False except KeyError: return True def show_busy_destination(self, departure_str, arrival_str): busy_destination = self.get_is_busy_and_free(self.get_all(), departure_str, arrival_str)[0] return_list = [] for employee in busy_destination: return_list.append(str(employee[0]) + " " + str(employee[1].abrev)) return return_list def check_time_table(self, time_table, departure_time, arrival_time): DEPARTURE = 0 ARRIVAL = 1 if len(time_table) == 0: return True if time_table[0][DEPARTURE] > arrival_time: return True if time_table[-1][ARRIVAL] < departure_time: return True for i in range(len(time_table)): if time_table[i + 1][DEPARTURE] > arrival_time: if time_table[i][ ARRIVAL] < departure_time + datetime.timedelta(day=1): return True else: return False def is_valid_input(self, field_index, new_input): if field_index == 0: return self.is_only_letters(new_input) and new_input != "" elif field_index == 1: return new_input.isdigit() and self.is_unique_ssn( new_input) and new_input != "" elif field_index in [3, 4]: return self.is_only_digits(new_input) else: return True def get_input_type(self, field_index): return str def get_input_specification(self, field_index): if field_index == 0: return "insert the name of the new employee" elif field_index == 1: return "insert the social security number of the new employee" elif field_index == 2: return "insert the address of the new employee" elif field_index == 2: return "insert the home phone of the new employee" elif field_index == 3: return "insert the mobile phone of the new employee" elif field_index == 4: return "insert the email address of the new employee" elif field_index == 5: return "insert the plane type the employee is allowed to operate(leave empty if attendant)" elif field_index == 6: return "insert the title of the new employee's position" def set_sorting_method(self, sorting_method): self.load_asset_list() if sorting_method == EmployeeSortingMethods.ALL_EMPLOYEES: self.asset_list.sort(key=lambda e: e.name) elif sorting_method == EmployeeSortingMethods.PILOTS: self.asset_list = list( filter(lambda employee: employee.is_pilot(), self.asset_list)) elif sorting_method == EmployeeSortingMethods.ATTENDANTS: self.asset_list = list( filter(lambda employee: employee.is_attendant(), self.asset_list)) elif sorting_method == EmployeeSortingMethods.IS_WORKING: self.asset_list = list( filter(lambda employee: self.in_use(employee), self.asset_list)) elif sorting_method == EmployeeSortingMethods.IS_AVAILABLE: self.asset_list = list( filter(lambda employee: not self.in_use(employee), self.asset_list)) def get_week_schedule(self, asset, week_start, week_end): schedule = [] for voyage in asset.time_table: voyage = self.IOAPI.get_voyage_by_id(voyage) if voyage.departure_time > week_start and voyage.return_time < week_end: schedule.append(voyage) return voyage def get_pilots_ordered_by_plane_type(self): total = [] for plane_type in self.IOAPI.employee.plane_types.values(): for pilot in plane_type: total.append(self.get_by_id(pilot)) return total
def __init__(self): self.ioAPI = IOAPI() self.destLL = DestinationLL(self.ioAPI) self.staffLL = StaffMemberLL(self.ioAPI) self.voyageLL = VoyageLL(self.ioAPI) self.airplaneLL = AirplaneLL(self.ioAPI)
class DestinationLL(LogicLayer): def __init__(self): self.IOAPI = IOAPI() super().__init__() def get_all(self): destination_list = self.IOAPI.get_destinations() return sorted(destination_list, key=lambda k: k.country) def add(self, destination): self.IOAPI.add_destination(destination) def save(self): self.IOAPI.save_destinations() def is_unique_abreviation(self, new_abreviation): destination_list = self.get_all() for destination in destination_list: if destination.abrev == new_abreviation: return False return True def get_input_specifacation(self, field_index): if field_index == 0: return "insert name of the new destination's country" elif field_index == 1: return "insert the name of the new destination's airport" elif field_index == 2: return "insert the abreviation for your airport" elif field_index == 3: return "insert the time it takes to fly to the new destination" elif field_index == 4: return "insert the distance from Iceland" elif field_index == 5: return "insert the name of the new destination's contanct" elif field_index == 6: return "insert the phone number of the new destination's contanct" def get_input_type(self, field_index): return str def is_valid_input(self, field_index, new_input): if field_index == 0: # Country return self.is_only_letters(new_input) and new_input != "" elif field_index == 1: # Airport return self.is_only_letters(new_input) and new_input != "" elif field_index == 2: # Airport Abbreviation return self.is_unique_abreviation(new_input) and new_input != "" elif field_index == 3: # Time return self.is_time_format(new_input) and new_input != "" elif field_index == 4: # Distance return new_input.isdigit() and new_input != "" elif field_index == 5: # Contact name return self.is_only_letters(new_input) elif field_index == 6: # Contact number return self.is_only_digits(new_input) else: return True def set_sorting_method(self, sorting_method): if sorting_method == DestinationSortingMethods.BY_COUNTRY: self.asset_list.sort(key=lambda destination: destination.country) elif sorting_method == DestinationSortingMethods.BY_FLIGHT_TIME: self.asset_list.sort( key=lambda destination: destination.flight_time) elif sorting_method == DestinationSortingMethods.BY_FLIGHT_DISTANCE: self.asset_list.sort( key=lambda destination: destination.flight_dist)