- 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.
108 lines
3.3 KiB
Python
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)
|