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