- Implemented the items tab form in Svelte for editing invoices, displaying item quantities and import values. - Created saveInvoice function to handle both creation and updating of invoices, including validation of required fields and building a unified payload for API requests. - Added support for compliance, financials, and logistics data in the invoice payload.
55 lines
2.8 KiB
Python
55 lines
2.8 KiB
Python
from decimal import Decimal
|
|
from typing import Optional, TYPE_CHECKING
|
|
from sqlalchemy import String, Numeric, ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
from core.database import Base
|
|
|
|
if TYPE_CHECKING:
|
|
from ..line_items.models import LineItem
|
|
|
|
class LineCustom(Base):
|
|
"""
|
|
Customs details for line items
|
|
Consolidates all line-level data from Q and S tables
|
|
"""
|
|
__tablename__ = "line_customs"
|
|
__table_args__ = {
|
|
"schema": "a76",
|
|
}
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
item_line_id: Mapped[int] = mapped_column(ForeignKey("a76.item_lines.id"))
|
|
|
|
# Tariff/Customs Classifications
|
|
fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCION / FRACCIONIMPO / FRACCIONEXPO
|
|
fraction_type: Mapped[Optional[str]] = mapped_column(String(7)) # TIPOFRACCION / TIPOFRACCIONIMPO / TIPOFRACCIONEXPO
|
|
american_fraction: Mapped[Optional[str]] = mapped_column(String(16)) # FRACCIONAMERICANA
|
|
alternate_fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCIONALTERNA
|
|
reference_fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCIONREFERENCIA
|
|
octave_fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCIONROCTAVA
|
|
tlcan_fraction: Mapped[Optional[str]] = mapped_column(String(13)) # FRACCIONTLCAN
|
|
extra_american_fraction: Mapped[Optional[str]] = mapped_column(String(16)) # FRACAMESELEXTRA
|
|
garment_fraction: Mapped[Optional[str]] = mapped_column(String(19)) # FRACCIONDELAPRENDA/FRACCIONDELAPARTIDA
|
|
|
|
# Ad Valorem
|
|
advalorem: Mapped[Optional[str]] = mapped_column(String(10)) # ADVIMPO / ADVEXPO
|
|
advalorem_numeric: Mapped[Optional[Decimal]] = mapped_column(Numeric(7, 2)) # ADVIMPONUM / ADVEXPONUM
|
|
advalorem_american: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2)) # ADVAME
|
|
advalorem_tlcan: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2)) # ADVTLCAN
|
|
|
|
# Rates
|
|
rate: Mapped[Optional[str]] = mapped_column(String(10)) # TASAIM / TASAEX
|
|
depreciation_rate: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2)) # TASADEPRECIA
|
|
|
|
# Origin/Destination
|
|
origin_country: Mapped[Optional[str]] = mapped_column(String(3)) # PAISORIGEN
|
|
destination_country: Mapped[Optional[str]] = mapped_column(String(3)) # PAISDESTINO
|
|
optional_country: Mapped[Optional[str]] = mapped_column(String(3)) # PAISOPCIONAL
|
|
origin_procedure: Mapped[Optional[str]] = mapped_column(String(3)) # PROCEDENCIA
|
|
scrap_procedure: Mapped[Optional[str]] = mapped_column(String(3)) # PROCSCRAP
|
|
|
|
# Sector
|
|
sector: Mapped[Optional[str]] = mapped_column(String(8)) # SECTOR
|
|
|
|
# Relationship (one-to-one)
|
|
line: Mapped["LineItem"] = relationship(back_populates="customs") |