Spaces:
Running
Running
File size: 5,824 Bytes
35c6a2c c84b9d8 35c6a2c d0db7eb 35c6a2c d0db7eb 35c6a2c c84b9d8 35c6a2c c84b9d8 35c6a2c c84b9d8 35c6a2c d0db7eb 35c6a2c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
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
|