def open_menu_option(self, option): """ Choosing server action in regard to given option by user :param option: Selected menu option """ if option == ui.ServerMenu.add_terminal.number: self.show_add_terminal_ui() elif option == ui.ServerMenu.exit_menu.number: self.__server_active = False elif option == ui.ServerMenu.remove_terminal.number: self.show_remove_terminal_ui() elif option == ui.ServerMenu.add_worker.number: self.show_add_worker_ui() elif option == ui.ServerMenu.remove_worker.number: self.show_remove_worker_ui() elif option == ui.ServerMenu.add_card_to_worker.number: self.show_assign_card_ui() elif option == ui.ServerMenu.remove_worker_card.number: self.show_unassign_card_ui() elif option == ui.ServerMenu.show_workers.number: self.show_data(self.server.get_workers().values()) elif option == ui.ServerMenu.show_logs.number: self.show_data(self.server.get_logs().values()) elif option == ui.ServerMenu.show_terminals.number: self.show_data(self.server.get_terminals().values()) elif option == ui.ServerMenu.generate_reports.number: self.show_reports_generate_menu() elif option == ui.ServerMenu.tracking_activity.number: self.show_tracking_activity_menu() else: self.incorrect_option_msg() ui.read_data(ui.WAIT_FOR_INPUT)
def read_literal(prompt): literal = ui.read_data(prompt) while any(char.isdigit() for char in literal) or len(literal.strip()) < 2: ui.show_msg(ui.INCORRECT_LITERALS_INPUT) literal = ui.read_data(prompt) return literal.upper()
def read_digit(prompt): """ Read user input data until it is not empty and literal is digit :param prompt: Prompt text used in input :return: Digit literal """ digit = ui.read_data(prompt) while not digit.isdigit(): ui.show_msg(ui.INCORRECT_DIGIT_INPUT) digit = ui.read_data(prompt) return digit
def read_literal(prompt): """ Read user input data until is not empty and not single char and literal is not digit :param prompt: Prompt text used in input :return: Literal converted to upper case """ literal = ui.read_data(prompt) while any(char.isdigit() for char in literal) or len(literal.strip()) < 2: ui.show_msg(ui.INCORRECT_LITERALS_INPUT) literal = ui.read_data(prompt) return literal.upper()
def log_from_day_for_worker(self): worker_id = ui.read_data(ui.WORKER_ID_INPUT) date = self.read_player_date_input() if date is not None: generated_data = self.server.report_log_from_day_worker( worker_id, True, date) self.show_data(generated_data)
def show_unassign_card_ui(self): term_id = ui.read_data(ui.CARD_ID_INPUT) try: worker_id = self.server.unassign_card(term_id) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.REMOVED_CARD + worker_id)
def show_remove_worker_ui(self): worker_id = ui.read_data(ui.WORKER_ID_INPUT) try: self.server.remove_worker(worker_id) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.REMOVED_WORKER)
def show_remove_terminal_ui(self): term_guid = ui.read_data(ui.TERM_GUID_INPUT) try: self.server.remove_term(term_guid) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.REMOVED_TERM)
def work_time_from_day_for_worker(self): worker_id = ui.read_data(ui.WORKER_ID_INPUT) date = self.read_player_date_input() if date is not None: generated_data = self.server.report_work_time_from_day_worker( worker_id, date) ui.show_msg(ui.SEPARATOR) ui.show_msg(generated_data) ui.show_msg(ui.SEPARATOR)
def show_assign_card_ui(self): worker_guid = ui.read_data(ui.WORKER_ID_INPUT) card_guid = ServerController.read_digit(ui.CARD_ID_INPUT) try: self.server.assign_card(card_guid, worker_guid) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.ADDED_CARD)
def show_add_terminal_ui(self): term_guid = ServerController.read_digit(ui.TERM_GUID_INPUT) term_name = ui.read_data(ui.TERM_NAME_INPUT) try: self.server.add_term(term_guid, term_name) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.ADDED_TERM)
def log_from_day_for_worker(self): """ Take day and worker GUID from user. Generate logs report for given day and worker GUID. Show generated data in UI """ worker_id = ui.read_data(ui.WORKER_ID_INPUT) date = self.read_player_date_input() if date is not None: generated_data = self.server.report_log_from_day_worker( worker_id, True, date) self.show_data(generated_data)
def show_unassign_card_ui(self): """ Show UI for unassigning card from worker. If parameters from user are correct then unassign card from worker """ term_id = ui.read_data(ui.CARD_ID_INPUT) try: worker_id = self.server.unassign_card(term_id) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.REMOVED_CARD + worker_id)
def show_remove_worker_ui(self): """ Show UI for removing worker. If parameters from user are correct then remove worker from database """ worker_id = ui.read_data(ui.WORKER_ID_INPUT) try: self.server.remove_worker(worker_id) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.REMOVED_WORKER)
def show_remove_terminal_ui(self): """ Show UI for removing terminal. If parameters from user are correct then remove terminal from database """ term_guid = ui.read_data(ui.TERM_GUID_INPUT) try: self.server.remove_term(term_guid) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.REMOVED_TERM)
def read_player_date_input(): date_str = ui.read_data(ui.DATE_INPUT) if date_str == "": return datetime.now() try: date = datetime.strptime(date_str, "%Y-%m-%d") return date except ValueError: ui.show_msg(ui.INCORRECT_DATE_FORMAT + datetime.now().date().__str__()) return None
def show_add_terminal_ui(self): """ Show UI for adding new terminal. If parameters from user are correct then add new terminal to database """ term_guid = ServerController.read_digit(ui.TERM_GUID_INPUT) term_name = ui.read_data(ui.TERM_NAME_INPUT) try: self.server.add_term(term_guid, term_name) except DataInputError as err: ui.show_msg(err.message) else: ui.show_msg(ui.ADDED_TERM)
def work_time_from_day_for_worker(self): """ Take day and worker GUID from user. Generate work time report from given day and worker GUI. Show generated data in UI """ worker_id = ui.read_data(ui.WORKER_ID_INPUT) date = self.read_player_date_input() if date is not None: generated_data = self.server.report_work_time_from_day_worker( worker_id, date) ui.show_msg(ui.SEPARATOR) ui.show_msg(generated_data) ui.show_msg(ui.SEPARATOR)
def read_player_date_input(): """ Read player data input. If incorrect value or format then show message about it in UI :return: Readed date <datatime> or None if give incorrect """ date_str = ui.read_data(ui.DATE_INPUT) if date_str == "": return datetime.now() try: date = datetime.strptime(date_str, "%Y-%m-%d") return date except ValueError: ui.show_msg(ui.INCORRECT_DATE_FORMAT + datetime.now().date().__str__()) return None
def read_digit(prompt): digit = ui.read_data(prompt) while not digit.isdigit(): ui.show_msg(ui.INCORRECT_DIGIT_INPUT) digit = ui.read_data(prompt) return digit