Ejemplo n.º 1
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")
Ejemplo n.º 2
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")
Ejemplo n.º 3
0
    def vote(cls, socket, session, user):
        pass
        log.debug("Problems.vote")
        problems = session.query(orm.Problem).join(orm.LeftToVote).join(orm.User)
        problems = problems.filter(orm.LeftToVote.voter == user)
        table_problems = []
        for problem in problems:
            table_problems.append(
                [problem.id, problem.creator.login, problem.description, problem.status]
            )
        table = tabulate(
            headers=["ID", "Автор", "Описание", "Статус"],
            tabular_data=table_problems,
            tablefmt=table_format,
        )
        send(socket=socket, data=table)
        problem_id = receive(socket=socket)
        problem = problems.filter(orm.Problem.id == int(problem_id)).first()
        if not problem:
            send(socket=socket, data=ERROR)
            log.debug("Problem is not exist")
            return
        decisions = problem.decisions
        send(socket=socket, data=cls.parse_decisions(decisions))
        assessments = loads(receive(socket=socket))
        sum_om_assessments = sum(assessments.values())
        for id in assessments:
            decision_weigth = round(assessments[id] / sum_om_assessments, 2)
            decision = (
                session.query(orm.Decision).filter(orm.Decision.id == int(id)).first()
            )
            vote = orm.Vote(
                voter=user,
                decision_weigth=decision_weigth,
                decision=decision,
                decision_assessment=assessments[id],
            )

            session.add(vote)
        left_to_vote = (
            session.query(orm.LeftToVote)
            .filter(orm.LeftToVote.voter == user, orm.LeftToVote.problem == problem)
            .first()
        )
        exist_left_to_vote = (
            session.query(orm.LeftToVote)
            .filter(orm.LeftToVote.problem == problem)
            .all()
        )
        if len(exist_left_to_vote) <= 1:
            log.debug("Left to vote dont exist")
            problem.status = Status.decided.value
            session.add(problem)
        session.delete(left_to_vote)
        session.commit()
Ejemplo n.º 4
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
Ejemplo n.º 5
0
 def edit(cls, socket):
     clear()
     receive_and_print(socket=socket)
     id_ = integer_input("Введите id")
     send(socket=socket, data=id_)
     response = receive(socket=socket)
     if response == GOOD:
         while True:
             choice = menu(title="Изменение услуги",
                           options=["Название", "Цену"])
             if choice == "1":
                 send(socket=socket, data=choice)
                 name = string_input("Введите название")
                 send(socket=socket, data=name)
                 print("Успешно изменено")
                 enter_to_continue()
             elif choice == "2":
                 send(socket=socket, data=choice)
                 price = integer_input("Введите цену")
                 send(socket=socket, data=price)
                 print("Успешно изменено")
                 enter_to_continue()
             elif choice == "3":
                 send(socket=socket, data=BREAK)
                 break
     else:
         print("Неверный id")
         enter_to_continue()
Ejemplo n.º 6
0
 def admin_menu(self):
     log.debug("User.admin_menu")
     while True:
         choice = receive(socket=self.socket)
         log.debug(f"Choice {choice}")
         if choice == "1":
             log.debug("Services menu")
             Service.menu(socket=self.socket, session=self.session)
         elif choice == "2":
             log.debug("Orders menu")
             Order.menu(socket=self.socket, session=self.session, user=self.user)
         elif choice == "3":
             log.debug("Users menu")
             Users.menu(socket=self.socket, session=self.session, user=self.user)
         elif choice == "4":
             log.debug("Companies menu")
             Company.menu(
                 socket=self.socket,
                 session=self.session,
             )
         elif choice == "5":
             log.debug("Problems menu")
             Problems.menu(socket=self.socket, session=self.session, user=self.user)
         elif choice == BREAK:
             log.debug("admin_menu BREAK")
             break
Ejemplo n.º 7
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")
Ejemplo n.º 8
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")
Ejemplo n.º 9
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()
Ejemplo n.º 10
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
Ejemplo n.º 11
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")
Ejemplo n.º 12
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()
Ejemplo n.º 13
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()
Ejemplo n.º 14
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")
Ejemplo n.º 15
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()
Ejemplo n.º 16
0
 def add(cls, socket):
     clear()
     send(socket=socket, data=string_input("Введите название"))
     response = receive(socket=socket)
     if response == ERROR:
         print("Услуга с таким названием уже существует")
         enter_to_continue()
     else:
         clear()
         send(socket=socket, data=string_input("Введите название компании"))
         response = receive(socket=socket)
         if response == ERROR:
             print("Компании с таким именем не существует")
             enter_to_continue()
         else:
             clear()
             send(socket=socket,
                  data=string_input("Введите описание услуги"))
             receive(socket=socket)
             send(socket=socket, data=integer_input("Введите цену"))
             print("Услуга добавлена успешно")
             enter_to_continue()
Ejemplo n.º 17
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")
Ejemplo n.º 18
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()
Ejemplo n.º 19
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")
Ejemplo n.º 20
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")
Ejemplo n.º 21
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")
Ejemplo n.º 22
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")
Ejemplo n.º 23
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")
Ejemplo n.º 24
0
 def expert_menu(self):
     log.debug("User.expert_menu")
     while True:
         choice = receive(socket=self.socket)
         log.debug(f"Choice {choice}")
         if choice == "1":
             Problems.vote(socket=self.socket, session=self.session, user=self.user)
         elif choice == "2":
             Problems.print_voted(
                 socket=self.socket, session=self.session, user=self.user
             )
         elif choice == BREAK:
             log.debug("User.expert_menu BREAK")
             break
Ejemplo n.º 25
0
 def default_menu(self):
     log.debug("User.default_menu")
     while True:
         choice = receive(socket=self.socket)
         log.debug(f"Choice {choice}")
         if choice == "1":
             Order.add(socket=self.socket, session=self.session, user=self.user)
         elif choice == "2":
             Order.print_for_user(
                 socket=self.socket, session=self.session, user=self.user
             )
         elif choice == "3":
             Users.change_password(
                 socket=self.socket, session=self.session, user=self.user
             )
         elif choice == BREAK:
             log.debug("User.default_menu BREAK")
             break
Ejemplo n.º 26
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)
Ejemplo 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()
Ejemplo n.º 28
0
 def add(cls, socket, session, **kwargs):
     log.debug("Users.add")
     while True:
         choice = receive(socket=socket)
         log.debug(f"choice {choice}")
         if choice == BREAK:
             log.debug("Users.add BREAK")
             break
         login = receive(socket=socket)
         user = session.query(orm.User).filter(orm.User.login == login).first()
         if user:
             log.debug("Login already taken")
             send(socket=socket, data=ERROR)
         else:
             log.debug("Login is new")
             send(socket=socket, data=GOOD)
             if choice == "3":
                 position = receive(socket=socket)
                 send(socket=socket, data=GOOD)
                 log.debug(f"Position is {position}")
                 academic_degree = receive(socket=socket)
                 log.debug(f"Academic Degree is {academic_degree}")
                 send(socket=socket, data=GOOD)
                 obj = receive(socket=socket)
                 obj = loads(obj)
                 session.add(
                     orm.User(
                         login=obj["login"],
                         password=obj["password"],
                         permissions=obj["permissions"],
                         position=position,
                         academic_degree=academic_degree,
                     )
                 )
                 session.commit()
                 log.debug("Users.add END")
                 return
             obj = receive(socket=socket)
             obj = loads(obj)
             session.add(
                 orm.User(
                     login=obj["login"],
                     password=obj["password"],
                     permissions=obj["permissions"],
                 )
             )
             session.commit()
             log.debug("Users.add END")
Ejemplo 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")
Ejemplo n.º 30
0
 def sort(cls, socket, session):
     log.debug("Services.sort")
     while True:
         choice = receive(socket=socket)
         services = []
         if choice == "1":
             services = session.query(orm.Service).order_by(orm.Service.id)
         elif choice == "2":
             services = session.query(orm.Service).order_by(orm.Service.name)
         elif choice == "3":
             services = session.query(orm.Service).order_by(orm.Service.price)
         elif choice == "4":
             companies = session.query(orm.Company).filter(orm.Company.services)
             for company in companies:
                 services += company.services
         elif choice == BREAK:
             log.debug("Services.sort BREAK")
             break
         table_services = []
         for service in services:
             quantity = 0
             for order in service.orders:
                 quantity += order.quantity
             table_services.append(
                 [
                     service.id,
                     service.name,
                     service.company,
                     f"${service.price}",
                     f"{quantity} шт.",
                 ]
             )
         table = tabulate(
             headers=["ID", "Название", "Компания", "Цена", "Заказано"],
             tabular_data=table_services,
             tablefmt=table_format,
         )
         send(socket=socket, data=table)
         log.debug("Sort sent")