Skip to content

Commit

Permalink
Merge pull request #331 from FatemehMoghadam/multibook
Browse files Browse the repository at this point in the history
Internal availability screen: show Booked or Closed
  • Loading branch information
scottp-dpaw committed Jul 5, 2018
2 parents e5c9fc6 + 572f553 commit 10a0c09
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 51 deletions.
12 changes: 6 additions & 6 deletions parkstay/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1030,17 +1030,17 @@ def retrieve(self, request, pk=None, ratis_id=None, format=None, show_all=False)
for offset, stat in [((k-start_date).days, v[0]) for k, v in availability[s.pk].items() if v[0] != 'open']:
# update the per-site availability
classes_map[key]['breakdown'][s.name][offset][0] = False
classes_map[key]['breakdown'][s.name][offset][1] = 'Booked' if (stat == 'booked') else 'Unavailable'
classes_map[key]['breakdown'][s.name][offset][1] = stat if show_all else 'Unavailable'

# update the class availability status
book_offset = 0 if (stat == 'booked') else 1
classes_map[key]['availability'][offset][3][book_offset] += 1
if classes_map[key]['availability'][offset][3][0] == class_sizes[key]:
classes_map[key]['availability'][offset][1] = 'Fully Booked'
classes_map[key]['availability'][offset][1] = 'Fully Booked'
elif classes_map[key]['availability'][offset][3][1] == class_sizes[key]:
classes_map[key]['availability'][offset][1] = 'Unavailable'
classes_map[key]['availability'][offset][1] = 'Closed' if show_all else 'Unavailable'
elif classes_map[key]['availability'][offset][3][0] >= classes_map[key]['availability'][offset][3][1]:
classes_map[key]['availability'][offset][1] = 'Partially Booked'
classes_map[key]['availability'][offset][1] = 'Partially Booked' if show_all else 'Unavailable'
else:
classes_map[key]['availability'][offset][1] = 'Partially Unavailable'

Expand Down Expand Up @@ -1111,9 +1111,9 @@ def retrieve(self, request, pk=None, ratis_id=None, format=None, show_all=False)
for offset, stat in [((k-start_date).days, v[0]) for k, v in availability[s.pk].items() if v[0] != 'open']:
bookings_map[s.name]['availability'][offset][0] = False
if stat == 'closed':
bookings_map[s.name]['availability'][offset][1] = 'Unavailable'
bookings_map[s.name]['availability'][offset][1] = 'Closed' if show_all else 'Unavailable'
elif stat == 'booked':
bookings_map[s.name]['availability'][offset][1] = 'Unavailable'
bookings_map[s.name]['availability'][offset][1] = 'Booked' if show_all else 'Unavailable'
else:
bookings_map[s.name]['availability'][offset][1] = 'Unavailable'

Expand Down
61 changes: 39 additions & 22 deletions parkstay/frontend/parkstay/src/components/booking/addbooking.vue
Original file line number Diff line number Diff line change
Expand Up @@ -203,26 +203,21 @@
<input type="text" name="phone" class="form-control" v-model="booking.phone">
</div>
</div>
<div class="col-md-6" v-if="!park.entry_fee_required">
<div class="form-group">
<label for="Vehicle Registration">Vehicle Registration</label>
<input type="text" name="vehicle" class="form-control" v-model="booking.vehicle">
</div>
</div>
</div>
</div>
<div class="col-lg-6" v-if="park.entry_fee_required">
<div class="col-lg-6">
<div class="row">
<div class="col-lg-12" v-if="park.entry_fee_required">
<h3 class="text-primary">Park Entry Fees <small>(${{parkPrices.vehicle|formatMoney(2)}}/per vehicle)</small></h3>
<div class="col-lg-12">
<h3 class="text-primary" v-if="park.entry_fee_required">Park Entry Fees <small>(${{parkPrices.vehicle|formatMoney(2)}}/per vehicle)</small></h3>
<h3 class="text-primary" v-else>Vehicle Details</h3>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="vehicles" class="required">Number of Vehicles</label>
<div class="dropdown guests">
<input type="number" min="0" max="10" name="vehicles" class="form-control dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" readonly="true" v-model="booking.parkEntry.vehicles" @change="updatePrices()">
<input type="number" min="0" max="10" name="vehicles" class="form-control dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" readonly="true" v-model="booking.parkEntry.vehicles">
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li v-for="park_entry in parkEntryPicker">
<div class="row">
Expand All @@ -249,17 +244,17 @@
<div class="col-md-6">
<div class="form-group">
<label class="required">{{v.description}}</label>
<input type="text" class="form-control" required="required" v-model="v.rego" @change="validateRego">
<input type="text" class="form-control" name="vehicleRego" required="required" v-model="v.rego" @change="validateRego">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<div class="form-group" v-if="park.entry_fee_required">
<label>Entry fee</label>
<input type="checkbox" class="form-control" required="required" v-model="v.entry_fee" @change="updatePrices()">
<input type="checkbox" class="form-control" v-model="v.entry_fee" @change="updatePrices()">
</div>
</div>
</div>
<p><b>NOTE:</b> A vehicle entry fee is not required for the holder of a valid Park Pass.</p>
<p v-if="park.entry_fee_required"><b>NOTE:</b> A vehicle entry fee is not required for the holder of a valid Park Pass.</p>
</div>
</div>
</div>
Expand Down Expand Up @@ -296,7 +291,7 @@
<div class="row">
<div class="col-lg-12">
<div class="form-group" v-if="overrideCharge">
<reason type="discount" name="overrideReason" v-model="booking.override_reason" ref="reason" required="true"></reason>
<reason type="discount" name="overrideReason" v-model="booking.override_reason" :required="overrideCharge"></reason>
</div>
</div>
</div>
Expand Down Expand Up @@ -727,7 +722,7 @@ export default {
vm.booking.departure = "";
var selected_date = e.date.clone();//Object.assign({},e.date);
var minDate = selected_date.clone().add(1,'days');
var maxDate = minDate.clone().add(28,'days');
var maxDate = minDate.clone().add(180,'days');
vm.departurePicker.data("DateTimePicker").maxDate(maxDate);
vm.departurePicker.data("DateTimePicker").minDate(minDate);
vm.departurePicker.data("DateTimePicker").date(null);
Expand Down Expand Up @@ -972,7 +967,8 @@ export default {
vm.loading.splice('processing booking',1);
var frame = $('#invoice_frame');
frame[0].src = '/ledger/payments/invoice/'+response.body.invoices[0];
vm.isModalOpen=true;
vm.isModalOpen=false;
vm.$router.push({name:"booking-dashboard"});
},(error)=>{
let error_str = helpers.apiVueResourceError(error);
vm.$store.dispatch("updateAlert",{
Expand All @@ -991,7 +987,7 @@ export default {
},
isFormValid:function () {
let vm =this;
return (vm.validateParkEntry() && vm.overrideChargeReason() && $(vm.bookingForm).valid());
return ($(vm.bookingForm).valid());
},
validateParkEntry:function () {
let vm = this;
Expand All @@ -1011,7 +1007,8 @@ export default {
return true;
},
addFormValidations: function() {
$(this.bookingForm).validate({
let vm=this;
$(vm.bookingForm).validate({
rules: {
arrival: "required",
departure: "required",
Expand All @@ -1026,10 +1023,26 @@ export default {
phone: "required",
postcode: "required",
country: "required",
price_level: "required"
price_level: "required",
open_reason: "required",
vehicleRego: {
required:{
depends: function(el){
return vm.validateParkEntry;
}
}
},
overrideReason:{
required:{
depends: function(el){
return vm.overrideChargeReason;
}
}
}
},
messages: {
firstname: "fill in all details",
firstname: "Fill in all details",
vehicleRego: "Fill vehicle details",
},
showErrors: function(errorMap, errorList) {
$.each(this.validElements(), function(index, element) {
Expand Down Expand Up @@ -1057,7 +1070,11 @@ export default {
if( park_entry.amount < 10 && count < 10){
park_entry.amount = (park_entry.amount < 10)?park_entry.amount+= 1:park_entry.amount;
vm.booking.parkEntry.vehicles++;
vm.parkEntryVehicles.push(JSON.parse(JSON.stringify(park_entry)));
var new_entry = JSON.parse(JSON.stringify(park_entry));
if (!vm.entry_fee_required) {
new_entry.entry_fee = false;
}
vm.parkEntryVehicles.push(new_entry);
}
vm.booking.price = vm.booking.price - vm.booking.entryFees.entry_fee;
vm.updateParkEntryPrices();
Expand Down
56 changes: 34 additions & 22 deletions parkstay/frontend/parkstay/src/components/booking/history.vue
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export default {
guests: {},
campground_site_type:""
},
firstTimeTableLoad: true,
dtHeaders:["Change Date","Arrival","Departure","Campground","Camp Site","Updated By","Details"],
dtOptions:{
language: {
Expand Down Expand Up @@ -171,11 +172,16 @@ export default {
orderable:false,
searchable:false,
mRender:function(data,type,full){
if (vm.booking.campsite_names.sort().join(',') == data.sort().join(',')){
return `<span style="color:green;">${data}</span>`;
var resultList = data.sort().join(',');
var max_length = 10;
var popover_class = (resultList.length > max_length) ? "class='name_popover'" : "";
var name = (resultList.length > max_length) ? resultList.substring(0,max_length-1)+'...' : resultList;
var column = '<div '+popover_class+'tabindex="0" data-toggle="popover" data-placement="top" data-content="__NAME__" >'+ name +'</div>';
if (vm.booking.campsite_names == resultList){
return `<span style="color:green;">${column.replace('__NAME__', resultList)}</span>`;
}
else{
return `<span style="color:red;">${data}</span>`;
return `<span style="color:red;">${column.replace('__NAME__', resultList)}</span>`;
}
}
},
Expand Down Expand Up @@ -297,28 +303,34 @@ export default {
'</table>';
},
addEventListeners(){
let vm = this;
vm.$refs.booking_history_table.vmDataTable.on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = vm.$refs.booking_history_table.vmDataTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( vm.format(row.data()) ).show();
tr.addClass('shown');
}
} );
let vm = this;
if (vm.firstTimeTableLoad) {
vm.firstTimeTableLoad = false;
vm.$refs.booking_history_table.vmDataTable.on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = vm.$refs.booking_history_table.vmDataTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( vm.format(row.data()) ).show();
tr.addClass('shown');
}
});
}
helpers.namePopover($,vm.$refs.booking_history_table.vmDataTable);
}
},
mounted:function () {
mounted: function () {
let vm =this;
}
vm.$nextTick(function() {
console.log(vm.$refs);
});
}
}
</script>

Expand Down
2 changes: 1 addition & 1 deletion parkstay/static/parkstay/js/parkstay.js

Large diffs are not rendered by default.

0 comments on commit 10a0c09

Please sign in to comment.