def edit(cls, socket, session): log.debug("Service.edit") cls.print(socket=socket, session=session) id_ = receive(socket=socket) service = session.query(orm.Service).get(id_) if service: send(socket=socket, data=GOOD) log.debug(f"ID={id_} found") while True: choice = receive(socket=socket) if choice == "1": change_ = receive(socket=socket) log.debug(f"Changing name to {change_}") service.name = change_ elif choice == "2": change_ = receive(socket=socket) log.debug(f"Changing price to {change_}") service.price = int(change_) elif choice == BREAK: log.debug("Service.edit BREAK") session.commit() break else: send(socket=socket, data=ERROR) log.debug("ID not found")
def add(cls, socket, session): log.debug("Service.add") name = receive(socket=socket) service = session.query(orm.Service).filter(orm.Service.name == name) if service.first(): log.debug("Service name already taken") send(socket=socket, data=ERROR) else: log.debug("Service name is new") send(socket=socket, data=GOOD) company_name = receive(socket=socket) company = ( session.query(orm.Company) .filter(orm.Company.name == company_name) .first() ) if not company: log.debug("Company does not exist") send(socket=socket, data=ERROR) else: send(socket=socket, data=GOOD) content = receive(socket=socket) send(socket=socket, data=GOOD) price = receive(socket=socket) log.debug(f"Service={name}, {price}") session.add( orm.Service( name=name, price=price, company=company, ) ) session.commit() log.debug("Service.add END")
def add(cls, socket): response = receive(socket=socket) if response == ERROR: print("Среди пользователей нет экспертов") enter_to_continue() return obj = {"description": string_input("Введите описание проблемы")} num = 1 obj["decisions"] = [string_input(f"Введите решение проблемы №{num}")] num += 1 decision = string_input(f"Введите решение проблемы №{num}") while decision in obj["decisions"]: print("Решения одной проблемы должны быть уникальны") decision = string_input(f"Введите решение проблемы №{num}") obj["decisions"].append(decision) while True: choice = menu(title="Добавить ещё?", options=["Да"]) if choice == "1": num += 1 decision = string_input(f"Введите решение проблемы №{num}") while decision in obj["decisions"]: print("Решения одной проблемы должны быть уникальны") decision = string_input(f"Введите решение проблемы №{num}") obj["decisions"].append(decision) elif choice == "2": send(socket=socket, data=obj) print("Проблема добавлена успешно") enter_to_continue() break
def add(cls, socket, session, user, **kwargs): log.debug("Problems.add") experts = session.query(orm.User).filter(orm.User.permissions == "expert") if not experts.all(): send(socket=socket, data=ERROR) log.debug("No experts") return else: send(socket=socket, data=GOOD) log.debug("Experts found") obj = receive(socket=socket) obj = loads(obj) log.debug(f"Got obj {obj}") problem = orm.Problem(description=obj["description"], creator=user) for decision in obj["decisions"]: decision_ = orm.Decision(description=decision, problem=problem) session.add(decision_) log.debug("Created decisions") for expert in experts: left_to_vote = orm.LeftToVote(problem=problem, voter=expert) session.add(left_to_vote) log.debug(f"Created leftToVotes") session.add(problem) session.commit() log.debug("Problems.add END")
def print(cls, socket, session): log.debug("Service.print") services = session.query(orm.Service) table_services = [] for service in services: sold = count_sold(service.orders) table_services.append( [ service.id, service.name, service.company, f"${service.price}", f"{sold} шт.", ] ) log.debug(f"Table services {table_services}") table = tabulate( headers=["ID", "Название", "Компания", "Цена", "Заказано"], tabular_data=table_services, tablefmt=table_format, ) table += "\n\n\t\tЗаказы\n\n" bar_chart_serveces = [] for service in services: money_made = count_sold(service.orders) * service.price bar_chart_serveces.append((service.name, money_made)) print(bar_chart_serveces) table += bar_chart(bar_chart_serveces, service=True) send(socket=socket, data=table) log.debug("Service.print END")
def sort(cls, socket, session): log.debug("Company.sort") while True: choice = receive(socket=socket) companies = [] if choice == "1": companies = session.query(orm.Company).order_by(orm.Company.id) elif choice == "2": companies = session.query(orm.Company).order_by(orm.Company.name) elif choice == "3": companies = session.query(orm.Company) companies = sorted( companies, key=lambda company: len(company.services), reverse=True ) elif choice == BREAK: log.debug("Services.sort BREAK") break table_companies = [] for company in companies: services_quantity = len(company.services) table_companies.append([company.id, company.name, services_quantity]) table = tabulate( headers=["ID", "Название", "Количество услуг"], tabular_data=table_companies, tablefmt=table_format, ) send(socket=socket, data=table) log.debug("Sort sent")
def change_password(cls, socket): new_password = password_input("Введите новый пароль") send(socket=socket, data=new_password) response = receive(socket=socket) if response == ERROR: print("Нельзя изменить пароль на текущий") else: print("Пароль изменен") enter_to_continue()
def add(cls, socket): clear() send(socket=socket, data=string_input("Введите название")) response = receive(socket=socket) if response == ERROR: print("Компания с таким названием уже существует") enter_to_continue() else: print("Компания добавлен успешно") enter_to_continue()
def change_password(cls, socket, session, user): log.debug("Users.change_password") new_password = receive(socket=socket) if new_password == user.password: send(socket=socket, data=ERROR) log.debug("Same password") else: send(socket=socket, data=GOOD) user.password = new_password session.commit() log.debug("Users.change_password END")
def delete(cls, socket): clear() receive_and_print(socket=socket) id_ = integer_input("Введите id") send(socket=socket, data=id_) response = receive(socket=socket) if response == GOOD: print("Проблема удалена") else: print("Неверный id") enter_to_continue()
def sort(cls, socket): while True: choice = menu( title="Сортировка компаний", options=["По id", "По названию", "По количеству услуг"], ) if choice in ("1", "2", "3"): send(socket=socket, data=choice) cls.print(socket=socket) elif choice == "4": send(socket=socket, data=BREAK) break
def sort(cls, socket): while True: choice = menu( title="Сортировка по услугам", options=["По id", "По названию", "По цене", "По компании"], ) if choice in ("1", "2", "3", "4"): send(socket=socket, data=choice) cls.print(socket=socket) elif choice == "5": send(socket=socket, data=BREAK) break
def delete(cls, socket, session): log.debug("Service.delete") cls.print(socket=socket, session=session) id_ = receive(socket=socket) service = session.query(orm.Service).get(id_) if service: send(socket=socket, data=GOOD) session.delete(service) session.commit() log.debug(f"Found and deleted ID={id_}") else: send(socket=socket, data=ERROR) log.debug("ID not found")
def add(cls, socket): clear() receive_and_print(socket=socket) service_id = integer_input("Введите id заказываемой услуги") send(socket=socket, data=service_id) response = receive(socket=socket) if response == ERROR: print("Неверный id") else: quantity = integer_input("Введите количество") send(socket=socket, data=quantity) print("Заказ добавлен успешно") enter_to_continue()
def delete(cls, socket, session, **kwargs): log.debug("Users.delete") cls.print(socket=socket, session=session) id_ = receive(socket=socket) user = session.query(orm.User).get(id_) if user: send(socket=socket, data=GOOD) session.delete(user) session.commit() log.debug(f"Found and deleted ID={id_}") else: send(socket=socket, data=ERROR) log.debug("ID not found")
def delete(cls, socket, session, user, **kwargs): log.debug("Problems.delete") cls.print(socket=socket, session=session, user=user) id_ = receive(socket=socket) problem = session.query(orm.Problem).get(id_) if problem: send(socket=socket, data=GOOD) session.delete(problem) session.commit() log.debug(f"Found and deleted ID={id_}") else: send(socket=socket, data=ERROR) log.debug("ID not found")
def add(cls, socket, session): log.debug("Company.add") name = receive(socket=socket) company = session.query(orm.Company).filter(orm.Company.name == name) if company.first(): log.debug("company name already taken") send(socket=socket, data=ERROR) else: log.debug("company name is new") send(socket=socket, data=GOOD) session.add(orm.Company(name=name)) session.commit() log.debug("Company.add END")
def delete(cls, socket, session): log.debug("Company.delete") cls.print(socket=socket, session=session) id_ = receive(socket=socket) company = session.query(orm.Company).get(id_) if company: send(socket=socket, data=GOOD) session.delete(company) session.commit() log.debug(f"Found and deleted ID={id_}") else: send(socket=socket, data=ERROR) log.debug("ID not found")
def sort(cls, socket): while True: choice = menu( title="Сортировка по заказам", options=[ "По id", "По услугам", "По покупателю", "По количеству" ], ) if "1" <= choice <= "4": send(socket=socket, data=choice) cls.print(socket=socket) elif choice == "5": send(socket=socket, data=BREAK) break
def print(cls, socket, session): log.debug("Company.print") companies = session.query(orm.Company) table_companies = [] for company in companies: services_quantity = len(company.services) table_companies.append([company.id, company.name, services_quantity]) log.debug(f"Table companies {table_companies}") table = tabulate( headers=["ID", "Название", "Количество услуг"], tabular_data=table_companies, tablefmt=table_format, ) send(socket=socket, data=table) log.debug("Company.print END")
def add(cls, socket, session, user, **kwargs): log.debug("Order.add") Service.order_print(socket=socket, session=session) service_id = receive(socket=socket) service = session.query(orm.Service).get(service_id) if service: send(socket=socket, data=GOOD) log.debug("Right id") quantity = receive(socket=socket) quantity = int(quantity) log.debug(f"Quantity {quantity}") session.add(orm.Order(customer=user, service=service, quantity=quantity)) session.commit() log.debug("Order.add END") else: send(socket=socket, data=ERROR) log.debug("Wrong id")
def login(socket): while True: choice = menu( title="Главное меню", exit_option="Выход", options=[ "Вход как администратор", "Вход как пользователь", "Вход как эксперт", ], ) if choice == "1": obj = { "login": login_input(), "password": password_input(), "permissions": "admin", } send(socket=socket, data=obj) response = receive(socket=socket) if response == GOOD: User.admin_menu(socket=socket) else: print("Неверный логин или пароль") enter_to_continue() elif choice == "2": obj = { "login": login_input(), "password": password_input(), "permissions": "default", } send(socket=socket, data=obj) response = receive(socket=socket) if response == GOOD: User.default_menu(socket=socket) else: print("Неверный логин или пароль") enter_to_continue() elif choice == "3": obj = { "login": login_input(), "password": password_input(), "permissions": "expert", } send(socket=socket, data=obj) response = receive(socket=socket) if response == GOOD: User.expert_menu(socket=socket) else: print("Неверный логин или пароль") enter_to_continue() elif choice == "4": send(socket=socket, data=BREAK) break
def print(cls, socket, session, **kwargs): log.debug("Order.print") orders = session.query(orm.Order).join(orm.User).join(orm.Service).all() table_orders = [ [ order.id, str(order.service), order.customer, order.quantity, f"${order.service.price * order.quantity}", ] for order in orders ] table = tabulate( headers=["ID", "Услуга", "Покупатель", "Количество", "Стоимость"], tabular_data=table_orders, tablefmt=table_format, ) send(socket=socket, data=table) log.debug("Order.print END")
def main_menu(self): log.debug("User.main_menu") while True: obj = receive(socket=self.socket) if obj == BREAK: log.debug("User.main_menu BREAK") break try: self.login(obj=obj) send(socket=self.socket, data=GOOD) log.debug(f"Logged in as {self.user.permissions}") if self.user.permissions == "admin": self.admin_menu() elif self.user.permissions == "default": self.default_menu() elif self.user.permissions == "expert": self.expert_menu() except AuthenticationFail: log.debug("Auth fail") send(socket=self.socket, data=ERROR)
def print(cls, socket, session, **kwargs): log.debug("Users.print") users = session.query(orm.User).all() table_users = [] for user in users: permissions = "" if user.permissions == "admin": permissions = "Администратор" elif user.permissions == "expert": permissions = "Эксперт" elif user.permissions == "default": permissions = "Покупатель" table_users.append([user.id, permissions, user.login, user.password]) table = tabulate( headers=["ID", "Права", "Логин", "Пароль"], tabular_data=table_users, tablefmt=table_format, ) send(socket=socket, data=table) log.debug("Users.print END")
def order_print(cls, socket, session): log.debug("Service.order_print") services = session.query(orm.Service) table_services = [] for service in services: table_services.append( [ service.id, service.name, service.company, f"${service.price}", ] ) log.debug(f"Table services {table_services}") table = tabulate( headers=["ID", "Название", "Компания", "Цена"], tabular_data=table_services, tablefmt=table_format, ) send(socket=socket, data=table) log.debug("Service.order_print END")
def vote(cls, socket): clear() receive_and_print(socket=socket) id_ = integer_input("Введите id") send(socket=socket, data=id_) decisions = receive(socket=socket) if decisions == ERROR: print("Неверный id") enter_to_continue() return clear() decisions = loads(decisions) for id in decisions: assessment = max_min_10_input( f"Введите оценку решению от одного до 10\n {decisions[id]}") decisions[id] = int(assessment) clear() send(socket=socket, data=decisions) print("Спасибо, ваши голоса будут учитаны") enter_to_continue()
def print(cls, socket): clear() choice = type_of_output_input( "1. Проблемы с неоконченным голосованием\n" "2. Проблемы с оконченным голосованием") if choice == "1": send(socket=socket, data=choice) clear() receive_and_print(socket=socket) enter_to_continue() elif choice == "2": clear() send(socket=socket, data=choice) clear() receive_and_print(socket=socket) send( socket=socket, data=integer_input( "Введите id проблемы для детального просмотра"), ) response = receive(socket=socket) if response == ERROR: print("Неверный id") enter_to_continue() return receive_and_print(socket=socket) enter_to_continue()
def sort(cls, socket, session, **kwargs): log.debug("Order.sort") while True: choice = receive(socket=socket) log.debug(f"Choice {choice}") orders = [] if choice == "1": orders = session.query(orm.Order).order_by(orm.Order.id) elif choice == "2": orders = ( session.query(orm.Order) .join(orm.Service) .order_by(orm.Service.name) ) elif choice == "3": orders = ( session.query(orm.Order).join(orm.User).order_by(orm.User.login) ) elif choice == "4": orders = session.query(orm.Order).order_by(orm.Order.quantity) elif choice == BREAK: log.debug("Order.sort BREAK") break table_orders = [ [ order.id, str(order.service), order.customer, order.quantity, f"${order.service.price * order.quantity}", ] for order in orders ] table = tabulate( headers=["ID", "Услуга", "Покупатель", "Количество", "Стоимость"], tabular_data=table_orders, tablefmt=table_format, ) send(socket=socket, data=table) log.debug("Sort sent")
def edit(cls, socket, session): log.debug("Company.edit") cls.print(socket=socket, session=session) id_ = receive(socket=socket) company = session.query(orm.Company).get(id_) if company: send(socket=socket, data=GOOD) log.debug(f"ID={id_} found") while True: choice = receive(socket=socket) if choice == "1": change_ = receive(socket=socket) log.debug(f"Changing name to {change_}") company.name = change_ session.commit() elif choice == BREAK: log.debug("Company.edit BREAK") session.commit() break else: send(socket=socket, data=ERROR) log.debug("ID not found")