{{-- ===================================================== Etebarit - by Gisoo Web Solutions ------------------------------------------------------ Gisoo.net ------------------------------------------------------ Copyright (c) 2026 Gisoo Web Solutions ===================================================== This code is protected by copyright ===================================================== File: show.blade.php ------------------------------------------------------ Use: Admin user detail: the two-tab pattern (info / edit). The edit tab holds the national-ID images with the enlarge modal, the review decision and the identity fields. ===================================================== --}} @extends('layouts.admin') @section('title', $user->fullName().' - '.__('admin.users.title')) @section('breadcrumb') @endsection @section('page') @php $panelAdmin = auth('admin')->user(); $canEdit = $panelAdmin->allowed('users.edit'); $canReview = $panelAdmin->allowed('users.review'); $canBlock = $panelAdmin->allowed('users.block'); $canWallet = $panelAdmin->allowed('users.wallet'); $hasEditTab = $canEdit || $canReview || $canBlock || $canWallet; @endphp {{ __('admin.users.back_to_list') }}
{{-- ===== Identity header ===== --}}
{{ mb_substr($user->first_name, 0, 1) }}.{{ mb_substr($user->last_name, 0, 1) }}
{{ $user->fullName() }}
{{-- Right-aligned so the number sits directly under the name. --}}
@fa($user->mobile)
$user->verification_status === \App\Models\User::VERIFICATION_UNVERIFIED, 'bg-[#fff5e6] text-amber-600' => $user->verification_status === \App\Models\User::VERIFICATION_PENDING, 'bg-[#e7f7ee] text-green-600' => $user->verification_status === \App\Models\User::VERIFICATION_APPROVED, 'bg-secondary-50 text-secondary-500' => $user->verification_status === \App\Models\User::VERIFICATION_REJECTED, ])> {{ __("admin.users.statuses.{$user->verification_status}") }} @if ($user->isBlocked()) {{ __('admin.users.blocked_badge') }} @endif
{{-- Quick verification decision, right under the header so an operator can approve/reject a pending account without opening the edit tab. Self-contained forms (no dependency on the edit-tab refs). --}} @if ($canReview && $user->verification_status === \App\Models\User::VERIFICATION_PENDING)
{{ __('admin.users.review.pending_hint') }}
@endif {{-- ===== Tabs ===== --}}
@if ($hasEditTab) @endif
{{-- ===== Info tab ===== --}}
{{-- Wallet balances (cash is withdrawable, installment is not). --}}
{{ __('admin.users.wallet.cash_balance') }}
@toman($cashBalance) {{ __('admin.users.wallet.toman') }}
{{ __('admin.users.wallet.installment_balance') }}
@toman($installmentBalance) {{ __('admin.users.wallet.toman') }}
{{-- Good-standing: the user's level, score and how it was reached. --}}
{{ __('admin.users.standing.section') }}
{{ \App\Support\Format::persianDigits((string) $standing['score']) }} / {{ \App\Support\Format::persianDigits((string) \App\Support\GoodStanding::MAX_SCORE) }}
{{ __('admin.users.fields.national_id') }}
@fa($user->national_id)
{{ __('admin.users.fields.registered_at') }}
@jalaliDateTime($user->created_at)
{{ __('admin.users.fields.type') }}
{{ __("admin.users.types.{$user->type}") }}
{{ __('admin.users.fields.status') }}
{{ __("admin.users.statuses.{$user->verification_status}") }}
{{-- Virtual credit card --}} @if ($card)
@fa($card->formattedNumber())
{{ __('admin.users.wallet.card_expiry') }} @jalali($card->expires_at, 'Y/m') • CVV2 @fa($card->cvv2)
{{ __('admin.users.wallet.card_active') }}
@else

{{ __('admin.users.wallet.no_card') }}

@endif {{-- Recent ledger movement, signs always explicit --}} @if ($recentEntries->isEmpty())

{{ __('admin.users.wallet.no_entries') }}

@else
@foreach ($recentEntries as $entry)
! $loop->first])>
{{ $entry->reasonLabel('admin.wallet_reasons') }} @if ($entry->bucket === \App\Models\WalletEntry::BUCKET_INSTALLMENT) {{-- Installment-bucket movements carry this badge everywhere. --}} {{ __('admin.users.wallet.bucket_installment') }} @endif @if ($entry->transaction) {{ __('admin.users.wallet.tracking') }} @fa($entry->transaction->code) @endif @jalaliDateTime($entry->created_at)
{{-- RTL reading order: the figure first, the unit after it. Only the signed number itself is an LTR run. --}} $entry->isCredit(), 'text-secondary-500' => ! $entry->isCredit(), ])> {{ $entry->isCredit() ? '+' : '−' }}@toman($entry->amount) {{ __('admin.toman') }}
@endforeach
@endif
{{ __('admin.users.bank_accounts.section') }}
@if ($bankAccounts->isEmpty())

{{ __('admin.users.bank_accounts.empty') }}

@else
@foreach ($bankAccounts as $account)
! $loop->first])>
{{ $account->bankName() }} @if ($account->is_default) {{ __('admin.bank_accounts.default') }} @endif
{{-- Full number, ASCII digits, click to copy. --}} @if ($account->sheba)
{{ __('admin.users.bank_accounts.sheba') }}
@endif
$account->isPending(), 'bg-[#e7f7ee] text-green-600' => $account->isApproved(), 'bg-secondary-50 text-secondary-500' => $account->status === \App\Models\BankAccount::STATUS_REJECTED, ])>{{ __("admin.bank_accounts.statuses.{$account->status}") }}
@endforeach
@endif {{-- Credit the user has received --}} @if ($creditRequests->isEmpty())

{{ __('admin.users.credits.empty') }}

@else
@foreach ($creditRequests as $creditRequest)
! $loop->first])>
{{ $creditRequest->plan?->name ?? '—' }} {{ $creditRequest->code }}
@toman($creditRequest->amount) {{ __('admin.toman') }} • @jalaliDateTime($creditRequest->created_at)
$creditRequest->status === \App\Models\CreditRequest::STATUS_ACTIVE, 'bg-[#fff5e6] text-amber-600' => in_array($creditRequest->status, [\App\Models\CreditRequest::STATUS_PENDING, \App\Models\CreditRequest::STATUS_APPROVED], true), 'bg-secondary-50 text-secondary-500' => $creditRequest->status === \App\Models\CreditRequest::STATUS_REJECTED, 'bg-[#f1f0f5] text-ink-muted' => $creditRequest->status === \App\Models\CreditRequest::STATUS_EXPIRED, ])>{{ __('admin.requests.statuses.'.$creditRequest->status) }}
@endforeach
@endif {{-- Installments that came out of that credit --}} @if ($installments->isEmpty())

{{ __('admin.users.installments.empty') }}

@else
@foreach ($installments as $installment) @endforeach
{{ __('admin.installments.columns.plan') }} {{ __('admin.installments.columns.amount') }} {{ __('admin.installments.columns.penalty') }} {{ __('admin.installments.columns.due_at') }} {{ __('admin.installments.columns.status') }}
{{ $installment->creditRequest?->plan?->name ?? '—' }} {{ $installment->creditRequest?->code }} @toman($installment->amount) @if ($installment->penalty_amount > 0) @toman($installment->penalty_amount) @else @endif @jalali($installment->due_at) $installment->status === \App\Models\Installment::STATUS_PAID, 'bg-secondary-50 text-secondary-500' => $installment->status === \App\Models\Installment::STATUS_OVERDUE, 'bg-[#fff5e6] text-amber-600' => $installment->status === \App\Models\Installment::STATUS_DUE, 'bg-[#eef2fb] text-[#3b6bd8]' => $installment->status === \App\Models\Installment::STATUS_UPCOMING, ])>{{ __('admin.installments.statuses.'.$installment->status) }}
@endif {{-- Orders the user placed through the gateway --}} @if ($orders->isEmpty())

{{ __('admin.users.orders.empty') }}

@else
@foreach ($orders as $order) @endforeach
{{ __('front.shop.sales.order') }} {{ __('admin.users.orders.shop') }} {{ __('front.shop.sales.total') }} {{ __('front.shop.sales.date') }} {{ __('admin.installments.columns.status') }}
{{ $order->code }} {{ $order->shop?->name ?? '—' }} @toman($order->amount) @jalali($order->paid_at ?? $order->created_at) $order->status === \App\Models\Order::STATUS_PAID, 'bg-[#fff5e6] text-amber-600' => $order->status === \App\Models\Order::STATUS_PENDING, 'bg-secondary-50 text-secondary-500' => in_array($order->status, [\App\Models\Order::STATUS_FAILED, \App\Models\Order::STATUS_EXPIRED], true), ])>{{ __('admin.users.orders.statuses.'.$order->status) }}
@endif @if ($user->shop)
{{ __('admin.users.shop.section') }}
{{ __('admin.users.shop.name') }}
{{ $user->shop->name }}
{{ __('admin.users.shop.slug') }}
{{ $user->shop->slug }}
{{ __('admin.users.shop.status') }}
{{ __("admin.users.shop.statuses.{$user->shop->status}") }}
@endif
{{-- ===== Edit tab (each block gated by its own ability) ===== --}} @if ($hasEditTab)
{{-- Editable identity + decisions --}}
@if ($canEdit)
@csrf @method('PUT')
@error('first_name')

{{ $message }}

@enderror
@error('last_name')

{{ $message }}

@enderror
@error('national_id')

{{ $message }}

@enderror

{{ __('admin.users.mobile_note') }}

{{ __('admin.users.save') }}
@endif {{-- Review decision --}} @if ($canReview)
{{ __('admin.users.review.section') }}
@if ($user->verification_status === \App\Models\User::VERIFICATION_PENDING)

{{ __('admin.users.review.pending_hint') }}

@else

{{ __('admin.users.review.not_pending_hint') }}

@endif
@endif {{-- Support-made wallet adjustment (cash bucket) --}} @if ($canWallet)
{{ __('admin.users.wallet.adjust_section') }}
{{ __('admin.users.wallet.current') }} @toman($cashBalance) {{ __('admin.users.wallet.toman') }}
{{-- Unit-bearing numeric input: RTL and right-aligned per the constitution. --}}
@error('amount')

{{ $message }}

@enderror
@endif {{-- Block / unblock --}} @if ($canBlock)
@endif
{{-- National-ID images (private disk, review ability only) --}} @if ($canReview)
{{ __('admin.users.documents.section') }}

{{ __('admin.users.documents.hint') }}

@foreach ([['side' => 'front', 'document' => $front], ['side' => 'back', 'document' => $back]] as $item)
{{ __("admin.users.documents.{$item['side']}") }} @if ($item['document']) {{ __('admin.users.documents.uploaded_at') }} @jalaliDateTime($item['document']->created_at) @endif
@if ($item['document']) @php $viewUrl = route('admin.users.document', [$user, $item['document']]); $downloadUrl = route('admin.users.document', [$user, $item['document'], 'download' => 1]); @endphp @else
{{ __('admin.users.documents.missing') }}
@endif
@endforeach
@endif
@endif
@endsection