Files
plantillas-proyectos/backend/api/v1/modules/a24/fa/fa_classes/dto.py
Galindo97 ea0e570678 feat: add fixed asset classes management page and embed functionality
- Implemented a new page for managing fixed asset classes with full CRUD functionality.
- Added filtering options for searching classes by code, description, type, and fraction.
- Integrated dialogs for inserting, editing, and deleting classes with validation.
- Enhanced error handling and user feedback with toast notifications.
- Created an embedded iframe for the fixed asset classes page in the merchandise section.
2026-01-08 16:33:43 -06:00

108 lines
3.3 KiB
Python

"""
DTOs (Data Transfer Objects) para módulo de clases de activos fijos (FA)
"""
from datetime import datetime
from decimal import Decimal
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
class FAClassCreateDTO(BaseModel):
"""DTO para crear una clase de activo fijo"""
class_id: int = Field(..., description="ID de la clase base en a76.classes")
import_tariff_code: Optional[str] = Field(
None, max_length=10, description="Código de fracción de importación"
)
import_tariff_type: Optional[str] = Field(
None, max_length=6, description="Tipo de fracción de importación"
)
export_tariff_code: Optional[str] = Field(
None, max_length=10, description="Código de fracción de exportación"
)
export_tariff_type: Optional[str] = Field(
None, max_length=6, description="Tipo de fracción de exportación"
)
depreciation_rate: Optional[Decimal] = Field(
None, description="Tasa de depreciación anual", ge=0, le=100
)
fda_code: Optional[str] = Field(
None, max_length=20, description="Código FDA"
)
eccn_code: Optional[str] = Field(
None, max_length=20, description="Código ECCN (Export Control Classification Number)"
)
class_enabled: Optional[bool] = Field(
True, description="Indica si la clase está habilitada"
)
class Config:
from_attributes = True
class FAClassUpdateDTO(BaseModel):
"""DTO para actualizar una clase de activo fijo"""
import_tariff_code: Optional[str] = Field(
None, max_length=10, description="Código de fracción de importación"
)
import_tariff_type: Optional[str] = Field(
None, max_length=6, description="Tipo de fracción de importación"
)
export_tariff_code: Optional[str] = Field(
None, max_length=10, description="Código de fracción de exportación"
)
export_tariff_type: Optional[str] = Field(
None, max_length=6, description="Tipo de fracción de exportación"
)
depreciation_rate: Optional[Decimal] = Field(
None, description="Tasa de depreciación anual", ge=0, le=100
)
fda_code: Optional[str] = Field(
None, max_length=20, description="Código FDA"
)
eccn_code: Optional[str] = Field(
None, max_length=20, description="Código ECCN"
)
class_enabled: Optional[bool] = Field(
None, description="Indica si la clase está habilitada"
)
class Config:
from_attributes = True
class FAClassResponseDTO(BaseModel):
"""DTO para respuesta de clase de activo fijo"""
id: int
tenant_id: int
company_id: int
class_id: int
import_tariff_code: Optional[str] = None
import_tariff_type: Optional[str] = None
export_tariff_code: Optional[str] = None
export_tariff_type: Optional[str] = None
depreciation_rate: Optional[Decimal] = None
fda_code: Optional[str] = None
eccn_code: Optional[str] = None
class_enabled: Optional[bool] = None
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
class FAClassListResponseDTO(BaseModel):
"""DTO para respuesta de lista paginada de clases de activos fijos"""
items: list[FAClassResponseDTO]
total: int
page: int
page_size: int
model_config = ConfigDict(from_attributes=True)