> For the complete documentation index, see [llms.txt](https://docs.diro.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.diro.app/en/booking/creating-a-booking-from-the-portal.md).

# Creating a Booking from the Portal

Not every customer books through the storefront themselves. For those who come in person, call, or message on WhatsApp, create the booking from the portal.

**Booking → Booking → Add.**

The form is a single page, not a step-by-step wizard. The input fields are in the left column, with the price summary and save button in the right column, which scrolls along.

```mermaid
flowchart TD
  A["Choose type:<br/>Service or Event"] --> B["Choose customer"]
  B --> C["Choose service"]
  C --> D["Choose date & slot"]
  D --> E["Choose resource / provider"]
  E --> F["Add-ons & extra charges"]
  F --> G["Voucher or membership"]
  G --> H{"Payment method"}
  H -->|"Pay at Counter"| I["Booking pending,<br/>bill cash later"]
  H -->|"Pay Online"| J["Payment link<br/>sent to customer"]
  H -->|"Covered by membership"| K["Booking is<br/>confirmed immediately"]
```

## 1. Booking type

Choose **Service** or **Event** at the very top. This choice determines the content of the rest of the form.

## 2. Customer

Two modes.

**Existing customer** — search the list of already registered customers.

**New customer** — enter the **phone number** first. The system automatically checks whether that number is already registered:

* If found, you're offered to use the existing customer. Use this — don't create duplicate data.
* If not found, the **full name** and **email** fields appear to be filled in.

{% hint style="info" %}
Bookings from the portal **do not require OTP verification**. The phone number is only used to match the customer and as the booking contact. OTP verification only applies on the storefront.
{% endhint %}

If the customer has a valid voucher or membership, it appears here right away as a one-click button to apply.

## 3. Service, date, and slot

Choose the branch, then the service. If the service has multiple duration options, choose the duration here.

After the service is chosen, a date picker and a row of time slots appear. **The slots shown are exactly the same as what the customer sees on the storefront** — the availability rules are identical.

{% hint style="warning" %}
You **cannot force** a booking into a slot that is full or unavailable. If the number of participants exceeds the slot's capacity, the save button is disabled. This is intentional, so the schedule in the portal and on the storefront never diverge.

If you genuinely need to accept a booking at that time, change the service schedule or slot capacity first. See Setting Up Service Schedules.
{% endhint %}

## 4. Resource and provider

If the chosen slot offers more than one provider or room, choose one here. If there is only one option, the system selects it automatically.

The provider chosen here is the one who will receive the commission.

## 5. Add-ons and extra charges

**Add-ons** are drawn from your add-on catalog.

**Extra charges** are free-form lines you type yourself — name, price, and quantity. Use these for anything not in the catalog: parking fees, take-home products, negotiated price adjustments.

## 6. Voucher and membership

Enter a voucher code manually, or click a voucher belonging to the customer that already appears in the customer section.

If a **membership** is used, two things change:

* The service list narrows down to only the services covered by that membership.
* The payment step is skipped — the booking is marked **covered by membership** and confirmed immediately.

## 7. Payment

| Option             | What happens                                                                                                                              |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Pay at Counter** | The booking is created with pending status, with no online invoice. The customer pays directly on site, and you record the payment later. |
| **Pay Online**     | The customer receives an invoice through the method you choose — QRIS, virtual account, or e-wallet.                                      |

The price summary in the right column shows the full breakdown before you save: service, add-ons, extra charges, discount, and total.

## Recording a cash payment

Open the booking detail, then **Charge Payment** or **Charge Remaining Payment**. Besides the online methods, there is a **Pay at Counter** option to record cash already received — without going through the payment gateway.

This is what you use after a walk-in customer pays at the counter, so the booking is recorded as paid in full and appears correctly in reports.

## Editing a booking

From the list or the booking detail:

* **Edit booking** — change the customer, service, date, slot, resource, voucher, and extra charges all at once. In the same dialog you can also charge the payment directly.
* **Reschedule** — specifically for moving the date and time only.
* **Change status** — move the booking between statuses.

The booking detail page shows the schedule, price breakdown, customer data, payment, related transactions, and a **change history** — who changed what and when.

{% hint style="warning" %}
**Event** bookings cannot have their service or date changed through the edit booking dialog, because that would desynchronize the event's participant list. Manage event changes from the event's own page.
{% endhint %}

## Access rights

Creating and editing bookings requires a role with **full access** to the Booking module. A role with **view only** can only open the list and detail. See Staff, Roles & Access Rights.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.diro.app/en/booking/creating-a-booking-from-the-portal.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
