Advertisement
SomeBody_Aplle

Untitled

Jun 17th, 2023
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.04 KB | None | 0 0
  1. # Логика.
  2. # Выработка человека по 10 бальной системе.
  3. # Стоимость проекта. Допустим 100000 руб.
  4. # Количество дней на проект. 100 дней
  5. # Процент госорган. 60%
  6. #
  7. # Выработка человека 1. Час стоимости 360 рублей.
  8. # Выработка человека 2. Час стоимости 370 рублей.
  9. # Выработка человека 3. Час стоимости 380 рублей.
  10. # Выработка человека 4. Час стоимости 390 рублей.
  11. # Выработка человека 5. Час стоимости 400 рублей.
  12. # Выработка человека 6. Час стоимости 410 рублей.
  13. # Выработка человека 7. Час стоимости 420 рублей.
  14. # Выработка человека 8. Час стоимости 430 рублей.
  15. # Выработка человека 9. Час стоимости 440 рублей.
  16. # Выработка человека 10. Час стоимости 450 рублей.
  17. # Допустим проект стоит 100000.
  18. # Человеку платим 350 рублей за час.
  19. #
  20. # Что нам надо понять?
  21. # Нужно понять, сколько платить сотруднику, чтобы получить прибыль.
  22. # Это нужно для того, чтобы понять, может нам дешевле нанять квалифицированных специалистов
  23.  
  24. # Итог. Прибыль, такая то.
  25.  
  26. class Worker:
  27. """ Класс работника """
  28.  
  29. SALARY_LEVEL = {
  30. "0": 350,
  31. "1": 360,
  32. "2": 370,
  33. "3": 390,
  34. "4": 390,
  35. "5": 400,
  36. "6": 410,
  37. "7": 420,
  38. "8": 430,
  39. "9": 440,
  40. "10": 450
  41. }
  42.  
  43. def __init__(self, name, bal):
  44. """
  45. Принимает bal - как уровень работника
  46.  
  47. self.SALARY_LEVEL[str(bal)] - обращение к словарю, по ключу bal.
  48. И в с-во self.salary - устанавливаем зарплату по уровню
  49.  
  50. self.bal = Хранит уровень сотрудника
  51.  
  52. self.days = 0 Хранит общее количество отработанных дней
  53. self.hours = 0 Хранит общее количество отработанных часов
  54. """
  55. self.salary = self.SALARY_LEVEL[str(bal)]
  56. self.bal = bal
  57. self.days = 0
  58. self.hours = 0
  59. self.name = name
  60.  
  61. def button(self):
  62. """
  63. Ф-ия которая добавляет 1 рабочий день для сотрудника.
  64. Например, когда нажата кнопка на сайте "Засчитать день"
  65. """
  66. self.days += 1
  67.  
  68. def add_hours(self, hours):
  69. """
  70. Ф-ия которая добавляет часы работы к общим часам работы (self.hours)
  71. """
  72. self.hours += hours
  73.  
  74. def salary_days(self):
  75. """
  76. Функция, которая считает зарплату за все дни. Вызывается в день зарплаты.
  77. Например, на 30 день работы. После вызова ф-ии, количество дней обнуляется.
  78. """
  79. if self.days < 30:
  80. raise ValueError("День зарплаты не настал")
  81. salary = (self.salary * self.hours) * self.days
  82. self.days = 0
  83. return salary
  84.  
  85.  
  86. class Employer:
  87. """ Класс работодателя """
  88.  
  89. def __init__(self):
  90. self.workers = []
  91.  
  92. def add_worker(self, worker: Worker):
  93. """
  94. Прикрепляет работника к работодателю.
  95. worker - ссылка (экземпляр класс) на работника.
  96. worker - создан через класс Worker.
  97. """
  98. self.workers.append(worker)
  99.  
  100. def list_workers(self):
  101. """ Выводит список сотрудников """
  102. for num, worker in enumerate(self.workers):
  103. print(f"№ Работника: {num}. Имя: {worker.name}, зарплата работника: {worker.salary}, уровень: {worker.bal}")
  104.  
  105. def change_level(self, num, bal):
  106. """
  107. :param num: Номер нашего сотрудника. Номер можно посмотреть с помощью ф-ии list_workers()
  108. :param bal: Новый уровень нашего работника
  109. """
  110. self.workers[num].bal = bal
  111. self.workers[num].salary = Worker.SALARY_LEVEL[str(bal)]
  112.  
  113.  
  114. class Project:
  115. """ Класс проекта """
  116.  
  117. def __init__(self, count_days, cost, performer, tax):
  118. """
  119. :param count_days: дней на выполнение
  120. :param cost: стоимость разработки
  121. :param performer: кто будет исполнителем (Ссылка на Работодателя)
  122. :param tax: ссылка на налог
  123. """
  124. self.count_days = count_days
  125. self.cost = cost
  126. self.performer = performer
  127. self.tax = tax
  128.  
  129. def cost_project(self, days):
  130. """ Ф-ия считает стоимость проекта с учетом налога """
  131. return self.cost - self.tax.calculate(self.cost) - self.development_cost(days)
  132.  
  133. def development_cost(self, days):
  134. """
  135. Будет считать стоимость разработки при текущем наличии сотрудников.
  136. """
  137. hours = 8 # Норма работы 1 сотрудника
  138. workers = self.performer.workers # Получаем список сотрудников из класса работодателя (performer)
  139. development_cost = 0 # Общая стоимость разработки
  140. for worker in workers: # Цикл перебора сотрудников
  141. development_cost += (worker.salary * hours) * days
  142. return development_cost
  143.  
  144. def salary_workers(self, days):
  145. hours = 8
  146. workers = self.performer.workers # Получаем список сотрудников из класса работодателя (performer)
  147. for worker in workers: # Цикл перебора сотрудников
  148. print(f"{worker.name}-{worker.bal} - Зарплата: {(worker.salary * hours) * days}")
  149. # Берем зарплату работника, умножаем на 8 (hours) и умножаем на количество дней на выполнение.
  150. # Таким образом, посчитаем, сколько нужно выплатить З\П на сотрудника за всё время выполнения проекта.
  151.  
  152.  
  153. class Tax:
  154. """ Класс налогов """
  155.  
  156. def __init__(self, name, percent):
  157. self.name = name
  158. self.percent = percent
  159.  
  160. def calculate(self, total):
  161. """
  162. :param total: Стоимость проекта
  163. :return: Возвращать количество денег сколько уйдет налоговой
  164. """
  165. return (total / 100) * self.percent
  166.  
  167.  
  168. employer = Employer() # Работодатель
  169.  
  170. cost_project = int(input("Введите стоимость проекта: "))
  171. count_days = int(input("Введите количество дней на выполнение проекта (подразумеваемое): "))
  172. procent = int(input("Введите процент для налоговой: "))
  173. count_workers = int(input("Введите количество работников: "))
  174. for i in range(count_workers):
  175. name = input("Введите имя работника: ")
  176. level = int(input("Введите уровень работника: "))
  177. employer.add_worker(
  178. Worker(name, level)
  179. )
  180. print()
  181.  
  182. tax = Tax("ООО Налоговая", procent)
  183. project = Project(100, cost_project, employer, tax)
  184.  
  185. print(f"Общая З\П сотрудников: {project.development_cost(count_days)}")
  186. print(f"Это сделано {len(employer.workers)} работниками")
  187. project.salary_workers(count_days)
  188. print(f"Стоимость проекта после вычета налога и ЗП сотрудников {project.cost_project(count_days)} рублей")
  189.  
  190. if project.cost_project(count_days) < 0:
  191. print(f"""
  192. Нам не выгодно брать этот проект.
  193. Мы уйдем в минус на {project.cost_project(count_days)} рублей
  194. """)
  195. else:
  196. print(f"""
  197. Нам выгодно брать этот проект.
  198. Наша прибыль составит {project.cost_project(count_days)} рублей
  199. """)
  200.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement