Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Booking Without Package

Description / Background

Some restaurants, like Katsuki Midori, want to let customers book a table without choosing a package in advance. Instead, guests will order and pay at the restaurant. Currently, Hungry Hub requires users to select a package when booking, which doesn’t suit all dining styles. To solve this, we’re adding a “Booking Without Package” option that restaurants can enable in the Admin Dashboard. This will let users reserve a table without picking a package, with clear messaging that they’ll order and pay on-site. The goal is to offer more flexibility to restaurants and make booking easier for customers.

Objectives

  • User can book the restaurant without package
  • Admin can set the restaurant without having a package
  • User did not get point when book without package
  • User will get the point after review the booking without package

Scope

 booking process

Location

admin dashboard edit page, restaurant page, booking process

How to set booking without package

  1. Open Admin Dashboard
  2. Open Restaurant List menu

  1. Pick the restaurant → Action → Edit
  2. Search the Accept Booking without Package? and check the box

  1. Click Save
  2. The restaurant will be receive booking without package

Sequence Diagram / Flow

 

ERD

 

Backend Implementation

  • New Column: allow_booking_without_package added to restaurants.
    • Migration: 20250519085808_add_allow_booking_without_package_to_restaurants.rb
    • Model: Updates in restaurant.rb
  • Partner & v5 APIs: Adjustments to support and process non-package bookings:
    • reservations_controller.rb
    • tmp_reservation.rb
    • Filter update: exclude_no_package param in reservations_filter.rb
  • Expose the new flag in:
  • Admin/Partner Form: Checkbox to toggle booking without packages:
  • Booking Flow & AJAX: JS refactors and support for minimum booking time:
  • Email Notifications: New/updated templates for no-package bookings:
  • Bug Fixes:
  • Internationalization: Label and translation tweaks in views.en.yml and related files.
  • Refactoring and Minor Additions: Several files updated for consistency, improved validation, and better metadata handling.
    • The quantity selectors on both desktop and mobile booking pages are now always enabled (not disabled by conditional logic).
    • Files updated:
      • BookingPageDesktop.vue
      • BookingPageMobile.vue
    • The code that conditionally disabled these selectors was removed, so users can always adjust quantities.
  • TMA sync storage shortcut and related checks were removed.
    • In paxQuantity.ts, logic related to TMA was deleted, including checks and calculations for totalMaximumAllowance.
  • The logic for paxMaxSize was simplified, now ignoring TMA constraints.

[

github.com

https://github.com/hungryhub-team/hh-server/pull/6690

](https://github.com/hungryhub-team/hh-server/pull/6690)

[

github.com

https://github.com/hungryhub-team/hh-server/pull/6776

](https://github.com/hungryhub-team/hh-server/pull/6776)

[

github.com

https://github.com/hungryhub-team/hh-server/pull/6777

](https://github.com/hungryhub-team/hh-server/pull/6777)

Hybrid Implementation

  • Adds a new boolean field, allowBookingWithoutPackage, in restaurant-related types and schemas (e.g., Restaurant, booking detail API, Pinia stores).
  • This flag is propagated through API responses, store states, and props to various components.
  • Updates the booking and confirmation components to check the allowBookingWithoutPackage flag.
  • When this flag is true:
    • Users can book a restaurant without selecting a package.
    • The UI and flow are adapted to hide package selection, payment, offers, and gift card sections as appropriate.
    • Checkout validation is relaxed: booking is allowed as long as required fields like date, time, and party size are filled, even if no package is selected.
  • Many components (e.g., BookingCardImage.vueBookingHeader.vueBookingConfirmation.vue, etc.) receive new props and conditional logic to support the new booking mode.
  • New components are introduced:
    • RestaurantBookWithoutPackage.vue: Handles booking in the "without package" mode.
    • RestaurantBranchView.vueRestaurantLocationView.vue, and RestaurantInformation.astro: Help display relevant restaurant information and navigation in the new flow.
  • Navigation (section nav) and layout are updated to support and highlight the new experience, especially for desktop/mobile parity.
  • Restaurant and booking-related Pinia stores are extended to track and react to the new flag.
  • Bookings, confirmation, and summary logic are updated to consider the "book without package" scenario when determining what to show or require.
  • The booking and confirmation pages adapt their content and available actions when allowBookingWithoutPackage is enabled.
  • Section navigation is updated to show/hide relevant sections based on this mode.
  • Edge cases (like button visibility, form validation, or summary display) are handled to avoid errors or confusion for users.

[

github.com

https://github.com/hungryhub-team/hh-pegasus/pull/1736

](https://github.com/hungryhub-team/hh-pegasus/pull/1736)

[

github.com

https://github.com/hungryhub-team/hh-pegasus/pull/1767

](https://github.com/hungryhub-team/hh-pegasus/pull/1767)

Partner Portal Implementation

  • The PR simplifies the logic and removes checks related to package presence and custom error messages.
  • Now, the action is determined only by whether the restaurant allows bookings without a package.
  • Error handling for missing or inappropriate package parameters is removed or delegated to update_package_booking.

[

github.com

https://github.com/hungryhub-team/hh-server/pull/6762

](https://github.com/hungryhub-team/hh-server/pull/6762)

PRD & Task

 PRD: Private (https://app.clickup.com/9003122396/docs/8ca1fpw-7922/8ca1fpw-50816)

Private (https://app.clickup.com/t/86cyygefq) Private (https://app.clickup.com/t/86cz91ccm) Private (https://app.clickup.com/t/86cz5969c) Private (https://app.clickup.com/t/86cz418r3)

Design

[

www.figma.com

https://www.figma.com/design/T9kSuAj3GZW7khySGNq84m/Store-Page-Update?node-id=9818-7238&t=gGBlyFDELt6OyVj5-1

](https://www.figma.com/design/T9kSuAj3GZW7khySGNq84m/Store-Page-Update?node-id=9818-7238&t=gGBlyFDELt6OyVj5-1)

API Blueprint

MethodPathURLDescriptionPayload
 ALL /restaurants Add new param allow_booking_without_package on the response

New Query

 -

DB Schema / Database Migration

  • Add new allow_booking_without_package column on restaurants table

Improvement:

Feature NameDateWhat ChangedDescription