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

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 

9 

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] 

15 

16 @field_validator("detalles") 

17 @classmethod 

18 def detalles_no_vacios(cls, v): 

19 

20 if not v: 

21 raise ValueError("La lista de productos no puede estar vacía") 

22 return v 

23 

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 } 

37 

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] = [] 

53 

54 class Config: 

55 from_attributes = True