@extends('provider.layout') @section('title', 'Earnings & Wallet') @section('content') {{-- ══ PAGE HEADER ══ --}}

Earnings & Wallet

Real-time wallet balance, commission tracking, and payout management.

Request Payout
{{-- ══ FLASH MESSAGES ══ --}} @if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif {{-- ══ STATS GRID ══ --}}
{{-- Total Earnings --}}
Total Earnings
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['total_earnings'], auth()->user()) !!}
Gross across all modules
{{-- Wallet Balance --}}
Wallet Balance
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['balance'], auth()->user()) !!}
Online payments received
{{-- Available for Payout --}}
Available for Payout
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['available'], auth()->user()) !!}
{{-- Show deduction breakdown if commission is due --}} @if($stats['commission_due'] > 0)
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['balance'], auth()->user()) !!} balance
− {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['commission_due'], auth()->user()) !!} commission due
@if($stats['pending_payout'] > 0)− {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['pending_payout'], auth()->user()) !!} pending payout
@endif = {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['available'], auth()->user()) !!} available
@else
Balance minus commission & pending requests
@endif
{{-- Pending Payout --}}
Pending Payout
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['pending_payout'], auth()->user()) !!}
Awaiting admin approval
{{-- Commission Due (Cash) --}}
Commission Due
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['commission_due'], auth()->user()) !!}
Cash bookings — owed to admin
{{-- Total Withdrawn --}}
Total Withdrawn
{!! \App\Helpers\CurrencyHelper::formatForProvider($stats['total_withdrawn'], auth()->user()) !!}
Cumulative approved payouts
{{-- ══ PAYOUT REQUEST FORM ══ --}}

Request Payout

{{-- Commission settlement notice --}} @if($stats['commission_due'] > 0)
Commission Auto-Settlement
Wallet Balance {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['balance'], auth()->user()) !!} − Commission Due {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['commission_due'], auth()->user()) !!} @if($stats['pending_payout'] > 0) − Pending Payout {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['pending_payout'], auth()->user()) !!} @endif = Available for Payout {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['available'], auth()->user()) !!}

When you submit a payout, {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['commission_due'], auth()->user()) !!} commission will be automatically deducted from your wallet balance and settled with admin. The remaining {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['available'], auth()->user()) !!} will be sent to you.

@else

Minimum payout: {!! \App\Helpers\CurrencyHelper::formatForProvider($minPayout, auth()->user()) !!}  ·  Available: {!! \App\Helpers\CurrencyHelper::formatForProvider($stats['available'], auth()->user()) !!}

@endif @if($stats['available'] >= $minPayout) @php $exchangeRate = auth()->user()->business_currency->exchange_rate ?? 1.0; $currencyCode = auth()->user()->business_currency->code ?? \App\Helpers\CurrencyHelper::getBaseCurrencyCode(); $minPayoutConverted = floor($minPayout * $exchangeRate); $availableConverted = floor($stats['available'] * $exchangeRate); @endphp
@csrf
Max: {!! \App\Helpers\CurrencyHelper::formatForProvider(floor($stats['available']), auth()->user()) !!}
@error('amount')
{{ $message }}
@enderror
@error('method')
{{ $message }}
@enderror
@else
@if($stats['commission_due'] > 0 && $stats['balance'] > 0) Your wallet balance ({!! \App\Helpers\CurrencyHelper::formatForProvider($stats['balance'], auth()->user()) !!}) is fully consumed by the commission due ({!! \App\Helpers\CurrencyHelper::formatForProvider($stats['commission_due'], auth()->user()) !!}). Complete online payment bookings to build a withdrawable balance. @else Available balance ({!! \App\Helpers\CurrencyHelper::formatForProvider($stats['available'], auth()->user()) !!}) is below the minimum payout of {!! \App\Helpers\CurrencyHelper::formatForProvider($minPayout, auth()->user()) !!}. Complete more bookings to unlock payouts. @endif
@endif
{{-- ══ EARNING HISTORY TABLE ══ --}}

Earning History

{{-- Filters --}}
@if(request()->anyFilled(['module','type'])) Clear @endif
@if($transactions->count())
@foreach($transactions as $tx) @endforeach
Date Module Reference Total Commission You Earn Payment Type
{{ $tx->created_at->format('d M Y') }}
{{ $tx->created_at->format('h:i A') }}
{{ ucwords(str_replace('_', ' ', $tx->module_slug ?? 'General')) }} @php $refUrl = null; $mSlug = strtolower($tx->module_slug ?? ''); $rType = strtolower($tx->reference_type ?? ''); if ($mSlug === 'homeservices' || $mSlug === 'home_services' || $rType === 'hs_booking') { $refUrl = Route::has('provider.hs.bookings.show') ? route('provider.hs.bookings.show', $tx->reference_id) : null; } elseif ($mSlug === 'parceldelivery' || $mSlug === 'parcel_delivery' || $rType === 'pd_parcel') { $refUrl = Route::has('provider.pd.parcels.show') ? route('provider.pd.parcels.show', $tx->reference_id) : null; } elseif ($mSlug === 'ecommerce' || $mSlug === 'e_commerce' || $rType === 'ec_order') { $refUrl = Route::has('provider.ec.orders.show') ? route('provider.ec.orders.show', $tx->reference_id) : null; } elseif ($mSlug === 'salonspa' || $mSlug === 'salon_spa' || $rType === 'ss_appointment') { $refUrl = Route::has('provider.ss.appointments.show') ? route('provider.ss.appointments.show', $tx->reference_id) : null; } elseif ($mSlug === 'doctorappointment' || $mSlug === 'doctor_appointment' || $rType === 'da_appointment') { $refUrl = Route::has('provider.da.appointments.show') ? route('provider.da.appointments.show', $tx->reference_id) : null; } elseif ($mSlug === 'fitnesstrainer' || $mSlug === 'fitness_trainer' || $rType === 'ft_appointment') { $refUrl = Route::has('provider.fitness.appointments.show') ? route('provider.fitness.appointments.show', $tx->reference_id) : null; } @endphp @if($refUrl) {{ ucfirst(str_replace('_', ' ', $tx->reference_type)) }} #{{ $tx->reference_id }} @else
{{ ucfirst(str_replace('_', ' ', $tx->reference_type)) }}
#{{ $tx->reference_id }}
@endif @if($tx->notes)
{{ $tx->notes }}
@endif
{!! \App\Helpers\CurrencyHelper::formatForProvider($tx->total_amount, auth()->user()) !!} @if($tx->commission_amount > 0) − {!! \App\Helpers\CurrencyHelper::formatForProvider($tx->commission_amount, auth()->user()) !!} @else @endif {{ $tx->transaction_type === 'payout' ? '−' : '+' }}{!! \App\Helpers\CurrencyHelper::formatForProvider($tx->provider_amount, auth()->user()) !!} @if($tx->payment_method === 'online') Online @else Cash @endif {{ $tx->transaction_type_label }}
{{ $transactions->links() }}
@else

No transactions yet

Complete a booking to see your earnings here.

@endif
{{-- ══ PAYOUT HISTORY ══ --}}

Payout Requests

@if($payouts->count())
@foreach($payouts as $payout) @endforeach
Requested Amount Method Status Notes Processed
{{ $payout->requested_at?->format('d M Y') ?? $payout->created_at->format('d M Y') }} {!! \App\Helpers\CurrencyHelper::formatForProvider($payout->effective_amount, auth()->user()) !!} {{ str_replace('_', ' ', $payout->method ?? '—') }} @php $badgeStyle = match($payout->status) { 'paid' => 'background:rgba(34,197,94,0.1);color:#16a34a;border:1px solid rgba(34,197,94,0.2)', 'pending' => 'background:rgba(245,158,11,0.1);color:#d97706;border:1px solid rgba(245,158,11,0.2)', 'rejected' => 'background:rgba(239,68,68,0.1);color:#dc2626;border:1px solid rgba(239,68,68,0.2)', default => 'background:rgba(148,163,184,0.1);color:#64748b', }; @endphp {{ $payout->status_label }} {{ $payout->notes ?? '—' }} @if($payout->rejection_reason)
{{ $payout->rejection_reason }}
@endif
{{ $payout->processed_at?->format('d M Y') ?? '—' }}
{{ $payouts->links() }}
@else

No payout requests yet

Once your balance reaches {!! \App\Helpers\CurrencyHelper::formatForProvider($minPayout, auth()->user()) !!}, you can request a payout above.

@endif
@push('styles') @endpush @endsection