if (booking.getEventKey() == null) return 0;
if (booking.getArrivalDate() == null) return 0;
if (booking.getDepartureDate() == null) return 0;
Event event = CannedQueries.eventByKey(booking.getEventKey());
if (event == null) return 0;
double price = priceForDuration(booking, event);
if(booking.getDob() != null &&
DateUtils.ageOnDay(booking.getDob(), event.getPublicEventStart()) <= 5)
{
// Those aged 5 and under are free
price = 0;
}
if (booking.getBookingCreationDate().after(event.getPublicEventStart()))
{
// At-event booking fee is 30, applies for any booking created after it started
price += 30;
} else if (booking.getBookingCreationDate().after(event.getBookingDeadline()))
{
// Late booking fee is 10, applies for any booking created after this time
price += 10;
}
if (booking.getBookingUnlockDate() != null && booking.getBookingUnlockDate().after(event.getBookingAmendmentDeadline()))
{
// Amendment fee is 5, for any booking changed after the deadline
price += 5;
}
if (booking.getCancellationDate() != null)
{
if (booking.getCancellationDate().before(event.getBookingDeadline()))
// �0 for bookings cancelled before booking deadline, capped at fee
return 0d;
else
{
// �50 for bookings cancelled after booking deadline, capped at fee