{{-- TOP STATS --}}

28

Emails Sent

12

Appointments

₹45K

Total Revenue

08

Connected Contacts

03

Invoices

{{-- PROFILE --}}
{{-- LEFT --}}

{{ ucfirst($contact->first_name) }} {{ ucfirst($contact->middle_name) }} {{ ucfirst($contact->last_name) }}

{{ $contact->contactType?->title ?: 'CRM Contact' }}

{{ $contact->contactPhase?->title ?: 'Active Contact' }}
Edit Profile @if($contact->phone1) Call Contact @endif
{{-- RIGHT --}}

Contact Profile Overview

Complete CRM contact information and membership details.

{{-- LEFT INFO --}}
  • Contact ID {{ $contact->id }}
  • First Name {{ $contact->first_name ?: '-' }}
  • Middle Name {{ $contact->middle_name ?: '-' }}
  • Last Name {{ $contact->last_name ?: '-' }}
  • Gender {{ ucfirst($contact->gender) ?: '-' }}
  • Date Of Birth {{ $contact->date_of_birth ? date('d M Y',strtotime($contact->date_of_birth)) : '-' }}
  • Age Group {{ $contact->age_group ?: '-' }}
  • {{ !empty($contact->phone1_label) ? $contact->phone1_label.' Phone' : 'Phone 1' }} {{ $contact->phone1 ?: '-' }}
  • {{ !empty($contact->phone2_label) ? $contact->phone2_label.' Phone' : 'Phone 2' }} {{ $contact->phone2 ?: '-' }}
  • Contact Type {{ $contact->contactType?->title ?: '-' }}
  • Contact Phase {{ $contact->contactPhase?->title ?: '-' }}
{{-- RIGHT INFO --}}
  • Address Line 1 {{ $contact->address1 ?: '-' }}
  • Address Line 2 {{ $contact->address2 ?: '-' }}
  • City {{ $contact->city ?: '-' }}
  • State {{ $contact->state ?: '-' }}
  • ZIP Code {{ $contact->zip ?: '-' }}
  • Mother Name {{ $contact->mother_name ?: '-' }}
  • Father Name {{ $contact->father_name ?: '-' }}
  • Emergency Contact Name {{ $contact->emergency_contact_name ?: '-' }}
  • Emergency Contact Phone {{ $contact->emergency_contact_phone ?: '-' }}
  • Marketing Source {{ $contact->marketingSource?->title ?: '-' }}
  • Marketing Detail {{ $contact->marketing_source_detail ?: '-' }}
  • @if($contact->location_id)
  • Location ID {{ $contact->location_id ?: '-' }}
  • @endif
  • Created At {{ $contact->created_at ? $contact->created_at->format('d M Y h:i A') : '-' }}
{{-- TAGS --}}
Assigned Tags
@if($contact->tags->count())
@foreach($contact->tags as $tag) {{ $tag->title }} @endforeach
@else No tags assigned. @endif
{{-- ADDITIONAL INFO --}}
Additional Information
{!! nl2br(e($contact->additional_info ?: 'No additional information available.')) !!}
{{-- MEMBERSHIP INTELLIGENCE & COLLECTIONS REPORTING DASHBOARD --}} @php $mr = $membershipReporting ?? []; $money = fn ($value) => '$'.number_format((float) ($value ?? 0), 2); $date = fn ($value) => $value ? \Carbon\Carbon::parse($value)->format('d M Y') : '-'; $datetime = fn ($value) => $value ? \Carbon\Carbon::parse($value)->format('d M Y h:i A') : '-'; $badgeClass = function ($status) { $status = strtolower((string) $status); return match (true) { str_contains($status, 'active'), str_contains($status, 'paid'), str_contains($status, 'success'), str_contains($status, 'healthy') => 'bg-success', str_contains($status, 'warning'), str_contains($status, 'due'), str_contains($status, 'pending') => 'bg-warning text-dark', str_contains($status, 'failed'), str_contains($status, 'past'), str_contains($status, 'cancel'), str_contains($status, 'risk') => 'bg-danger', default => 'bg-secondary', }; }; $statCards = [ ['Total Memberships', data_get($mr, 'overview.total_memberships', 0), 'ti ti-id-badge', 'bg-primary-soft'], ['Active Memberships', data_get($mr, 'overview.active_memberships', 0), 'ti ti-circle-check', 'bg-success-soft'], ['Cancelled Memberships', data_get($mr, 'overview.cancelled_memberships', 0), 'ti ti-circle-x', 'bg-danger-soft'], ['Expired Memberships', data_get($mr, 'overview.expired_memberships', 0), 'ti ti-calendar-x', 'bg-warning-soft'], ['Suspended Memberships', data_get($mr, 'overview.suspended_memberships', 0), 'ti ti-player-pause', 'bg-info-soft'], ['Total Subscriptions', data_get($mr, 'overview.total_subscriptions', 0), 'ti ti-repeat', 'bg-primary-soft'], ['Active Subscriptions', data_get($mr, 'overview.active_subscriptions', 0), 'ti ti-refresh', 'bg-success-soft'], ['Cancelled Subscriptions', data_get($mr, 'overview.cancelled_subscriptions', 0), 'ti ti-ban', 'bg-danger-soft'], ['Failed Subscriptions', data_get($mr, 'overview.failed_subscriptions', 0), 'ti ti-alert-triangle', 'bg-warning-soft'], ]; $financialCards = [ ['Total Program Value', $money(data_get($mr, 'financial.total_program_value'))], ['Total Discounts', $money(data_get($mr, 'financial.total_discounts'))], ['Total Down Payments', $money(data_get($mr, 'financial.total_down_payments'))], ['Total Amount Financed', $money(data_get($mr, 'financial.total_amount_financed'))], ['Total Amount Collected', $money(data_get($mr, 'financial.total_amount_collected'))], ['Remaining Balance', $money(data_get($mr, 'financial.remaining_balance'))], ['Outstanding Balance', $money(data_get($mr, 'financial.outstanding_balance'))], ]; $collectionCards = [ ['Paid Installments', data_get($mr, 'collections.paid_count', 0), $money(data_get($mr, 'collections.paid_amount')), 'bg-success'], ['Due Installments', data_get($mr, 'collections.due_count', 0), $money(data_get($mr, 'collections.due_amount')), 'bg-warning text-dark'], ['Upcoming Installments', data_get($mr, 'collections.upcoming_count', 0), $money(data_get($mr, 'collections.upcoming_amount')), 'bg-info'], ['Failed Installments', data_get($mr, 'collections.failed_count', 0), $money(data_get($mr, 'collections.failed_amount')), 'bg-danger'], ['Past Due Installments', data_get($mr, 'collections.past_due_count', 0), $money(data_get($mr, 'collections.past_due_amount')), 'bg-danger'], ]; @endphp

Membership Intelligence & Collections Dashboard

Contact-level reporting across all memberships, subscriptions, transactions, payment methods, and subscription logs.

{{ data_get($mr, 'risk.label', 'Healthy') }}
Contact Risk Indicator: {{ data_get($mr, 'risk.message', 'No membership risk data available.') }}
Contact Membership Overview
@foreach($statCards as [$label, $value, $icon, $class])

{{ $value }}

{{ $label }}

@endforeach
Financial Overview
@foreach($financialCards as [$label, $value])
{{ $label }}

{{ $value }}

@endforeach
Collections Dashboard
@foreach($collectionCards as [$label, $count, $amount, $class])
{{ $count }} installments
{{ $amount }}
{{ $label }}
@endforeach
Billing Status Breakdown
@foreach(data_get($mr, 'billing_breakdown', []) as $label => $billing)
{{ str_replace('_', ' ', $label) }}

{{ data_get($billing, 'count', 0) }}

{{ $money(data_get($billing, 'amount')) }}
@endforeach
Next Billing Report
@if(data_get($mr, 'next_billing.nearest')) @php($next = data_get($mr, 'next_billing.nearest'))
Membership
{{ data_get($next, 'membership_name') }}
Membership Type
{{ data_get($next, 'membership_type') }}
Subscription ID
{{ data_get($next, 'subscription_id') }}
Next Billing Date
{{ $date(data_get($next, 'date')) }}
Next Billing Amount
{{ $money(data_get($next, 'amount')) }}
Payment Frequency
{{ data_get($next, 'payment_frequency') }}
@else

No upcoming billing is currently scheduled.

@endif
Payment Health Report
Successful Payments
{{ data_get($mr, 'payment_health.successful_payments', 0) }}
Failed Payments
{{ data_get($mr, 'payment_health.failed_payments', 0) }}
Success Rate
{{ data_get($mr, 'payment_health.success_rate', 0) }}%
Failure Rate
{{ data_get($mr, 'payment_health.failure_rate', 0) }}%
Last Successful Payment
{{ $datetime(data_get($mr, 'payment_health.last_successful_payment')) }}
Last Failed Payment
{{ $datetime(data_get($mr, 'payment_health.last_failed_payment')) }}
Retry Attempts
{{ data_get($mr, 'payment_health.total_retry_attempts', 0) }}
Failed Amount
{{ $money(data_get($mr, 'payment_health.total_failed_amount')) }}
Next 5 Upcoming Payments
@forelse(data_get($mr, 'next_billing.upcoming', []) as $payment) @empty @endforelse
MembershipTypeSubscriptionDateAmountFrequency
{{ data_get($payment, 'membership_name') }} {{ data_get($payment, 'membership_type') }} {{ data_get($payment, 'subscription_id') }} {{ $date(data_get($payment, 'date')) }} {{ $money(data_get($payment, 'amount')) }} {{ data_get($payment, 'payment_frequency') }}
No upcoming payments found.
Payment Method Report
Active Cards

{{ data_get($mr, 'payment_methods.active_cards', 0) }}

Expired Cards

{{ data_get($mr, 'payment_methods.expired_cards', 0) }}

Default Card

{{ data_get($mr, 'payment_methods.default_card.card_brand', '-') }} {{ data_get($mr, 'payment_methods.default_card.last_four') ? '•••• '.data_get($mr, 'payment_methods.default_card.last_four') : '' }}

@forelse(data_get($mr, 'payment_methods.cards', []) as $card) @empty @endforelse
Card BrandLast FourExpiry DateStatusDefault
{{ data_get($card, 'method.card_brand', '-') }}{{ data_get($card, 'method.last_four', '-') }}{{ data_get($card, 'expiry_label') }}{{ data_get($card, 'is_expired') ? 'Expired' : data_get($card, 'method.status', 'Active') }}{{ data_get($card, 'method.is_default') ? 'Yes' : 'No' }}
No payment methods found.
Rows highlighted yellow indicate cards expiring within the next 30 days.
Membership Breakdown
@forelse(data_get($mr, 'membership_rows', []) as $row) @empty@endforelse
MembershipMembership TypeStatusPayment FrequencyStart DateEnd DateProgram AmountAmount FinancedPaid AmountRemaining BalanceInstallmentsPaidRemainingNext Billing
{{ data_get($row, 'name') }}{{ data_get($row, 'type') }}{{ data_get($row, 'status') }}{{ data_get($row, 'payment_frequency') }}{{ $date(data_get($row, 'start_date')) }}{{ $date(data_get($row, 'end_date')) }}{{ $money(data_get($row, 'program_amount')) }}{{ $money(data_get($row, 'amount_financed')) }}{{ $money(data_get($row, 'paid_amount')) }}{{ $money(data_get($row, 'remaining_balance')) }}{{ data_get($row, 'installments') }}{{ data_get($row, 'paid_installments') }}{{ data_get($row, 'remaining_installments') }}{{ $date(data_get($row, 'next_billing_date')) }}
No memberships found.
Subscription Breakdown
@forelse(data_get($mr, 'subscription_rows', []) as $row) @empty@endforelse
MembershipSubscription IDStatusAmountNext Run DateLast Run DateBilled CyclesFailed CyclesRetry CountAuto Retry
{{ data_get($row, 'membership_name') }}{{ data_get($row, 'subscription_id') }}{{ data_get($row, 'status') }}{{ $money(data_get($row, 'amount')) }}{{ $date(data_get($row, 'next_run_date')) }}{{ $datetime(data_get($row, 'last_run_date')) }}{{ data_get($row, 'billed_cycles') }}{{ data_get($row, 'failed_cycles') }}{{ data_get($row, 'retry_count') }}{{ data_get($row, 'auto_retry_enabled') ? 'Yes' : 'No' }}
No subscriptions found.
Past Due Report
@forelse(data_get($mr, 'past_due_rows', []) as $row) @empty@endforelse
MembershipMembership TypeSubscription IDDue DateDays LateAmount DueOutstanding Amount
{{ data_get($row, 'membership_name') }}{{ data_get($row, 'membership_type') }}{{ data_get($row, 'subscription_id') }}{{ $date(data_get($row, 'due_date')) }}{{ data_get($row, 'days_late') }}{{ $money(data_get($row, 'amount_due')) }}{{ $money(data_get($row, 'outstanding_amount')) }}
No past due payments found.
Failed Payment Report
@forelse(data_get($mr, 'failed_payment_rows', []) as $row) @empty@endforelse
DateMembershipSubscriptionAmountFailure ReasonRetry CountNext Retry Date
{{ $datetime(data_get($row, 'date')) }}{{ data_get($row, 'membership_name') }}{{ data_get($row, 'subscription_id') }}{{ $money(data_get($row, 'amount')) }}{{ data_get($row, 'failure_reason') }}{{ data_get($row, 'retry_count') }}{{ $date(data_get($row, 'next_retry_date')) }}
No failed payments found.
Collection Progress Report
@forelse(data_get($mr, 'collection_progress', []) as $row)
{{ data_get($row, 'name') }}{{ data_get($row, 'collection_percent') }}%
{{ data_get($row, 'paid_installments') }} paid / {{ data_get($row, 'installments') }} total installments; {{ data_get($row, 'remaining_installments') }} remaining
@empty
No collection progress data found.
@endforelse
Recent Payment History
@forelse(data_get($mr, 'payment_history', []) as $transaction) @php($m = $transaction->getRelation('reportingMembership')) @empty@endforelse
DateMembershipTransaction TypeAmountStatusTransaction IDResponse Code
{{ $datetime($transaction->paid_at ?? $transaction->created_at) }}{{ $m->membership_label ?: $m->membershipType?->membership_name ?: 'Membership #'.$m->id }}{{ ucwords(str_replace('_', ' ', $transaction->transaction_type ?: '-')) }}{{ $money($transaction->amount) }}{{ $transaction->status ?: '-' }}{{ $transaction->transaction_id ?: '-' }}{{ $transaction->response_code ?: '-' }}
No payment history found.
Membership Timeline
@forelse(data_get($mr, 'timeline', []) as $item)
{{ data_get($item, 'type') }}

{{ data_get($item, 'description') }}

{{ $datetime(data_get($item, 'date')) }}
@empty

No membership timeline entries found.

@endforelse
Contact Revenue Summary
Lifetime Revenue
{{ $money(data_get($mr, 'revenue_summary.lifetime')) }}
Revenue This Year
{{ $money(data_get($mr, 'revenue_summary.this_year')) }}
Revenue This Month
{{ $money(data_get($mr, 'revenue_summary.this_month')) }}
Revenue Last 30 Days
{{ $money(data_get($mr, 'revenue_summary.last_30_days')) }}
Membership Analytics
  • Most Recent Membership{{ data_get($mr, 'analytics.most_recent_membership.membership_label') ?: data_get($mr, 'analytics.most_recent_membership.membershipType.membership_name', '-') }}
  • Oldest Membership{{ data_get($mr, 'analytics.oldest_membership.membership_label') ?: data_get($mr, 'analytics.oldest_membership.membershipType.membership_name', '-') }}
  • Longest Running Membership{{ data_get($mr, 'analytics.longest_running_membership.membership_label') ?: data_get($mr, 'analytics.longest_running_membership.membershipType.membership_name', '-') }}
  • Highest Value Membership{{ data_get($mr, 'analytics.highest_value_membership.membership_label') ?: data_get($mr, 'analytics.highest_value_membership.membershipType.membership_name', '-') }}
  • Highest Outstanding Balance{{ data_get($mr, 'analytics.highest_outstanding_membership.name', '-') }} ({{ $money(data_get($mr, 'analytics.highest_outstanding_membership.remaining_balance')) }})
{{-- COMMON EDIT MODAL --}} @push('scripts') @endpush