Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 14 additions & 16 deletions Src/Core/abstract_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,26 @@
import uuid
from Src.Core.validator import validator

class abstact_model(ABC):
__unique_code:str
class abstract_reference(ABC):
__name:str

def __init__(self) -> None:
def __init__(self,name:str) -> None:
super().__init__()
self.__unique_code = uuid.uuid4().hex
self.name = name



"""
Уникальный код
Уникальный имя
"""
@property
def unique_code(self) -> str:
return self.__unique_code
def name(self) -> str:
return self.__name

@unique_code.setter
def unique_code(self, value: str):
validator.validate(value, str)
self.__unique_code = value.strip()
@name.setter
def name(self, value: str):
validator.validate(value, str,50)
self.__name = value.strip()


"""
Перегрузка штатного варианта сравнения
"""
def __eq__(self, value: str) -> bool:
return self.__unique_code == value

2 changes: 2 additions & 0 deletions Src/Core/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ class argument_exception(Exception):
class operation_exception(Exception):
pass

class error_proxy(Exception):
pass

"""
Набор проверок данных
Expand Down
47 changes: 29 additions & 18 deletions Src/Models/company_model.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,44 @@
from Src.Core.validator import validator
from Src.Core.abstract_model import abstact_model
from Src.Core.abstract_model import abstract_reference



###############################################
# Модель организации
class company_model(abstact_model):
__name:str = ""
class company_model(abstract_reference):
"""
Модель компании/организации.

Наследуется от abstract_reference и содержит реквизиты компании для финансовых операций.
Может инициализироваться данными из настроек приложения.

Attributes:
name (str): Название компании (наследуется от abstract_reference)
inn (int): ИНН (Идентификационный номер налогоплательщика) - 12 символов
bic (int): БИК (Банковский идентификационный код) - 9 символов
corr_account (int): Корреспондентский счет - 11 символов
account (int): Расчетный счет - 11 символов
ownership (str): Вид собственности - 5 символов
"""

__inn:int = 0
__bic:int = 0
__corr_account:int = 0
__account:int = 0
__ownership:str = ""
def __init__(self, settings):

# ИНН : 12 симв
# Счет 11 симв
# Корреспондентский счет 11 симв
# БИК 9 симв
# Наименование
# Вид собственности 5 симв
if settings.company is not None and validator.validate(settings.company, company_model):
# Копируем все поля из настроек
super().__init__(settings.company.name)
#self.__name = settings.company.name
self.__inn = settings.company.inn
self.__bic = settings.company.bic
self.__corr_account = settings.company.corr_account
self.__account = settings.company.account
self.__ownership = settings.company.ownership

# Наименование
@property
def name(self) -> str:
return self.__name

@name.setter
def name(self, value:str):
validator.validate(value, str)
self.__name = value.strip()

# ИНН
@property
Expand Down Expand Up @@ -76,7 +88,6 @@ def ownership(self, value:str):
validator.validate(value, str, 5)
self.__ownership = value.strip()





Expand Down
28 changes: 28 additions & 0 deletions Src/Models/nomenclature_group_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from Src.Core.abstract_model import abstract_reference
from Src.Core.validator import validator


class nomenclature_group_model(abstract_reference):
"""
Модель группы номенклатуры.

Наследуется от abstract_reference и добавляет описание для группы товаров/продуктов.

Attributes:
name (str): Название группы номенклатуры (наследуется от abstract_reference)
description (str): Описание группы номенклатуры


"""
__description: str = ""


# description (str): Описание группы номенклатуры
@property
def description(self) -> str:
return self.__description

@description.setter
def description(self, value: str):
validator.validate(value, str)
self.__description = value.strip()
68 changes: 68 additions & 0 deletions Src/Models/nomenclature_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from Src.Core.abstract_model import abstract_reference
from Src.Core.validator import validator, argument_exception
from Src.Models.nomenclature_group_model import nomenclature_group_model
from Src.Models.unit_model import unit_model


class nomenclature_model(abstract_reference):
"""
Модель номенклатуры товара/продукта.

Наследуется от abstract_reference и содержит полную информацию о товаре,
включая артикул, группу и единицу измерения.

Attributes:
name (str): Краткое название номенклатуры (наследуется от abstract_reference)
full_name (str): Полное наименование номенклатуры
article (str): Артикул товара
group (nomenclature_group_model): Группа номенклатуры
unit (unit_model): Единица измерения товара


"""
__full_name: str = ""
__article: str = ""
__group: nomenclature_group_model = None
__unit: unit_model = None

#full_name (str): Полное наименование номенклатуры
@property
def full_name(self):
return self.__full_name

@full_name.setter
def full_name(self, value:str):
validator.validate(value, str, 255)
self.__full_name = value

#article (str): Артикул товара
@property
def article(self) -> str:
return self.__article

@article.setter
def article(self, value: str):
validator.validate(value, str, 10)
self.__article = value.strip()

#group (nomenclature_group_model): Группа номенклатуры
@property
def group(self) -> nomenclature_group_model:
return self.__group

@group.setter
def group(self, value: nomenclature_group_model):
if value and not isinstance(value, nomenclature_group_model):
raise argument_exception("Группа должна быть объектом nomenclature_group_model")
self.__group = value

#unit (unit_model): Единица измерения товара
@property
def unit(self) -> unit_model:
return self.__unit

@unit.setter
def unit(self, value: unit_model):
if value and not isinstance(value, unit_model):
raise argument_exception("Единица измерения должна быть объектом unit_model")
self.__unit = value
48 changes: 38 additions & 10 deletions Src/Models/storage_model.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,43 @@
from Src.Core.validator import validator
from Src.Core.abstract_model import abstact_model
from Src.Core.validator import validator, argument_exception
from Src.Core.abstract_model import abstract_reference
from Src.Models.company_model import company_model

class storage_model(abstact_model):
__name:str = ""

# Наименование
class storage_model(abstract_reference):
"""
Модель склада/хранилища.

Наследуется от abstract_reference и добавляет информацию о местоположении
и принадлежности к компании.

Attributes:
name (str): Название склада (наследуется от abstract_reference)
address (str): Физический адрес расположения склада
company (company_model): Компания-владелец склада

"""

__name: str = ""
__address: str = ""
__company: company_model = None


# address (str): Физический адрес расположения склада
@property
def name(self) -> str:
return self.__name
def address(self) -> str:
return self.__address

@name.setter
def name(self, value:str):
@address.setter
def address(self, value: str):
validator.validate(value, str)
self.__name = value.strip()
self.__address = value.strip()

# company (company_model): Компания-владелец склада
@property
def company(self) -> company_model:
return self.__company

@company.setter
def company(self, value: company_model):
validator.validate(value, company_model)
self.__company = value
47 changes: 47 additions & 0 deletions Src/Models/unit_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from __future__ import annotations
from Src.Core.abstract_model import abstract_reference
from Src.Core.validator import validator


class unit_model(abstract_reference):
"""
Модель единицы измерения для системы конвертации величин.

Представляет собой узел в иерархической системе единиц измерения,
где каждая единица может быть связана с базовой через коэффициент преобразования.

Attributes:
name (str): Наименование единицы измерения (наследуется от AbstractReference).
ratio (int): Коэффициент преобразования к базовой единице. По умолчанию 1.
base_model (UnitModel): Ссылка на базовую модель единицы измерения.
Если None, текущая единица считается базовой.

"""
__ratio: int = 1
__base_model: unit_model = None

def __init__(self, name: str, ratio: int = 1, base_model: unit_model = None):
super().__init__(name)
# self.__name = name
self.__ratio = ratio
self.__base_model = base_model


#ratio (int): Коэффициент преобразования к базовой единице.
@property
def ratio(self) -> int:
return self.__ratio

@ratio.setter
def ratio(self, value: int):
self.__ratio = value

#base_model (UnitModel): Ссылка на базовую модель единицы измерения.
@property
def base_model(self) -> unit_model:
return self.__base_model

@ratio.setter
def ratio(self, value:unit_model):
self.__base_model = value

9 changes: 5 additions & 4 deletions Src/settings_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import os
import json

####################################################
####################################################3
# Менеджер настроек.
# Предназначен для управления настройками и хранения параметров приложения
class settings_manager:
Expand Down Expand Up @@ -80,12 +80,13 @@ def convert(self, data: dict) -> bool:

# Параметры настроек по умолчанию
def set_default(self):
company = company_model()
self.__settings = settings_model()

company = company_model(settings=settings_model())
company.name = "Рога и копыта"
company.inn = -1

self.__settings = settings_model()
self.__settings.company = company




2 changes: 1 addition & 1 deletion Tst/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
"company":
{
"name":"Рога и копыта",
"inn1":123456789
"inn":123456789
}
}
Loading