Coverage for backend \ app \ Pedido \ schemas \ pedidoSchemas.py: 100.00%
38 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
1from pydantic import BaseModel, Field
2from typing import Optional, List, Literal
3from datetime import datetime
4from app.Productos.schemas.productoSchemas import ProductoRespuestaSchema
5from app.Usuarios.schemas.usuarioSchemas import UsuarioPublicoSchema
7class DetallePedidoCrearSchema(BaseModel):
8 idProducto: int = Field(..., example=1)
9 cantidadSolicitada: int = Field(..., example=10, ge=1)
11class PedidoCrearSchema(BaseModel):
12 detalles: List[DetallePedidoCrearSchema]
14 model_config = {
15 "json_schema_extra": {
16 "example": {
17 "detalles": [
18 {"idProducto": 1, "cantidadSolicitada": 10},
19 {"idProducto": 2, "cantidadSolicitada": 5}
20 ]
21 }
22 }
23 }
24class DetallePedidoRespuestaSchema(BaseModel):
25 idDetallePedido: int
26 idPedido: int
27 cantidadSolicitada: int
28 precioUnitarioCompra: float
29 estadoDetalle: str
30 fechaRecepcion: Optional[datetime] = Field(None, example="2025-12-20T15:30:00Z")
31 producto: Optional[ProductoRespuestaSchema] = None
32 usuarioReceptor: Optional[UsuarioPublicoSchema] = None
34 class Config:
35 from_attributes = True
37class PedidoRespuestaSchema(BaseModel):
38 idPedido: int
39 usuarioCreador: UsuarioPublicoSchema
40 usuarioAprobador: Optional[UsuarioPublicoSchema] = None
41 totalCostoPedido: float
42 fechaCreacion: Optional[datetime] = Field(None, example="2025-12-20T15:30:00Z")
43 estadoPedido: str
44 observaciones: Optional[str] = None
45 detalles: List[DetallePedidoRespuestaSchema] = []
47 class Config:
48 from_attributes = True
50class RevisarPedidoSchema(BaseModel):
51 estadoPedido: Literal["APROBADO","RECHAZADO"] = Field(..., example="APROBADO", description="Enviar 'APROBADO' o 'RECHAZADO'. Solo Administrador puede aprobar pedidos creados por otros.")
52 observaciones: Optional[str] = None
54class RecepcionDetalleSchema(BaseModel):
55 confirmar: bool = Field(..., example=True, description="Debe ser true para confirmar la recepción completa del detalle")