Przeglądaj źródła

presence - aggiunto campi per selezione corso inserimento utente al calendar

ferrari 1 miesiąc temu
rodzic
commit
d7c097fb59

+ 122 - 6
app/Http/Livewire/Presence.php

@@ -29,6 +29,19 @@ class Presence extends Component
     public $motivations = [];
     public $motivations_add = [];
 
+    public $insertUser = 'exist';
+    public $course_limit;
+    public $motivation_course_id = null;
+    public $motivation_course_name = 0;
+    public $motivation_course_level = 0;
+    public $motivation_course_type = 0;
+    public $motivation_course_frequency = 0;
+
+    public $course_names = [];
+    public $course_levels = [];
+    public $course_types = [];
+    public $course_frequencies = [];
+
     public $members = [];
 
     public $newMembers = [];
@@ -62,6 +75,86 @@ class Presence extends Component
         $this->save_court_id = 0;
         $this->save_instructor_id = 0;
         $this->save_notes = '';
+
+        $this->insertUser = 'exist';
+        $this->course_limit = now()->endOfDay();
+
+        $this->course_names = \App\Models\Course::whereDate('date_from', '<=', $this->course_limit)->whereDate('date_to', '>=', $this->course_limit)->where('active', true)->where('enabled', true)->orderBy('name')->groupBy('name')->pluck('name');
+        $this->course_levels = [];
+        $this->course_types = [];
+        $this->course_frequencies = [];
+    }
+
+    function updatedMotivationCourseName() {
+        if ($this->motivation_course_name > 0 && $this->motivation_course_name != '') {
+            $this->motivation_course_id = null;
+            $this->motivation_course_level = 0;
+            $this->motivation_course_type = 0;
+            $this->motivation_course_frequency = 0;
+
+            $levels_ids = [];
+            $levels = \App\Models\Course::whereDate('date_from', '<=', $this->course_limit)->whereDate('date_to', '>=', $this->course_limit)->where('active', true)->where('enabled', true)->where('name', $this->motivation_course_name)->get();
+            foreach ($levels as $l) {
+                $levels_ids[] = $l->course_level_id;
+            }
+
+            $this->course_levels = \App\Models\CourseLevel::where('enabled', true)->whereIn('id', $levels_ids)->orderBy('name')->get();
+            $this->course_types = [];
+            $this->course_frequencies = [];
+        } else {
+            $this->course_levels = [];
+            $this->course_types = [];
+            $this->course_frequencies = [];
+        }
+    }
+
+    function updatedMotivationCourseLevel() {
+        if ($this->motivation_course_name > 0 && $this->motivation_course_name != '' && $this->motivation_course_level > 0 && $this->motivation_course_level != '') {
+            $this->motivation_course_id = null;
+            $this->motivation_course_type = 0;
+            $this->motivation_course_frequency = 0;
+
+            $type_ids = [];
+            $types = \App\Models\Course::whereDate('date_from', '<=', $this->course_limit)->whereDate('date_to', '>=', $this->course_limit)->where('active', true)->where('enabled', true)->where('name', $this->motivation_course_name)->where('course_level_id', $this->motivation_course_level)->get();
+            foreach ($types as $t) {
+                $type_ids[] = $t->course_type_id;
+            }
+
+            $this->course_types = \App\Models\CourseType::where('enabled', true)->whereIn('id', $type_ids)->orderBy('name')->get();
+            $this->course_frequencies = [];
+        } else {
+            $this->course_types = [];
+            $this->course_frequencies = [];
+        }
+    }
+
+    function updatedMotivationCourseType() {
+        if ($this->motivation_course_name > 0 && $this->motivation_course_name != '' && $this->motivation_course_level > 0 && $this->motivation_course_level != '' && $this->motivation_course_type > 0 && $this->motivation_course_type != '') {
+            $this->motivation_course_id = null;
+            $this->motivation_course_frequency = 0;
+
+            $frequency_ids = [];
+            $frequencies = \App\Models\Course::whereDate('date_from', '<=', $this->course_limit)->whereDate('date_to', '>=', $this->course_limit)->where('active', true)->where('enabled', true)->where('name', $this->motivation_course_name)->where('course_level_id', $this->motivation_course_level)->where('course_type_id', $this->motivation_course_type)->get();
+            foreach ($frequencies as $f) {
+                $frequency_ids[] = $f->course_frequency_id;
+            }
+
+            $this->course_frequencies = \App\Models\CourseFrequency::where('enabled', true)->whereIn('id', $frequency_ids)->orderBy('name')->get();
+        } else {
+            $this->course_frequencies = [];
+        }
+    }
+
+    function updatedMotivationCourseFrequency() {
+        if ($this->motivation_course_name > 0 && $this->motivation_course_name != '' && $this->motivation_course_level > 0 && $this->motivation_course_level != '' && $this->motivation_course_type > 0 && $this->motivation_course_type != '' && $this->motivation_course_frequency > 0 && $this->motivation_course_frequency != '') {
+            $this->motivation_course_id = null;
+
+            $course = \App\Models\Course::whereDate('date_from', '<=', $this->course_limit)->whereDate('date_to', '>=', $this->course_limit)->where('active', true)->where('enabled', true)->where('name', $this->motivation_course_name)->where('course_level_id', $this->motivation_course_level)->where('course_type_id', $this->motivation_course_type)->where('course_frequency_id', $this->motivation_course_frequency)->first();
+
+            $this->motivation_course_id = $course->id;
+        } else {
+            $this->motivation_course_id = null;
+        }
     }
 
     public function updatedNewMemberMotivationId()
@@ -302,8 +395,9 @@ class Presence extends Component
         // 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')
+
+        $motivation_query = \App\Models\Presence::query()
+            ->select('member_id', 'motivation_id', 'motivation_course_id')
             ->where('calendar_id', $calendarId)
             ->where('user_id', $userId)
             ->where('status', '<>', 99)
@@ -316,9 +410,10 @@ class Presence extends Component
                     ->groupBy('member_id');
             })
             ->get()
-            ->keyBy('member_id')   // -> [member_id => (obj con motivation_id)]
-            ->map(fn($row) => $row->motivation_id)
-            ->toArray();
+            ->keyBy('member_id');
+
+        $motivationMap = $motivation_query->map(fn($row) => $row->motivation_id)->toArray();
+        $motivationCourseMap = $motivation_query->map(fn($row) => $row->motivation_course_id)->toArray();
 
         // Elimino tutti i dati correnti che devono essere sostituiti
         \App\Models\Presence::query()
@@ -334,7 +429,8 @@ class Presence extends Component
             $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->motivation_id = $motivationMap[$id] ?? null;
+            $p->motivation_course_id = $motivationCourseMap[$id] ?? null;
             $p->user_id = $userId;
             $p->status = 0;
 
@@ -429,6 +525,7 @@ class Presence extends Component
                 $p->member_id = $member->id;
                 $p->calendar_id = $this->calendar->id;
                 $p->motivation_id = $this->newMemberMotivationId;
+                $p->motivation_course_id = $this->motivation_course_id;
                 $p->user_id = \Auth::user()->id;
                 $p->status = 0;
                 $p->court_id = null;
@@ -461,6 +558,7 @@ class Presence extends Component
                     $p->member_id = $m;
                     $p->calendar_id = $this->calendar->id;
                     $p->motivation_id = $this->newMemberMotivationId;
+                    $p->motivation_course_id = $this->motivation_course_id;
                     $p->user_id = \Auth::user()->id;
                     $p->status = 0;
                     $p->court_id = null;
@@ -484,6 +582,24 @@ class Presence extends Component
             $this->emit('reload');
             $this->emit('saved');
         }
+
+        $this->resetCreationFields();
+    }
+
+    public function resetCreationFields() {
+        $this->insertUser = 'new';
+        $this->motivation_course_id = null;
+        $this->motivation_course_name = null;
+        $this->motivation_course_level = null;
+        $this->motivation_course_type = null;
+        $this->motivation_course_frequency = null;
+        $this->newMemberMotivationId = null;
+        $this->newMemberFirstName = null;
+        $this->newMemberLastName = null;
+        $this->newMemberEmail = null;
+        $this->newMemberFiscalCode = null;
+
+        $this->emit('resetCreationForm');
     }
 
     public function createInstructor()

+ 97 - 1
resources/views/livewire/presence.blade.php

@@ -237,9 +237,10 @@
                 </div>
                 <div class="modal-body">
                     <h3 class="text-primary"><input type="radio" name="chkType" value="1" checked onchange="change(1)"> Utente già registrato</h3>
+                    @if ($insertUser == 'exist')
                     <div class="existUser">
                         <div class="row mt-2 ">
-                            <div class="col-md-6">
+                            <div class="col-md-6" wire:ignore>
                                 <label for="member_id" class="form-label">Aggiungere una o più persone</label>
                                 <select name="member_id" class="form-select memberClass" aria-label="Seleziona una persona" multiple>
                                     <option value="">--Seleziona--
@@ -257,13 +258,57 @@
                                     @endforeach
                                 </select>
                             </div>
+                            <div class="col-md-6">
+                                <label for="motivation_course_name" class="form-label">Corso</label>
+                                <select class="form-select form-select-lg me-1 @error('motivation_course_name') is-invalid @enderror" id="motivation_course_name" wire:model="motivation_course_name">
+                                    <option value="">
+                                    @foreach($course_names as $m)
+                                        <option value="{{$m}}">{{$m}}</option>
+                                    @endforeach
+                                </select>
+                            </div>
+                            @if ($motivation_course_name)
+                                <div class="col-md-6">
+                                    <label for="motivation_course_level" class="form-label">Livello</label>
+                                    <select class="form-select form-select-lg me-1 @error('motivation_course_level') is-invalid @enderror" id="motivation_course_level" wire:model="motivation_course_level">
+                                        <option value="">
+                                            @foreach($course_levels as $m)
+                                            <option value="{{$m["id"]}}">{{$m["name"]}}</option>
+                                            @endforeach
+                                        </select>
+                                </div>
+                                @if ($motivation_course_level)
+                                    <div class="col-md-6">
+                                        <label for="motivation_course_type" class="form-label">Tipologia</label>
+                                        <select class="form-select form-select-lg me-1 @error('motivation_course_type') is-invalid @enderror" id="motivation_course_type" wire:model="motivation_course_type">
+                                            <option value="">
+                                            @foreach($course_types as $m)
+                                                <option value="{{$m["id"]}}">{{$m["name"]}}</option>
+                                            @endforeach
+                                        </select>
+                                    </div>
+                                    @if ($motivation_course_type)
+                                        <div class="col-md-6">
+                                            <label for="motivation_course_frequency" class="form-label">Frequenza</label>
+                                            <select class="form-select form-select-lg me-1 @error('motivation_course_frequency') is-invalid @enderror" id="motivation_course_frequency" wire:model="motivation_course_frequency">
+                                                <option value="">
+                                                @foreach($course_frequencies as $m)
+                                                    <option value="{{$m["id"]}}">{{$m["name"]}}</option>
+                                                @endforeach
+                                            </select>
+                                        </div>
+                                    @endif
+                                @endif
+                            @endif
                         </div>
                     </div>
+                    @endif
                     <br>
                     <hr>
                     <br>
                     <h3 class="text-primary"><input type="radio" name="chkType" value="2" onchange="change(2)"> Inserimento nuovo utente</h3>
                     <br>
+                    @if ($insertUser == 'new')
                     <div class="newUser">
                         @if($newMemberFiscalCodeExist)
                         <span style="color:red">Attenzione, utente esistente</span>
@@ -302,8 +347,51 @@
                                     @endforeach
                                 </select>
                             </div>
+                            <div class="col-md-6">
+                                <label for="motivation_course_name" class="form-label">Corso</label>
+                                <select class="form-select form-select-lg me-1 @error('motivation_course_name') is-invalid @enderror" id="motivation_course_name" wire:model="motivation_course_name">
+                                    <option value="">
+                                    @foreach($course_names as $m)
+                                        <option value="{{$m}}">{{$m}}</option>
+                                    @endforeach
+                                </select>
+                            </div>
+                            @if ($motivation_course_name)
+                                <div class="col-md-6">
+                                    <label for="motivation_course_level" class="form-label">Livello</label>
+                                    <select class="form-select form-select-lg me-1 @error('motivation_course_level') is-invalid @enderror" id="motivation_course_level" wire:model="motivation_course_level">
+                                        <option value="">
+                                            @foreach($course_levels as $m)
+                                            <option value="{{$m["id"]}}">{{$m["name"]}}</option>
+                                            @endforeach
+                                        </select>
+                                </div>
+                                @if ($motivation_course_level)
+                                    <div class="col-md-6">
+                                        <label for="motivation_course_type" class="form-label">Tipologia</label>
+                                        <select class="form-select form-select-lg me-1 @error('motivation_course_type') is-invalid @enderror" id="motivation_course_type" wire:model="motivation_course_type">
+                                            <option value="">
+                                            @foreach($course_types as $m)
+                                                <option value="{{$m["id"]}}">{{$m["name"]}}</option>
+                                            @endforeach
+                                        </select>
+                                    </div>
+                                    @if ($motivation_course_type)
+                                        <div class="col-md-6">
+                                            <label for="motivation_course_frequency" class="form-label">Frequenza</label>
+                                            <select class="form-select form-select-lg me-1 @error('motivation_course_frequency') is-invalid @enderror" id="motivation_course_frequency" wire:model="motivation_course_frequency">
+                                                <option value="">
+                                                @foreach($course_frequencies as $m)
+                                                    <option value="{{$m["id"]}}">{{$m["name"]}}</option>
+                                                @endforeach
+                                            </select>
+                                        </div>
+                                    @endif
+                                @endif
+                            @endif
                         </div>
                     </div>
+                    @endif
                 </div>
                 <div class="modal-footer">
                     <button class="btn--ui lightGrey" onclick="annulla()">annulla</a>
@@ -698,14 +786,22 @@
 
         function change(val) {
             if (val == 1) {
+                @this.insertUser = 'exist';
                 $(".existUser").css("display", "block");
                 $(".newUser").css("display", "none");
             } else if (val == 2) {
+                @this.insertUser = 'new';
                 $(".newUser").css("display", "block");
                 $(".existUser").css("display", "none");
             } 
             type = val;
         }
+
+        Livewire.on('resetCreationForm', () => {
+            @this.insertUser = 'exist';
+            $(".existUser").css("display", "block");
+            $(".newUser").css("display", "none");
+        });
         
 </script>
 @endpush