Jelajahi Sumber

Fix report presenze e calendario assenze

Luca Parisio 4 bulan lalu
induk
melakukan
1802471404

+ 72 - 0
app/Http/Livewire/AbsenceReport.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace App\Http\Livewire;
+
+use Livewire\Component;
+
+class AbsenceReport extends Component
+{
+
+    public $records;
+
+    public function mount()
+    {
+        setlocale(LC_ALL, 'it_IT');
+    }
+
+    public function render()
+    {
+        setlocale(LC_ALL, 'it_IT');
+
+        $this->records = [];
+
+        $to = date("Y-m-d 23:59:59");
+        
+        $calendars = \App\Models\Calendar::where('from', '<=', $to)->orderBy('from')->get();
+
+        foreach ($calendars as $calendar) {
+
+            $presences = \App\Models\Presence::where('calendar_id', $calendar->id)->where('status', '<>', 99);
+            $presences = $presences->pluck('member_id')->toArray();
+            $presences_annullate = \App\Models\Presence::where('calendar_id', $calendar->id)->where('status', 99)->pluck('member_id')->toArray();
+
+            $days = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'];
+            $dow = date('w', strtotime($calendar->from));
+            $d = $days[$dow];
+
+            $h = date('H:i', strtotime($calendar->from));
+
+            // Elenco corsi per tipologia in base al calendario
+            $courses = \App\Models\Course::where('name', $calendar->name)->where('date_from', '<=', $calendar->from)->where('date_to', '>=', $calendar->to);
+            $courses = $courses->pluck('id')->toArray();
+
+            // Elenco utenti iscritti al corso "padre"
+            $members = \App\Models\MemberCourse::where('when', 'like', "%" . $d . "%")->where('when', 'like', '%"from":"' . $h . '"%')->whereIn('course_id', $courses)->get();
+            //$members = \App\Models\MemberCourse::where('when', 'like', "%" . $d . "%")->where('when', 'like', '%"from":"' . $h . '"%')->whereIn('member_id', $presences)->whereIn('course_id', $courses)->get();
+            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))
+                        {
+                            $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)));
+                    }
+                }
+            }
+            
+        }
+
+        array_multisort(array_column($this->records, 'total'), SORT_DESC, $this->records);
+        
+        return view('livewire.absence_report');
+    }
+
+}

+ 35 - 8
app/Http/Livewire/PresenceReport.php

@@ -32,7 +32,7 @@ class PresenceReport extends Component
 
     public $ids = [];
 
-    public $course_id;
+    public $course_name;
     public $from;
     public $to;
     public $court_id;
@@ -83,14 +83,16 @@ class PresenceReport extends Component
 
             // Elenco corsi per tipologia in base al calendario
             $courses = \App\Models\Course::where('name', $calendar->name)->where('date_from', '<=', $calendar->from)->where('date_to', '>=', $calendar->to);
-            if (!is_null($this->course_id)) {
-                $courses = $courses->where('id', $this->course_id);
+            if (!is_null($this->course_name)) {
+                $courses = $courses->where('name', $this->course_name);
             }
             $courses = $courses->pluck('id')->toArray();
 
+            $mids = [];
+
             // Elenco utenti iscritti al corso "padre"
-            // $members = \App\Models\MemberCourse::where('when', 'like', "%" . $d . "%")->where('when', 'like', '%"from":"' . $h . '"%')->whereIn('course_id', $courses)->get();
-            $members = \App\Models\MemberCourse::where('when', 'like', "%" . $d . "%")->where('when', 'like', '%"from":"' . $h . '"%')->whereIn('member_id', $presences)->whereIn('course_id', $courses)->get();
+            $members = \App\Models\MemberCourse::where('when', 'like', "%" . $d . "%")->where('when', 'like', '%"from":"' . $h . '"%')->whereIn('course_id', $courses)->get();
+            //$members = \App\Models\MemberCourse::where('when', 'like', "%" . $d . "%")->where('when', 'like', '%"from":"' . $h . '"%')->whereIn('member_id', $presences)->whereIn('course_id', $courses)->get();
             foreach ($members as $member) {
 
                 $court = '';
@@ -122,12 +124,37 @@ class PresenceReport extends Component
                 }
 
                 $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;
+                
             }
 
-            array_push($this->courses, $calendar->course_id);
+            $presences_recuperi = \App\Models\Presence::where('calendar_id', $calendar->id)->whereNotIn('member_id', $mids)->get();
+            foreach($presences_recuperi as $p)
+            {
+                $court = $p->court ? $p->court->name : "";
+                $instructor = $p->instructor ? $p->instructor->name : "";
+                $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);
+            } 
+
+            /*
+            $calendar_recuperi = \App\Models\Calendar::where('manual', 1)->where('id', $calendar->id)->pluck('id')->toArray();
+            $presences_recuperi = \App\Models\Presence::whereIn('calendar_id', $calendar_recuperi)->where('member_id', $this->dataId)->get();
+            foreach($presences_recuperi as $p)
+            {
+                $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);
         }
 
-        $this->courses = array_unique($this->courses);
+        $this->courses = \App\Models\Calendar::orderBy('name')->groupBy('name')->pluck('name')->toArray();
+
+        /*$this->courses = array_unique($this->courses);
         $this->courses = array_map(function ($course_id) {
             try {
                 return \App\Models\Course::findOrFail($course_id);
@@ -135,7 +162,7 @@ class PresenceReport extends Component
                 return null;
             }
         }, $this->courses);
-        $this->courses = array_filter($this->courses);
+        $this->courses = array_filter($this->courses);*/
 
         return view('livewire.presence_report');
     }

+ 63 - 0
resources/views/livewire/absence_report.blade.php

@@ -0,0 +1,63 @@
+<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>
+
+    <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">
+            <i class="ico--ui title_section utenti me-2"></i>
+            <h2 class="primary">Assenze</h2>
+        </div>
+    </header>
+
+    <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>
+    </div>
+
+</div>
+
+@push('css')
+<link href="/css/presence_report.css" rel="stylesheet" />
+@endpush
+
+@push('scripts')
+<link href="/css/datatables.css" rel="stylesheet" />
+<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
+@endpush
+
+@push('scripts')
+<script>
+    $(document).ready(function() {});
+</script>
+@endpush

+ 3 - 3
resources/views/livewire/presence_report.blade.php

@@ -28,7 +28,7 @@
             </a>
         </div>
         <div class="col-auto">
-            <a class="btn--ui btn-primary" style="cursor:pointer;">Alert assenze</a>
+            <a class="btn--ui btn-primary" style="cursor:pointer;" href='/absence_reports'>Alert assenze</a>
         </div>
     </div>
 
@@ -37,10 +37,10 @@
     <div class="row">
         <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_id" id="course_id" class="form-select">
+            <select wire:model="course_name" id="course_name" class="form-select">
                 <option value=""></option>
                 @foreach($courses as $course)
-                <option value="{{$course->id}}">{{$course->name}}
+                <option value="{{$course}}">{{$course}}
                 @endforeach
             </select>
         </div>

+ 1 - 0
routes/web.php

@@ -90,6 +90,7 @@ Route::group(['middleware' => 'auth'], function () {
     Route::get('/calendar', \App\Http\Livewire\Calendar::class);
     Route::get('/presences', \App\Http\Livewire\Presence::class);
     Route::get('/presence_reports', \App\Http\Livewire\PresenceReport::class);
+    Route::get('/absence_reports', \App\Http\Livewire\AbsenceReport::class);
     Route::get('/courts', \App\Http\Livewire\Court::class);
     Route::get('/motivations', \App\Http\Livewire\Motivation::class);
     Route::get('/reports', \App\Http\Livewire\Reports::class);