Luca Parisio 3 месяцев назад
Родитель
Сommit
b4117d4d06

+ 19 - 16
app/Http/Livewire/AbsenceReport.php

@@ -9,6 +9,8 @@ class AbsenceReport extends Component
 
     public $records;
 
+    public $year;
+
     public function mount()
     {
         setlocale(LC_ALL, 'it_IT');
@@ -20,9 +22,16 @@ class AbsenceReport extends Component
 
         $this->records = [];
 
-        $to = date("Y-m-d 23:59:59");
-        
-        $calendars = \App\Models\Calendar::where('from', '<=', $to)->orderBy('from')->get();
+        // $to = date("Y-m-d 23:59:59");
+        // $calendars = \App\Models\Calendar::where('from', '<=', $to)->orderBy('from')->get();
+
+        $month = date("n");
+        $this->year = ($month >= 9) ? date("Y") : date("Y") - 1;
+
+        $start = date("Y-m-d H:i:s", mktime(0, 0, 0, 9, 1, $this->year));
+        $end   = date("Y-m-d 23:59:59");
+
+        $calendars = \App\Models\Calendar::whereBetween('from', [$start, $end])->orderBy('from')->get();
 
         foreach ($calendars as $calendar) {
 
@@ -53,27 +62,21 @@ class AbsenceReport extends Component
             foreach ($members as $member) {
 
                 $presence = \App\Models\Presence::where('member_id', $member->member->id)->where('calendar_id', $calendar->id)->first();
-                
-                if (!in_array($member->member->id, $presences)) 
-                {
-                    if (!in_array($member->member->id, $presences_annullate)) 
-                    {
-                        if (array_key_exists($member->member->id, $this->records))
-                        {
+
+                if (!in_array($member->member->id, $presences)) {
+                    if (!in_array($member->member->id, $presences_annullate)) {
+                        if (array_key_exists($member->member->id, $this->records)) {
                             $this->records[$member->member->id]['total'] += 1;
-                            $this->records[$member->member->id]['date'] .= ", " . date("d/m/Y", strtotime($calendar->from));
-                        }
-                        else
-                            $this->records[$member->member->id] = array("last_name" => $member->member->last_name, "first_name" => $member->member->first_name, "course" => $calendar->name, "total" => 1, "date" => date("d/m/Y", strtotime($calendar->from)));
+                            $this->records[$member->member->id]['date'] .= " - " . date("d/m", strtotime($calendar->from));
+                        } else
+                            $this->records[$member->member->id] = array("last_name" => $member->member->last_name, "first_name" => $member->member->first_name, "course" => $calendar->name, "total" => 1, "date" => date("d/m", strtotime($calendar->from)));
                     }
                 }
             }
-            
         }
 
         array_multisort(array_column($this->records, 'total'), SORT_DESC, $this->records);
 
         return view('livewire.absence_report');
     }
-
 }

+ 55 - 13
app/Http/Livewire/Presence.php

@@ -48,7 +48,7 @@ class Presence extends Component
         $this->members = \App\Models\Member::select(['id', 'first_name', 'last_name', 'fiscal_code'])->orderBy('last_name')->orderBy('first_name')->get();
         $this->note = $this->calendar->note;
         $this->courts = \App\Models\Court::select('*')->where('enabled', true)->get();
-        $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->get();
+        $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->orderBy('name', 'asc')->get();
         $this->motivations = \App\Models\Motivation::select('*')->where('enabled', true)->where('type', 'del')->get();
         $this->motivations_add = \App\Models\Motivation::select('*')->where('enabled', true)->where('type', 'add')->get();
         $this->save_court_id = 0;
@@ -178,6 +178,7 @@ class Presence extends Component
         $status = 0;
         $court = '';
         $instructor = '';
+        $additional_instructor = '';
         $notes = '';
 
         $has_presence = \App\Models\Presence::where('calendar_id', $this->calendar->id)->where('member_id', $member->id)->first();
@@ -188,12 +189,13 @@ class Presence extends Component
                 $motivation = \App\Models\Motivation::findOrFail($has_presence->motivation_id)->name;
             }
             $status = $has_presence->status;
+            $instructor = \App\Models\User::findOrFail($has_presence->user_id)->name;
 
             if ($has_presence->court_id > 0) {
                 $court = \App\Models\Court::findOrFail($has_presence->court_id)->name;
             }
-            if ($has_presence->instructor_id > 0) {
-                $instructor = \App\Models\User::findOrFail($has_presence->instructor_id)->name;
+            if ($has_presence->instructor_id > 0 && $has_presence->instructor_id !== $has_presence->user_id) {
+                $additional_instructor = \App\Models\User::findOrFail($has_presence->instructor_id)->name;
             }
             if (!is_null($has_presence->notes)) {
                 $notes = $has_presence->notes;
@@ -216,6 +218,7 @@ class Presence extends Component
             'motivation' => $motivation,
             'court' => $court,
             'instructor' => $instructor,
+            'additional_instructor' => $additional_instructor,
             'notes' => $notes,
         );
     }
@@ -239,31 +242,70 @@ class Presence extends Component
             $this->calendar->motivation_manual_id = $this->motivation_manual_id;
         $this->calendar->save();
 
-        $x = \App\Models\Presence::where('calendar_id', $this->calendar->id)->where('user_id', \Auth::user()->id)->where('status', '<>', 99)->first();
-        $mid = null;
-        if ($x) {
-            $mid = $x->motivation_id;
-            $x->delete();
-        }
+        // $x = \App\Models\Presence::where('calendar_id', $this->calendar->id)->where('user_id', \Auth::user()->id)->where('status', '<>', 99)->first();
+        // $mid = null;
+        // if ($x) {
+        //     $mid = $x->motivation_id;
+        //     $x->delete();
+        // }
+
+        // Mappa degli ultimi motivation_id per ogni member_id dell'utente e calendario correnti
+        $userId     = \Auth::user()->id;
+        $calendarId = $this->calendar->id;
+        $lastEditData = \App\Models\Presence::query()
+            ->select('member_id', 'motivation_id')
+            ->where('calendar_id', $calendarId)
+            ->where('user_id', $userId)
+            ->where('status', '<>', 99)
+            ->whereIn('id', function ($q) use ($calendarId, $userId) {
+                $q->selectRaw('MAX(id)')
+                    ->from('presences')
+                    ->where('calendar_id', $calendarId)
+                    ->where('user_id', $userId)
+                    ->where('status', '<>', 99)
+                    ->groupBy('member_id');
+            })
+            ->get()
+            ->keyBy('member_id')   // -> [member_id => (obj con motivation_id)]
+            ->map(fn($row) => $row->motivation_id)
+            ->toArray();
+
+        // Elimino tutti i dati correnti che devono essere sostituiti
+        \App\Models\Presence::query()
+            ->where('calendar_id', $calendarId)
+            ->where('user_id', $userId)
+            ->where('status', '<>', 99)
+            ->delete();
+
+        // Ricreo le presenze per ogni membro contenuto in $ids
         foreach ($ids as $id) {
             $p = new \App\Models\Presence();
             $p->member_id = $id;
-            $p->calendar_id = $this->calendar->id;
-            $p->motivation_id = $mid;
-            $p->user_id = \Auth::user()->id;
+            $p->calendar_id = $calendarId;
+
+            // Se per quel membro esisteva un motivation_id, lo riuso, altrimenti lo lascio null
+            $p->motivation_id = $lastEditData[$id] ?? null;
+            $p->user_id = $userId;
             $p->status = 0;
+
+            // Salvo eventuale court_id (se presente e maggiore di 0)
             if ($this->save_court_id > 0) {
                 $p->court_id = $this->save_court_id;
             }
+
+            // Salvo eventuale instructor_id (se presente e maggiore di 0)
             if ($this->save_instructor_id > 0) {
                 $p->instructor_id = $this->save_instructor_id;
             }
+
+            // Salvo eventuali note (se non vuote)
             if ($this->save_notes != '') {
                 $p->notes = $this->save_notes;
             }
 
             $p->save();
         }
+
         $this->emit('setSaving');
     }
 
@@ -406,7 +448,7 @@ class Presence extends Component
         ]);
 
         $this->instructor_id = $user->id;
-        $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->get();
+        $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->orderBy('name', 'asc')->get();
         $this->emit('saved');
     }
 

+ 97 - 16
app/Http/Livewire/PresenceReport.php

@@ -37,11 +37,12 @@ class PresenceReport extends Component
     public $to;
     public $court_id;
     public $instructor_id;
+    public $search;
 
     public function mount()
     {
         $this->courts = \App\Models\Court::select('*')->where('enabled', true)->get();
-        $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->get();
+        $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->orderBy('name', 'asc')->get();
         $this->motivations = \App\Models\Motivation::select('*')->where('enabled', true)->where('type', 'del')->get();
 
         $this->from = "00:00:00";
@@ -66,14 +67,45 @@ class PresenceReport extends Component
         foreach ($calendars as $calendar) {
 
             $presences = \App\Models\Presence::where('calendar_id', $calendar->id)->where('status', '<>', 99);
-            if (!is_null($this->court_id)) {
-                $presences = $presences->where('court_id', $this->court_id);
+            $presences_annullate = \App\Models\Presence::where('calendar_id', $calendar->id)->where('status', 99);
+            
+            // filtra per campo court_id
+            if (!is_null($this->court_id) && $this->court_id > 0) {
+                $presences->where('court_id', $this->court_id);
+                $presences_annullate->where('court_id', $this->court_id);
             }
-            if (!is_null($this->instructor_id)) {
-                $presences = $presences->where('instructor_id', $this->instructor_id);
+
+            // filtra per campo istructor_id/user_id
+            if (!is_null($this->instructor_id) && $this->instructor_id > 0) {
+                $presences->where(function ($query) {
+                    $query->where('instructor_id', $this->instructor_id)
+                        ->orWhere('user_id', $this->instructor_id);
+                });
+                $presences_annullate->where(function ($query) {
+                    $query->where('instructor_id', $this->instructor_id)
+                        ->orWhere('user_id', $this->instructor_id);
+                });
+            }
+
+            // filtra per campo search (nome/cognome)
+            if (!is_null($this->search) && $this->search != "") {
+                $search_value = $this->search;
+                $presences->whereHas('member', function ($q) use ($search_value) {
+                    $q->where(function ($qq) use ($search_value) {
+                        $qq->whereRaw("CONCAT(TRIM(first_name), ' ', TRIM(last_name)) LIKE ?", ["%{$search_value}%"])
+                        ->orWhereRaw("CONCAT(TRIM(last_name), ' ', TRIM(first_name)) LIKE ?", ["%{$search_value}%"]);
+                    });
+                });
+                $presences_annullate->whereHas('member', function ($q) use ($search_value) {
+                    $q->where(function ($qq) use ($search_value) {
+                        $qq->whereRaw("CONCAT(TRIM(first_name), ' ', TRIM(last_name)) LIKE ?", ["%{$search_value}%"])
+                        ->orWhereRaw("CONCAT(TRIM(last_name), ' ', TRIM(first_name)) LIKE ?", ["%{$search_value}%"]);
+                    });
+                });
             }
+
             $presences = $presences->pluck('member_id')->toArray();
-            $presences_annullate = \App\Models\Presence::where('calendar_id', $calendar->id)->where('status', 99)->pluck('member_id')->toArray();
+            $presences_annullate = $presences_annullate->pluck('member_id')->toArray();
 
             $days = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'];
             $dow = date('w', strtotime($calendar->from));
@@ -109,7 +141,11 @@ class PresenceReport extends Component
                 $presence = \App\Models\Presence::where('member_id', $member->member->id)->where('calendar_id', $calendar->id)->first();
                 if ($presence) {
                     $court = $presence->court ? $presence->court->name : "";
-                    $instructor = $presence->instructor ? $presence->instructor->name : "";
+                    $instructor = [
+                        $presence->user ? $presence->user->name : "",
+                        $presence->instuctor && $presence->instructor !== $presence->user ? $presence->instuctor->name : "",
+                    ];
+                    $instructor = implode(", ", array_filter($instructor));
                     $motivation = $presence->motivation ? $presence->motivation->name : "";
                 }
 
@@ -130,21 +166,56 @@ class PresenceReport extends Component
                     $status = "<span class='fw-bold' style='color:gray'>Annullata</span>";
                 }
 
-                $this->records[$calendar->name][$h][] = array("last_name" => $member->member->last_name, "first_name" => $member->member->first_name, "court" => $court, "instructor" => $instructor, "status" => $status, 'motivation' => $motivation);
+                $this->records[$calendar->name][$h][] = array(
+                    "last_name" => $member->member->last_name,
+                    "first_name" => $member->member->first_name,
+                    "court" => $court,
+                    "instructor" => $instructor,
+                    "status" => $status,
+                    'motivation' => $motivation
+                );
 
                 $mids[] = $member->member->id;
-                
             }
 
-            $presences_recuperi = \App\Models\Presence::where('calendar_id', $calendar->id)->whereNotIn('member_id', $mids)->get();
-            foreach($presences_recuperi as $p)
-            {
+            $presences_recuperi = \App\Models\Presence::where('calendar_id', $calendar->id)->whereNotIn('member_id', $mids);
+            if (!is_null($this->court_id) && $this->court_id > 0) {
+                $presences_recuperi->where('court_id', $this->court_id);
+            }
+            if (!is_null($this->instructor_id) && $this->instructor_id > 0) {
+                $presences_recuperi->where(function ($query) {
+                    $query->where('instructor_id', $this->instructor_id)
+                        ->orWhere('user_id', $this->instructor_id);
+                });
+            }
+            if (!is_null($this->search) && $this->search != "") {
+                $search_value = $this->search;
+                $presences_recuperi->whereHas('member', function ($q) use ($search_value) {
+                    $q->where(function ($qq) use ($search_value) {
+                        $qq->whereRaw("CONCAT(TRIM(first_name), ' ', TRIM(last_name)) LIKE ?", ["%{$search_value}%"])
+                        ->orWhereRaw("CONCAT(TRIM(last_name), ' ', TRIM(first_name)) LIKE ?", ["%{$search_value}%"]);
+                    });
+                });
+            }
+            $presences_recuperi = $presences_recuperi->get();
+            foreach ($presences_recuperi as $p) {
                 $court = $p->court ? $p->court->name : "";
-                $instructor = $p->instructor ? $p->instructor->name : "";
+                $instructor = [
+                    $p->user ? $p->user->name : "",
+                    $p->instuctor && $p->instructor !== $p->user ? $p->instuctor->name : "",
+                ];
+                $instructor = implode(", ", array_filter($instructor));
                 $motivation = $p->motivation ? $p->motivation->name : "";
                 $status = "<span class='fw-bold' style='color:gray'>Recupero</span>";
-                $this->records[$calendar->name][$h][] = array("last_name" => $p->member->last_name, "first_name" => $p->member->first_name, "court" => $court, "instructor" => $instructor, "status" => $status, 'motivation' => $motivation);
-            } 
+                $this->records[$calendar->name][$h][] = array(
+                    "last_name" => $p->member->last_name,
+                    "first_name" => $p->member->first_name,
+                    "court" => $court,
+                    "instructor" => $instructor,
+                    "status" => $status,
+                    'motivation' => $motivation
+                );
+            }
 
             /*
             $calendar_recuperi = \App\Models\Calendar::where('manual', 1)->where('id', $calendar->id)->pluck('id')->toArray();
@@ -154,9 +225,19 @@ class PresenceReport extends Component
                 $this->member_presences[] = array('calendar_id' => $p->calendar->id, 'from' => $p->calendar->from, 'to' => $p->calendar->to, 'status' => '<span style="color:#7136f6">Recupero</span>');//\App\Models\Presence::where('member_id', $this->dataId)->get();
                 $this->recuperi += 1;
             } 
-                */           
+                */
 
             //array_push($this->courses, $calendar->course_id);
+
+            // sort records per cognome-nome
+            if (isset($this->records[$calendar->name]) && isset($this->records[$calendar->name][$h])) {
+                usort($this->records[$calendar->name][$h], function($a, $b) {
+                    $last_name_compare = strcmp($a['last_name'], $b['last_name']);
+                    $first_name_compare = strcmp($a['first_name'], $b['first_name']);
+    
+                    return $last_name_compare != 0 ? $last_name_compare : $first_name_compare;
+                });
+            }
         }
 
         $this->courses = \App\Models\Calendar::orderBy('name')->groupBy('name')->pluck('name')->toArray();

+ 6 - 1
app/Models/Presence.php

@@ -35,9 +35,14 @@ class Presence extends Model
         return $this->belongsTo(\App\Models\Motivation::class);
     }
 
+    public function user()
+    {
+        return $this->belongsTo(\App\Models\User::class, 'user_id');
+    }
+
     public function instructor()
     {
-        return $this->belongsTo(\App\Models\User::class);
+        return $this->belongsTo(\App\Models\User::class, 'instructor_id');
     }
 
     public function court()

+ 12 - 0
public/css/presence_report.css

@@ -32,3 +32,15 @@
 .report-table tbody > tr:last-of-type td {
     border-bottom: none;
 }
+
+.datepicker--btn {
+    position: relative;
+}
+
+.datepicker--btn > input {
+    position: absolute;
+    opacity: 0;
+    left: 0;
+    bottom: 0;
+    pointer-events: none;
+}

+ 2 - 2
resources/views/layouts/app.blade.php

@@ -315,7 +315,7 @@
                                     Corsi
                                 </button>
                             </h2>
-                            <div id="collapseThree" class="accordion-collapse collapse {{Request::is('course_list') || Request::is('course_member') || Request::is('calendar') || Request::is('presence_reports') ? 'show' : ''}}" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
+                            <div id="collapseThree" class="accordion-collapse collapse {{Request::is('course_list') || Request::is('course_member') || Request::is('calendar') || Request::is('presence_reports') || Request::is('absence_reports') ? 'show' : ''}}" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
                                 <div class="accordion-body">
                                     <ul class="nav nav-pills flex-column align-items-center align-items-sm-start w-100" id="menu-contabilita" style="margin-top:0px;">
                                         <li class="nav-item" style="{{Request::is('course_member') ? 'background-color: #c5d9e6;' : ''}}">
@@ -333,7 +333,7 @@
                                                 <span class="ms-3 d-md-inline">Calendario</span>
                                             </a>
                                         </li>
-                                        <li class="nav-item" style="{{Request::is('presence_reports') ? 'background-color: #c5d9e6;' : ''}}">
+                                        <li class="nav-item" style="{{Request::is('presence_reports') || Request::is('absence_reports') ? 'background-color: #c5d9e6;' : ''}}">
                                             <a href="/presence_reports" class="nav-link d-flex align-items-center linkMenu">
                                                 <span class="ms-3 d-md-inline">Presenze</span>
                                             </a>

+ 28 - 33
resources/views/livewire/absence_report.blade.php

@@ -1,6 +1,6 @@
 <div class="col card--ui" id="card--dashboard">
 
-    <a class="btn--ui lightGrey" href="/settings?type=corsi"><i class="fa-solid fa-arrow-left"></i></a><br>
+    <a class="btn--ui lightGrey" href="/presence_reports"><i class="fa-solid fa-arrow-left"></i></a><br>
 
     <header id="title--section" style="display:none !important" class="d-flex align-items-center justify-content-between">
         <div class="title--section_name d-flex align-items-center justify-content-between">
@@ -11,40 +11,35 @@
 
     <br>
 
-
-    <br><br>
-
-    <div class="row mb-5">
-        <div class="col-12 mb-4">
-            <div class="row">
-                <div class="col-12">
-                    <table class="report-table">
-                        <thead>
-                            <tr>
-                                <td>Cognome</td>
-                                <td>Nome</td>
-                                <td>Corso</td>
-                                <td>N. assenze</td>
-                                <td>Date</td>
-                            </tr>
-                        </thead>
-                        <tbody>
-                            @foreach($records as $record)
-                            <tr>
-                                <td>{{$record["last_name"]}}</td>
-                                <td>{{$record["first_name"]}}</td>
-                                <td>{{$record["course"]}}</td>
-                                <td>{{$record["total"]}}</td>
-                                <td>{{$record["date"]}}</td>
-                            </tr>
-                            @endforeach
-                        </tbody>
-                    </table>
-                </div>
-            </div>
+    <div class="row">
+        <div class="col-12 mb-3">
+            <h3 class="primary">Assenze {{$year}}/{{$year+1}}</h3>
+        </div>
+        <div class="col-12">
+            <table class="report-table">
+                <thead>
+                    <tr>
+                        <td>Cognome</td>
+                        <td>Nome</td>
+                        <td>Corso</td>
+                        <td>N. assenze</td>
+                        <td>Date</td>
+                    </tr>
+                </thead>
+                <tbody>
+                    @foreach($records as $record)
+                    <tr>
+                        <td>{{$record["last_name"]}}</td>
+                        <td>{{$record["first_name"]}}</td>
+                        <td>{{$record["course"]}}</td>
+                        <td>{{$record["total"]}}</td>
+                        <td>{{$record["date"]}}</td>
+                    </tr>
+                    @endforeach
+                </tbody>
+            </table>
         </div>
     </div>
-
 </div>
 
 @push('css')

+ 29 - 6
resources/views/livewire/presence.blade.php

@@ -91,6 +91,9 @@
             </tr>
         </thead>
         <tbody id="checkall-target">
+            @php
+                $totalPresences = 0;
+            @endphp
             @foreach($records as $idx => $record)
             <tr>
                 <td class="annulla-lezione" style="display: none;">
@@ -122,7 +125,7 @@
                     </span>
                 </td>
                 <td>{{$record["court"]}}</td>
-                <td>{{$record["instructor"]}}</td>
+                <td>{{$record["instructor"]}}{{$record["additional_instructor"] ? ", ".$record["additional_instructor"] : ""}}</td>
                 <td>
                     @if ($record["status"] != 99)
                         @if ($record["presence"])
@@ -131,12 +134,25 @@
                                     <a onclick="removeSingle({{$record['id']}})"><i class="fas fa-trash"></i></a>
                                 @else
                                     <input name="presence" class="member chkM" type="checkbox" value="{{$record["id"]}}" {{$record["presence"] ? 'checked' : '' }}>
+                                    @php
+                                    if ($record['presence']) {
+                                        $totalPresences ++;
+                                    }
+                                    @endphp
                                 @endif
                             @else
                                 <span style="color:#0C6197;font-size:25px;">&#10003;</span>
+                                @php
+                                    $totalPresences++;
+                                @endphp
                             @endif
                         @else
                             <input name="presence" class="member chkM" type="checkbox" value="{{$record["id"]}}" {{$record["presence"] ? 'checked' : '' }}>
+                            @php
+                            if ($record['presence']) {
+                                $totalPresences ++;
+                            }
+                            @endphp
                         @endif
                     @else
                         Annullata &nbsp;&nbsp;-&nbsp;&nbsp; <a href="#" wire:click="revert({{$record["id"]}})" style="text-decoration: underline;color: #0c6197;"><small><i class="fa-solid fa-arrow-left-rotate"></i></small> Ripristina</a>
@@ -149,6 +165,11 @@
             </tr>
             @endforeach
 
+            <tr>
+                <td colspan="6"><span class="fw-bold text-uppercase">Totale presenti</span></td>
+                <td><span class="fw-bold">{{$totalPresences}}</span></td>
+                <td colspan="2"></td>
+            </tr>
         </tbody>
     </table>
 
@@ -175,14 +196,16 @@
                     @endforeach
                 </select>
             </div>
-            <button type="button" class="btn--ui lightGrey btSave" {{-- style="background-color:rgb(111, 31, 31) !important" --}} onclick="showHideDelete()">Annulla lezione per selezionati</button>
-            <button type="button" class="btn--ui btSave" onclick="saveAndStay()">Salva presenze</button>
+            <button type="button" class="btn--ui lightGrey btSave" onclick="showHideDelete()">Annulla lezione per selezionati</button>
+            {{-- <button type="button" class="btn--ui btSave" onclick="saveAndStay()">Salva presenze</button> --}}
 
             @endif
         </div>
         @if(!$manual)
         <div class="col-auto mt-2 text-end">
-            <button type="button" class="btn--ui btSave" onclick="saveAndQuit()">Salva e chiudi</button>
+            <a href="/calendar?last_date={{$last_date}}" class="btn--ui lightGrey btSave">Chiudi</a>
+            {{-- <button type="button" class="btn--ui btSave" onclick="saveAndQuit()">Salva e chiudi</button> --}}
+            <button type="button" class="btn--ui btSave" onclick="saveAndStay()">Salva presenze</button>
         </div>
         <div class="col-xs-12 mt-2">
             <div class="showDelete" style="float:left;display:none;">
@@ -337,11 +360,11 @@
                         </div>
 
                         <div class="col">
-                            <label for="save_instructor_id" class="form-label">Istruttore</label>
+                            <label for="save_instructor_id" class="form-label">Istruttore aggiuntivo</label>
                             <select id="save_instructor_id" class="form-select form-select-lg me-1">
                                 <option value="0">
                                     @foreach($instructors as $i)
-                                <option value="{{$i["id"]}}" {{\Auth::user()->id == $i["id"] ? "selected" : ""}}>{{$i["name"]}}</option>
+                                <option value="{{$i["id"]}}" {{\Auth::user()->id == $i["id"] ? "disabled" : ""}}>{{$i["name"]}}</option>
                                 @endforeach
                             </select>
                         </div>

+ 27 - 10
resources/views/livewire/presence_report.blade.php

@@ -1,6 +1,6 @@
 <div class="col card--ui" id="card--dashboard">
 
-    <a class="btn--ui lightGrey" href="/settings?type=corsi"><i class="fa-solid fa-arrow-left"></i></a><br>
+    {{-- <a class="btn--ui lightGrey" href="/settings?type=corsi"><i class="fa-solid fa-arrow-left"></i></a><br> --}}
 
     <header id="title--section" style="display:none !important" class="d-flex align-items-center justify-content-between">
         <div class="title--section_name d-flex align-items-center justify-content-between">
@@ -12,7 +12,11 @@
     <br>
 
     <div class="row">
-        <div class="col-auto">
+        <div class="col-auto d-flex gap-2">
+            <div class="datepicker--btn">
+                <a class="btn--ui btn-primary" style="cursor:pointer;" onclick="showDatePicker(this.parentElement)"><i class="far fa-calendar"></i></a></a>
+                <input type="date" wire:model='date'>
+            </div>
             <a class="btn--ui btn-primary" style="cursor:pointer;" wire:click="today()">Oggi</a>
         </div>
         <div class="col d-flex justify-content-center align-items-center gap-4">
@@ -34,7 +38,7 @@
 
     <br><br>
 
-    <div class="row">
+    <div class="row justify-content-between">
         <div class="col-lg-3 col-md-12 d-flex gap-3 align-items-center mb-3">
             <label class="form-label fw-medium text-uppercase mb-0" for="course_id">Corso</label>
             <select wire:model="course_name" id="course_name" class="form-select">
@@ -82,17 +86,21 @@
                 @endforeach
             </select>
         </div>
-    </div>
 
-    <br><br>
+        <div class="col-lg-9 col-md-12"></div>
+        <div class="col-lg-3 col-md-12 d-flex gap-3 align-items-center mt-5 mb-3">
+            <label class="form-label fw-medium text-uppercase mb-0" for="course_id">Cerca</label>
+            <input wire:model="search" type="search" class="form-control form-control-sm" id="search" />
+        </div>
+    </div>
 
-    @foreach($records as $course => $records)
+    @forelse($records as $course => $records)
     <div class="row mb-5">
         <div class="col-12 mb-3">
             <h3 class="primary">{{$course}}</h3>
         </div>
+        @foreach($records as $time => $presences)
         <div class="col-12 mb-4">
-            @foreach($records as $time => $presences)
             <div class="row">
                 <div class="col-1 align-items-center d-flex fs-5 fw-bold justify-content-center">{{$time}}</div>
                 <div class="col-11">
@@ -122,10 +130,16 @@
                     </table>
                 </div>
             </div>
-        @endforeach
         </div>
+        @endforeach
+    </div>
+    @empty
+    <hr>
+    <div class="row">
+        <div class="col text-center text-black-50">Nessun dato presente</div>
     </div>
-    @endforeach
+    <hr>
+    @endforelse
 
 </div>
 
@@ -145,6 +159,9 @@
 
 @push('scripts')
 <script>
-    $(document).ready(function() {});
+    function showDatePicker(el) {
+        let datepicker = el.querySelector("input[type='date']");
+        datepicker.showPicker();
+    }
 </script>
 @endpush