@extends('layouts.worker') @section('title', \App\Helpers\TranslationHelper::getUserTranslations()['translations']['my_schedules'] ?? 'Mes horaires') @php // Cache busting pour CSS aussi $cssVersion = filemtime(public_path('css/pages/worker/horaires.css')) ?: time(); // Le bouton Valider le mois n'est actif que si l'admin a validé au moins un élément $canValidateMonth = $canValidateMonth ?? ($adminHasValidated ?? false); $monthValidated = $monthValidated ?? false; $currentMonth = $currentMonth ?? ($selectedMonth ?? date('Y-m')); @endphp @push('styles') @endpush @section('content')
@php // Extraire l'année et le mois list($year, $month) = explode('-', $selectedMonth); $year = (int)$year; $month = (int)$month; // Mois précédent $prevMonth = $month > 1 ? $year . '-' . str_pad($month - 1, 2, '0', STR_PAD_LEFT) : ($year - 1) . '-12'; // Mois suivant $nextMonth = $month < 12 ? $year . '-' . str_pad($month + 1, 2, '0', STR_PAD_LEFT) : ($year + 1) . '-01'; // Vérifier si le mois suivant est dans le futur $currentYear = (int)date('Y'); $currentMonth = (int)date('m'); $isNextMonthDisabled = ($month == 12 && $year + 1 > $currentYear) || ($year > $currentYear || ($year == $currentYear && $month + 1 > $currentMonth)); // Formater le mois pour l'affichage // Récupérer les noms des mois dans la langue de l'utilisateur $translations = \App\Helpers\TranslationHelper::getUserTranslations()['translations']; $monthNames = []; // Vérifier si les traductions des mois existent if (isset($translations['months'])) { $monthNames = [ 1 => $translations['months']['january'] ?? 'janvier', 2 => $translations['months']['february'] ?? 'février', 3 => $translations['months']['march'] ?? 'mars', 4 => $translations['months']['april'] ?? 'avril', 5 => $translations['months']['may'] ?? 'mai', 6 => $translations['months']['june'] ?? 'juin', 7 => $translations['months']['july'] ?? 'juillet', 8 => $translations['months']['august'] ?? 'août', 9 => $translations['months']['september'] ?? 'septembre', 10 => $translations['months']['october'] ?? 'octobre', 11 => $translations['months']['november'] ?? 'novembre', 12 => $translations['months']['december'] ?? 'décembre' ]; } else { // Fallback en français si les traductions n'existent pas $monthNames = [ 1 => 'janvier', 2 => 'février', 3 => 'mars', 4 => 'avril', 5 => 'mai', 6 => 'juin', 7 => 'juillet', 8 => 'août', 9 => 'septembre', 10 => 'octobre', 11 => 'novembre', 12 => 'décembre' ]; } // Format du mois selon la langue $monthYearFormat = $translations['schedules']['month_year_format'] ?? '{month} {year}'; $displayMonth = ucfirst($monthNames[$month]); $displayMonth = str_replace('{month}', $displayMonth, $monthYearFormat); $displayMonth = str_replace('{year}', $year, $displayMonth); @endphp {{ $displayMonth }}
@php // Initialiser $miscItemsTotal s'il n'existe pas $miscItemsTotal = $miscItemsTotal ?? 0; $miscBadgeClass = 'amount-badge'; $miscBadgeClass .= $miscItemsTotal >= 0 ? ' positive' : ' negative'; $miscBadgeClass .= isset($allMiscItemsHidden) && $allMiscItemsHidden ? ' hidden' : ''; @endphp
{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['misc_items'] ?? 'Éléments divers' }} {{ number_format($miscItemsTotal, 2, ',', ' ') }} €
{{-- Message "divers validés" (masquage admin) --}} @if(isset($allMiscItemsHidden) && $allMiscItemsHidden)

{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['misc_items_validated'] ?? 'Divers validés par l\'administrateur' }}

@endif {{-- Conteneur toujours présent pour injection JS --}}
@if(!(isset($allMiscItemsHidden) && $allMiscItemsHidden) && isset($miscItems) && count($miscItems) > 0) @foreach($miscItems as $item)
{{ $item->is_deduction ? '-' : '+' }} {{ $item->title }} {{ number_format(abs($item->amount), 2, ',', ' ') }} €
@endforeach @endif
{{-- Message "aucun divers" (visible seulement si non masqué et liste vide) --}} @if(!(isset($allMiscItemsHidden) && $allMiscItemsHidden) && (!isset($miscItems) || count($miscItems) === 0))
{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['no_misc_items'] ?? 'Aucun élément divers pour ce mois.' }}
{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['no_misc_items_hint'] ?? 'Vos éléments divers s’afficheront ici lorsqu’ils seront ajoutés.' }}
@endif
@php // Initialiser $monthlyRevenue s'il n'existe pas $monthlyRevenue = $monthlyRevenue ?? 0; $badgeClass = 'amount-badge'; $badgeClass .= $monthlyRevenue >= 0 ? ' positive' : ' negative'; $badgeClass .= isset($allSchedulesHidden) && $allSchedulesHidden ? ' hidden' : ''; @endphp
{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['schedules_recorded'] ?? 'Horaires enregistrés' }} {{ number_format($monthlyRevenue, 2, ',', ' ') }} €
@if(isset($allSchedulesHidden) && $allSchedulesHidden)

{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['all_hidden_schedules'] ?? 'Horaires validés par l\'administrateur' }}

@else
{{-- Template pour les cards d'horaires (caché, cloné par JS) --}} {{-- Template pour un slot d'horaire --}} @if(!isset($schedules) || (is_array($schedules) && count($schedules) === 0) || (is_object($schedules) && method_exists($schedules, 'count') && $schedules->count() === 0))
{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['no_schedules_this_month'] ?? 'Aucun horaire enregistré pour ce mois.' }}
{{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['no_schedules_hint'] ?? 'Vos horaires s’afficheront ici lorsqu’ils seront ajoutés.' }}
@endif @endif
@if(!(isset($allSchedulesHidden) && $allSchedulesHidden && isset($allMiscItemsHidden) && $allMiscItemsHidden))
@php $totalGeneral = $monthlyRevenue + $miscItemsTotal; @endphp {{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['month_total'] ?? 'Total du mois' }}: {{ number_format($totalGeneral, 2, ',', ' ') }} € @if($monthValidated)
Mois validé
Voir les factures
@else @include('worker.partials.options_dropdown', [ 'buttonId' => 'options-button', 'dropdownId' => 'options-dropdown', 'canValidateMonth' => $canValidateMonth, 'forceDisableValidate' => false, ]) @endif
@else
@php $totalGeneral = $monthlyRevenue + $miscItemsTotal; @endphp {{ \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['month_total'] ?? 'Total du mois' }}: {{ number_format($totalGeneral, 2, ',', ' ') }} € @if($monthValidated)
Mois validé
Voir les factures
@else @include('worker.partials.options_dropdown', [ 'buttonId' => 'options-button-hidden', 'dropdownId' => 'options-dropdown-hidden', 'canValidateMonth' => $canValidateMonth, 'forceDisableValidate' => true, ]) @endif
@endif @php $validationTemplate = \App\Helpers\TranslationHelper::getUserTranslations()['translations']['schedules']['validate_month_modal_text'] ?? 'Confirmez-vous la validation du mois :month ? Cette action générera vos factures et sera irréversible.'; try { $monthLabel = \Carbon\Carbon::createFromFormat('Y-m', $selectedMonth)->translatedFormat('F Y'); } catch (\Exception $e) { $monthLabel = $selectedMonth; } $validationDefault = str_replace(':month', $monthLabel, $validationTemplate); @endphp @endsection @php // Préparer les données utilisateur pour JavaScript $userTranslations = \App\Helpers\TranslationHelper::getUserTranslations(); $userLanguage = $userTranslations['language'] ?? 'fr'; $userTranslations['translations']['_language'] = $userLanguage; @endphp
toArray() : []), JSON_HEX_APOS | JSON_HEX_QUOT) }}' data-addresses='{{ json_encode(is_array($addresses) ? $addresses : (is_object($addresses) && method_exists($addresses, 'toArray') ? $addresses->toArray() : []), JSON_HEX_APOS | JSON_HEX_QUOT) }}' data-all-schedules-hidden="{{ isset($allSchedulesHidden) && $allSchedulesHidden ? 'true' : 'false' }}" data-all-misc-items-hidden="{{ isset($allMiscItemsHidden) && $allMiscItemsHidden ? 'true' : 'false' }}" data-can-validate-month="{{ $canValidateMonth ? 'true' : 'false' }}" data-month-validated="{{ $monthValidated ? 'true' : 'false' }}" class="hidden">
@php // Cache busting : FORCE un nouveau timestamp à chaque chargement pour éviter le cache navigateur $cacheVersion = time(); @endphp @push('scripts') @endpush