Vsevolod Levitan пре 1 година
родитељ
комит
f63eb7d803

+ 57 - 0
src/logic/start_factory.py

@@ -0,0 +1,57 @@
+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 import settings
+
+#
+# Класс для обработки начало работы приложения
+#
+class start_factory:
+    __options: settings = None
+    
+    def __init__(self, options: settings) -> None:
+        self.__options = options
+    
+    @staticmethod
+    def create_nomenclature():
+        """
+          Фабричный метод Создать список номенклатуры
+        """
+        
+        result = []
+        
+        
+        item1 = nomenclature_model("Мука", "Мука пшеничная",
+                                   measurement_unit_model.create_kg(),
+                                   nomenclature_group_model.create_group())
+        
+        result.append(item1)
+        
+        return result
+    
+    
+    def create(self):
+        """
+           В зависимости от настроек, сформировать начальную номенклатуру
+
+        Returns:
+            _type_: _description_
+        """
+        if self.__options.is_first_run == True:
+            self.__options.is_first_run = False
+            return start_factory.create_nomenclature()
+        else:
+            items = []
+            return items
+        
+        
+    
+    
+        
+        
+        
+        
+    
+    
+    
+    

+ 23 - 1
src/models/measurement_unit_model.py

@@ -51,4 +51,26 @@ class measurement_unit_model (abstract_reference):
             Значение в базовой единице измерения
         """
 
-        return value * self.base_coefficient
+        return value * self.base_coefficient
+    
+    @staticmethod    
+    def create_g():
+        """
+            Создать единицу измерения грамм
+
+        Returns:
+            _type_: _description_
+        """
+        item = measurement_unit_model("грамм")
+        return item    
+    
+    @staticmethod
+    def create_kg():
+        """
+            Создать единицу килограмм
+        Returns:
+            _type_: _description_
+        """
+        g = measurement_unit_model.create_g()
+        item = measurement_unit_model("киллограмм", 1000, g)
+        return item

+ 12 - 1
src/models/nomenclature_group_model.py

@@ -2,4 +2,15 @@ from src.models.abstract_reference import abstract_reference
 
 class nomenclature_group_model (abstract_reference):
     def __init__(self, name):
-        super().__init__(name)
+        super().__init__(name)
+
+    @staticmethod
+    def create_group():
+        """
+        Фабричный метод. Создать группу по умолчанию
+
+        Returns:
+            _type_: _description_
+        """
+        item = nomenclature_group_model("Ингредиенты")
+        return item

+ 32 - 12
src/settings/settings.py

@@ -17,6 +17,9 @@ class settings:
     # Тип собственности
     __property_type = ""
 
+    # Первый ли запуск
+    __is_first_run = True
+
 
     # Валидатор
     __vtor = None
@@ -36,7 +39,7 @@ class settings:
             value (str): Полное наименование
 
         Raises:
-            TypeError: Некорректный аргумент
+            argument_exception: Некорректный аргумент
         """
 
         self.__vtor.check_type(value, str)
@@ -55,8 +58,8 @@ class settings:
             value (int): Значение ИНН, 12 символов
 
         Raises:
-            TypeError: Некорректный тип аргумента
-            ValueError: Некорректная длина аргумента
+            argument_exception: Некорректный тип аргумента
+            argument_exception: Некорректная длина аргумента
         """
 
         self.__vtor.check_type(value, int)
@@ -76,8 +79,8 @@ class settings:
             value (int): Значение БИК, 9 символов
 
         Raises:
-            TypeError: Некорректный тип аргумента
-            ValueError: Некорректная длина аргумента
+            argument_exception: Некорректный тип аргумента
+            argument_exception: Некорректная длина аргумента
         """
 
         self.__vtor.check_type(value, int)
@@ -98,8 +101,8 @@ class settings:
             value (int): Номер банковского счета, 11 символов
 
         Raises:
-            TypeError: Некорректный тип аргумента
-            ValueError: Некорректная длина аргумента
+            argument_exception: Некорректный тип аргумента
+            argument_exception: Некорректная длина аргумента
         """
 
         self.__vtor.check_type(value, int)
@@ -120,8 +123,8 @@ class settings:
             value (int): Номер корреспондентского счёта, 11 символов
 
         Raises:
-            TypeError: Некорректный тип аргумента
-            ValueError: Некорректная длина аргумента
+            argument_exception: Некорректный тип аргумента
+            argument_exception: Некорректная длина аргумента
         """
 
         self.__vtor.check_type(value, int)
@@ -142,7 +145,7 @@ class settings:
             value (str): Наименование собственности
 
         Raises:
-            TypeError: Некорректный тип аргумента
+            argument_exception: Некорректный тип аргумента
         """
 
         self.__vtor.check_type(value, str)
@@ -162,11 +165,28 @@ class settings:
             value (str): Тип собственности, 5 символов
 
         Raises:
-            TypeError: Некорректный тип аргумента
-            ValueError: Некорректная длина аргумента
+            argument_exception: Некорректный тип аргумента
+            argument_exception: Некорректная длина аргумента
         """
 
         self.__vtor.check_type(value, str)
         self.__vtor.check_length(value, 5)
 
         self.__property_type = value
+
+
+    @property
+    def is_first_run(self):
+        """Первый ли запуск?"""
+
+        return self.__is_first_run
+    
+    @is_first_run.setter
+    def is_first_run(self, value: bool):
+        """
+            Первый ли запуск?
+        Args:
+            value (bool): Значение
+        Raises:
+            argument_exception: Некорректный тип аргумента
+        """

+ 1 - 1
src/settings/settings_manager.py

@@ -6,7 +6,7 @@ from src.errors.file_exception import file_exception
 
 class settings_manager (object):
     # Объект настроек
-    __settings = None
+    __settings = settings()
     # Путь до файла настроек
     __filename = "settings.json"
     # Словарь со считанными данными

+ 15 - 0
src/storage/storage.py

@@ -0,0 +1,15 @@
+
+
+#
+# Класс хранилище данных
+#
+class storage:
+    __data = {}
+    
+    def __new__(cls):
+        if not hasattr(cls, 'instance'):
+            cls.instance = super(storage, cls).__new__(cls)
+        return cls.instance  
+      
+    
+    

+ 58 - 0
tests/test_factory.py

@@ -0,0 +1,58 @@
+from src.models.measurement_unit_model import measurement_unit_model
+from src.logic.start_factory import start_factory
+from src.settings.settings_manager import settings_manager
+
+import unittest
+
+#
+# Набор автотестов для проверки работы фабричного метода
+# #
+class factory_test(unittest.TestCase):
+
+    #
+    # Проверка создания ед. измерения
+    #
+    def test_check_factory(self):
+        # Подготовка
+        unit = measurement_unit_model.create_kg()
+        
+        # Действие
+        
+        # Проверки
+        assert unit is not None
+        
+    # 
+    # Проверка создание начальной номенклатуры
+    #    
+    def test_check_create_nomenclature(self):
+        # Подготовка
+        items = start_factory.create_nomenclature()
+        
+        # действие
+        
+        # Прверки
+        assert len(items) > 0 
+        
+        
+    #      
+    # Проверка работы класса start_factory
+    #
+    def test_check_start_factor(self):
+        # Подготовка
+        manager = settings_manager()
+        factory = start_factory( manager.settings )
+        
+        
+        # Действие
+        result = factory.create()
+        
+        
+        # Проверка
+        if manager.settings.is_first_run == True:
+            assert len(result) > 0
+            return
+        
+        
+        assert len(result) == 0    
+        
+