Coverage for backend \ app \ Venta \ schemas \ ventaSchemas.py: 97.30%
37 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 datetime import datetime
2from app.Venta.schemas.detalleVentaSchemas import DetalleVentaRespuestaSchema
3from app.Venta.schemas.detalleVentaSchemas import DetalleVentaCrearSchema
4from app.Usuarios.schemas.usuarioSchemas import UsuarioPublicoSchema
5from app.Clientes.schemas.clienteSchemas import ClienteRespuestaSchema
6from pydantic import BaseModel, Field, field_validator
7from typing import List, Literal
8from app.Venta.schemas.detalleVentaSchemas import DetalleVentaCrearSchema
10class VentaCrearSchema(BaseModel):
11 idCliente: int
12 metodoPago: Literal["Efectivo", "Tarjeta", "Transferencia"]
13 descuentoGeneral: float = Field(0.0, ge=0.0, le=100.0)
14 detalles: List[DetalleVentaCrearSchema]
16 @field_validator("detalles")
17 @classmethod
18 def detalles_no_vacios(cls, v):
20 if not v:
21 raise ValueError("La lista de productos no puede estar vacía")
22 return v
24 model_config = {
25 "json_schema_extra": {
26 "example": {
27 "idCliente": 1,
28 "metodoPago": "Efectivo",
29 "descuentoGeneral": 0.0,
30 "detalles": [
31 {"idProducto": 1, "cantidadComprada": 10},
32 {"idProducto": 2, "cantidadComprada": 5}
33 ]
34 }
35 }
36 }
38class VentaRespuestaSchema(BaseModel):
39 idVenta: int
40 idCaja: int
41 usuario: UsuarioPublicoSchema
42 cliente: ClienteRespuestaSchema
43 fechaVenta: datetime
44 subtotalVenta: float
45 descuentoGeneral: float
46 totalDescuento: float
47 baseIVA: float
48 totalIVA: float
49 totalPagar: float
50 metodoPago: str
51 estadoVenta: str
52 detalles: List[DetalleVentaRespuestaSchema] = []
54 class Config:
55 from_attributes = True