@extends('layouts.admin') @section('page-title') Profil de {{ $user->prenom }} @endsection @section('page-subtitle') Détails et informations personnelles @endsection @section('styles') @endsection @section('content')
is_active ? 'checked' : '' }}>

Informations personnelles

{{ strtoupper(substr($worker->prenom ?? '', 0, 1)) }}

{{ $worker->prenom }}

{{ $worker->email }}
Inscrit le {{ \Carbon\Carbon::parse($worker->created_at)->format('d/m/Y') }}
@php $langLabels = [ 'fr' => 'Français', 'ru' => 'Russe', 'ro' => 'Roumain' ]; @endphp {{ $langLabels[$worker->language] ?? 'Non défini' }}
@php $statusLabels = [ 'micro' => 'Micro', 'salarie' => 'Salarié', ]; @endphp Statut: {{ $statusLabels[$worker->employment_status ?? 'micro'] ?? 'Micro' }}
@php $statusKey = $monthlyStatusKey ?? 'empty'; $statusLabel = $monthlyStatusLabel ?? 'Aucune déclaration'; $statusIcon = [ 'validated' => 'fa-check-circle', 'pending' => 'fa-hourglass-half', 'empty' => 'fa-circle-notch' ][$statusKey] ?? 'fa-hourglass-half'; @endphp
{{ $statusLabel }} @if($statusKey === 'validated' && isset($validationDate) && $validationDate) [{{ $validationDate }}] @endif
@if($statusKey === 'validated') @endif
@if($statusKey === 'validated')
@endif
@include('admin.workers.partials.declarations-card', [ 'worker' => $worker, 'packageDeclarations' => $packageDeclarations ?? collect(), 'hourlyDeclarations' => $hourlyDeclarations ?? collect(), 'monthParam' => $monthParam ?? date('Y-m'), 'totalForfait' => $totalForfait ?? 0, 'totalHoraire' => $totalHoraire ?? 0, 'totalMonth' => $totalMonth ?? 0, 'totalHourlyMinutes' => $totalHourlyMinutes ?? 0, 'monthlyStatusKey' => $monthlyStatusKey ?? 'empty', 'monthlyStatusLabel' => $monthlyStatusLabel ?? 'Aucune déclaration' ])
@include('admin.workers.partials.month-indicators-card', [ 'packageDeclarations' => $packageDeclarations ?? collect(), 'hourlyDeclarations' => $hourlyDeclarations ?? collect(), 'eventDeclarations' => $eventDeclarations ?? collect(), 'totalForfait' => $totalForfait ?? 0, 'totalHoraire' => $totalHoraire ?? 0, 'totalEvent' => $totalEvent ?? 0, 'totalMonth' => $totalMonth ?? 0, 'totalHourlyMinutes' => $totalHourlyMinutes ?? 0 ])
@include('admin.workers.partials.month-summary-card', [ 'packageDeclarations' => $packageDeclarations ?? collect(), 'hourlyDeclarations' => $hourlyDeclarations ?? collect(), 'totalForfait' => $totalForfait ?? 0, 'totalHoraire' => $totalHoraire ?? 0, 'totalMonth' => $totalMonth ?? 0, 'totalHourlyMinutes' => $totalHourlyMinutes ?? 0, ])

Plannings

@if(isset($contracts) && $contracts->count() > 0) @foreach($contracts as $contract)

{{ $contract['client']['name'] }}

{{ ucfirst($contract['client']['type']) }}
@php $billing = $contract['billing'] ?? null; @endphp @if($billing && ($billing['type'] ?? null) === 'package' && !is_null($billing['monthly_package_amount'] ?? null)) Forfait {{ number_format($billing['monthly_package_amount'], 0, ',', ' ') }}€/mois @elseif($billing && ($billing['type'] ?? null) === 'hourly' && !is_null($billing['hourly_rate'] ?? null)) À l'heure {{ number_format($billing['hourly_rate'], 0, ',', ' ') }}€/h @endif
@php // Adresse client/contrat (préférence pour full_address de client_addresses) // Dans l'agrégat $contracts, l'adresse est portée au niveau de chaque planning // Utiliser d'abord l'adresse du contrat si présente, sinon celle du 1er planning $addr = $contract['address'] ?? ($contract['schedules'][0]['address'] ?? null) ?? ($contract['client']['address'] ?? null); if (is_array($addr)) { $addr = (object) $addr; } $street = trim($addr->street ?? ''); $postal = trim($addr->postal_code ?? ''); $city = trim($addr->city ?? ''); // 1) full_address si disponible if (!empty($addr->full_address)) { $mainAddress = $addr->full_address; } else { // 2) Sinon, compose rue + code postal + ville $mainParts = []; if ($street !== '') { $mainParts[] = $street; } $cityLine = trim(($postal !== '' ? $postal . ' ' : '') . $city); if ($cityLine !== '') { $mainParts[] = $cityLine; } $mainAddress = count($mainParts) > 0 ? implode(', ', $mainParts) : ($addr->formatted_address ?? ($addr->short_address ?? 'Adresse non définie')); } @endphp
{{ $mainAddress }}
@php // Aggregated weekly planning (moved here from header) $dayNamesEn = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday']; $frToEn = [ 'lundi' => 'monday', 'mardi' => 'tuesday', 'mercredi' => 'wednesday', 'jeudi' => 'thursday', 'vendredi' => 'friday', 'samedi' => 'saturday', 'dimanche' => 'sunday' ]; $aggregatedDays = array_fill_keys($dayNamesEn, []); $aggregatedFlags = array_fill_keys($dayNamesEn, ['morning'=>false,'evening'=>false]); $aggregatedPresence = array_fill_keys($dayNamesEn, false); foreach(($contract['schedules'] ?? []) as $sch){ if(isset($sch['day_of_week'])){ $dayKey = strtolower($sch['day_of_week']); if(in_array($dayKey, $dayNamesEn, true)){ $aggregatedPresence[$dayKey] = true; $tasksRaw = $sch['tasks'] ?? []; $tasksArr = is_string($tasksRaw) ? (json_decode($tasksRaw, true) ?: []) : ($tasksRaw ?? []); if(is_array($tasksArr)){ $aggregatedDays[$dayKey] = array_values(array_unique(array_merge($aggregatedDays[$dayKey], $tasksArr))); } $startTime = $sch['start_time'] ?? null; $endTime = $sch['end_time'] ?? null; if($startTime){ $aggregatedFlags[$dayKey]['morning'] = $aggregatedFlags[$dayKey]['morning'] || (substr($startTime,0,2) <= '14'); } if($endTime){ $aggregatedFlags[$dayKey]['evening'] = $aggregatedFlags[$dayKey]['evening'] || (substr($endTime,0,2) >= '18'); } if(!$startTime && !$endTime && !empty($tasksArr)){ $aggregatedFlags[$dayKey]['morning'] = true; } } } $dc = is_string($sch['days_config'] ?? null) ? json_decode($sch['days_config'], true) : ($sch['days_config'] ?? []); if(is_array($dc) && !empty($dc)){ foreach($dc as $k=>$v){ $key = in_array($k, $dayNamesEn, true) ? $k : ($frToEn[$k] ?? null); if($key){ $aggregatedPresence[$key] = true; $tasks = $v['tasks'] ?? []; if(is_array($tasks)){ $aggregatedDays[$key] = array_values(array_unique(array_merge($aggregatedDays[$key], $tasks))); } if(isset($v['morning'])) { $aggregatedFlags[$key]['morning'] = $aggregatedFlags[$key]['morning'] || (bool)$v['morning']; } if(isset($v['evening'])) { $aggregatedFlags[$key]['evening'] = $aggregatedFlags[$key]['evening'] || (bool)$v['evening']; } } } } } $dayShort = ['monday'=>'Lu','tuesday'=>'Ma','wednesday'=>'Me','thursday'=>'Je','friday'=>'Ve','saturday'=>'Sa','sunday'=>'Di']; @endphp
@foreach($dayNamesEn as $dkey) @php $tasks = $aggregatedDays[$dkey] ?? []; $hasTasks = is_array($tasks) && count($tasks) > 0; $hasAnySchedule = ($aggregatedFlags[$dkey]['morning'] ?? false) || ($aggregatedFlags[$dkey]['evening'] ?? false) || ($aggregatedPresence[$dkey] ?? false); $hasDay = $hasTasks || $hasAnySchedule; $hasCleaning = $hasTasks ? (collect($tasks)->contains(fn($t)=>str_contains(strtolower($t),'nettoyage')||str_contains(strtolower($t),'ménage')||str_contains(strtolower($t),'cleaning')||str_contains(strtolower($t),'menage'))) : $hasAnySchedule; $hasDish = $hasTasks && collect($tasks)->contains(fn($t)=>str_contains(strtolower($t),'vaisselle')||str_contains(strtolower($t),'dish')||str_contains(strtolower($t),'couvert')); @endphp
{{ $dayShort[$dkey] }}
@if($hasDay)
@if($hasCleaning)
@php $isMorning = (bool)($aggregatedFlags[$dkey]['morning'] ?? false); $isEvening = (bool)($aggregatedFlags[$dkey]['evening'] ?? false); @endphp @if($isMorning || $isEvening)
@if($isMorning)
@endif @if($isEvening)
@endif
@endif
@endif @if($hasDish)
@endif
@else
@endif
@endforeach
@php // Équipe récupérée depuis la DB (via Controller -> assignedUsers) $team = $contract['team'] ?? []; @endphp
@php // Calcul du montant par personne pour les contrats au forfait $teamCount = is_array($team) ? count($team) : (method_exists($team, 'count') ? $team->count() : 0); $perPerson = null; $billing = $contract['billing'] ?? null; if ($billing && ($billing['type'] ?? null) === 'package') { // On privilégie total_amount si disponible (montant facturé avec marge), sinon monthly_package_amount $contractTotal = $billing['total_amount'] ?? ($billing['monthly_package_amount'] ?? null); if (is_numeric($contractTotal) && $teamCount > 0) { $perPerson = ((float)$contractTotal) / $teamCount; } } @endphp @forelse($team as $w) @php $wid = is_array($w) ? ($w['id'] ?? null) : ($w->id ?? null); $wname = is_array($w) ? ($w['prenom'] ?? ($w['name'] ?? '')) : ($w->prenom ?? ($w->name ?? '')); @endphp
{{ $wname }}
@if(!is_null($perPerson)) |
{{ number_format($perPerson, 0, ',', ' ') }}€/mois
@endif
@empty
Non assigné
@endforelse
@endforeach @else

Aucun client assigné

@endif

Paramètres à venir...