=== Demfilz Booking Calendar Plus ===
Contributors: demfilz
Tags: booking, appointments, calendar, staff, scheduling
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Multi-staff, multi-service appointment booking with a clean step-by-step form, buffers, reminders, ICS calendar sync - and optional Stripe deposits.

== Description ==

Demfilz Booking Calendar Plus turns any WordPress site into a booking system for salons, clinics, trades, consultants and studios:

* **Services** with duration, price, colour and before/after buffers.
* **Staff members** with their own weekly working hours (split shifts supported), time off, and the services they perform.
* **Step-by-step booking form** (shortcode `[dbook_bookings]` or the Bookings block): service, staff member (or "Any available"), date and time, details. Mobile-friendly and theme-neutral.
* **"Any staff" auto-assign** picks the least-loaded qualified staff member.
* **No double bookings**: availability is checked server-side again at the moment of booking, with a transactional lock.
* **Emails**: customer confirmation with a calendar invite (.ics) attached, admin and staff notifications, cancellation notices and an automatic reminder email before the appointment.
* **Customer self-service**: every email includes a private manage link where the customer can reschedule or cancel (with a configurable cut-off).
* **Approval mode**: choose instant confirmation or review each request.
* **Admin**: dashboard, filterable bookings list with CSV export, a monthly booking calendar, and a manual add-booking form.
* **Privacy ready**: personal data exporter and eraser, plus an optional clean uninstall.

= Take deposits with the Pro add-on =

Add [Demfilz Booking Calendar Plus Pro](https://demfilz.com/booking-calendar-plus/) to collect a **deposit or the full price with Stripe** at booking time. The slot is held while the customer pays on Stripe's secure hosted checkout and confirms automatically once payment lands - no card details ever touch your site. Set payment per service (no payment, a percentage or fixed deposit, or full price), issue refunds from the dashboard, and hold-and-release abandoned checkouts automatically.

= AIEIO Calendar integration (optional) =

Connect a free [AIEIO Calendar](https://aieio.au/cal/) account and:

* Confirmed bookings are pushed into each staff member's calendar (and removed when cancelled).
* Events marked busy in a staff calendar automatically block those times on the booking form - so a staff member's personal appointments prevent double booking.
* Every calendar has a private ICS feed, so bookings appear in Google Calendar, Apple Calendar and Outlook too.

The plugin talks to the calendar with an API key you create in the calendar's settings. This is an optional external service: when configured, booking details (service, customer name and contact details, times) are sent to the calendar URL you configure (default https://aieio.au/cal, operated by Directory.com.au Pty Ltd - see https://aieio.au/cal/ for its privacy policy). Nothing is sent unless you enter an API key.

== Installation ==

1. Upload and activate the plugin.
2. Go to **Bookings → Services** and add your services.
3. Go to **Bookings → Staff**, add staff, tick the services they perform and set weekly hours.
4. Put `[dbook_bookings]` (or the Bookings block) on a page.
5. Optional: connect AIEIO Calendar under **Bookings → Settings → Calendar integration**.
6. Optional: install Demfilz Booking Calendar Plus Pro to take Stripe deposits.

== Frequently Asked Questions ==

= Where do I change the timezone? =
The plugin uses your WordPress timezone (Settings → General). All slots and emails follow it.

= Can two staff work different hours? =
Yes - hours, time off and services are all per staff member.

= Does it take payments? =
The free plugin records the price and shows it during booking; payment is taken on arrival. To collect a deposit or full payment online, add the Pro add-on, which uses your own Stripe account and hosted Stripe Checkout (no card data touches your site).

= How are double bookings prevented? =
Availability is computed from working hours, existing bookings (with buffers), time off and (optionally) busy times in the connected calendar - and re-checked server-side under a lock when the booking is submitted.

= Do customers create an account? =
No. Booking is a simple public form; customers manage their booking through a private tokenised link, no login required.

== Screenshots ==

1. Step-by-step booking form - choose a service. Drops onto any page with the `[dbook_bookings]` shortcode or block.
2. Pick a date and time. Only genuinely free slots appear - working hours, buffers, time off and existing bookings are all respected.
3. Your details, then pay. With the Pro add-on the slot is held while the customer pays a deposit or the full price on Stripe's secure checkout.
4. Booking payments settings (Pro add-on): enter your own Stripe keys, choose a deposit or full payment, set the hold window and the receipt email.
5. Bookings dashboard: today, awaiting-confirmation and upcoming counts, plus every appointment and its status at a glance.

== Changelog ==

= 1.0.0 =
* Initial release: services, staff, hours, time off, booking wizard, emails with ICS, reminders, reschedule, CSV export, booking calendar, approval mode, AIEIO Calendar integration, privacy tools, and payment extension points for the Pro add-on.
