Initial commit

This commit is contained in:
2025-12-05 11:27:16 -03:00
commit 804bacfbe3
87 changed files with 7260 additions and 0 deletions

26
app/models/__init__.py Normal file
View File

@@ -0,0 +1,26 @@
from .cliente import ClienteCreate, ClienteUpdate, ClienteResponse
from .pedido_cliente import (
PedidoClienteCreate, PedidoClienteUpdate, PedidoClienteResponse,
ReferenciaPedidoClienteCreate, ReferenciaPedidoClienteUpdate, ReferenciaPedidoClienteResponse
)
from .proveedor import ProveedorCreate, ProveedorUpdate, ProveedorResponse
from .pedido_proveedor import (
PedidoProveedorCreate, PedidoProveedorUpdate, PedidoProveedorResponse,
ReferenciaPedidoProveedorCreate, ReferenciaPedidoProveedorResponse
)
from .albaran import AlbaranCreate, AlbaranUpdate, AlbaranResponse, ReferenciaAlbaranResponse
from .devolucion import DevolucionCreate, DevolucionUpdate, DevolucionResponse
from .stock import StockReferenciaCreate, StockReferenciaUpdate, StockReferenciaResponse
__all__ = [
"ClienteCreate", "ClienteUpdate", "ClienteResponse",
"PedidoClienteCreate", "PedidoClienteUpdate", "PedidoClienteResponse",
"ReferenciaPedidoClienteCreate", "ReferenciaPedidoClienteUpdate", "ReferenciaPedidoClienteResponse",
"ProveedorCreate", "ProveedorUpdate", "ProveedorResponse",
"PedidoProveedorCreate", "PedidoProveedorUpdate", "PedidoProveedorResponse",
"ReferenciaPedidoProveedorCreate", "ReferenciaPedidoProveedorResponse",
"AlbaranCreate", "AlbaranUpdate", "AlbaranResponse", "ReferenciaAlbaranResponse",
"DevolucionCreate", "DevolucionUpdate", "DevolucionResponse",
"StockReferenciaCreate", "StockReferenciaUpdate", "StockReferenciaResponse",
]

57
app/models/albaran.py Normal file
View File

@@ -0,0 +1,57 @@
from pydantic import BaseModel
from typing import Optional, List, Dict, Any
from datetime import datetime, date
from decimal import Decimal
class ReferenciaAlbaranBase(BaseModel):
referencia: str
denominacion: str
unidades: int = 1
precio_unitario: Decimal = Decimal("0")
impuesto_tipo: str = "21"
impuesto_valor: Decimal = Decimal("0")
class ReferenciaAlbaranResponse(ReferenciaAlbaranBase):
id: int
albaran_id: int
referencia_pedido_proveedor_id: Optional[int] = None
created_at: datetime
class Config:
from_attributes = True
class AlbaranBase(BaseModel):
proveedor_id: Optional[int] = None
numero_albaran: Optional[str] = None
fecha_albaran: Optional[date] = None
archivo_path: str
estado_procesado: str = "pendiente"
class AlbaranCreate(AlbaranBase):
datos_ocr: Optional[Dict[str, Any]] = {}
class AlbaranUpdate(BaseModel):
proveedor_id: Optional[int] = None
numero_albaran: Optional[str] = None
fecha_albaran: Optional[date] = None
estado_procesado: Optional[str] = None
datos_ocr: Optional[Dict[str, Any]] = None
class AlbaranResponse(AlbaranBase):
id: int
fecha_procesado: Optional[datetime] = None
datos_ocr: Dict[str, Any] = {}
created_at: datetime
updated_at: datetime
proveedor: Optional[dict] = None
referencias: Optional[List[ReferenciaAlbaranResponse]] = []
class Config:
from_attributes = True

31
app/models/cliente.py Normal file
View File

@@ -0,0 +1,31 @@
from pydantic import BaseModel, EmailStr
from typing import Optional
from datetime import datetime
class ClienteBase(BaseModel):
nombre: str
matricula_vehiculo: str
telefono: Optional[str] = None
email: Optional[EmailStr] = None
class ClienteCreate(ClienteBase):
pass
class ClienteUpdate(BaseModel):
nombre: Optional[str] = None
matricula_vehiculo: Optional[str] = None
telefono: Optional[str] = None
email: Optional[EmailStr] = None
class ClienteResponse(ClienteBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True

37
app/models/devolucion.py Normal file
View File

@@ -0,0 +1,37 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class DevolucionBase(BaseModel):
proveedor_id: int
referencia: str
denominacion: Optional[str] = None
unidades: int = 1
estado_abono: str = "pendiente"
class DevolucionCreate(DevolucionBase):
pass
class DevolucionUpdate(BaseModel):
proveedor_id: Optional[int] = None
referencia: Optional[str] = None
denominacion: Optional[str] = None
unidades: Optional[int] = None
estado_abono: Optional[str] = None
albaran_abono_id: Optional[int] = None
class DevolucionResponse(DevolucionBase):
id: int
fecha_devolucion: datetime
albaran_abono_id: Optional[int] = None
created_at: datetime
updated_at: datetime
proveedor: Optional[dict] = None
class Config:
from_attributes = True

View File

@@ -0,0 +1,70 @@
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class ReferenciaPedidoClienteBase(BaseModel):
referencia: str
denominacion: str
unidades_solicitadas: int = 1
unidades_en_stock: int = 0
estado: str = "pendiente"
class ReferenciaPedidoClienteCreate(ReferenciaPedidoClienteBase):
pass
class ReferenciaPedidoClienteUpdate(BaseModel):
referencia: Optional[str] = None
denominacion: Optional[str] = None
unidades_solicitadas: Optional[int] = None
unidades_en_stock: Optional[int] = None
estado: Optional[str] = None
class ReferenciaPedidoClienteResponse(ReferenciaPedidoClienteBase):
id: int
pedido_cliente_id: int
unidades_pendientes: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class PedidoClienteBase(BaseModel):
numero_pedido: str
cliente_id: int
fecha_cita: Optional[datetime] = None
estado: str = "pendiente_revision"
presupuesto_id: Optional[str] = None
archivo_pdf_path: Optional[str] = None
class PedidoClienteCreate(PedidoClienteBase):
referencias: Optional[List[ReferenciaPedidoClienteCreate]] = []
class PedidoClienteUpdate(BaseModel):
numero_pedido: Optional[str] = None
cliente_id: Optional[int] = None
fecha_cita: Optional[datetime] = None
estado: Optional[str] = None
presupuesto_id: Optional[str] = None
archivo_pdf_path: Optional[str] = None
class PedidoClienteResponse(PedidoClienteBase):
id: int
fecha_pedido: datetime
created_at: datetime
updated_at: datetime
cliente: Optional[dict] = None
referencias: Optional[List[ReferenciaPedidoClienteResponse]] = []
es_urgente: bool = False
class Config:
from_attributes = True

View File

@@ -0,0 +1,59 @@
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class ReferenciaPedidoProveedorBase(BaseModel):
referencia: str
denominacion: str
unidades_pedidas: int = 1
estado: str = "pendiente"
class ReferenciaPedidoProveedorCreate(ReferenciaPedidoProveedorBase):
referencia_pedido_cliente_id: Optional[int] = None
class ReferenciaPedidoProveedorResponse(ReferenciaPedidoProveedorBase):
id: int
pedido_proveedor_id: int
referencia_pedido_cliente_id: Optional[int] = None
unidades_recibidas: int = 0
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class PedidoProveedorBase(BaseModel):
proveedor_id: int
numero_pedido: Optional[str] = None
tipo: str = "web"
estado: str = "pendiente_recepcion"
email_confirmacion_path: Optional[str] = None
class PedidoProveedorCreate(PedidoProveedorBase):
referencias: Optional[List[ReferenciaPedidoProveedorCreate]] = []
class PedidoProveedorUpdate(BaseModel):
proveedor_id: Optional[int] = None
numero_pedido: Optional[str] = None
tipo: Optional[str] = None
estado: Optional[str] = None
email_confirmacion_path: Optional[str] = None
class PedidoProveedorResponse(PedidoProveedorBase):
id: int
fecha_pedido: datetime
created_at: datetime
updated_at: datetime
proveedor: Optional[dict] = None
referencias: Optional[List[ReferenciaPedidoProveedorResponse]] = []
class Config:
from_attributes = True

31
app/models/proveedor.py Normal file
View File

@@ -0,0 +1,31 @@
from pydantic import BaseModel, EmailStr
from typing import Optional
from datetime import datetime
class ProveedorBase(BaseModel):
nombre: str
email: Optional[EmailStr] = None
tiene_web: bool = True
activo: bool = True
class ProveedorCreate(ProveedorBase):
pass
class ProveedorUpdate(BaseModel):
nombre: Optional[str] = None
email: Optional[EmailStr] = None
tiene_web: Optional[bool] = None
activo: Optional[bool] = None
class ProveedorResponse(ProveedorBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True

27
app/models/stock.py Normal file
View File

@@ -0,0 +1,27 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class StockReferenciaBase(BaseModel):
referencia: str
unidades_disponibles: int = 0
class StockReferenciaCreate(StockReferenciaBase):
pass
class StockReferenciaUpdate(BaseModel):
referencia: Optional[str] = None
unidades_disponibles: Optional[int] = None
class StockReferenciaResponse(StockReferenciaBase):
id: int
ultima_actualizacion: datetime
created_at: datetime
class Config:
from_attributes = True