@extends('layouts.app') @section('content') @php $winnerVariantId = (int) ($test->winner_variant_id ?? 0); $finalVariant = $test->variants->firstWhere('variant_type', 'final'); $testVariants = $test->variants->where('variant_type', 'test')->values(); $hasWinner = $winnerVariantId > 0; $canLaunchFinal = $hasWinner && $finalVariant && !$finalVariant->campaign_send_id; $winnerLabel = $test->winnerVariant?->variant_name ?: (\App\Support\AbTestingSupport::winnerMetrics()[$test->winner_metric] ?? $test->winner_metric); $startSummary = $test->scheduled_at ? \App\Support\CampaignBuilderSupport::scheduleSummary((string) $test->getRawOriginal('scheduled_at'), $test->scheduled_timezone) : 'Manual / instantaneo'; $cadenceSummary = \App\Support\AbTestingSupport::intervalSummary((int) $test->send_interval_value, (string) $test->send_interval_unit); $finalDelaySummary = \App\Support\AbTestingSupport::intervalSummary((int) $test->final_delay_value, (string) $test->final_delay_unit); $metrics = collect($variantMetrics); $sentTotal = (int) $metrics->sum('sent_count'); $failedTotal = (int) $metrics->sum('failed_count'); $skippedTotal = (int) $metrics->sum('skipped_count'); $opensTotal = (int) $metrics->sum('unique_opens'); $clicksTotal = (int) $metrics->sum('unique_clicks'); $unsubTotal = (int) $metrics->sum('unsubscribes'); $openRate = $sentTotal > 0 ? round(($opensTotal / $sentTotal) * 100, 2) : 0; $clickRate = $sentTotal > 0 ? round(($clicksTotal / $sentTotal) * 100, 2) : 0; $preflight = collect($launchReadiness); $readyDrafts = $preflight->filter(static fn ($row): bool => (bool) ($row['ready'] ?? false))->count(); $blockedVariants = $preflight->filter(static fn ($row): bool => !(bool) ($row['ready'] ?? false))->count(); $blockersTotal = (int) $preflight->sum(static fn ($row): int => count((array) ($row['blockers'] ?? []))); $includeLists = $test->audienceLists->filter(static fn ($list): bool => (string) $list->pivot->mode === 'include')->values(); $excludeLists = $test->audienceLists->filter(static fn ($list): bool => (string) $list->pivot->mode === 'exclude')->values(); $includeLabel = $includeLists->pluck('name')->take(3)->implode(', '); $excludeLabel = $excludeLists->pluck('name')->take(2)->implode(', '); if ($includeLists->count() > 3) { $includeLabel .= ' +' . ($includeLists->count() - 3); } if ($excludeLists->count() > 2) { $excludeLabel .= ' +' . ($excludeLists->count() - 2); } $includeLabel = $includeLabel !== '' ? $includeLabel : 'Sin include'; $excludeLabel = $excludeLabel !== '' ? $excludeLabel : 'Sin exclude'; $finalAudience = $finalVariant ? (int) $finalVariant->sample_size : max(0, (int) $test->source_audience_total - ((int) $test->variant_count * (int) $test->sample_size_per_variant)); $testRates = $testVariants ->map(static fn ($variant): int => (int) ($variant->campaign?->send_rate_per_minute ?? 0)) ->filter(static fn (int $rate): bool => $rate > 0) ->values(); $minSps = $testRates->isNotEmpty() ? (int) $testRates->min() : 0; $maxSps = $testRates->isNotEmpty() ? (int) $testRates->max() : 0; $avgSps = $testRates->isNotEmpty() ? round((float) $testRates->avg(), 1) : 0; @endphp
{{ $test->sourceCampaign?->name ?: 'Sin campana base' }} {{ $includeLabel }} {{ number_format((int) $test->source_audience_total) }} evaluados
{{ number_format($testVariants->count()) }} pruebas, {{ $finalVariant ? '1 final' : 'sin final' }}, {{ number_format($sentTotal) }} enviados.
| Variante | Subject / campana | Lista | Hora | SPS | Progreso | Opens | Clicks | Estado | Acciones |
|---|---|---|---|---|---|---|---|---|---|
|
$isFinal])>{{ $isFinal ? 'FINAL' : $variant->variant_key }}
{{ $variant->variant_name }}
@if ($isWinner)
Ganadora
@endif
{{ number_format((int) $variant->sample_size) }} contactos
|
@if ($variant->campaign) {{ $variant->campaign->name }} {{ $variant->campaign->subject ?: 'Sin subject' }} @if ($variant->campaign->preheader) {{ $variant->campaign->preheader }} @endif @else Sin campana @endif | @if ($variant->list) {{ $variant->list->name }} {{ number_format((int) $variant->list->active_contacts_count) }} activos @else Sin lista @endif |
{{ $scheduleLabel }}
{{ $scheduleMeta }}
{{ $scheduleDetail }}
@if ($scheduleLast !== '')
{{ $scheduleLast }}
@endif
|
@if ($sendRate > 0)
{{ number_format($sendRate) }}
emails/seg
@else
Sin rate
@endif
|
@if ($totalRecipients > 0 || $sentCount > 0)
{{ number_format($sentCount) }} / {{ number_format($totalRecipients) }}
@if ((int) $metrics['failed_count'] > 0 || (int) $metrics['skipped_count'] > 0)
{{ number_format((int) $metrics['failed_count']) }} fallidos / {{ number_format((int) $metrics['skipped_count']) }} omitidos
@endif
{{ ($readiness['ready'] ?? false) ? 'Listo para lanzar' : count($blockers) . ' bloqueos preflight' }}
@if ($blockers)
{{ $blockers[0] }}
@endif
@else
Sin envio
@endif
|
{{ $metrics['open_rate'] }}% {{ number_format((int) $metrics['unique_opens']) }} | {{ $metrics['click_rate'] }}% {{ number_format((int) $metrics['unique_clicks']) }} CTOR {{ $metrics['ctor_rate'] }}% | {{ $displayStatus }} @if ($latestSend) Send #{{ $latestSend->id }} @elseif ($variant->campaign_send_id) Send #{{ $variant->campaign_send_id }} @endif |