@if(isset($contactBillingSummary))
Contact Billing Summary
Total Outstanding
{{ currency_symbol() }}{{ number_format($contactBillingSummary['total_outstanding_balance'], 2) }}
Max Days Past Due
{{ $contactBillingSummary['max_days_past_due'] }}
Current
{{ $contactBillingSummary['current_memberships'] }}
Past Due
{{ $contactBillingSummary['past_due_memberships'] }}
Unpaid
{{ $contactBillingSummary['unpaid_memberships'] }}
Former Members
{{ $contactBillingSummary['former_memberships'] }}
@endif @if(isset($billingSummary))
Membership Billing Information
@if($contact->memberships->count() > 1) @endif
@if($billingSummary['membership']) {{ str($billingSummary['payment_status'])->headline() }} @endif
Membership Status{{ str($billingSummary['membership_status'])->headline() }}
Payment Status{{ str($billingSummary['payment_status'])->headline() }}
Membership Outstanding Balance{{ currency_symbol() }}{{ number_format($billingSummary['outstanding_balance'], 2) }}
Days Past Due{{ $billingSummary['days_past_due'] }}
Last Payment Date{{ $billingSummary['last_payment_date'] ? \Carbon\Carbon::parse($billingSummary['last_payment_date'])->format('d M Y') : '-' }}
Next Billing Date{{ $billingSummary['next_billing_date'] ? \Carbon\Carbon::parse($billingSummary['next_billing_date'])->format('d M Y') : '-' }}
Next Payment Due Date{{ $billingSummary['next_payment_due_date'] ? \Carbon\Carbon::parse($billingSummary['next_payment_due_date'])->format('d M Y') : '-' }}
@if($billingSummary['membership'] && $billingSummary['outstanding_balance'] > 0)
@csrf
@endif @if($billingSummary['installments']->isNotEmpty())
@foreach($billingSummary['installments'] as $installment) @endforeach
InstallmentDue DateOriginalAdjustments (+)Written Off (-)OutstandingAdjustment(+) / Write-off (-)
#{{ $installment->installment_number }}{{ $installment->due_date->format('d M Y') }}{{ currency_symbol() }}{{ number_format($installment->amount, 2) }}{{ currency_symbol() }}{{ number_format($installment->adjustment_amount, 2) }}{{ currency_symbol() }}{{ number_format($installment->written_off_amount, 2) }}{{ currency_symbol() }}{{ number_format($installment->outstanding_amount, 2) }}
@csrf @method('PATCH')
@endif
@endif
{{-- 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 = function ($value) { if (empty($value)) { return '-'; } if ($value === 'Never Ends') { return 'Never Ends'; } return \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 @if($contact->memberships()->exists())

Membership / Recurring Payments Dashboard

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

Add Membership
Contact Risk Indicator: {{ data_get($mr, 'risk.message', 'No membership risk data available.') }}
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')) }}
Membership Breakdown
@foreach(data_get($mr, 'membership_rows', []) as $row) @endforeach
Membership Status Payment Frequency Start Date End Date Program Amount Amount Financed Paid Amount Remaining Balance Installments Paid Remaining Next Billing Actions
{{ data_get($row, 'name') }} (#{{ data_get($row, 'membership.id') }}) {{ 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')) }}
@admin
Subscription Breakdown
@foreach(data_get($mr, 'subscription_rows', []) as $row) @endforeach
Membership Subscription ID Status Amount Next Run Date Last Run Date Billed Cycles Failed Cycles Retry Count Auto 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' }}
@endadmin
Next 5 Upcoming Payments
@foreach(data_get($mr, 'next_billing.upcoming', []) as $payment) @endforeach
Membership Type Subscription Date Amount Frequency
{{ 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') }}