1
1

start_factory.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import datetime
  2. from src.models.transaction_model import transaction_model
  3. from src.models.warehouse_model import warehouse_model
  4. from src.models.recipe_model import recipe_model
  5. from src.models.ingredient_model import ingredient_model
  6. from src.models.nomenclature_group_model import nomenclature_group_model
  7. from src.models.measurement_unit_model import measurement_unit_model
  8. from src.models.nomenclature_model import nomenclature_model
  9. from src.settings.settings import settings
  10. from src.storage.storage import storage
  11. from src.validation.validator import validator
  12. #
  13. # Класс для обработки начало работы приложения
  14. #
  15. class start_factory:
  16. __options: settings = None
  17. __storage: storage = None
  18. __vtor = validator()
  19. def __init__(self, _options: settings, _storage: storage = None) -> None:
  20. self.__vtor.check_type(_options, settings)
  21. self.__vtor.check_type(_storage, storage)
  22. self.__options = _options
  23. self.__storage = _storage
  24. def __save(self, key: str, items: list):
  25. """
  26. Сохранить данные
  27. Args:
  28. key (str): ключ доступ
  29. items (list): список
  30. """
  31. self.__vtor.check_type(key, str)
  32. if self.__storage is None:
  33. self.__storage = storage()
  34. self.__storage.data[key] = items
  35. @property
  36. def storage(self):
  37. """
  38. Ссылка на объект хранилище данных
  39. Returns:
  40. _type_: _description_
  41. """
  42. return self.__storage
  43. @staticmethod
  44. def create_recipes():
  45. """
  46. Фабричный метод Создать список рецептов
  47. """
  48. result = []
  49. g = measurement_unit_model.create_g()
  50. pcs = measurement_unit_model.create_pcs()
  51. group = nomenclature_group_model("group")
  52. ingredients = [
  53. ingredient_model(
  54. "Мука", nomenclature_model("Мука", "Мука пшеничная", g, group), 100, g
  55. ),
  56. ingredient_model(
  57. "Сахар", nomenclature_model("Сахар", "Сахарный песок", g, group), 80, g
  58. ),
  59. ingredient_model(
  60. "Масло", nomenclature_model("Масло", "Масло сливочное", g, group), 70, g
  61. ),
  62. ingredient_model(
  63. "Яйцо", nomenclature_model("Яйцо", "Яйцо куриное", pcs, group), 1, pcs
  64. ),
  65. ingredient_model(
  66. "Ванилин",
  67. nomenclature_model("Ванилин", "Ванилин продуктовый", g, group),
  68. 5,
  69. g,
  70. ),
  71. ]
  72. steps = [
  73. "Как испечь вафли хрустящие в вафельнице? Подготовьте необходимые продукты. Из данного количества у меня получилось 8 штук диаметром около 10 см.",
  74. "Масло положите в сотейник с толстым дном. Растопите его на маленьком огне на плите, на водяной бане либо в микроволновке.",
  75. "Добавьте в теплое масло сахар. Перемешайте венчиком до полного растворения сахара. От тепла сахар довольно быстро растает.",
  76. "Добавьте в масло яйцо. Предварительно все-таки проверьте масло, не горячее ли оно, иначе яйцо может свариться. Перемешайте яйцо с маслом до однородности.",
  77. "Всыпьте муку, добавьте ванилин.",
  78. "Перемешайте массу венчиком до состояния гладкого однородного теста.",
  79. "Разогрейте вафельницу по инструкции к ней. У меня очень старая, еще советских времен электровафельница. Она может и не очень красивая, но печет замечательно! Я не смазываю вафельницу маслом, в тесте достаточно жира, да и к ней уже давно ничего не прилипает. Но вы смотрите по своей модели. Выкладывайте тесто по столовой ложке. Можно класть немного меньше теста, тогда вафли будут меньше и их получится больше.",
  80. "Пеките вафли несколько минут до золотистого цвета. Осторожно откройте вафельницу, она очень горячая! Снимите вафлю лопаткой. Горячая она очень мягкая, как блинчик. Но по мере остывания становится твердой и хрустящей. Такие вафли можно свернуть трубочкой. Но делать это надо сразу же после выпекания, пока она мягкая и горячая, потом у вас ничего не получится, вафля поломается. Приятного аппетита!",
  81. ]
  82. result.append(
  83. recipe_model.create("Вафли хрустящие в вафельнице", ingredients, steps)
  84. )
  85. return result
  86. def create(self):
  87. """
  88. В зависимости от настроек, сформировать начальную номенклатуру
  89. Returns:
  90. _type_: _description_
  91. """
  92. result = []
  93. if self.__options.is_first_run:
  94. self.__options.is_first_run = False
  95. # Формируем и зпоминаем номеклатуру
  96. res = self.create_recipes()
  97. ingredients = set()
  98. for x in res:
  99. for ing in x.ingredients:
  100. ingredients.add(ing)
  101. recipes = res.copy()
  102. nomenclatures = set()
  103. for ingredient in ingredients:
  104. nomenclatures.add(ingredient.nomenclature)
  105. result = nomenclatures
  106. munits = set([x.measurement_unit for x in nomenclatures])
  107. nomgroups = set([x.nomenclature_group for x in nomenclatures])
  108. self.__save(storage.nomenclature_key(), nomenclatures)
  109. self.__save(storage.measurement_unit_key(), munits)
  110. self.__save(storage.nomenclature_group_key(), nomgroups)
  111. self.__save(storage.ingredient_key(), ingredients)
  112. self.__save(storage.recipe_key(), recipes)
  113. return result
  114. def create_transactions(self):
  115. units = [
  116. measurement_unit_model.create_g(),
  117. measurement_unit_model.create_kg(),
  118. measurement_unit_model.create_l(),
  119. measurement_unit_model.create_ml(),
  120. measurement_unit_model.create_pcs(),
  121. ]
  122. nm = nomenclature_model(
  123. "Test", "Test Test", units[0], nomenclature_group_model.create_group()
  124. )
  125. wh = warehouse_model("Test", "Testtest")
  126. res = []
  127. for i in range(0, 20):
  128. unit = units[i % 5]
  129. res.append(
  130. transaction_model(
  131. "test", wh, nm, i, i % 2, unit, datetime.datetime.now()
  132. )
  133. )
  134. self.__save(storage.transaction_key(), res)
  135. return res