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

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 

5 

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") 

12 

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 

20 

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 

27 

28class PromocionRespuestaSchema(BaseModel): 

29 idPromocion: int 

30 producto: ProductoRespuestaSchema 

31 nombrePromocion: str 

32 porcentajePromocion: float 

33 fechaInicioPromocion: datetime 

34 fechaFinPromocion: datetime 

35 activoPromocion: bool 

36 

37 class Config: 

38 from_attributes = True 

39 

40class PromocionResumenSchema(BaseModel): 

41 idPromocion: int 

42 idProducto: int 

43 nombrePromocion: str 

44 porcentajePromocion: float 

45 fechaInicioPromocion: datetime 

46 fechaFinPromocion: datetime 

47 activoPromocion: bool 

48 

49 class Config: 

50 from_attributes = True 

51 

52class PromocionListaSchema(BaseModel): 

53 promociones: List[PromocionRespuestaSchema] = [] 

54 

55 class Config: 

56 from_attributes = True