/home2/mshostin/hall-management.ms-hostingladz.com/resources/views/bookings/edit.blade.php
@extends('dashboard.includes.partial.base')
@section('title', 'Edit Booking')
@section('content')
<div class="page-breadcrumb d-none d-sm-flex align-items-center mb-3">
<div class="breadcrumb-title pe-3">Dashboard</div>
<div class="ps-3">
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0 p-0">
<li class="breadcrumb-item"><a href="{{ route('dashboard') }}"><i class="bx bx-home-alt"></i></a></li>
<li class="breadcrumb-item"><a href="{{ route('bookings.index') }}">Bookings</a></li>
<li class="breadcrumb-item active" aria-current="page">Edit Booking</li>
</ol>
</nav>
</div>
</div>
<form action="{{ route('bookings.update', $booking->id) }}" method="POST" id="bookingForm">
@csrf
@method('PATCH')
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center bg-primary">
<h5 class="mb-0 text-white">Edit Booking</h5>
<div class="btn-group">
<button type="submit" class="btn btn-light btn-sm">
<i class="material-icons-outlined">save</i> Save
</button>
<a href="{{ route('bookings.invoice', $booking->id) }}" class="btn btn-light btn-sm"
target="_blank">
<i class="material-icons-outlined">print</i> Invoice
</a>
<a href="{{ route('bookings.index') }}" class="btn btn-light btn-sm">
<i class="material-icons-outlined">cancel</i> Cancel
</a>
</div>
</div>
<div class="card-body p-4">
<h5 class="mb-3">Customer Details</h5>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Name <span class="text-danger">*</span></label>
<input type="text" name="customer_name" value="{{ $booking->customer->name }}"
class="form-control" required>
@error('customer_name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Phone <span class="text-danger">*</span></label>
<input type="text" name="customer_phone" value="{{ $booking->customer->phone }}"
class="form-control" required>
@error('customer_phone')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">CNIC <span class="text-danger">*</span></label>
<input type="text" name="customer_cnic" value="{{ $booking->customer->cnic }}"
class="form-control" required>
@error('customer_cnic')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Email</label>
<input type="email" name="customer_email" value="{{ $booking->customer->email }}"
class="form-control">
@error('customer_email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-12">
<label class="form-label">Address</label>
<textarea name="customer_address" class="form-control">{{ $booking->customer->address }}</textarea>
@error('customer_address')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<h5 class="mt-4 mb-3">Booking Details</h5>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Start Date & Time <span class="text-danger">*</span></label>
<input type="datetime-local" name="start_datetime"
value="{{ $booking->start_datetime->format('Y-m-d\TH:i') }}" class="form-control"
required>
@error('start_datetime')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">End Date & Time <span class="text-danger">*</span></label>
<input type="datetime-local" name="end_datetime"
value="{{ $booking->end_datetime->format('Y-m-d\TH:i') }}" class="form-control"
required>
@error('end_datetime')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Hall <span class="text-danger">*</span></label>
{{-- @if (auth()->user()->isHallAdmin()) --}}
<input type="text" class="form-control" value="{{ $booking->hall->name }}" disabled>
<input type="hidden" name="hall_id" value="{{ $booking->hall_id }}">
{{-- @else
<select name="hall_id" class="form-select" required>
<option value="">Select Hall</option>
@foreach ($halls as $hall)
<option value="{{ $hall->id }}"
{{ $booking->hall_id == $hall->id ? 'selected' : '' }}>{{ $hall->name }}
</option>
@endforeach
</select>
@endif --}}
@error('hall_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Lawn <span class="text-danger">*</span></label>
<select name="lawn_id" id="lawnSelect" class="form-select" required>
<option value="">Select Lawn</option>
@foreach ($lawns as $lawn)
<option value="{{ $lawn->id }}"
@if ($booking->lawn_id == $lawn->id) selected @endif>
{{ $lawn->name }} ({{ $lawn->capacity }})
</option>
@endforeach
</select>
@error('lawn_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Capacity <span class="text-danger">*</span></label>
<input type="number" name="capacity" value="{{ $booking->capacity }}"
class="form-control" required>
@error('capacity')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4">
<label class="form-label">Owner Quote Price <span class="text-danger">*</span></label>
<input type="number" step="0.01" name="quote_price"
value="{{ $booking->quote_price }}" class="form-control" required>
@error('quote_price')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4">
<label class="form-label">Final Booking Price</label>
<input type="number" step="0.01" name="booking_price"
value="{{ $booking->booking_price }}" class="form-control">
@error('booking_price')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4">
<label class="form-label">Advance Paid</label>
<input type="number" step="0.01" name="advance_paid"
value="{{ $booking->advance_paid }}" class="form-control">
@error('advance_paid')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Payment Status</label>
<select name="payment_status" class="form-select" required>
<option value="pending" {{ $booking->payment_status == 'pending' ? 'selected' : '' }}>
Pending</option>
<option value="partial" {{ $booking->payment_status == 'partial' ? 'selected' : '' }}>
Partial</option>
<option value="paid" {{ $booking->payment_status == 'paid' ? 'selected' : '' }}>Paid
</option>
</select>
@error('payment_status')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-6">
<label class="form-label">Booking Status</label>
<select name="status" class="form-select" required>
<option value="pending" {{ $booking->status == 'pending' ? 'selected' : '' }}>Pending
</option>
<option value="confirmed" {{ $booking->status == 'confirmed' ? 'selected' : '' }}>
Confirmed</option>
<option value="cancelled" {{ $booking->status == 'cancelled' ? 'selected' : '' }}>
Cancelled</option>
</select>
@error('status')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-12">
<label class="form-label">Notes</label>
<textarea name="notes" class="form-control">{{ $booking->notes }}</textarea>
@error('notes')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-12">
<label class="form-label">Extra Facilities</label>
<div class="d-flex flex-wrap gap-2">
@php
$facilityList = [
'cake',
'catering',
'special_entry',
'decoration',
'photography',
'music',
'lightings',
];
$bookingFacilities = $booking->facilities ?? [];
@endphp
@foreach ($facilityList as $facility)
<label class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="facilities[]"
value="{{ $facility }}"
{{ in_array($facility, $bookingFacilities) ? 'checked' : '' }}>
<span
class="form-check-label">{{ ucwords(str_replace('_', ' ', $facility)) }}</span>
</label>
@endforeach
</div>
@error('facilities')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="card-footer text-end">
<button type="submit" class="btn btn-primary px-4">
<i class="material-icons-outlined">save</i> Save
</button>
<a href="{{ route('bookings.index') }}" class="btn btn-secondary px-4">
<i class="material-icons-outlined">cancel</i> Cancel
</a>
</div>
</div>
</div>
</div>
</form>
@endsection
@section('extra_js')
<script>
$(document).ready(function() {
const startInput = $('[name="start_datetime"]');
const endInput = $('[name="end_datetime"]');
const cnicInput = $('[name="customer_cnic"]');
const capacityInput = $('[name="capacity"]');
const quotePriceInput = $('[name="quote_price"]');
const bookingPriceInput = $('[name="booking_price"]');
const advanceInput = $('[name="advance_paid"]');
function formatDateTimeLocal(date) {
const pad = num => num.toString().padStart(2, '0');
return date.getFullYear() + '-' +
pad(date.getMonth() + 1) + '-' +
pad(date.getDate()) + 'T' +
pad(date.getHours()) + ':' +
pad(date.getMinutes());
}
const now = new Date();
startInput.attr('min', formatDateTimeLocal(now));
startInput.on('change', function() {
const startVal = new Date($(this).val());
if (!isNaN(startVal)) {
endInput.attr('min', formatDateTimeLocal(startVal));
const currentEnd = new Date(endInput.val());
if (currentEnd < startVal) {
endInput.val($(this).val());
}
}
});
$('#bookingForm').on('submit', function(e) {
let valid = true;
$('.is-invalid').removeClass('is-invalid');
$('.invalid-feedback.d-block').remove();
const startDate = new Date(startInput.val());
const endDate = new Date(endInput.val());
function showError(input, message) {
input.addClass('is-invalid');
input.after('<div class="invalid-feedback d-block">' + message + '</div>');
}
const today = new Date();
today.setSeconds(0, 0);
if (startDate < today) {
valid = false;
showError(startInput, 'Start datetime must be today or later.');
}
if (endDate <= startDate) {
valid = false;
showError(endInput, 'End datetime must be after start datetime.');
}
const cnicPattern = /^\d{5}-\d{7}-\d{1}$/;
if (!cnicPattern.test(cnicInput.val().trim())) {
valid = false;
showError(cnicInput, 'CNIC format is invalid. Example: 12345-1234567-1');
}
[capacityInput, quotePriceInput, bookingPriceInput, advanceInput].forEach(function(input) {
const val = parseFloat(input.val());
if (!isNaN(val) && val < 0) {
valid = false;
showError(input, 'Value cannot be negative.');
}
});
if (!valid) e.preventDefault();
});
});
</script>
@endsection