2
from typing import Optional
4
from sqlalchemy import Sequence, Uuid, ForeignKey, text
5
from sqlalchemy.orm import mapped_column, Mapped
7
from app.inventory.location.enums import LocationClass, PutawayStrategy
8
from app.inventory.mixins import LocationMixin
9
from core.db import Base
10
from core.db.mixins import AllMixin
11
from core.db.types import ids
14
class LocationType(Base, AllMixin, LocationMixin):
16
**Типы местоположения** - Обозначают набор свойств местоположения, например Паллет, или ячейка, или ящик, или зона
18
__tablename__ = "location_type"
19
lsn_seq = Sequence(f'location_type_lsn_seq')
20
title: Mapped[str] = mapped_column(index=True)
21
store_id: Mapped[Optional[uuid.UUID]] = mapped_column(Uuid, index=True, nullable=True)
22
allowed_package_ids: Mapped[Optional[ids]] = mapped_column(index=True)
23
exclude_package_ids: Mapped[Optional[ids]] = mapped_column(index=True)
24
is_homogeneity: Mapped[Optional[bool]] = mapped_column(default=False, index=True)
25
strategy: Mapped[Optional['PutawayStrategy']] = mapped_column(default=PutawayStrategy.FEFO)
26
is_can_negative: Mapped[Optional[bool]] = mapped_column(server_default=text('false'),index=True)
29
class Location(Base, AllMixin, LocationMixin):
31
**Местоположение** - это обьект хранящий в себе кванты, а так же другие локации
32
Местоположение может быть статичная или динамическая определяется типом:
33
- shelve - статичная ячейка хранения в магазине
34
- rack - статичная стеллаж
35
- package - динамический тип местоположение, например Паллет
37
__tablename__ = "location"
38
lsn_seq = Sequence(f'location_lsn_seq')
39
title: Mapped[str] = mapped_column(index=True)
40
store_id: Mapped[Optional[uuid.UUID]] = mapped_column(Uuid, index=True, nullable=True)
41
location_class: Mapped[LocationClass] = mapped_column(index=True)
42
location_type_id: Mapped[uuid.UUID] = mapped_column(ForeignKey('location_type.id'), index=True)
43
location_id: Mapped[Optional[uuid.UUID]] = mapped_column(ForeignKey("location.id"), index=True)
44
is_active: Mapped[Optional[bool]] = mapped_column(default=True)
45
allowed_package_ids: Mapped[Optional[ids]] = mapped_column(index=True)
46
exclude_package_ids: Mapped[Optional[ids]] = mapped_column(index=True)
47
is_can_negative: Mapped[Optional[bool]] = mapped_column(server_default=text('false'), index=True)