Домен: Организации

Организации-исполнители, их кошельки и реквизиты.

ORM-модели

Organization

Таблица organization — организация-исполнитель.

Поле

Тип

Описание

organization_id

int PK

Первичный ключ; передаётся в create_service_order(organization_id=...)

fullname

str(255)

Полное название

shortname

str(30)

Краткое название

face

int

0=ЮЛ, 1=ИП/физлицо

inn

str(20)

ИНН

kpp

str(20)

КПП

ogrn

str(20)

ОГРН

address

str

Адрес

hidden

int

0=активна

from autodealer.domain.organization import Organization

org = Organization.objects.get(organization_id=1)
print(org.shortname, org.inn)

active = Organization.objects.filter(hidden=0).all()

Wallet

Таблица wallet — кассы и расчётные счета организации. Также используется в домене Домен: Платежи.

Поле

Тип

Описание

wallet_id

int PK

Первичный ключ; передаётся в create_payment(wallet_id=...)

name

str(100)

Название кошелька

organization_id

int FK

Организация-владелец

DirectoryRegistry

Таблица directory_registry — универсальная метазапись для любой сущности. Создаётся автоматически при создании клиента, организации, документа.

Поле

Тип

Описание

directory_registry_id

int PK

Первичный ключ

metatable_id

int

Тип сущности: 1=Organization, 3=Client, 4=ModelDetail

create_user_id

int FK

Кто создал

change_user_id

int FK

Кто изменил последним

Примечание

directory_registry создаётся до основной записи. Триггеры Firebird читают USER_CONNECTION по CURRENT_CONNECTION для заполнения change_user_id. Перед UPDATE на таблицах с directory_registry_id необходимо вызвать set_session_user().

Высокоуровневые функции (services)

get_organization

autodealer.services.get_organization(organization_id)

Загрузить организацию с кошельками.

Результат:

OrganizationInfo или None.

from autodealer.services import get_organization

org = get_organization(1)
print(org)
# OrganizationInfo(id=1, name='ИП Кропотов', inn=None, wallets=2)

wallet_id = org.wallet_id_by_name("наличн")   # → 1

list_organizations

autodealer.services.list_organizations()

Все активные организации с кошельками.

Результат:

list[OrganizationInfo]

create_organization

autodealer.services.create_organization(fullname, *, shortname=None, inn=None, kpp=None, ogrn=None, address=None, face=0, wallet_names=None, created_by_user_id=1)

Создать организацию с кошельками атомарно.

Параметры:
  • fullname (str) – Полное название.

  • wallet_names (list[str]) – Названия касс/счетов.

Результат:

OrganizationInfo.

from autodealer.services import create_organization

org = create_organization(
    "ООО СК-Авто Казань",
    shortname="СК-Авто",
    inn="1655012345",
    address="г. Казань, ул. Скрябина 8к1",
    wallet_names=["Наличные", "Банковская карта", "СБП"],
)
print(org.organization_id, org.wallets)

Типы данных

class autodealer.services.OrganizationInfo
organization_id: int
fullname: str | None
shortname: str | None
inn: str | None
kpp: str | None
ogrn: str | None
address: str | None
face: int
hidden: int
wallets: list[dict]

Список [{"wallet_id": 1, "name": "Наличные"}, ...]

wallet_id_by_name(name) int | None

Найти wallet_id по части названия (без учёта регистра).

org.wallet_id_by_name("наличн")   # → 1
org.wallet_id_by_name("сбер")     # → 3