How Booking Status Transitions and Lifecycle Works
Source: events_controller.rb
- Only bookings in OPEN status can be edited; closed or converted bookings are locked
- Hard delete (permanent removal) requires three conditions: the event must be OPEN, have no loan cars attached, and no WS API integration active
- Soft delete marks the event as deleted (event.deleted=true), unlinks any loan car, and marks all event_times and event_items as deleted — the record remains in the database
- Event-to-invoice conversion closes the event (sets status to CLOSED) and creates a new Invoice record copying all fields including line items, notes, discounts, and tax groups
- During conversion, any attached loan car carries over to the newly created invoice
- Batch convert processes all open bookings for a given date in one operation, converting each to an invoice
- The new job/invoice inherits the loan car, VV Garage ID, discounts, notes, and tax groups from the source booking
Support scenarios
- "I can't edit my booking" → The booking is no longer in OPEN status. It has either been closed or converted to an invoice. Only OPEN bookings can be edited.
- "I can't delete a booking" → Hard delete is blocked if the booking has a loan car attached or has WS API integration. Unlink the loan car first, or the system will perform a soft delete instead.
- "I converted my booking to a job but the loan car is missing" → The loan car should carry over automatically during conversion. If it did not appear, check if the loan car was unlinked or cancelled before conversion.