feat: implementar CRUD completo para exchange_rate, packages y seal
Backend: - Corregir tipos datetime en exchange_rate (dto.py, models.py) - Agregar datetime import en packages dto.py - Corregir orden de parámetros en seal services.py - Actualizar router.py con nuevas rutas Frontend: - Crear API clients para exchange-rate, packages y seal - Implementar componentes de tabla con renderComponent - Crear diálogos de crear/editar para cada módulo - Implementar data-table-actions con manejo interno de diálogos - Agregar páginas completas con filtros e infinite scroll - Actualizar sidebar con nuevos módulos Características: - Acciones inline (editar/eliminar) totalmente funcionales - Filtros de búsqueda específicos por módulo - Paginación con infinite scroll - Sincronización con companyStore - Manejo de errores robusto
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class ExchangeRateBaseDTO(BaseModel):
|
||||
date: int = Field(..., description="Exchange rate date")
|
||||
date: datetime = Field(..., description="Exchange rate date")
|
||||
value: Optional[float] = Field(None, description="Exchange rate value")
|
||||
local_currency: Optional[str] = Field(None, max_length=7, description="Local currency code")
|
||||
foreign_currency: Optional[str] = Field(None, max_length=7, description="Foreign currency code")
|
||||
@@ -17,7 +18,7 @@ class ExchangeRateCreateDTO(ExchangeRateBaseDTO):
|
||||
|
||||
class ExchangeRateUpdateDTO(ExchangeRateBaseDTO):
|
||||
"""Schema for updating an exchange rate"""
|
||||
date: Optional[int] = Field(None, description="Exchange rate date")
|
||||
date: Optional[datetime] = Field(None, description="Exchange rate date")
|
||||
|
||||
|
||||
class ExchangeRateResponseDTO(ExchangeRateBaseDTO):
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from datetime import datetime
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
@@ -33,7 +34,7 @@ class ExchangeRate(Base, TenantScopedMixin):
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
|
||||
date: Mapped[int] = mapped_column(DateTime)
|
||||
date: Mapped[datetime] = mapped_column(DateTime)
|
||||
value: Mapped[Optional[Decimal]] = mapped_column(DECIMAL(13, 6))
|
||||
local_currency: Mapped[Optional[str]] = mapped_column(String(7))
|
||||
foreign_currency: Mapped[Optional[str]] = mapped_column(String(7))
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
DTOs for Packages (GBultos).
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
@@ -33,8 +34,8 @@ class PackageResponseDTO(PackageBaseDTO):
|
||||
id: int
|
||||
company_id: int
|
||||
tenant_id: int
|
||||
created_at: Optional[str] = None
|
||||
updated_at: Optional[str] = None
|
||||
created_at: Optional[datetime] = None
|
||||
updated_at: Optional[datetime] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@@ -13,11 +13,11 @@ router = TenantCRUDRoutes(
|
||||
create_schema=PackageCreateDTO,
|
||||
update_schema=PackageUpdateDTO,
|
||||
response_schema=PackageResponseDTO,
|
||||
prefix="/package",
|
||||
tags=[],
|
||||
prefix="/packages",
|
||||
tags=["a76 / packages"],
|
||||
resource_name="Package",
|
||||
id_name="id", # Using numeric ID
|
||||
enable_list=True, # Enable GET /package with pagination
|
||||
id_name="package_id",
|
||||
enable_list=True, # Enable GET /packages with pagination
|
||||
enable_filters=True, # Enable filtering by key and description_es
|
||||
default_page_size=50,
|
||||
max_page_size=100,
|
||||
|
||||
@@ -75,8 +75,8 @@ class SealService:
|
||||
db: Session,
|
||||
seal_id: int,
|
||||
tenant_id: int,
|
||||
company_id: int,
|
||||
seal_data: dto.SealUpdateDTO,
|
||||
company_id: int,
|
||||
) -> Optional[models.Seal]:
|
||||
"""Update a seal"""
|
||||
seal = SealService.get_by_id(db, seal_id, tenant_id, company_id)
|
||||
|
||||
@@ -46,7 +46,7 @@ router.include_router(parts_router, prefix="/a76", tags=["a76 / parts"])
|
||||
router.include_router(
|
||||
permission_rule_oct_router, prefix="/a76", tags=["a76 / permission_rule_oct"]
|
||||
)
|
||||
router.include_router(package_router, prefix="/a76", tags=["a76 / package"])
|
||||
router.include_router(package_router, prefix="/a76")
|
||||
router.include_router(seal_router, prefix="/a76", tags=["a76 / seal"])
|
||||
router.include_router(
|
||||
fraction_rule_octave_router, prefix="/a76", tags=["a76 / fraction_rule_octave"]
|
||||
|
||||
Reference in New Issue
Block a user