Arreglo de equivalencias
This commit is contained in:
@@ -10,6 +10,7 @@ class EquivalencyItemBase(BaseModel):
|
||||
original_field: str = Field(..., max_length=100, description="Campo original (from)")
|
||||
external_field: str = Field(..., max_length=100, description="Campo externo (to)")
|
||||
conversion_factor: Optional[Decimal] = Field(None, description="Factor de conversión")
|
||||
equivalency_id: Optional[int] = Field(None, description="ID de la equivalencia padre")
|
||||
|
||||
|
||||
class EquivalencyItemCreate(EquivalencyItemBase):
|
||||
@@ -20,6 +21,7 @@ class EquivalencyItemUpdate(BaseModel):
|
||||
original_field: Optional[str] = Field(None, max_length=100)
|
||||
external_field: Optional[str] = Field(None, max_length=100)
|
||||
conversion_factor: Optional[Decimal] = None
|
||||
equivalency_id: Optional[int] = None
|
||||
|
||||
|
||||
class EquivalencyItemResponse(EquivalencyItemBase):
|
||||
@@ -34,7 +36,7 @@ class EquivalencyItemResponse(EquivalencyItemBase):
|
||||
|
||||
|
||||
class EquivalencyBase(BaseModel):
|
||||
identifier: str = Field(..., max_length=10, description="Identificador único")
|
||||
identifier: str = Field(..., max_length=50, description="Identificador único")
|
||||
description: Optional[str] = Field(None, max_length=200, description="Descripción (opcional)")
|
||||
item_id: Optional[int] = Field(None, description="ID del EquivalencyItem seleccionado")
|
||||
|
||||
@@ -44,7 +46,7 @@ class EquivalencyCreate(EquivalencyBase):
|
||||
|
||||
|
||||
class EquivalencyUpdate(BaseModel):
|
||||
identifier: Optional[str] = Field(None, max_length=10)
|
||||
identifier: Optional[str] = Field(None, max_length=50)
|
||||
description: Optional[str] = Field(None, max_length=200)
|
||||
item_id: Optional[int] = Field(None, description="Re-asociar a otro EquivalencyItem")
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ class EquivalencyItem(Base, TenantScopedMixin, TimestampMixin):
|
||||
__tablename__ = "equivalency_items"
|
||||
__table_args__ = (
|
||||
UniqueConstraint(
|
||||
"original_field", "external_field", "tenant_id", "company_id",
|
||||
"equivalency_id", "original_field", "external_field", "tenant_id", "company_id",
|
||||
name="uq_equivalency_item_fields"
|
||||
),
|
||||
{"schema": "a76"}
|
||||
@@ -27,6 +27,14 @@ class EquivalencyItem(Base, TenantScopedMixin, TimestampMixin):
|
||||
conversion_factor: Mapped[Optional[Decimal]] = mapped_column(
|
||||
Numeric(13, 6), nullable=True)
|
||||
|
||||
equivalency_id: Mapped[Optional[int]] = mapped_column(
|
||||
Integer,
|
||||
ForeignKey("a76.equivalencies.id", ondelete="CASCADE"),
|
||||
nullable=True)
|
||||
|
||||
equivalency: Mapped[Optional["Equivalency"]] = relationship(
|
||||
back_populates="items", foreign_keys=[equivalency_id])
|
||||
|
||||
equivalencies: Mapped[List["Equivalency"]] = relationship(
|
||||
back_populates="item", foreign_keys="[Equivalency.item_id]")
|
||||
|
||||
@@ -44,7 +52,7 @@ class Equivalency(Base, TenantScopedMixin, TimestampMixin):
|
||||
id: Mapped[int] = mapped_column(
|
||||
Integer, primary_key=True, autoincrement=True)
|
||||
|
||||
identifier: Mapped[str] = mapped_column(String(10), nullable=False)
|
||||
identifier: Mapped[str] = mapped_column(String(50), nullable=False)
|
||||
description: Mapped[Optional[str]] = mapped_column(
|
||||
String(200), nullable=True)
|
||||
|
||||
@@ -55,3 +63,6 @@ class Equivalency(Base, TenantScopedMixin, TimestampMixin):
|
||||
|
||||
item: Mapped[Optional["EquivalencyItem"]] = relationship(
|
||||
back_populates="equivalencies", foreign_keys=[item_id])
|
||||
|
||||
items: Mapped[List["EquivalencyItem"]] = relationship(
|
||||
back_populates="equivalency", foreign_keys="[EquivalencyItem.equivalency_id]")
|
||||
|
||||
@@ -33,6 +33,10 @@ class EquivalencyItemService:
|
||||
query = query.filter(
|
||||
EquivalencyItem.external_field.ilike(f"%{filters['external_field']}%")
|
||||
)
|
||||
if "equivalency_id" in filters:
|
||||
query = query.filter(
|
||||
EquivalencyItem.equivalency_id == filters["equivalency_id"]
|
||||
)
|
||||
|
||||
total = query.count()
|
||||
items = query.offset(skip).limit(limit).all()
|
||||
@@ -63,6 +67,7 @@ class EquivalencyItemService:
|
||||
original_field=data.original_field,
|
||||
external_field=data.external_field,
|
||||
conversion_factor=data.conversion_factor,
|
||||
equivalency_id=data.equivalency_id,
|
||||
tenant_id=tenant_id,
|
||||
company_id=company_id,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user