Exemplo n.º 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')
Exemplo n.º 2
0
Arquivo: views.py Projeto: mrb101/Kams
def index(request):
    template = 'booking/index.html'
    form = BookingForm(request.POST or None)
    if form.is_valid():
        booking = form.save(commit=False)
        booking.user = request.user
        booking.save()
        messages.success(request, "Your booking was completed successfully!")
        return redirect('/bookings/')
    context = {'form': form}
    return render(request, template, context)
Exemplo n.º 3
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())
Exemplo n.º 4
0
    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
            })
Exemplo n.º 5
0
def addBooking(request):
    if request.method == "POST":
        f = BookingForm(request.POST, initial={'booker':request.user, 'room':0})
        if f.is_valid():
            first_booking = 0
            #relatedBookings = []
            submittedBookings = []
            for room in f.cleaned_data['room']:
                newBooking = Booking(name=f.cleaned_data['name'],
                              notes=f.cleaned_data['notes'],
                              date=f.cleaned_data['date'],
                              start=f.cleaned_data['start'],
                              end=f.cleaned_data['end'],
                              booker=get_object_or_404(User, pk=request.user.id),
                              approved=False,
                              category=get_object_or_404(BookingCategory, pk=request.POST['category']),
                              room=get_object_or_404(Room, pk=room.pk))
                #auto-approve if admin
                if request.user.is_staff:
                    newBooking.approved = True
                newBooking.save()
                if first_booking == 0:
                    first_booking = newBooking
                submittedBookings.append(newBooking)
                #relatedBookings.append([newBooking])


                if (f.cleaned_data['repeat']): # repeat is specified
                    curr_date = f.cleaned_data['date']

                    ''' Timestep will be the increment for the repeat '''
                    if f.cleaned_data['repeat_frequency_unit'] == 'day':
                        timestep =  datetime.timedelta(days=f.cleaned_data['repeat_frequency'])
                    elif f.cleaned_data['repeat_frequency_unit'] == 'week':
                        timestep = datetime.timedelta(weeks=f.cleaned_data['repeat_frequency'])
                    elif f.cleaned_data['repeat_frequency_unit'] == 'month':
                        timestep = datetime.timedelta(weeks=4 * f.cleaned_data['repeat_frequency'])

                    while curr_date + timestep <= f.cleaned_data['repeat_end'] and timestep:
                        curr_date += timestep
                        '''
                            TODO: check if this booking conflicts with any others
                        '''
                        repeatBooking = Booking(name=f.cleaned_data['name'],
                              notes=f.cleaned_data['notes'],
                              date=curr_date,
                              start=f.cleaned_data['start'],
                              end=f.cleaned_data['end'],
                              booker=get_object_or_404(User, pk=request.user.id),
                              approved=False,
                              category=get_object_or_404(BookingCategory, pk=request.POST['category']),
                              room=get_object_or_404(Room, pk=room.pk))
                        if request.user.is_staff:
                            repeatBooking.approved = True
                        repeatBooking.save()
                        submittedBookings.append(repeatBooking)
                        RepeatBooking(source=newBooking, target=repeatBooking).save()
            #            relatedBookings[-1].append(repeatBooking)
            #
            #if len(relatedBookings[0]) > 1:
            #    for i in range(0, len(relatedBookings)):
            #        for j in range(1, len(relatedBookings[i])):
            #            if not relatedBookings[i][j] is None:
            #                RepeatBooking(source=relatedBookings[i][0], target=relatedBookings[i][j]).save()

            #if len(relatedBookings) > 1:
            #    for j in range(0, len(relatedBookings[0])):
            #        for i in range(1, len(relatedBookings)):
            #            if not relatedBookings[i][j] is None:
            #                MultiRoomBooking(source=relatedBookings[0][j], target=relatedBookings[i][j]).save()

            # notify all admins of booking request, dont send if admin makes a booking
            admins = User.objects.filter(is_staff=True) 
            subject = "East Scarborough Storefront - Booking Request"
            message = request.user.username + " has requested a booking.\n\nBooking info:\nName: " + newBooking.name + "\nNotes: " + newBooking.notes + "\nDate: " + str(newBooking.date) +"\nTime: " + str(newBooking.start) + " - " + str(newBooking.end) + "\nCategory: " + newBooking.category.name + "\nRoom: " + newBooking.room.name
            if newBooking.booker.is_staff == False:
                for a in admins:
                    a.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)                        
            return render(request, 'juakstore/booking_add.html', {'form':BookingForm(),
                                                                  'all_bookings':Booking.objects.all().filter(approved=True),
                                                                  'year': datetime.datetime.now().year,
                                                                  'month': datetime.datetime.now().month,
                                                                  'day': datetime.datetime.now().day,
                                                                  'submittedBookings': submittedBookings,
                                                                  })
        else:
            return render(request, 'juakstore/booking_add.html', {'form': f,
                                                                  'all_bookings':Booking.objects.all().filter(approved=True),
                                                                  'year': datetime.datetime.now().year,
                                                                  'month': datetime.datetime.now().month,
                                                                  'day': datetime.datetime.now().day,
                                                                  })
    else:
        return HttpResponseRedirect(reverse('juakstore:bookingCreate'))