Beispiel #1
0
def add_booking(request):
    if request.user.is_superuser:
        if request.method == 'POST':
            form = BookingForm(data=request.POST)
            if form.is_valid():
                booking = form.save()
                return redirect('/bookings_sys/confirmation/%s/' % booking.id)
            else:
                return render(request, 'addform.html', {'form': form})
        else:
            form = BookingForm()
        return render(request, 'addform.html', {'form': form})
    else:
        return redirect('/login/?next=/bookings_sys/add_booking/')
Beispiel #2
0
def process_booking(request, num):
    b = Booking.objects.get(id=num)

    num_pax = b.passenger_set.count()
    totalslots = b.house.sleeps
    extraslots = totalslots - num_pax
    PassengerFormSet = inlineformset_factory(
        Booking, Passenger, exclude=('dob', 'delete',), extra=extraslots)

    SupplementFormSet = formset_factory(SupplementForm, can_delete=True)
    CostFormSet = formset_factory(CostForm)

    existing_supplements = Supplement.objects.filter(booking=b)

    supplement_data = [{'item': s.item, 'charge': s.charge, 'cost': s.cost}
                       for s in existing_supplements]

    existing_costs = Cost.objects.filter(booking=b)
    cost_data = [{'item': s.item, 'cost': s.cost} for s in existing_costs]

    if request.method == 'POST':

        passenger_formset = PassengerFormSet(request.POST, instance=b)

        supplement_formset = SupplementFormSet(request.POST, prefix='supplement')
        cost_formset = CostFormSet(request.POST, prefix='cost')

        booking_form = BookingForm(request.POST, instance=b)
        if booking_form.is_valid():
            booking_form.save()

            submitted_sups = []
            for supplement_form in supplement_formset:
                if supplement_form.is_valid():
                    item = supplement_form.cleaned_data.get('item')
                    charge = supplement_form.cleaned_data.get('charge')
                    cost = supplement_form.cleaned_data.get('cost')
                    accom_res = supplement_form.cleaned_data.get('to_accom_res')
                    if item and charge and cost:
                        submitted_sups.append(Supplement(item=item, cost=cost, charge=charge, booking=b, to_accom_res = accom_res))
                else:
                    print("not valid")
            try:

                Supplement.objects.filter(booking=b).delete()
                Supplement.objects.bulk_create(submitted_sups)
            except:
                # transaction failed halfway
                print("transaction failed")
                return redirect('/bookings_sys/process_booking/%d' % (b.id))

            submitted_costs = []
            for cost_form in cost_formset:
                if cost_form.is_valid():
                    item = cost_form.cleaned_data.get('item')
                    cost = cost_form.cleaned_data.get('cost')
                    accom_res = cost_form.cleaned_data.get('to_accom_res')
                    if item and charge and cost:
                        submitted_costs.append(Cost(item=item, cost=cost, booking=b, to_accom_res = accom_res ))
                else:
                    print("not valid")
            try:
                Cost.objects.filter(booking=b).delete()
                Cost.objects.bulk_create(submitted_costs)

            except IntegrityError as ie:
                # transaction failed halfway
                print("%s" % (ie))
                return redirect('/bookings_sys/process_booking/%d' % (b.id))

            #invoiced=xero(b, b.supplement_set.all())
            tasks = b.task_set.all()

            if not tasks:
                print ("no tasks set up")
                tasks=[
                    Task(name="send out stuff", done=False, booking=b, due=(b.startdate-datetime.timedelta(days=15))),
                    Task(name="send out more stuff", done=False, booking=b, due=(b.startdate-datetime.timedelta(days=14)))
                ]

                Task.objects.bulk_create(tasks)

            if not b.goo_cal_entered:

                result = calendar_update(request, b)

                if result:
                    b.goo_cal_entered = True
                    b.save()

    else:

        supplement_formset = SupplementFormSet(initial=supplement_data, prefix='supplement')
        cost_formset = CostFormSet(initial=cost_data, prefix='cost')
        passenger_formset = PassengerFormSet(instance=b)
        booking_form = BookingForm(instance=b)
    # print(passenger_formset.management_form)

    context = {'supplement_formset': supplement_formset, 'cost_formset': cost_formset, 'booking_form': booking_form,
               'passenger_formset': passenger_formset, 'summary': b}
    return render(request, 'process_booking.html', context)