contacts_events-8.x-1.x-dev/modules/village_allocation/js/components/booking.js
modules/village_allocation/js/components/booking.js
Vue.component('booking', { template: `<div> <div draggable="true" @dragstart="drag(booking, $event)" :class="['booking', {'stripe': isAlternate}]"> <input type="checkbox" v-model="booking.selected" /> <strong><a href="javascript:void(0)" @click="showBookingDetails = true">{{booking.orderNumber}}</a></strong> <span v-if="!isPaidInFull" title="Not paid in full" class="paid-in-full-warning">!!</span> {{booking.bookingManager.name}} <small class="booking-pitches"><strong>Pitches: {{booking.pitches.toFixed(2)}}</strong></small> <div class="special-requirements"> <span v-for="requirement in booking.specialRequirements" :title="requirement.name" :class="['requirements', 'requirements-' + requirement.icon]">{{requirement.name}}</span> </div> </div> <modal v-if="showBookingDetails"> <div slot="header"> <strong>Group Booking:</strong> <a target="_blank" :href="getBookingUrl(booking.id)">{{booking.orderNumber}}</a> <span v-if="booking.state !== 'paid_in_full'">(Not paid in full)</span> <br /> <strong>Booking Manager:</strong> {{booking.bookingManager.name}} <br /> <strong>Pitches:</strong> {{booking.pitches}} </div> <ul> <li v-for="childBooking in booking.childBookings"> <strong><a target="_blank" :href="getBookingUrl(childBooking.id)">{{childBooking.orderNumber}}</a></strong> {{childBooking.bookingManager.name}} <span v-if="childBooking.state !== 'paid_in_full'">(Not paid in full)</span> </li> </ul> <button slot="footer" @click="showBookingDetails = false">Close</button> </modal> </div> `, props: ['booking', 'groupId', 'isAlternate'], data() { return { showBookingDetails: false } }, watch: { // Notify everyone up the chain that the booking was selected/deselected. 'booking.selected': function (selected) { this.$emit(selected ? 'booking-selected' : 'booking-deselected', this.booking); } }, computed: { isPaidInFull() { if (this.booking.state !== 'paid_in_full') { return false; } for(const childBooking of this.booking.childBookings) { if (childBooking.state !== 'paid_in_full') { return false; } } return true; } }, methods: { drag() { this.booking.selected = true; }, getBookingUrl(id) { return `/admin/commerce/orders/${id}/edit`; } }, });