Esempio n. 1
0
 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")
Esempio n. 2
0
 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")
Esempio n. 3
0
 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
Esempio n. 4
0
 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")
Esempio n. 5
0
 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")
Esempio n. 6
0
 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")
Esempio n. 7
0
 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()
Esempio n. 8
0
 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()
Esempio n. 9
0
 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")
Esempio n. 10
0
 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()
Esempio n. 11
0
 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
Esempio n. 12
0
 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
Esempio n. 13
0
 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")
Esempio n. 14
0
 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()
Esempio n. 15
0
 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")
Esempio n. 16
0
 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")
Esempio n. 17
0
 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")
Esempio n. 18
0
 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")
Esempio n. 19
0
 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
Esempio n. 20
0
 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")
Esempio n. 21
0
 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")
Esempio n. 22
0
    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
Esempio n. 23
0
 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")
Esempio n. 24
0
 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)
Esempio n. 25
0
 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")
Esempio n. 26
0
 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")
Esempio n. 27
0
    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()
Esempio n. 28
0
    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()
Esempio n. 29
0
 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")
Esempio n. 30
0
 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")