Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Логика.
- # Выработка человека по 10 бальной системе.
- # Стоимость проекта. Допустим 100000 руб.
- # Количество дней на проект. 100 дней
- # Процент госорган. 60%
- #
- # Выработка человека 1. Час стоимости 360 рублей.
- # Выработка человека 2. Час стоимости 370 рублей.
- # Выработка человека 3. Час стоимости 380 рублей.
- # Выработка человека 4. Час стоимости 390 рублей.
- # Выработка человека 5. Час стоимости 400 рублей.
- # Выработка человека 6. Час стоимости 410 рублей.
- # Выработка человека 7. Час стоимости 420 рублей.
- # Выработка человека 8. Час стоимости 430 рублей.
- # Выработка человека 9. Час стоимости 440 рублей.
- # Выработка человека 10. Час стоимости 450 рублей.
- # Допустим проект стоит 100000.
- # Человеку платим 350 рублей за час.
- #
- # Что нам надо понять?
- # Нужно понять, сколько платить сотруднику, чтобы получить прибыль.
- # Это нужно для того, чтобы понять, может нам дешевле нанять квалифицированных специалистов
- # Итог. Прибыль, такая то.
- class Worker:
- """ Класс работника """
- SALARY_LEVEL = {
- "0": 350,
- "1": 360,
- "2": 370,
- "3": 390,
- "4": 390,
- "5": 400,
- "6": 410,
- "7": 420,
- "8": 430,
- "9": 440,
- "10": 450
- }
- def __init__(self, name, bal):
- """
- Принимает bal - как уровень работника
- self.SALARY_LEVEL[str(bal)] - обращение к словарю, по ключу bal.
- И в с-во self.salary - устанавливаем зарплату по уровню
- self.bal = Хранит уровень сотрудника
- self.days = 0 Хранит общее количество отработанных дней
- self.hours = 0 Хранит общее количество отработанных часов
- """
- self.salary = self.SALARY_LEVEL[str(bal)]
- self.bal = bal
- self.days = 0
- self.hours = 0
- self.name = name
- def button(self):
- """
- Ф-ия которая добавляет 1 рабочий день для сотрудника.
- Например, когда нажата кнопка на сайте "Засчитать день"
- """
- self.days += 1
- def add_hours(self, hours):
- """
- Ф-ия которая добавляет часы работы к общим часам работы (self.hours)
- """
- self.hours += hours
- def salary_days(self):
- """
- Функция, которая считает зарплату за все дни. Вызывается в день зарплаты.
- Например, на 30 день работы. После вызова ф-ии, количество дней обнуляется.
- """
- if self.days < 30:
- raise ValueError("День зарплаты не настал")
- salary = (self.salary * self.hours) * self.days
- self.days = 0
- return salary
- class Employer:
- """ Класс работодателя """
- def __init__(self):
- self.workers = []
- def add_worker(self, worker: Worker):
- """
- Прикрепляет работника к работодателю.
- worker - ссылка (экземпляр класс) на работника.
- worker - создан через класс Worker.
- """
- self.workers.append(worker)
- def list_workers(self):
- """ Выводит список сотрудников """
- for num, worker in enumerate(self.workers):
- print(f"№ Работника: {num}. Имя: {worker.name}, зарплата работника: {worker.salary}, уровень: {worker.bal}")
- def change_level(self, num, bal):
- """
- :param num: Номер нашего сотрудника. Номер можно посмотреть с помощью ф-ии list_workers()
- :param bal: Новый уровень нашего работника
- """
- self.workers[num].bal = bal
- self.workers[num].salary = Worker.SALARY_LEVEL[str(bal)]
- class Project:
- """ Класс проекта """
- def __init__(self, count_days, cost, performer, tax):
- """
- :param count_days: дней на выполнение
- :param cost: стоимость разработки
- :param performer: кто будет исполнителем (Ссылка на Работодателя)
- :param tax: ссылка на налог
- """
- self.count_days = count_days
- self.cost = cost
- self.performer = performer
- self.tax = tax
- def cost_project(self, days):
- """ Ф-ия считает стоимость проекта с учетом налога """
- return self.cost - self.tax.calculate(self.cost) - self.development_cost(days)
- def development_cost(self, days):
- """
- Будет считать стоимость разработки при текущем наличии сотрудников.
- """
- hours = 8 # Норма работы 1 сотрудника
- workers = self.performer.workers # Получаем список сотрудников из класса работодателя (performer)
- development_cost = 0 # Общая стоимость разработки
- for worker in workers: # Цикл перебора сотрудников
- development_cost += (worker.salary * hours) * days
- return development_cost
- def salary_workers(self, days):
- hours = 8
- workers = self.performer.workers # Получаем список сотрудников из класса работодателя (performer)
- for worker in workers: # Цикл перебора сотрудников
- print(f"{worker.name}-{worker.bal} - Зарплата: {(worker.salary * hours) * days}")
- # Берем зарплату работника, умножаем на 8 (hours) и умножаем на количество дней на выполнение.
- # Таким образом, посчитаем, сколько нужно выплатить З\П на сотрудника за всё время выполнения проекта.
- class Tax:
- """ Класс налогов """
- def __init__(self, name, percent):
- self.name = name
- self.percent = percent
- def calculate(self, total):
- """
- :param total: Стоимость проекта
- :return: Возвращать количество денег сколько уйдет налоговой
- """
- return (total / 100) * self.percent
- employer = Employer() # Работодатель
- cost_project = int(input("Введите стоимость проекта: "))
- count_days = int(input("Введите количество дней на выполнение проекта (подразумеваемое): "))
- procent = int(input("Введите процент для налоговой: "))
- count_workers = int(input("Введите количество работников: "))
- for i in range(count_workers):
- name = input("Введите имя работника: ")
- level = int(input("Введите уровень работника: "))
- employer.add_worker(
- Worker(name, level)
- )
- print()
- tax = Tax("ООО Налоговая", procent)
- project = Project(100, cost_project, employer, tax)
- print(f"Общая З\П сотрудников: {project.development_cost(count_days)}")
- print(f"Это сделано {len(employer.workers)} работниками")
- project.salary_workers(count_days)
- print(f"Стоимость проекта после вычета налога и ЗП сотрудников {project.cost_project(count_days)} рублей")
- if project.cost_project(count_days) < 0:
- print(f"""
- Нам не выгодно брать этот проект.
- Мы уйдем в минус на {project.cost_project(count_days)} рублей
- """)
- else:
- print(f"""
- Нам выгодно брать этот проект.
- Наша прибыль составит {project.cost_project(count_days)} рублей
- """)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement