3
from typing import Optional
5
from sqlalchemy import Uuid, ForeignKey, Sequence
6
from sqlalchemy.orm import relationship, mapped_column, Mapped
7
from sqlalchemy_utils import CurrencyType, CountryType, LocaleType
8
from sqlalchemy_utils.types import EmailType, PhoneNumberType
10
from core.db import Base
11
from core.db.mixins import AllMixin
14
class PartnerType(str, Enum):
16
PARTNER: Просто партнер у которого можно закупать или продавать
17
CONTACT: Контакт типа просто субкарточка с контактами
18
SUBPARTNER: Субпартнер аля контакт, но как бы у него тоже можно покупать и продавать
19
INTERCOMPANY: Это другое подразделение своей же компании
20
STORE: Карточка для стора
21
USER:Карточка для юзера, для того, что бы у Юзера тоже можно было что то покупать тк любой сотрудник компании это тоже партнер
23
PARTNER: str = 'partner'
24
CONTACT: str = 'contact'
25
SUBPARTNER: str = 'subpartner'
26
INTERCOMPANY: str = 'intercompany'
27
STORE: str = 'project'
30
class Partner(Base,AllMixin):
31
__tablename__ = "partner"
32
lsn_seq = Sequence(f'partner_lsn_seq')
33
id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, index=True, default=uuid.uuid4)
34
title: Mapped[str] = mapped_column(index=True)
36
type: Mapped[PartnerType] = mapped_column(default=PartnerType.PARTNER)
37
external_number: Mapped[Optional[str]] = mapped_column(unique=True)
38
partner_id: Mapped[Optional[uuid.UUID]] = mapped_column(Uuid, ForeignKey("partner.id"), index=True)
39
partner_rel: Mapped['Partner'] = relationship(lazy='selectin')
40
phone_number: Mapped[Optional[str]] = mapped_column(PhoneNumberType)
41
email: Mapped[Optional[str]] = mapped_column(EmailType)
42
country: Mapped[str] = mapped_column(CountryType, default='US')
44
created_by: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("user.id"), index=True)
45
locale: Mapped[str] = mapped_column(LocaleType, default='en_US')
46
currency: Mapped[str] = mapped_column(CurrencyType, default='USD')