barbershop / cruds /ReservaCrud.py
winderoman's picture
detalle reserva cancelada
d0db7eb
import sys
from fastapi import HTTPException
from schemas.ReservaSh import *
from models.ReservaM import Reserva
from sqlalchemy.orm import Session
from sqlalchemy import asc,between
from datetime import date,time
from datetime import datetime
from core.utils import get_list_reserve,sort_object_by_index,get_current_date
list_reserve = get_list_reserve()
def create_new_reserve(reserve:ReserveCreate, id_usuario:str,created_at:datetime,db:Session):
isExistReserve = get_reserve_by_time_date(reserve.hora,reserve.fecha,id_usuario,db)
if isExistReserve != None:
raise HTTPException(status_code=409, detail="Conflict:The reserve already exist.")
db_reserve = Reserva(
id_usuario = id_usuario,
cliente = reserve.cliente,
fecha = reserve.fecha,
hora = reserve.hora,
created_at = created_at
)
try:
db.add(db_reserve)
db.commit()
db.refresh(db_reserve)
db.close()
return db_reserve
except Exception as e:
db.rollback()
print(f"error creating reserve: {str(e)}",file=sys.stderr)
raise HTTPException(status_code=500,detail=f"error creating reserve: {str(e)}")
def update_reserve(reserve:ReserveUpdate, user_id:str, db:Session):
reserve_db = get_reserve_by_id(reserve.id_reserva, user_id, db)
if reserve_db.estado_reserva == 0:
isExistReserve = get_reserve_by_time_date(reserve.hora,reserve.fecha,user_id,db)
if isExistReserve != None:
raise HTTPException(status_code=409, detail="Conflict:The reserve already exist.")
try:
reserve_db.cliente = reserve.cliente
reserve_db.fecha = reserve.fecha
reserve_db.hora = reserve.hora
db.add(reserve_db)
db.commit()
db.refresh(reserve_db)
db.close()
return reserve_db
except Exception as e:
db.rollback()
print(f"error updating reserve: {str(e)}",file=sys.stderr)
raise HTTPException(status_code=500,detail=f"error updating reserve: {str(e)} ")
else:
return None
def update_reserve_tarifa(reserve:ReserveUpdateTarifa, user_id:str, db:Session):
reserve_db = get_reserve_by_id(reserve.id_reserva, user_id, db)
if reserve_db:
try:
reserve_db.estado_reserva = 1
reserve_db.id_tarifa = reserve.id_tarifa
db.add(reserve_db)
db.commit()
db.refresh(reserve_db)
db.close()
return reserve_db
except Exception as e:
db.rollback()
print(f"error updating reserve: {str(e)}",file=sys.stderr)
raise HTTPException(status_code=500,detail=f"error updating reserve: {str(e)} ")
else:
return None
def get_reserve_by_id(id_reserve:int, user_id:str, db:Session):
reserve_db = db.query(Reserva).filter((Reserva.id_reserva == id_reserve) & (Reserva.id_usuario == user_id) ).first()
return reserve_db
def get_reserve_by_time_date(time:time,date:date, user_id:str, db:Session):
reserve_db = db.query(Reserva).filter(
Reserva.hora == time,
Reserva.fecha == date,
Reserva.estado_reserva < 2,
Reserva.id_usuario == user_id
).first()
if reserve_db is None:
return None
return reserve_db
def update_status_reserve(reserve:ReserveUpdateStatus,db:Session,id_user:str):
reserve_db = get_reserve_by_id(reserve.id_reserva,id_user,db)
if reserve_db:
try:
reserve_db.estado_reserva = reserve.estado_reserva
db.add(reserve_db)
db.commit()
return reserve_db
except Exception as e:
db.rollback()
print(f"Error al update una reserva {str(e)}",file=sys.stderr)
raise HTTPException(status_code=500,detail=f"Error al update una reserva: {str(e)} ")
raise HTTPException(status_code=500,detail="No se encontro nada")
def get_reserve_false(id_user:str,db):
fecha = get_current_date()
reserve_db = db.query(Reserva).filter((Reserva.id_usuario == id_user ) & (Reserva.fecha == fecha) & (Reserva.estado_reserva == 0)).order_by(asc(Reserva.hora)).all()
return reserve_db
def get_reserve_all(id_user:str,db,fecha_inicio:date = None,fecha_fin:date = None):
if fecha_inicio is None or fecha_fin is None:
fecha_inicio = get_current_date()
fecha_fin = get_current_date()
reserve_db = db.query(Reserva).filter(
Reserva.id_usuario == id_user,
between(Reserva.fecha, fecha_inicio, fecha_fin)
).order_by(asc(Reserva.hora)).all()
return reserve_db
def get_reservations_by_date(id_user:str,db,fecha:date = None):
if (fecha is None): fecha = get_current_date()
reservations_db = db.query(Reserva).filter(
Reserva.id_usuario == id_user,
Reserva.fecha == fecha,
Reserva.estado_reserva < 2
).all()
return reservations_db
def get_reservations_available(id_user:str,db,fecha:date = None):
list_reservations = get_reservations_by_date(id_user,db,fecha)
object_reservations = {}
for reserva_db in list_reservations:
time_reserve = reserva_db.hora.strftime('%H:%M:%S')
if time_reserve in list_reserve:
object_reservations[time_reserve] = reserva_db.cliente;
for time_reserve in list_reserve:
# bueno mi so el setdefault lo que hace es que si el objeto tiene esa clave no lo modifica de lo contrario coloca el valor Disponible
object_reservations.setdefault(time_reserve, "Disponible")
object_sort = sort_object_by_index(object_reservations)
reservations_available = list(object_sort.items())
return reservations_available