Raise POS Pro by GHS 1000 (790 → 1790). Pro includes a Ladill-provided
payment terminal, receipt printer, and barcode scanner; track payment
terminals as a device type.
Kitchen display devices open a full-screen KDS without staff login,
with feed/stream/bump over the device token. Shared kitchen board
logic is extracted so the signed-in Kitchen page stays in sync.
Register tills, customer displays, kitchen screens, printers, scanners,
and tablets per branch. Customer displays share the branch display token
and mark online when the public screen polls; stale devices go offline
on a schedule.
Retail still reads live CRM products only (not services), products mode follows the acting branch, and suite Pro/Business defaults match the tenfold price update.
Register Card/MoMo payments through merchant Paystack, Flutterwave, or Hubtel settings so takings settle 100% to the business.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pro and Business users can manage branches, invite cashiers with branch assignment, and switch registers; sales and register flows respect acting location.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show wallet balance prominently in the mobile profile bottom sheet with refresh
on open; align session lifetime with the platform default.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ladill Accounting is now live at accounting.ladill.com; add its row + icon to
the shared app launcher (byte-identical across all Ladill apps).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
After an auto-logout, silent re-auth fails with login_required and
SsoLoginController@callback redirects to config('ladill.marketing_url') — which
still defaulted to https://ladill.com/products/mini, dumping POS users on Mini's
product page. Point ladill.product_slug/marketing_url at POS.
Also fix the identity service key (config/identity.php + services.ladill_identity
read IDENTITY_API_KEY_MINI; POS provisions IDENTITY_API_KEY_POS) and tidy the
remaining Mini defaults (app.name, ladill_sso redirect, mobile-topbar app_name).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Split bills (restaurant tickets):
- New pos_payments ledger; a tab is settled across one or more cash/Ladill Pay
payments. The ticket shows total / paid / balance, an amount field with Full /
½ / ⅓ / ¼ helpers, and the payments taken. Partial payments keep the tab open;
the sale finalises (and frees the table) only when the balance hits zero.
Pay splits get their own checkout + callback (pos.payments.callback).
Pipe online orders to the KDS:
- POST /api/kitchen/orders — a first-party, service-keyed ingest
(config pos.kitchen_api_keys, scoped by owner, idempotent by external_ref) that
creates a paid, already-fired ticket (order_type=online, lines source=online).
- The KDS feed is now payment-agnostic (any kitchen-active sale), so paid online
orders sit on the board next to dine-in tabs and bump the same way; they're
badged "online".
Schema additive: pos_payments, pos_sales.external_ref. Suite green (14).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add the Afia AI assistant to the header (topbar AI button + slide-over),
matching every other Ladill app. Ports config/afia.php, AfiaService, a POS
AiController (pos.ai.chat) scoped to register/sales/products, and includes
the slide-over in the app layout. The afia() Alpine component already existed.
- Hide the header "Open register" button while on the register page.
- Move Settings to a pinned bottom section of the sidebar, like other apps.
- Commit the updated POS logo + launcher icon assets.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Finish removing the upstream platform fork: drop the Hosting/SSL/Domain
notification classes + their mail views, the email/mailbox/domains/hosting
view trees, the Mini/Afia/search/paystack partials and unused components, and
the now-orphan support helpers (DomainConfig, MailboxPricing,
ResellerClubLegacy), SmsService, and fork configs (afia, hosting, domain,
email, mailbox, qr, mail_brands, notifications, ...). Reparent the
notifications page off the hosting layout onto the POS app layout (it had
referenced undefined hosting./mini. routes). Computed the removable set from a
reachability scan of the POS view graph; kept views reference no removed
routes/services.
Branding: favicon now uses the updated favicon.ico (favicon.svg removed);
signed-out fallback logo points at the POS logo.
CRM import: constrain the catalogue pull to type=product so CRM services are
never imported as POS products (server-side filter + defensive client skip).
Test suite green (8 passed, 29 assertions); all routes resolve and every
remaining Blade compiles.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>