Coverage for backend \ app \ Venta \ schemas \ promocionSchemas.py: 95.65%
46 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, validator
2from typing import Optional, List
3from datetime import date, datetime, timezone, timedelta
4from app.Productos.schemas.productoSchemas import ProductoRespuestaSchema
6class PromocionCrearSchema(BaseModel):
7 idProducto: int = Field(..., example=1)
8 nombrePromocion: str = Field(..., example="Promo Verano")
9 porcentajePromocion: float = Field(..., gt=0, le=100, example=20.0)
10 fechaInicioPromocion: date = Field(..., example="2025-12-01")
11 fechaFinPromocion: date = Field(..., example="2025-12-31")
13 @validator("fechaInicioPromocion")
14 def check_inicio_not_past(cls, v):
15 # fecha de inicio debe ser hoy o mayor en la zona de Quito (UTC-5)
16 quito_now = datetime.now(timezone(timedelta(hours=-5))).date()
17 if v < quito_now:
18 raise ValueError("fechaInicioPromocion debe ser igual o posterior al día actual")
19 return v
21 @validator("fechaFinPromocion")
22 def check_dates(cls, v, values):
23 inicio = values.get("fechaInicioPromocion")
24 if inicio and v < inicio:
25 raise ValueError("fechaFinPromocion debe ser igual o posterior a fechaInicioPromocion")
26 return v
28class PromocionRespuestaSchema(BaseModel):
29 idPromocion: int
30 producto: ProductoRespuestaSchema
31 nombrePromocion: str
32 porcentajePromocion: float
33 fechaInicioPromocion: datetime
34 fechaFinPromocion: datetime
35 activoPromocion: bool
37 class Config:
38 from_attributes = True
40class PromocionResumenSchema(BaseModel):
41 idPromocion: int
42 idProducto: int
43 nombrePromocion: str
44 porcentajePromocion: float
45 fechaInicioPromocion: datetime
46 fechaFinPromocion: datetime
47 activoPromocion: bool
49 class Config:
50 from_attributes = True
52class PromocionListaSchema(BaseModel):
53 promociones: List[PromocionRespuestaSchema] = []
55 class Config:
56 from_attributes = True