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