Преглед изворни кода

Merge branch 'iao_team' of http://host.webmagistri.biz:3000/parisio/iao_team into iao_team_ferrari

ferrari пре 4 месеци
родитељ
комит
036a5faef8

+ 134 - 0
app/Http/Livewire/PresenceReport.php

@@ -0,0 +1,134 @@
+<?php
+
+namespace App\Http\Livewire;
+
+use Livewire\Component;
+
+class PresenceReport extends Component
+{
+
+    public $calendar;
+
+    public $records;
+
+    public $date;
+
+    public $member_ids = [];
+
+    
+    public $courts = [];
+    public $instructors = [];
+    public $motivations = [];
+
+    public $court_filter;
+    public $instructor_filter;
+    public $motivation_filter;
+    
+
+    public $members = [];
+
+    public $newMembers = [];
+
+    public $ids = [];
+
+    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->motivations = \App\Models\Motivation::select('*')->where('enabled', true)->where('type', 'del')->get();
+
+        $this->date = date("Y-m-d");
+        setlocale(LC_ALL, 'it_IT');
+        
+    }
+
+    public function render()
+    {
+
+        setlocale(LC_ALL, 'it_IT');
+
+        $this->records = [];
+
+        $from = $this->date . " 00:00:00";
+        $to = $this->date . " 23:59:59";
+
+        $calendars = \App\Models\Calendar::where('from', '>=', $from)->where('to', '<=', $to)->orderBy('from')->get();
+
+        foreach($calendars as $calendar)
+        {
+
+            $presences = \App\Models\Presence::where('calendar_id', $calendar->id)->where('status', '<>', 99)->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)->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();
+            foreach($members as $member)
+            {
+
+                $court = '';
+                $instructor = '';
+                $motivation = '';
+
+                $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 : "";
+                    $motivation = $presence->motivation ? $presence->motivation->name : "";
+                }
+
+                $status = '';
+                if (in_array($member->member->id, $presences))
+                {
+                    $status = "<span style=\"color:#0c6197\">Prezenza ordinaria</span>";
+                }
+                else
+                {
+                    if (in_array($member->member->id, $presences_annullate))
+                    {
+                        $status = "<span style=\"color:gray\">Annullata</span>";
+                    }
+                    else
+                    {
+                        if (date("Ymd") > date("Ymd", strtotime($calendar->from)))
+                        {
+                            $status = "<span style=\"color:red\">Assenza</span>";
+                        }
+                    }
+                }
+
+                if ($calendar->status == 99)
+                {
+                    $status = "<span 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);
+
+            }
+
+        }
+
+        return view('livewire.presence_report');
+    }
+
+    public function prev()
+    {
+        $this->date = date("Y-m-d", strtotime("-1 day", strtotime($this->date)));
+    }
+
+    public function next()
+    {
+        $this->date = date("Y-m-d", strtotime("+1 day", strtotime($this->date)));
+    }
+
+}

+ 10 - 0
app/Models/Presence.php

@@ -34,4 +34,14 @@ class Presence extends Model
     {
         return $this->belongsTo(\App\Models\Motivation::class);
     }
+
+    public function instructor()
+    {
+        return $this->belongsTo(\App\Models\User::class);
+    }
+
+    public function court()
+    {
+        return $this->belongsTo(\App\Models\Court::class);
+    }
 }

+ 97 - 0
resources/views/livewire/presence_report.blade.php

@@ -0,0 +1,97 @@
+<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">Presenze</h2>
+        </div>
+    </header>
+
+    <br><br>
+    <a wire:click="prev()"> < </a>&nbsp;&nbsp;&nbsp;{{date("d/m/Y", strtotime($date))}}&nbsp;&nbsp;&nbsp;<a wire:click="next()"> > </a>
+    <br><br>
+
+    <div class="row">
+        <div class="col-3">
+            Corso<br>
+        </div>
+        <div class="col-3">
+            Orario<br>
+        </div>
+        <div class="col-3">
+            Campo<br>
+            <select wire:model="court_id">
+                <option value=""></option>
+                @foreach($courts as $court)
+                    <option value="{{$court->id}}">{{$court->name}}
+                @endforeach
+            </select>
+        </div>
+        <div class="col-3">
+            Istruttore<br>
+        </div>
+    </div>
+
+    <br><br>
+
+    @foreach($records as $course => $records)
+        <h3>{{$course}}</h3>
+        @foreach($records as $time => $presences)
+            <div class="row">
+                <div class="col-2">
+                    {{$time}}
+                </div>
+                <div class="col-10">
+                    <table width="100%">
+                        <tr>
+                            <td>Cognome</td>
+                            <td>Nome</td>
+                            <td>Campo</td>
+                            <td>Istruttore</td>
+                            <td>Stato</td>
+                            <td>Motivazione</td>
+                        </tr>
+                        @foreach($presences as $presence)
+                            <tr>
+                                <td>{{$presence["last_name"]}}</td>
+                                <td>{{$presence["first_name"]}}</td>
+                                <td>{{$presence["court"]}}</td>
+                                <td>{{$presence["instructor"]}}</td>
+                                <td>{!!$presence["status"]!!}</td>
+                                <td>{{$presence["motivation"]}}</td>
+                            </tr>
+                        @endforeach
+                    </table>
+                </div>
+            </div>            
+            <hr>
+        @endforeach
+        <hr>
+    @endforeach
+    
+</div>
+
+@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>
+    <script src="/assets/js/datatables.js"></script>
+    <script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.dataTables.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
+@endpush
+
+@push('scripts')
+    <script>
+
+        $(document).ready(function() {
+            
+        } );
+
+        
+
+    </script>
+@endpush
+

+ 1 - 0
routes/web.php

@@ -89,6 +89,7 @@ Route::group(['middleware' => 'auth'], function () {
     Route::get('/profile', \App\Http\Livewire\Profile::class);
     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('/courts', \App\Http\Livewire\Court::class);
     Route::get('/motivations', \App\Http\Livewire\Motivation::class);
     Route::get('/reports', \App\Http\Livewire\Reports::class);