lavkach3

Форк
0
58 строк · 3.2 Кб
1
import datetime
2
import uuid
3
from typing import Optional
4

5
from sqlalchemy import Sequence, Uuid, DateTime, UniqueConstraint
6
from sqlalchemy.orm import mapped_column, Mapped
7

8
from app.inventory.mixins import StockMixin
9
from core.db import Base
10
from core.db.mixins import AllMixin
11
from core.db.types import ids
12

13

14
class Lot(Base, AllMixin):
15
    """
16
    **Партия** -  Партия обозначает уникальный набор аттрибутов конкретного количества товаров, например Единый срок годности
17
    или пришедшая от другого поставщика
18
    """
19
    __tablename__ = "lot"
20
    __table_args__ = (UniqueConstraint('external_number', 'product_id', 'partner_id', name='_lot_ex_pr_par_id_uc'),)
21
    lsn_seq = Sequence(f'lot_lsn_seq')
22
    id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, index=True, default=uuid.uuid4)
23
    expiration_datetime: Mapped[Optional[datetime.datetime]] = mapped_column(DateTime(timezone=True))
24
    product_id: Mapped[uuid.UUID] = mapped_column(Uuid, index=True, nullable=True)
25
    external_number: Mapped[Optional[str]] = mapped_column(nullable=False, unique=True)
26
    partner_id: Mapped[Optional[uuid.UUID]] = mapped_column(Uuid, index=True, nullable=True)
27

28

29
class Quant(Base, AllMixin, StockMixin):
30
    """
31
    **Квант** -  это минимальная и уникальная единица остатка являющаяся одинаковой по своим свойствам в рамках местоположения
32
    Например, если в ячейку "A" на которой находится уже товар "A" с партией "A" и количеством 5 добавляется товар
33
    "A" с партией "A" и количеством 5, то к в ячейке "A" будет создан квант с количеством 10,
34
    Но если добавляется товар "A" c партией "B", то в местоположении будет создано 2 кванта
35
    *Поля свойства определяющие уникальность кванта*
36
    - store_id: ID магазина
37
    - location_id: ID местоположения кванта
38
    - lot_id: ID партии кванта
39
    - owner_id: ID собственника кванта
40
    - uom_id: Единица измерения, в которой находится квант
41
    quantity: Количество товара в кванте
42
    reserved_quantity: Зарезервирвоанное количество товара в кванте
43
    """
44
    __tablename__ = "quant"
45
    __table_args__ = (UniqueConstraint(
46
        'store_id', 'location_id', 'lot_id', 'expiration_datetime', name='_quant_st_loc_lot_ex_id_uc'
47
    ),)
48
    lsn_seq = Sequence(f'quant_lsn_seq')
49
    quantity: Mapped[float]
50
    reserved_quantity: Mapped[float]
51
    incoming_quantity: Mapped[float]
52
    expiration_datetime: Mapped[Optional[datetime.datetime]] = mapped_column(DateTime(timezone=True))
53
    uom_id: Mapped[uuid.UUID] = mapped_column(Uuid, index=True, nullable=False)
54
    move_ids: Mapped[Optional[ids]] = mapped_column(index=True)
55

56
    @property
57
    def available_quantity(self):
58
        return self.quantity - self.reserved_quantity
59

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.