Skip to content

Commit

Permalink
parkstay.frontend.parkstay: multibook individual sites mostly working
Browse files Browse the repository at this point in the history
  • Loading branch information
Scott Percival committed Mar 23, 2018
1 parent b77114a commit 606eb13
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 70 deletions.
14 changes: 10 additions & 4 deletions parkstay/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1667,11 +1667,15 @@ def create(self, request, format=None):
try:
if 'ps_booking' in request.session:
del request.session['ps_booking']
start_date = datetime.strptime(request.data['arrival'],'%Y/%m/%d').date()
end_date = datetime.strptime(request.data['departure'],'%Y/%m/%d').date()
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
start_date = serializer.validated_data['arrival']
end_date = serializer.validated_data['departure']
guests = request.data['guests']
costs = request.data['costs']
override_price = request.data.get('override_price', None)
regos = request.data['regos']
override_price = serializer.validated_data.get('override_price', None)
override_reason = serializer.validated_data.get('override_reason', None)
try:
emailUser = request.data['customer']
customer = EmailUser.objects.get(email = emailUser['email'])
Expand Down Expand Up @@ -1701,16 +1705,18 @@ def create(self, request, format=None):
'num_infant' : guests['infant'],
'cost_total' : costs['total'],
'override_price' : override_price,
'override_reason' : override_reason,
'customer' : customer,
'first_name': emailUser['first_name'],
'last_name': emailUser['last_name'],
'country': emailUser['country'],
'postcode': emailUser['postcode'],
'phone': emailUser['phone'],
'regos': regos
}

data = utils.internal_booking(request,booking_details)
serializer = BookingSerializer(data)
serializer = self.get_serializer(data)
return Response(serializer.data)
except serializers.ValidationError:
utils.delete_session_booking(request.session)
Expand Down
20 changes: 20 additions & 0 deletions parkstay/fixtures/discount_reasons.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
{
"model": "parkstay.discountreason",
"pk":1,
"fields":
{
"text":"Other",
"editable": false
}
},
{
"model": "parkstay.discountreason",
"pk":2,
"fields":
{
"text":"School booking",
"editable": false
}
}
]
43 changes: 20 additions & 23 deletions parkstay/frontend/parkstay/src/components/booking/addbooking.vue
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@
<div class="col-lg-12">
<div class="form-group">
<div class="checkbox">
<label for="Override price"><input type="checkbox" v-model="checked"/>Override price charged</label>
<label><input type="checkbox" v-model="checked"/>Override price charged</label>
</div>
<div class="input-group" v-if="checked">
<span class="input-group-addon">AUD <i class="fa fa-usd"></i></span>
Expand All @@ -295,7 +295,7 @@
<div class="row">
<div class="col-lg-12">
<div class="form-group" v-if="checked">
<reason type="discount" v-model="booking.discount_reason" ref="reason" ></reason>
<reason type="discount" v-model="booking.override_reason" ref="reason" ></reason>
</div>
</div>
</div>
Expand Down Expand Up @@ -375,7 +375,7 @@ export default {
vehicle:"",
price:"0",
override_price:"0",
discount_reason:"",
override_reason:"",
parkEntry:{
vehicles:0,
},
Expand Down Expand Up @@ -526,7 +526,7 @@ export default {
if (vm.booking.arrival) {
$.each(vm.stayHistory,function (i,his) {
var range = Moment.range(Moment(his.range_start,"DD/MM/YYYY"),Moment(his.range_end,"DD/MM/YYYY"));
var arrival = Moment(vm.booking.arrival,"YYYY/MM/DD");
var arrival = Moment(vm.booking.arrival,"YYYY-MM-DD");
if (range.contains(arrival)) {
vm.departurePicker.data("DateTimePicker").maxDate(arrival.clone().add(his.max_days,'days'));
vm.departurePicker.data("DateTimePicker").date(null);
Expand Down Expand Up @@ -570,7 +570,6 @@ export default {
var arrival = Moment(vm.booking.arrival, "YYYY-MM-DD");
var departure = Moment(vm.booking.departure, "YYYY-MM-DD");
var nights = departure.diff(arrival,'days');
vm.loading.push('updating prices');
vm.$http.post(
api_endpoints.campsites_current_price(),
{
Expand All @@ -583,10 +582,8 @@ export default {
vm.priceHistory = null;
vm.priceHistory = response.body;
vm.generateBookingPrice();
vm.loading.splice('updating prices',1);
},(error)=>{
console.log(error);
vm.loading.splice('updating prices',1);
});
}else{
vm.$http.post(
Expand All @@ -601,10 +598,8 @@ export default {
vm.priceHistory = null;
vm.priceHistory = response.body;
vm.generateBookingPrice();
vm.loading.splice('updating prices',1);
},(error)=>{
console.log(error);
vm.loading.splice('updating prices',1);
});
}
}
Expand All @@ -624,7 +619,11 @@ export default {
let vm = this;
if(vm.selected_arrival && vm.selected_departure){
vm.loading.push('fetching campsites');
vm.$http.get(api_endpoints.available_campsites(vm.booking.campground,vm.booking.arrival,vm.booking.departure)).then((response)=>{
vm.$http.get(api_endpoints.available_campsites(
vm.booking.campground,
Moment(vm.booking.arrival, "YYYY-MM-DD").format("YYYY/MM/DD"),
Moment(vm.booking.departure, "YYYY-MM-DD").format("YYYY/MM/DD")
)).then((response)=>{
vm.booking.campsites = response.body;
if (vm.booking.campsites.length >0) {
vm.selected_campsite =vm.booking.campsites[0].id;
Expand Down Expand Up @@ -709,7 +708,7 @@ export default {
useCurrent: false,
});
vm.arrivalPicker.on('dp.change', function(e){
vm.booking.arrival = vm.arrivalPicker.data('DateTimePicker').date().format('YYYY/MM/DD');
vm.booking.arrival = vm.arrivalPicker.data('DateTimePicker').date().format('YYYY-MM-DD');
vm.selected_arrival = vm.booking.arrival;
vm.selected_departure = "";
vm.booking.departure = "";
Expand All @@ -722,7 +721,7 @@ export default {
});
vm.departurePicker.on('dp.change', function(e){
if (vm.departurePicker.data('DateTimePicker').date()) {
vm.booking.departure = vm.departurePicker.data('DateTimePicker').date().format('YYYY/MM/DD');
vm.booking.departure = vm.departurePicker.data('DateTimePicker').date().format('YYYY-MM-DD');
vm.selected_departure= vm.booking.departure;
}else{
vm.booking.departure = null;
Expand Down Expand Up @@ -866,8 +865,7 @@ export default {
fetchParkPrices:function (calcprices) {
let vm = this;
if (vm.booking.arrival) {
var arrival = Moment(vm.booking.arrival, "YYYY-MM-DD").format("YYYY-MM-DD");
vm.$http.get(api_endpoints.park_current_price(vm.park.id,arrival)).then((response)=>{
vm.$http.get(api_endpoints.park_current_price(vm.park.id, vm.booking.arrival)).then((response)=>{
var resp = response.body;
if (resp.constructor != Array) {
vm.parkPrices = response.body;
Expand Down Expand Up @@ -946,15 +944,16 @@ export default {
total:vm.booking.price
},
override_price:vm.booking.override_price,
discount_reason:vm.booking.discount_reason,
override_reason:vm.booking.override_reason,
customer:{
email:vm.booking.email,
first_name:vm.booking.firstname,
last_name:vm.booking.surname,
phone:vm.booking.phone,
country:vm.booking.country,
postcode:vm.booking.postcode,
}
},
regos: vm.booking.entryFees.regos
}
vm.$store.dispatch("updateAlert",{
visible:false,
Expand Down Expand Up @@ -991,13 +990,11 @@ export default {
},
validateParkEntry:function () {
let vm = this;
var isValid = true;
if (vm.booking.parkEntry.vehicles > 0) {
if (vm.booking.parkEntry.vehicles > vm.booking.parkEntry.regos) {
isValid = false;
}
}
return isValid;
var validRegos = vm.parkEntryVehicles.reduce(function (acc, el) {
return acc + (el.rego ? 1 : 0);
}, 0);
return (validRegos == vm.parkEntryVehicles.length);
},
addFormValidations: function() {
$(this.bookingForm).validate({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-03-19 06:27
# Generated by Django 1.10.8 on 2018-03-22 08:18
from __future__ import unicode_literals

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('parkstay', '0046_auto_20180220_1118'),
]

Expand All @@ -25,14 +27,19 @@ class Migration(migrations.Migration):
'abstract': False,
},
),
migrations.AddField(
model_name='booking',
name='overridden_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='overridden_bookings', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='booking',
name='override_price',
field=models.DecimalField(decimal_places=2, default='0.00', max_digits=8),
field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True),
),
migrations.AddField(
model_name='booking',
name='discount_reason',
name='override_reason',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='parkstay.DiscountReason'),
),
]
7 changes: 4 additions & 3 deletions parkstay/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -880,15 +880,16 @@ class Booking(models.Model):
booking_type = models.SmallIntegerField(choices=BOOKING_TYPE_CHOICES, default=0)
expiry_time = models.DateTimeField(blank=True, null=True)
cost_total = models.DecimalField(max_digits=8, decimal_places=2, default='0.00')
discount_reason = models.ForeignKey('DiscountReason', null=True,blank=True)
override_price = models.DecimalField(max_digits=8, decimal_places=2, default='0.00')
override_price = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
override_reason = models.ForeignKey('DiscountReason', null=True, blank=True)
overridden_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT, blank=True, null=True, related_name='overridden_bookings')
campground = models.ForeignKey('Campground', null=True)
is_canceled = models.BooleanField(default=False)
cancellation_reason = models.TextField(null=True,blank=True)
cancelation_time = models.DateTimeField(null=True,blank=True)
confirmation_sent = models.BooleanField(default=False)
created = models.DateTimeField(default=timezone.now)
canceled_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT, blank=True, null=True,related_name='canceled_bookings')
canceled_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT, blank=True, null=True, related_name='canceled_bookings')

# Properties
# =================================
Expand Down
4 changes: 2 additions & 2 deletions parkstay/serialisers.py
Original file line number Diff line number Diff line change
Expand Up @@ -444,8 +444,8 @@ class BookingSerializer(serializers.ModelSerializer):
regos = BookingRegoSerializer(many=True,read_only=True)
class Meta:
model = Booking
fields = ('id','legacy_id','legacy_name','arrival','departure','details','cost_total','override_price','discount_reason','campground','campground_name','campground_region','campground_site_type','campsites','invoices','is_canceled','guests','regos','vehicle_payment_status','refund_status','amount_paid')
read_only_fields = ('vehicle_payment_status','refund_status')
fields = ('id','legacy_id','legacy_name','arrival','departure','details','cost_total','override_price','override_reason','campground','campground_name','campground_region','campground_site_type','campsites','invoices','is_canceled','guests','regos','vehicle_payment_status','refund_status','amount_paid')
read_only_fields = ('vehicle_payment_status','refund_status','campground_name','campground_region','campground_site_type')


def get_invoices(self,obj):
Expand Down
Loading

0 comments on commit 606eb13

Please sign in to comment.