@php($currency = app(\App\Support\CompanySettings::class)->currency()) @if (! ($routerMode ?? false))
@csrf
@error('reseller_id')

{{ $message }}

@enderror

Ce revendeur n'a aucun ticket en stock : attribuez-lui un lot d'abord.

@error('ticket_type_id')

{{ $message }}

@enderror

@error('quantity')

{{ $message }}

@enderror
🔒
Mode de paiement
@foreach ($methods as $m) @endforeach
@error('payment_method')

{{ $message }}

@enderror
@error('customer_name')

{{ $message }}

@enderror
Enregistrer la vente

Le reçu à imprimer est disponible juste après l'enregistrement.

Revendeur
—
Ticket
—
Montant de la vente
0 {{ $currency }}
Commission du revendeur
0 {{ $currency }}
Part de l'entreprise
0 {{ $currency }}

Seuls les tickets réellement en stock chez le revendeur peuvent être vendus. En cas d'erreur, la vente s'annule depuis sa fiche : les tickets reviennent dans son stock.

@else

Les ventes viennent des routeurs.

Chaque ticket utilisé, enregistré sur un routeur, devient une vente du revendeur dont le préfixe ouvre le code WiFi (les 2 premiers caractères). Le prix est celui écrit dans le nom du profil.

Dernière lecture des routeurs : {{ $routersReadAt ? \Carbon\Carbon::parse($routersReadAt)->translatedFormat('d F à H:i') : 'jamais' }}. Lecture automatique chaque minute par la tâche planifiée, et pendant qu'un tableau de bord est ouvert.

@php($waitingRows = $pendingRouterSales->where('status', '!=', 'other')) @php($otherRows = $pendingRouterSales->where('status', 'other'))
@if ($pendingRouterSales->isEmpty())

Tout est attribué.

Chaque ticket utilisé a trouvé son revendeur et son profil.

@else @if ($otherRows->isNotEmpty())

{{ $otherRows->sum('count') }} ticket(s) rangé(s) dans « Autres »

{{ \App\Support\Money::format($otherRows->sum('amount')) }} déjà comptés dans vos recettes (revendeur ou profil inconnu). Donnez le bon préfixe au revendeur, ou synchronisez les profils : ils seront reclassés tout seuls.

@endif @if ($waitingRows->isNotEmpty())

{{ $waitingRows->sum('count') }} ticket(s) utilisé(s) en attente

{{ \App\Support\Money::format($waitingRows->sum('amount')) }} non encore comptés : mettez la base à jour (bandeau orange) pour qu'ils soient comptés dans « Autres ».

@endif @endif
@isset($salesDiagnostic) @php($d = $salesDiagnostic)
Tickets lus
{{ \App\Support\Money::number($d['read']) }}
Devenus des ventes
{{ \App\Support\Money::number($d['sold']) }}
En attente de revendeur ou de profil
{{ \App\Support\Money::number($d['waiting']) }}
Dont rangés dans « Autres »
{{ \App\Support\Money::number($d['other']) }}
Gratuits ou à 0 F
{{ \App\Support\Money::number($d['free']) }}
@if ($d['before_switch'] > 0)

{{ \App\Support\Money::number($d['before_switch']) }} ticket(s) utilisé(s) avant le {{ \Carbon\Carbon::parse($d['since'])->format('d/m/Y') }} ne sont pas comptés (date de bascule réglée dans Paramètres). Videz cette date pour les compter.

@endif @unless ($d['scheduler_running']) @cannot('platform.manage')

La lecture automatique des ventes est interrompue.

Vos ventes ne sont plus mises à jour toutes seules : vos rapports prennent du retard. Prévenez l'administrateur de la plateforme.

@else

La tâche planifiée (cron) ne tourne pas{{ $d['scheduler_last'] ? ' depuis le '.$d['scheduler_last'] : '' }}.

Les ventes ne sont alors lues que lorsqu'un écran est ouvert : vos rapports prennent du retard. Dans cPanel > Tâches Cron, ajoutez cette ligne (« Chaque minute ») :

{{ $d['cron_line'] }}
@endcannot @endunless @can('sales.cancel')
@csrf Relire les routeurs et recompter Aucune vente n'est dupliquée : un ticket = une vente.
@endcan
@endisset @if ($pendingRouterSales->isNotEmpty()) @endif @endif
Filtrer
@forelse ($sales as $s) @empty @endforelse @if ($sales->total() > 0) @endif
DateReçuRevendeurTypeQtéMontantModeActions
{{ $s->sold_at->format('d/m/Y H:i') }} {{ $s->receipt_number }} @if ($s->isCancelled())Annulée@endif {{ $s->reseller?->name ?? '—' }} {{ $s->ticketType?->label ?? '—' }} {{ \App\Support\Money::number($s->quantity) }} @money($s->total_amount) {{ $s->payment_method->label() }}
Aucune vente{{ ($search !== '' || request()->hasAny(['reseller', 'type', 'zone', 'method', 'month', 'date', 'status'])) ? ' ne correspond à ces critères' : ' pour le moment' }}.
Total des ventes filtrées (hors annulées) {{ \App\Support\Money::number($totals->quantity) }} @money($totals->amount) dont commissions @money($totals->commission) · part entreprise @money($totals->company_share)
@if ($sales->hasPages())
{{ $sales->links() }}
@endif