123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import datetime
- from src.models.transaction_model import transaction_model
- from src.models.warehouse_model import warehouse_model
- from src.models.recipe_model import recipe_model
- from src.models.ingredient_model import ingredient_model
- from src.models.nomenclature_group_model import nomenclature_group_model
- from src.models.measurement_unit_model import measurement_unit_model
- from src.models.nomenclature_model import nomenclature_model
- from src.settings.settings import settings
- from src.storage.storage import storage
- from src.validation.validator import validator
- #
- # Класс для обработки начало работы приложения
- #
- class start_factory:
- __options: settings = None
- __storage: storage = None
- __vtor = validator()
- def __init__(self, _options: settings, _storage: storage = None) -> None:
- self.__vtor.check_type(_options, settings)
- self.__vtor.check_type(_storage, storage)
- self.__options = _options
- self.__storage = _storage
- def __save(self, key: str, items: list):
- """
- Сохранить данные
- Args:
- key (str): ключ доступ
- items (list): список
- """
- self.__vtor.check_type(key, str)
- if self.__storage is None:
- self.__storage = storage()
- self.__storage.data[key] = items
- @property
- def storage(self):
- """
- Ссылка на объект хранилище данных
- Returns:
- _type_: _description_
- """
- return self.__storage
- @staticmethod
- def create_recipes():
- """
- Фабричный метод Создать список рецептов
- """
- result = []
- g = measurement_unit_model.create_g()
- pcs = measurement_unit_model.create_pcs()
- group = nomenclature_group_model("group")
- ingredients = [
- ingredient_model(
- "Мука", nomenclature_model("Мука", "Мука пшеничная", g, group), 100, g
- ),
- ingredient_model(
- "Сахар", nomenclature_model("Сахар", "Сахарный песок", g, group), 80, g
- ),
- ingredient_model(
- "Масло", nomenclature_model("Масло", "Масло сливочное", g, group), 70, g
- ),
- ingredient_model(
- "Яйцо", nomenclature_model("Яйцо", "Яйцо куриное", pcs, group), 1, pcs
- ),
- ingredient_model(
- "Ванилин",
- nomenclature_model("Ванилин", "Ванилин продуктовый", g, group),
- 5,
- g,
- ),
- ]
- steps = [
- "Как испечь вафли хрустящие в вафельнице? Подготовьте необходимые продукты. Из данного количества у меня получилось 8 штук диаметром около 10 см.",
- "Масло положите в сотейник с толстым дном. Растопите его на маленьком огне на плите, на водяной бане либо в микроволновке.",
- "Добавьте в теплое масло сахар. Перемешайте венчиком до полного растворения сахара. От тепла сахар довольно быстро растает.",
- "Добавьте в масло яйцо. Предварительно все-таки проверьте масло, не горячее ли оно, иначе яйцо может свариться. Перемешайте яйцо с маслом до однородности.",
- "Всыпьте муку, добавьте ванилин.",
- "Перемешайте массу венчиком до состояния гладкого однородного теста.",
- "Разогрейте вафельницу по инструкции к ней. У меня очень старая, еще советских времен электровафельница. Она может и не очень красивая, но печет замечательно! Я не смазываю вафельницу маслом, в тесте достаточно жира, да и к ней уже давно ничего не прилипает. Но вы смотрите по своей модели. Выкладывайте тесто по столовой ложке. Можно класть немного меньше теста, тогда вафли будут меньше и их получится больше.",
- "Пеките вафли несколько минут до золотистого цвета. Осторожно откройте вафельницу, она очень горячая! Снимите вафлю лопаткой. Горячая она очень мягкая, как блинчик. Но по мере остывания становится твердой и хрустящей. Такие вафли можно свернуть трубочкой. Но делать это надо сразу же после выпекания, пока она мягкая и горячая, потом у вас ничего не получится, вафля поломается. Приятного аппетита!",
- ]
- result.append(
- recipe_model.create("Вафли хрустящие в вафельнице", ingredients, steps)
- )
- return result
- def create(self):
- """
- В зависимости от настроек, сформировать начальную номенклатуру
- Returns:
- _type_: _description_
- """
- result = []
- if self.__options.is_first_run:
- self.__options.is_first_run = False
- # Формируем и зпоминаем номеклатуру
- res = self.create_recipes()
- ingredients = set()
- for x in res:
- for ing in x.ingredients:
- ingredients.add(ing)
- recipes = res.copy()
- nomenclatures = set()
- for ingredient in ingredients:
- nomenclatures.add(ingredient.nomenclature)
- result = nomenclatures
- munits = set([x.measurement_unit for x in nomenclatures])
- nomgroups = set([x.nomenclature_group for x in nomenclatures])
- self.__save(storage.nomenclature_key(), nomenclatures)
- self.__save(storage.measurement_unit_key(), munits)
- self.__save(storage.nomenclature_group_key(), nomgroups)
- self.__save(storage.ingredient_key(), ingredients)
- self.__save(storage.recipe_key(), recipes)
- return result
- def create_transactions(self):
- units = [
- measurement_unit_model.create_g(),
- measurement_unit_model.create_kg(),
- measurement_unit_model.create_l(),
- measurement_unit_model.create_ml(),
- measurement_unit_model.create_pcs(),
- ]
- nm = nomenclature_model(
- "Test", "Test Test", units[0], nomenclature_group_model.create_group()
- )
- wh = warehouse_model("Test", "Testtest")
- res = []
- for i in range(0, 20):
- unit = units[i % 5]
- res.append(
- transaction_model(
- "test", wh, nm, i, i % 2, unit, datetime.datetime.now()
- )
- )
- self.__save(storage.transaction_key(), res)
- return res
|