Files
ladill-queue/resources/views/qms/pro/index.blade.php
T
isaaccladandCursor b208e59bd0
Deploy Ladill Queue / deploy (push) Successful in 3m12s
Strip healthcare packaging and Care integration from Queue.
Queue is general-purpose QMS only; Care runs its own native engine.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-18 10:15:32 +00:00

203 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<x-app-layout title="Plans" heading="Queue plans">
@php
$proPerBranch = number_format($proPricePerBranchMinor / 100, 0);
$enterprisePerBranch = number_format($enterprisePricePerBranchMinor / 100, 0);
$initialBranches = max(1, (int) $branchCount);
@endphp
<div class="mx-auto max-w-5xl space-y-6"
x-data="{
billing: 'monthly',
branches: {{ $initialBranches }},
proPerBranch: {{ (int) $proPricePerBranchMinor }},
entPerBranch: {{ (int) $enterprisePricePerBranchMinor }},
minBranches: {{ $initialBranches }},
proTotal() {
return this.proPerBranch * Math.max(this.minBranches, parseInt(this.branches) || this.minBranches);
},
entTotal() {
return this.entPerBranch * Math.max(this.minBranches, parseInt(this.branches) || this.minBranches);
},
branchCount() {
return Math.max(this.minBranches, parseInt(this.branches) || this.minBranches);
},
fmt(minor) {
return (minor / 100).toLocaleString();
}
}">
@if (session('success'))
<div class="rounded-xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-800">{{ session('success') }}</div>
@endif
@if (session('error'))
<div class="rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-800">{{ session('error') }}</div>
@endif
<div class="rounded-2xl border border-slate-200 bg-white px-6 py-5">
<h1 class="text-2xl font-bold text-slate-900">Choose your Queue plan</h1>
<p class="mt-1 text-sm text-slate-600">
Pay monthly from your Ladill wallet, or prepay 6/12/24 months via Paystack.
Pro and Enterprise are billed per branch set how many branches to include below.
Enterprise includes dedicated onboarding <a href="{{ $salesUrl }}" class="font-medium text-indigo-600 hover:text-indigo-800" target="_blank" rel="noopener">contact sales</a> for multi-site deployments.
</p>
<div class="mt-4 flex flex-wrap items-center gap-2">
<button type="button" @click="billing = 'monthly'"
:class="billing === 'monthly' ? 'bg-indigo-600 text-white' : 'bg-slate-100 text-slate-700 hover:bg-slate-200'"
class="rounded-lg px-3 py-1.5 text-sm font-medium transition">Monthly · wallet</button>
@foreach ($prepaidMonths as $months)
<button type="button" @click="billing = '{{ $months }}'"
:class="billing === '{{ $months }}' ? 'bg-indigo-600 text-white' : 'bg-slate-100 text-slate-700 hover:bg-slate-200'"
class="rounded-lg px-3 py-1.5 text-sm font-medium transition">{{ $months }} months · Paystack</button>
@endforeach
<label class="inline-flex items-center gap-2 rounded-lg border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm text-slate-700">
<span class="font-medium text-slate-600">Branches</span>
<input type="number"
min="{{ $initialBranches }}"
max="999"
x-model.number="branches"
@change="if (branches < minBranches) branches = minBranches"
class="w-16 rounded-md border-slate-300 py-0.5 text-center text-sm focus:border-indigo-500 focus:ring-indigo-500">
</label>
</div>
<p class="mt-2 text-xs text-slate-500">
Minimum is your current active branch count ({{ $initialBranches }}). Totals update live for Pro and Enterprise.
</p>
</div>
<div class="grid gap-5 lg:grid-cols-3">
{{-- Free --}}
<div class="flex flex-col rounded-2xl border border-slate-200 bg-white p-6 {{ $planKey === 'free' ? 'ring-2 ring-indigo-500' : '' }}">
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Free</p>
<p class="mt-2 text-3xl font-bold text-slate-900">GHS 0</p>
<p class="mt-1 text-sm text-slate-500">1 branch · 5 queues</p>
<ul class="mt-5 flex-1 space-y-2 text-sm text-slate-700">
<li>Core queue & tickets</li>
<li>1 kiosk · 1 display</li>
<li>Basic analytics</li>
</ul>
@if ($planKey === 'free')
<p class="mt-6 text-sm font-medium text-indigo-700">Current plan</p>
@endif
</div>
{{-- Pro --}}
<div class="flex flex-col rounded-2xl border border-slate-200 bg-white p-6 {{ $planKey === 'pro' ? 'ring-2 ring-indigo-500' : '' }}">
<p class="text-xs font-semibold uppercase tracking-wide text-indigo-600">Pro</p>
<x-plan-tier-price
:currency="$currency"
:monthly-minor="$proPricePerBranchMinor"
:monthly-display="$proPerBranch"
monthly-suffix="/branch/mo"
/>
<p class="mt-1 text-sm text-slate-500">
<span x-text="branchCount()"></span> branch(es) × {{ $currency }} {{ $proPerBranch }}/branch
= {{ $currency }} <span x-text="fmt(proTotal())"></span>/mo
</p>
<ul class="mt-5 flex-1 space-y-2 text-sm text-slate-700">
<li>Multi-branch locations</li>
<li>Team roles & invitations</li>
<li>Hand off tickets between queues</li>
<li>Advanced routing rules</li>
<li>Unlimited kiosks & displays</li>
<li>Ladill-provided queue kiosk, display and audio system</li>
<li>Frontdesk & POS API</li>
<li>Reports & exports</li>
</ul>
<div class="mt-6">
@if ($planKey === 'pro')
<p class="text-sm text-slate-600">
Active
@if ($planExpiresAt)
until <strong>{{ $planExpiresAt->format('d M Y') }}</strong>
@endif
@if ($proBilledBranches > 0)
· billed for {{ $proBilledBranches }} {{ str('branch')->plural($proBilledBranches) }}
@endif
.
</p>
@elseif ($canManage)
<form x-show="billing === 'monthly'" method="post" action="{{ route('qms.pro.subscribe') }}">
@csrf
<input type="hidden" name="branches" :value="branchCount()">
<button type="submit" class="btn-primary w-full"
x-text="'Upgrade to Pro — {{ $currency }} ' + fmt(proTotal()) + '/mo'"></button>
</form>
<template x-for="months in @js($prepaidMonths)" :key="months">
<form x-show="billing == months" method="post" action="{{ route('qms.pro.subscribe-prepaid') }}">
@csrf
<input type="hidden" name="plan" value="pro">
<input type="hidden" name="months" :value="months">
<input type="hidden" name="branches" :value="branchCount()">
<button type="submit" class="btn-primary w-full"
x-text="'Pay ' + months + ' months via Paystack — {{ $currency }} ' + fmt(proTotal() * months)"></button>
</form>
</template>
@else
<p class="text-sm text-slate-500">Ask an admin to upgrade.</p>
@endif
</div>
</div>
{{-- Enterprise --}}
<div class="flex flex-col rounded-2xl border border-slate-200 bg-gradient-to-b from-slate-900 to-slate-800 p-6 text-white {{ $planKey === 'enterprise' ? 'ring-2 ring-amber-400' : '' }}">
<p class="text-xs font-semibold uppercase tracking-wide text-amber-300">Enterprise</p>
<x-plan-tier-price
:currency="$currency"
:monthly-minor="$enterprisePricePerBranchMinor"
:monthly-display="$enterprisePerBranch"
monthly-suffix="/branch/mo"
dark
/>
<p class="mt-1 text-sm text-slate-300">
<span x-text="branchCount()"></span> branch(es) × {{ $currency }} {{ $enterprisePerBranch }}/branch
= {{ $currency }} <span x-text="fmt(entTotal())"></span>/mo
</p>
<ul class="mt-5 flex-1 space-y-2 text-sm text-slate-200">
<li>Everything in Pro</li>
<li>Full API & integrations</li>
<li>Advanced analytics + SLA</li>
<li>Dedicated onboarding</li>
</ul>
<div class="mt-6 space-y-2">
@if ($planKey === 'enterprise')
<p class="text-sm text-slate-200">
Active
@if ($planExpiresAt)
until <strong class="text-white">{{ $planExpiresAt->format('d M Y') }}</strong>
@endif
@if ($enterpriseBilledBranches > 0)
· billed for {{ $enterpriseBilledBranches }} {{ str('branch')->plural($enterpriseBilledBranches) }}
@endif
.
</p>
@elseif ($canManage)
@if ($canSubscribeEnterprise)
<form x-show="billing === 'monthly'" method="post" action="{{ route('qms.pro.subscribe-enterprise') }}">
@csrf
<input type="hidden" name="branches" :value="branchCount()">
<button type="submit" class="w-full rounded-xl bg-amber-400 px-4 py-2.5 text-sm font-semibold text-slate-900 hover:bg-amber-300"
x-text="'Upgrade — {{ $currency }} ' + fmt(entTotal()) + '/mo'"></button>
</form>
<template x-for="months in @js($prepaidMonths)" :key="'ent-' + months">
<form x-show="billing == months" method="post" action="{{ route('qms.pro.subscribe-prepaid') }}">
@csrf
<input type="hidden" name="plan" value="enterprise">
<input type="hidden" name="months" :value="months">
<input type="hidden" name="branches" :value="branchCount()">
<button type="submit" class="w-full rounded-xl bg-amber-400 px-4 py-2.5 text-sm font-semibold text-slate-900 hover:bg-amber-300"
x-text="'Pay ' + months + ' months via Paystack — {{ $currency }} ' + fmt(entTotal() * months)"></button>
</form>
</template>
@else
<p class="text-sm text-slate-300">Add at least {{ $enterpriseMinBranches }} active branches, or choose Pro for a single site.</p>
@endif
<a href="{{ $salesUrl }}" target="_blank" rel="noopener" class="block text-center text-xs text-amber-200 underline hover:text-white">Contact sales for onboarding & SLA</a>
@else
<p class="text-sm text-slate-300">Ask an admin to upgrade.</p>
@endif
</div>
</div>
</div>
</div>
</x-app-layout>