@php $kpiIcon = [ 'indigo' => 'bg-indigo-50 text-indigo-600', 'amber' => 'bg-amber-50 text-amber-600', 'emerald' => 'bg-emerald-50 text-emerald-600', 'sky' => 'bg-sky-50 text-sky-600', ]; // Both lanes share the status column, so this covers the counter path // (printing → ready → collected) and the quote path (quoting → quoted → // converted). Unknown values fall back rather than blowing up the row. $statusMeta = [ 'new' => ['label' => __('New'), 'badge' => 'bg-indigo-50 text-indigo-700 ring-indigo-200'], 'printing' => ['label' => __('Printing'), 'badge' => 'bg-sky-50 text-sky-700 ring-sky-200'], 'ready' => ['label' => __('Ready'), 'badge' => 'bg-emerald-50 text-emerald-700 ring-emerald-200'], 'completed' => ['label' => __('Collected'), 'badge' => 'bg-slate-100 text-slate-600 ring-slate-200'], 'cancelled' => ['label' => __('Cancelled'), 'badge' => 'bg-rose-50 text-rose-700 ring-rose-200'], 'quoting' => ['label' => __('Being quoted'), 'badge' => 'bg-sky-50 text-sky-700 ring-sky-200'], 'quoted' => ['label' => __('Quote sent'), 'badge' => 'bg-amber-50 text-amber-700 ring-amber-200'], 'converted' => ['label' => __('Accepted'), 'badge' => 'bg-emerald-50 text-emerald-700 ring-emerald-200'], ]; $statusFor = fn ($s) => $statusMeta[$s] ?? ['label' => ucfirst((string) $s), 'badge' => 'bg-slate-100 text-slate-600 ring-slate-200']; $money = fn ($n, $cur = 'USD') => $cur . ' ' . number_format((float) $n, 2); @endphp
{{ __('For the customer standing at the counter. Take their details, then add what they are paying for.') }}
{{ __('Needed only if they might leave change behind.') }}
{{ __('A customer who overpaid left their change here. Look it up by the phone number they gave.') }}
{{ __('Type a phone number to see what is waiting.') }}
@elseif (empty($totals)){{ __('No change is being held for this number.') }}
{{ __('It may have already been used, or the week may have passed.') }}
{{ $currency }} {{ number_format($amount, 2) }}
@endforeach{{ __('Applied automatically on their next cash job at this number.') }}
{{ $entry['currency'] }} {{ number_format($entry['remaining'], 2) }}
{{ $entry['reference'] ? __('Change from :ref', ['ref' => $entry['reference']]) : __('Change held') }}
{{ __('What customers can choose from when they scan your QR code. Switch off anything you do not offer and it stops appearing.') }}
{{ __('You can reword a question and change its options. Which questions a service asks is fixed, so every answer still lands on the right part of the quote.') }}
{{ $kpi['label'] }}
{{ $kpi['value'] }}
{{ $kpi['sub'] }}
{{ __('No print requests yet. Share your intake QR code to get started.') }}
{{ $detail->deletion_reason }}
{{ $canDeleteOutright ? __('Approving deletes it. If it was paid, the income and stock it booked are reversed.') : __('Nothing changes until a director approves or declines it.') }}
{{ __('Delete request declined by :who', ['who' => $detail->deletionDecliner?->name ?? __('a director')]) }} · {{ $detail->deletion_declined_at->diffForHumans() }}
@if ($detail->deletion_decline_reason){{ $detail->deletion_decline_reason }}
@endif{{ __('What they asked for') }}
{{ __('No answers recorded.') }}
@endforelse @if ($detail->needed_by){{ __('The quote starts with the answers above on its line. Add your prices.') }}
@else{{ $detail->opportunity_id ? __('Already in the pipeline as a prospect. Start quoting to move this request to Quoting.') : __('Opens a prospect organisation and an opportunity owned by you, then moves this request to Quoting.') }}
@endif{{ $detail->isQuoteLane() ? __('Artwork & references') : __('Files to print') }}
@if ($detail->files->isEmpty()){{ $detail->isQuoteLane() ? __('Nothing attached.') : __('Files were automatically removed (24-hour retention).') }}
@endif{{ $file->original_name }}
{{ $file->humanSize() }} · {{ trans_choice('{1}:count page|[2,*]:count pages', $file->pages, ['count' => $file->pages]) }}
{{ __('Customer instructions') }}
@if ($detail->notes){{ $detail->notes }}
@endif @if ($detail->audio_path) @endif{{ $line->name }}
{{ $line->workingLabel($detail->currency_code) }}
{{ __('Nothing on this sale yet.') }}
@endforelse{{ __('A per-page item takes its quantity from the pages and copies below.') }}
{{-- Something the price list doesn't cover --}}
{{ __('Customer did not attach EcoCash proof, verify before confirming.') }}
@endif @endunless {{-- Fulfilment status buttons (labels follow the lane) --}}{{ __('Fulfilment') }}
{{ __('Confirm payment') }}
{{ __('Records :amount as income into the account you pick.', ['amount' => $money($detail->subtotal, $detail->currency_code)]) }}
{{-- Change wallet (cash only) --}} @if ($pay && $pay['isCash'] && $pay['available'] > 0) @endif @if ($pay && $pay['isCash']){{ __('Change of :amt will be saved to :phone until they come back for it.', ['amt' => $money($pay['change'], $detail->currency_code), 'phone' => $detail->contact_phone ?: __('this customer')]) }} @unless ($detail->contact_phone) {{ __('(no phone, change cannot be saved)') }} @endunless
@endif{{ __('A director will see this and either delete the request or turn it down. It stays in the queue until then.') }}
{{ __('The request stays in the queue. A note tells the person who asked why, so they do not ask again for the same reason.') }}
{{ __('When on, customers can scan the code or open the link to submit prints.') }}
@if ($intakeUrl){{ __('Intake link') }}
{{ __('EcoCash collection') }}
{{ __('Where the money lands') }}
{{ __('Pre-selected when you confirm payment (still changeable per request).') }}
{{ __('Papers & sizes') }}
{{ __('What the price list can choose from. Keep the wording you use at the counter.') }}
{{ __('Removing one here leaves prices already using it alone.') }}
{{ __('Counter price list') }}
{{ __('Title, paper, size, colour and what it costs. Add a bulk price for "10 for $1".') }}
{{ $message }}
@enderror @error("catalogue.{$i}.tiers.{$j}.min_qty"){{ $message }}
@enderror @endforeach{{ $message }}
@enderror @error('catalogue.*.name'){{ $message }}
@enderror{{ __('Change wallet') }}
{{ __('Overpaid change is kept against the customer\'s phone number and applied on their next visit.') }}
{{ __('It never expires. Whatever is still held when a month is closed is carried into the next month, and stays the customer\'s until they come back for it.') }}