瀏覽代碼

Implemented processes

Vsevolod Levitan 1 年之前
父節點
當前提交
029e0ae31c
共有 5 個文件被更改,包括 99 次插入13 次删除
  1. 7 0
      src/logic/abstract_process.py
  2. 27 0
      src/logic/process_factory.py
  3. 22 0
      src/logic/process_transaction.py
  4. 0 13
      tests/test_factory.py
  5. 43 0
      tests/test_processes.py

+ 7 - 0
src/logic/abstract_process.py

@@ -0,0 +1,7 @@
+from abc import ABC, abstractmethod
+
+
+class abstract_process(ABC):
+    @abstractmethod
+    def create(self):
+        pass

+ 27 - 0
src/logic/process_factory.py

@@ -0,0 +1,27 @@
+from click import argument
+from src.errors.argument_exception import argument_exception
+from src.logic.process_transaction import process_transaction
+from src.validation.validator import validator
+from src.storage.storage import storage
+
+
+class process_factory:
+    __smap = dict()
+
+    def __init__(self):
+        self.__vtor = validator()
+        self.__build__()
+
+    def __build__(self):
+        self.__smap[storage.transaction_key()] = process_transaction()
+
+    def create(self, format, strg):
+        self.__vtor.check_type(format, str)
+        self.__vtor.check_type(strg, storage)
+
+        if format not in self.__smap.keys():
+            raise argument_exception(
+                f"Несуществующий формат ({format} not in {str(self.__smap)})"
+            )
+
+        return self.__smap[format]

+ 22 - 0
src/logic/process_transaction.py

@@ -0,0 +1,22 @@
+from src.models.storage_turn_model import storage_turn_model
+from src.logic.abstract_process import abstract_process
+
+
+class process_transaction(abstract_process):
+    @classmethod
+    def create(self, transactions):
+        res = dict()
+        for t in transactions:
+            k = (t.warehouse, t.nomenclature, t.measurement_unit, t.time_span)
+            v = t.amount * t.transaction_type
+            if k in res.keys():
+                res[k] += v
+            else:
+                res[k] = v
+
+        ts = list()
+        for k, v in res.items():
+            t = storage_turn_model("Turn", k[0], v, k[1], k[2])
+            ts.append(t)
+
+        return t

+ 0 - 13
tests/test_factory.py

@@ -59,19 +59,6 @@ class test_factory(unittest.TestCase):
         assert len(stor.data[stor.ingredient_key()]) > 0
         assert len(stor.data[stor.recipe_key()]) > 0
 
-    #
-    # Проверка создания и записи транзакций
-    #
-    def test_create_transactions(self):
-        stor = storage()
-        setman = settings_manager()
-        setman.open(f"{os.path.dirname(__file__) + '/..'}/config/settings.json")
-        st = setman.settings
-
-        result = start_factory(st, stor).create_transactions()
-
-        assert len(stor.data[stor.transaction_key()]) > 0
-
     #
     # Проверка работы класса start_factory
     #

+ 43 - 0
tests/test_processes.py

@@ -0,0 +1,43 @@
+import os
+import unittest
+from src.logic.process_factory import process_factory
+from src.logic.start_factory import start_factory
+from src.export.strategies.json_export import json_export
+from src.models.recipe_model import recipe_model
+from src.models.nomenclature_group_model import nomenclature_group_model
+from src.models.nomenclature_model import nomenclature_model
+from src.models.ingredient_model import ingredient_model
+from src.export.strategies.csv_export import csv_export
+from src.export.exporter import exporter
+from src.models.measurement_unit_model import measurement_unit_model
+from src.settings.settings import settings
+from src.settings.settings_manager import settings_manager
+from src.storage.storage import storage
+
+
+class test_processes(unittest.TestCase):
+    #
+    # Проверка создания и записи транзакций
+    #
+    def test_create_transactions(self):
+        stor = storage()
+        setman = settings_manager()
+        setman.open(f"{os.path.dirname(__file__) + '/..'}/config/settings.json")
+        st = setman.settings
+
+        result = start_factory(st, stor).create_transactions()
+
+        assert len(stor.data[stor.transaction_key()]) > 0
+
+    def test_create_process(self):
+        stor = storage()
+        setman = settings_manager()
+        setman.open(f"{os.path.dirname(__file__) + '/..'}/config/settings.json")
+        st = setman.settings
+
+        ts = start_factory(st, stor).create_transactions()
+
+        ps = process_factory().create(stor.transaction_key(), stor)
+        res = ps.create(stor.data[stor.transaction_key()])
+
+        assert res is not None