Exemple #1
0
def booking_submit(request):
    if request.method == "POST":
        form = BookingForm(request.POST)
        if not request.user.is_authenticated():
            return render(request, "booking_submitted.html", {"success":False})
        if form.is_valid():
            booking = form.save(commit=False)
            booking.user = request.user
            
            # Verify that this booking will not conflict with any others
            # ie in the same room, with overlapping times
            # to do this quickly, find all bookings in same room, excluding those with start date after new end date and end date before new start date. This makes sense, I promise... 
            conflicting_bookings = Booking.objects.filter(room=booking.room).exclude(start_date__gte=booking.end_date).exclude(end_date__lte=booking.start_date)
            print conflicting_bookings
            if len(conflicting_bookings) > 0:
                print "conflicts found"
                return render(request, "booking_submitted.html", {"success":False})    
            print "no conflicts"
            booking.save()
            # block bookings - adds copies of the booking for x number of weeks. TODO conflict res
            if request.POST['repeat'] == "10times":
                print "block booking"
                block_id = uuid.uuid4().int
                for i in range(1,10):
                    form = BookingForm(request.POST)
                    booking = form.save(commit=False)
                    booking.user = request.user
                    booking.start_date += timedelta(days=7*i)
                    booking.block_booking = block_id 
                    booking.save()
            print booking
            return render(request, "booking_submitted.html", {"success":True})
        return render(request, "booking_submitted.html", {"success":False})
    else:
        return redirect('bookings.views.booking_calendar')
Exemple #2
0
def booking(request, *args, **kwargs):
    # print request.GET.get('start','n,nbn')
    tmp = {}
    model = request.GET.get('model', None)
    if model:
        tmp["model_choose"] = model
    date = request.GET.get('date', None)
    time = request.GET.get('time', None)

    if time and date:
        raw_date = datetime.datetime.strptime(date + ' ' + time,
                                              "%Y-%m-%d %I:%M %p")
        # tmp["arrive_time"] = raw_date.strftime("%d/%m/%Y %H:%M")
        tmp["arrive_time"] = raw_date.strftime("%Y-%m-%dT%H:%M")

    user_client = Client.objects.filter(user=request.user)
    print user_client
    if user_client:
        tmp["client"] = user_client[0].id

    arrive = request.GET.get('arrive', None)
    airport = request.GET.get('airport', None)
    passengers = request.GET.get('passengers', None)

    if arrive:
        tmp["destination"] = arrive

    if airport:
        tmp["airport"] = airport

    if passengers:
        tmp["passengers"] = passengers

    form = BookingForm(tmp)
    return render(request, 'client/booking.html', {'form': form})
def render_booking(profile_id, day, time):
    return render_template('booking.html',
                           form=BookingForm(),
                           profile=teachers[profile_id],
                           day=day,
                           time=time,
                           days_of_week=days_of_week)
Exemple #4
0
def book_form(id, day, time):
    form = BookingForm()

    teacher = db.session.query(Teacher).filter(Teacher.id == int(id)).one()

    if form.validate_on_submit():
        name = form.name.data
        phone = form.phone.data
        day = form.day.data
        time = form.time.data
        id = form.id.data

        teacher = db.session.query(Teacher).filter(Teacher.id == int(id)).one()
        teacher.schedule[day][time] = False
        flag_modified(teacher, "schedule")
        new_booking = Booking(day=day,
                              time=time,
                              client_id=check_client(name, phone),
                              teacher_id=id)
        db.session.add(new_booking)
        db.session.commit()

        return render_template("booking_done.html",
                               name=name,
                               phone=phone,
                               day_name=days[day],
                               time=time)

    return render_template("booking.html",
                           form=form,
                           teacher=teacher,
                           day=day,
                           day_name=days[day],
                           time=time)
def bookingDetails(carId):
    """
    Routes user to the registration page.
    Args:
        carId(str): Car unique identifier
    Returns:
        HTML: Bookind details page.
    """
    form = BookingForm()
    if form.validate_on_submit():
        userBookingData = {
            "pickUpDate": form.pickup_date.data,
            "pickUpTime": form.pickup_time.data,
            "returnDate": form.return_date.data,
            "returnTime": form.return_time.data,
            "carID": carId,
            "username": flask.session["username"],
        }
        userBookingJSONData = json.dumps(userBookingData, cls=DateTimeEncoder)
        response = requests.post(flask.request.host_url + "/bookingDetails",
                                 json=userBookingJSONData)
        data = json.loads(response.text)
        if data["message"] == "Success":
            flask.flash(data["message"], "success")
        else:
            flask.flash(data["message"], "danger")
    return flask.render_template("bookingDetails.html", form=form)
Exemple #6
0
def save_booking():
    if request.method == 'POST':
        form = BookingForm()
        booking = Booking(weekday=form.clientWeekday.data,
                          time=form.clientTime.data,
                          teacher_id=form.clientTeacher.data,
                          name=form.clientName.data,
                          phone=form.clientPhone.data)
        if form.validate_on_submit():
            db.session.add(booking)
            db.session.commit()
            return render_template('booking_done.html',
                                   clientWeekday=booking.weekday,
                                   clientTime=booking.time,
                                   clientName=booking.name,
                                   clientPhone=booking.phone,
                                   week=WEEK)
        return render_template(
            'booking.html',
            form=form,
            name=db.session.query(Teacher).get(booking.teacher_id).name,
            day=booking.weekday,
            hour=booking.time,
            picture=db.session.query(Teacher).get(booking.teacher_id).picture,
            id=booking.teacher_id,
            week=WEEK)
Exemple #7
0
def car_booking(item_id):
    car = get_car(item_id)['Item']
    car['carid'] = int(car['carid'])
    booking_form = BookingForm()
    if booking_form.submit5.data and booking_form.validate_on_submit():
        if logged_in_user.username == '':
            return redirect(url_for('car_booking', item_id=item_id, msg="You must login first!"))
        result1 = request.form
        event = {
            'id': int(time.time()),
            'place': result1['place'],
            'pickup_date': result1['pick_up_date'],
            'days': result1['days'],
            'order_date': str(datetime.today()),
            'carid': car,
            'payment_type': result1['payment_type'],
            'username': logged_in_user.username,
        }
        resp = rent_car(event)
        if resp['success']:
            return redirect(url_for('past_bookings', msg=resp['message']))
        else:
            return redirect(url_for('past_bookings', msg=resp['message']))
    return render_template('car-booking.html', bookingform=booking_form, user=logged_in_user, car=car,
                           msg=request.args.get('msg'))
def bookingd7():
    form = BookingForm()
    today = get_today()
    delta = timedelta(days=1)
    d7 = today + 7 * delta
    Booking1 = Booking.query.all()
    count = 0

    for booking1 in Booking1:
        if booking1.date.strftime("%d/%m/%y") == d7.strftime("%d/%m/%y"):
            count += 1
    appnum = count
    appnum1 = appnum + 1
    apptime = appnum + 10
    if request.method == 'POST':
        booking = Booking(date=d7,
                          appointnum=appnum1,
                          time=apptime,
                          patientname=form.patientname.data,
                          NIC=form.NIC.data,
                          Phonenum=form.Phonenum.data)
        db.session.add(booking)
        db.session.commit()
        return render_template('booking_success.html',
                               date=d7,
                               appointnum=appnum1,
                               appointime=apptime)
    return render_template('booking1.html', form=form)
def render_booking(profile_id, weekday, time):
    profile = db.session.query(Teacher).get_or_404(profile_id)
    form = BookingForm()
    form.weekday.default = weekday
    form.time.default = time
    form.teacher.default = profile_id
    if request.method == "POST":
        if form.validate_on_submit():
            name = form.name.data
            time = form.time.data
            weekday = form.weekday.data
            teacher_id = form.teacher.data
            phone = form.phone.data
            teacher = db.session.query(Teacher).get_or_404(profile_id)
            booking = Booking(weekday=weekday,
                              time=time,
                              teacher=teacher,
                              teacher_id=teacher_id,
                              name=name,
                              phone=phone)
            db.session.add(booking)
            schedule = teacher.free
            schedule[weekday][time] = False
            teacher.free = schedule
            flag_modified(teacher, "free")
            db.session.commit()
            return render_template('booking_done.html', weekday=WEEKDAYS[weekday], time=time, name=name, phone=phone)
    return render_template('booking.html', profile=profile, weekday=WEEKDAYS[weekday], time=time, form=form)
Exemple #10
0
def render_booking(lesson_id):
    error = ''
    form = BookingForm()
    lesson_id = int(lesson_id)
    lesson = Lesson.query.get_or_404(lesson_id)
    week_day = lesson.day_name.day_name
    _time = lesson.time.get_str_time()
    teacher = lesson.teacher
    if not lesson.status:
        error = f'Извините, у {teacher.name}  в  {week_day.lower()} {_time} нет свободного времени, ' \
                f'пожалуйста выберите другое время'
    if request.method == 'POST' and form.validate_on_submit() and error == '':
        form.lesson_id.data = int(lesson_id)
        booking = Booking()
        form.populate_obj(booking)
        client_name, client_phone = form.client_name.data, form.client_phone.data
        lesson.status = False
        db.session.add_all([lesson, booking])
        db.session.commit()
        return render_template('booking_done.html',
                               week_day=week_day,
                               day_time=_time,
                               name=client_name,
                               phone=client_phone)
    form.lesson_id.data = str(lesson_id)
    return render_template('booking.html',
                           teacher=teacher,
                           lesson_id=lesson_id,
                           week_day=week_day,
                           day_time=_time,
                           error=error,
                           form=form)
Exemple #11
0
def render_booking_done():
    if request.method != "POST":
        return redirect(url_for('render_index'))

    form = BookingForm()
    name = form.name.data
    phone = form.phone.data

    day = request.form.get('clientWeekday')
    time = request.form.get('clientTime')
    profile_id = request.form.get('clientTeacher')

    data = {
        'name': name,
        'profile_id': profile_id,
        'phone': phone,
        'day': day,
        'time': time
    }
    update_data('booking.json', data)

    return render_template('booking_done.html',
                           name=name,
                           phone=phone,
                           day=days_of_week[day],
                           time=time)
Exemple #12
0
def render_booking(profile_id, day, time):

    teacher = Teacher.query.filter(Teacher.id == profile_id).scalar()

    teacher_name = teacher.name
    teacher_pic = teacher.picture
    time = time.replace("-", ":")
    timeslot = (Timeslot.query.filter(
        db.and_(Timeslot.teacher_id == int(profile_id),
                Timeslot.weekday == day, Timeslot.time == time))).scalar()
    timeslot_id = timeslot.id
    day = days[day]

    form = BookingForm()

    return render_template(
        'booking.html',
        teacher_name=teacher_name,
        teacher_pic=teacher_pic,
        teacher_id=profile_id,
        timeslot_id=timeslot_id,
        day=day,
        time=time,
        form=form,
    )
Exemple #13
0
def booking():
    form = BookingForm()
    form.carnumber.data = request.args['carnumber']
    form.user.data = request.args['user']
    #form.start_date.data=date.today()
    #form.end_date.data=date.today()
    form.number_of_days.data='0'
    form.cost.data='0'
    
    
    if ((form.validate_on_submit()==True)):
        form.start_date.data=form.start_date.data
        form.end_date.data=form.end_date.data
        form.number_of_days.data = form.setnod(form.start_date,form.end_date).days+1
        car = Car.query.filter_by(carnumber=form.carnumber.data).first()
        price = car.cost_per_hour
        form.cost.data = form.setcost(form.number_of_days, price)
        flash('Booking confirmed!', 'success')
        bid = form.carnumber.data + datetime.strftime(form.start_date.data, '%m/%d/%Y')
        booking =  Booking(booking_id = bid,carnumber = form.carnumber.data,user = form.user.data,start_date = form.start_date.data, end_date = form.end_date.data,start_location =  car.location, end_location = None, number_of_days = form.number_of_days.data, cost = form.cost.data)
        bdb.session.add(booking)
        car.isAvailable = False
        cdb.session.commit()
        bdb.session.commit()
        print("returning true")
        return render_template('booking.html', form=form, user = request.args['user'], disabled='true')    
       
    return render_template('booking.html', form=form, user = request.args['user'], disabled = 'false')
Exemple #14
0
def render_booking(profile_id, weekday, time):
    profile = get_profile_from_json_by_id(profile_id, TEACHERS_JSON_PATH)
    form = BookingForm()
    form.weekday.default = weekday
    form.time.default = time
    form.teacher.default = profile_id
    return render_template('booking.html', profile=profile, weekday=WEEKDAYS[weekday], form=form)
Exemple #15
0
def booking(teacher_id, day_of_week, time):

    day = days[day_of_week]
    teacher = db.session.query(Teacher).filter(
        Teacher.id == teacher_id).first()
    time = time.replace("-", ":")

    form = BookingForm()

    if form.validate_on_submit():

        name = form.name.data
        phone = form.phone.data
        day = form.day.data
        time = form.time.data
        teacher_id = form.teacher.data

        request_data = Booking(name=name,
                               phone=phone,
                               day=day,
                               time=time,
                               teacher_id=teacher_id)
        db.session.add(request_data)
        db.session.commit()
        return render_template("booking_done.html",
                               form=form,
                               name=name,
                               phone=phone,
                               day=day,
                               time=time)
    return render_template("booking.html",
                           teacher=teacher,
                           time=time,
                           day=day,
                           form=form)
Exemple #16
0
def booking_view(teacher_id, day, hour):
    form = BookingForm()
    return render_template('booking.html',
                           data=TEACHERS_DATA,
                           day=day,
                           hour=hour,
                           day_of_week=day_of_week,
                           form=form,
                           id=teacher_id)
Exemple #17
0
def add_booking():
    form = BookingForm()
    if form.validate_on_submit():
        start_date = request.form['start_date']
        end_date = request.form['end_date']
        name = request.form['name']
        email = request.form['email']
        write_csv_file(bookings_file_path, [start_date, end_date, name, email])
        return redirect(url_for('show_bookings'))
    return show_bookings(form)
Exemple #18
0
def book():
    form = BookingForm()
    if form.validate_on_submit():
        service_name = form.bookingName.data
        service_date = form.bookingDate.data
        return redirect(
            url_for('booktime',
                    service_name=service_name,
                    service_date=service_date))

    return render_template('book.html', title='Appointment booker', form=form)
Exemple #19
0
def booking(id, booking_day, booking_time):
    form = BookingForm()
    teacher = db.session.query(Teacher).get(int(id))
    return render_template('booking.html',
                           form=form,
                           name=teacher.name,
                           day=booking_day,
                           hour=booking_time,
                           picture=teacher.picture,
                           week=WEEK,
                           id=id)
Exemple #20
0
def render_booking_done():
    form = BookingForm()
    if form.validate():
        name = form.name.data
        time = form.time.data
        weekday = form.weekday.data
        teacher_id = form.teacher.data
        phone = form.phone.data
        write_lesson_to_json(teacher_id, weekday, time, TEACHERS_JSON_PATH)
        return render_template('booking_done.html', name=name, time=time, weekday=WEEKDAYS[weekday], phone=phone)
    return 'Данные не получены '
Exemple #21
0
def booking_calendar(request):
    """
    Calendar widget requires booking objects as json. We get all bookings from DB, then convert them to json.
    This conversion removes several fields from the Booking object, since they cannot be converted to json/aren't required.
    """
    bookings = Booking.objects.all()  # Todo: should load only this month's bookings
    bookings_as_dicts = []
    for booking in bookings:
        bookings_as_dicts.append(booking.to_json())
    bookings_json_string = dumps(bookings_as_dicts)
    form = BookingForm()
    return render(request, "calendar.html", {'bookings': bookings_json_string, 'form': form})
Exemple #22
0
def booking_form(request):
    """
    Creation d'un formulaire de reservation
    """
    form = BookingForm(request.POST or None)
    if form.is_valid():
        envoi = True
        booking = form.save(commit=False)
        booking.author = request.user.username
        booking.save()

    return render(request, 'booking/bookingForm.html', locals())
def new_booking_1():
    form = BookingForm()
    if form.validate_on_submit():
        booking_details = extract_booking_details(form)
        create_calendar_reminders(booking_details)
        create_spreadsheet_entry(booking_details)
        email_guest_booking_confirmation(booking_details)
        store_booking_in_database(booking_details)
        flash("Booking made.")
        return redirect(url_for('homepage'))
    return render_template('new_booking_1.html',
                           form=form,
                           properties=settings.PROPERTIES)
Exemple #24
0
def cart_render():
    form = BookingForm()
    cart_items = {}
    total = 0

    if request.method == 'POST':
        if form.validate_on_submit():
            request_data = {
                'name': form.name.data,
                'address': form.address.data,
                'email': form.email.data,
                'phone': form.phone.data,
                'order_summ': form.order_summ.data,
                'order_cart': form.order_cart.data
            }

            request_to_db = Order(date=(strftime("%Y-%m-%d %H:%M", gmtime())),
                                  total=request_data['order_summ'],
                                  status='Pending',
                                  phone=request_data['phone'],
                                  address=request_data['address'],
                                  user_id=current_user.id)

            db.session.add(request_to_db)

            for i in request_data['order_cart'][1:-1].split(','):
                meal = db.session.query(Meal).get(int(i))
                request_to_db.meals_list.append(meal)

            db.session.commit()
            session['order'] = request_to_db.id
            session.pop('cart')
            return redirect(url_for('cart.ordered_render'))

    if not session.get('cart') is None:
        cart = db.session.query(Meal).filter(Meal.id.in_(session['cart']))

        for id in session['cart']:
            item = cart.filter(Meal.id == id).first()
            total += item.price
            if not id in cart_items:
                cart_items[item.id] = [item.title, item.price, 1]
            else:
                cart_items[item.id][2] += 1

    final_total = lambda sum: str(f'{sum:,}').replace(',', ' ')
    return render_template('cart.html',
                           form=form,
                           cart_items=cart_items,
                           total=total,
                           total_cool=final_total(total))
Exemple #25
0
def booking_add(profile_id, day_name, time_value):
    teachers, booking = read_db()
    form = BookingForm(request.form)
    form.clientTeacher.data = profile_id
    form.clientWeekday.data = day_name
    form.clientTime.data = time_value
    if form.validate():
        form.save()
        return redirect('/booking_done')
    return render_template("booking.html",
                           teacher=teachers[profile_id],
                           day_name=day_name,
                           time_value=time_value,
                           form=form)
Exemple #26
0
def modify_booking(item_id):
    booking = get_booking_by_id(item_id)
    booking_form = BookingForm(place=booking['place'], pick_up_date=booking['pickup_date'], days=booking['days'],
                               payment_type=booking['payment_type'])
    if booking_form.submit5.data and booking_form.validate_on_submit():
        if logged_in_user.username == "":
            return redirect(url_for('modify_booking', msg="You must be logged in modify the booking."))
        result1 = request.form
        resp = update_booking(item_id, result1['place'], result1['days'], result1['pick_up_date'])
        if resp['ResponseMetadata']['HTTPStatusCode'] == 200:
            return redirect(url_for('past_bookings'))
        else:
            return redirect(url_for('modify_booking', msg="Something went wrong."))
    return render_template('modify-booking.html', bookingform=booking_form, booking=booking, user=logged_in_user,
                           msg=request.args.get('msg'))
Exemple #27
0
def booking():
    form = BookingForm()
    form.carnumber.data = request.args['carnumber']
    form.user.data = request.args['user']
    form.number_of_days.data = '0'
    form.cost.data = '0'
    service = build("calendar", "v3", http=Http())

    if ((form.validate_on_submit() == True)):
        form.start_date.data = form.start_date.data
        form.end_date.data = form.end_date.data
        form.number_of_days.data = form.setnod(form.start_date,
                                               form.end_date).days + 1
        car = Car.query.filter_by(carnumber=form.carnumber.data).first()
        price = car.cost_per_hour
        form.cost.data = form.setcost(form.number_of_days, price)
        flash('Booking confirmed!', 'success')
        bid = form.carnumber.data + datetime.strftime(form.start_date.data,
                                                      '%m/%d/%Y')
        booking = Booking(booking_id=bid,
                          carnumber=form.carnumber.data,
                          user=form.user.data,
                          start_date=form.start_date.data,
                          end_date=form.end_date.data,
                          start_location=car.location,
                          end_location=None,
                          number_of_days=form.number_of_days.data,
                          status=True,
                          cost=form.cost.data,
                          event_id=None)
        bdb.session.add(booking)
        eid = booking.addToCalendar(service)
        eid = eid.split("?eid=", 1)
        eveid = eid[1]
        booking.event_id = eveid
        car.isAvailable = False
        cdb.session.commit()
        bdb.session.commit()
        print("returning true")
        return render_template('booking.html',
                               form=form,
                               user=request.args['user'],
                               disabled='true')

    return render_template('booking.html',
                           form=form,
                           user=request.args['user'],
                           disabled='false')
    def post(self, request, *args, **kwargs):
        try:
            email_form = EmailForm(request.POST, instance=request.user)
            phone_form = PhoneForm(request.POST, instance=request.user.profile)
            booking_form = BookingForm(request.POST)
            tz = pytz.timezone(settings.TIME_ZONE)
            my_bookings = Booking.objects.filter(
                madeBy=request.user,
                start__gt=datetime.now(tz),
                app_config=self.config).order_by('start')
            delete_booking = DeleteBooking(request.POST)
        except AttributeError:
            return render(request, 'bookings.html')

        if email_form.is_valid() and phone_form.is_valid(
        ) and booking_form.is_valid():
            email_form.save()
            phone_form.save()
            new_booking = booking_form.save(commit=False)
            if new_booking.start and new_booking.end:
                new_booking.app_config = self.config

                free = Booking.objects.free(new_booking.app_config,
                                            new_booking.start, new_booking.end)
                a_booking_spot = BookingConfig.objects.filter(
                    booking_spots__start__exact=new_booking.start.time(),
                    booking_spots__end__exact=new_booking.end.time()).exists()

                if free and a_booking_spot:
                    new_booking.made_by = request.user
                    Booking.objects.add_booking(new_booking.app_config,
                                                new_booking.name,
                                                new_booking.made_by,
                                                new_booking.start,
                                                new_booking.end)
        if delete_booking.is_valid():
            Booking.objects.filter(
                id__exact=delete_booking.cleaned_data['id']).delete()

        return render(
            request, 'bookings.html', {
                'email_form': email_form,
                'phone_form': phone_form,
                'booking_form': booking_form,
                'my_bookings': my_bookings,
                'delete_booking': delete_booking
            })
Exemple #29
0
def render_booking(teacher_id, day, time):
    current_teacher = s.get_teacher(teacher_id)
    try:
        s.get_schedule(teacher_id)[day][f"{time}:00"]
    except KeyError:
        abort(404)
    form = BookingForm()
    return render_template("booking.html",
                           teacher_name=current_teacher.name,
                           teacher_id=teacher_id,
                           teacher_picture=current_teacher.picture,
                           day_key=day,
                           day_value=days[day],
                           time=f"{time}:00",
                           form=form,
                           title="Запись на пробный урок",
                           url=request.url)
Exemple #30
0
def render_booking_item(teacher_id, weekday, time):
    teacher = Teacher.query.get(teacher_id)

    form = BookingForm()
    if request.method == "POST":
        # если данные post и get отличаются, приводим их к одному виду
        time = form.clientTime.data
        teacher_id = int(form.clientTeacher.data)
        weekday = form.clientWeekday.data

    day = next((w for w in WEEKDAYS if w[0] == weekday), -1)  #

    # Если данные были отправлены
    if request.method == "POST":
        if form.validate_on_submit():
            # получаем данные
            client_name = form.clientName.data
            client_phone = form.clientPhone.data

            # TODO Зачем нужен back_populates ведь в этом случае все работало бы и без него
            booking = Booking(name=client_name,
                              phone=client_phone,
                              teacher_id=teacher_id,
                              weekday=weekday,
                              time=time)
            db.session.add(booking)
            db.session.commit()

            # переходим на booking_done
            return render_template('booking_done.html',
                                   clientName=client_name,
                                   clientPhone=client_phone,
                                   clientWeekday=day,
                                   clientTime=time)

    # Если данные еще НЕ были отправлены или неверны
    # выводим форму
    form.clientTime.data = time
    form.clientTeacher.data = teacher_id
    form.clientWeekday.data = weekday

    return render_template('booking.html',
                           form=form,
                           t=teacher,
                           weekday=day,
                           time=time)