浏览代码

presence - reso select aggiunta manuale utente singolo + controllo associazione utente corso per inserimento

ferrari 1 月之前
父节点
当前提交
da3e5c33db
共有 3 个文件被更改,包括 117 次插入30 次删除
  1. 91 4
      app/Http/Livewire/Presence.php
  2. 4 4
      resources/views/livewire/member.blade.php
  3. 22 22
      resources/views/livewire/presence.blade.php

+ 91 - 4
app/Http/Livewire/Presence.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Livewire;
 
+use Illuminate\Support\Facades\Validator;
 use Livewire\Component;
 use App\Http\Middleware\TenantMiddleware;
 
@@ -43,6 +44,9 @@ class Presence extends Component
 
     public $members = [];
 
+    public $add_member_id = 0;
+    public $add_member_courses = [];
+
     public $newMembers = [];
 
     public $ids = [];
@@ -83,9 +87,48 @@ class Presence extends Component
         $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_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_names = [];
+        $this->course_levels = [];
+        $this->course_frequencies = [];
+    }
+
+    public function updatedAddMemberId()
+    {
+        if ($this->insertUser == 'exist') {
+            $this->add_member_courses = \App\Models\MemberCourse::where('member_id', $this->add_member_id)->groupBy('course_id')->pluck('course_id');
+            $this->course_names = \App\Models\Course::whereDate('date_from', '<=', $this->course_limit)->whereDate('date_to', '>=', $this->course_limit)->where('active', true)->where('enabled', true)->whereIn('id', $this->add_member_courses)->orderBy('name')->groupBy('name')->pluck('name');
+            $this->course_levels = [];
+            $this->course_frequencies = [];
+
+            $this->motivation_course_id = null;
+            $this->motivation_course_name = 0;
+            $this->motivation_course_level = 0;
+            $this->motivation_course_frequency = 0;
+        }
+    }
+
+    public function updatedInsertUser()
+    {
+        $this->add_member_id = 0;
+
+        if ($this->insertUser == 'exist') {
+            $this->course_names = [];
+        } else {
+            $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 = [];
+
+        $this->motivation_course_id = null;
+        $this->motivation_course_name = 0;
+        $this->motivation_course_level = 0;
+        $this->motivation_course_type = 0;
+        $this->motivation_course_frequency = 0;
+
+        $this->emit('reload');
     }
 
     function updatedMotivationCourseName()
@@ -96,7 +139,12 @@ class Presence extends Component
             $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();
+            $levels_query = \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);
+            if ($this->insertUser == 'exist') {
+                $levels_query->whereIn('id', $this->add_member_courses);
+            }
+            $levels = $levels_query->get();
+
             foreach ($levels as $l) {
                 $levels_ids[] = $l->course_level_id;
             }
@@ -116,7 +164,12 @@ class Presence extends Component
             $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)->get();
+            $frequencies_query = \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);
+            if ($this->insertUser == 'exist') {
+                $frequencies_query->whereIn('id', $this->add_member_courses);
+            }
+            $frequencies = $frequencies_query->get();
+
             foreach ($frequencies as $f) {
                 $frequency_ids[] = $f->course_frequency_id;
             }
@@ -132,7 +185,11 @@ class Presence extends Component
         if ($this->motivation_course_name > 0 && $this->motivation_course_name != '' && $this->motivation_course_level > 0 && $this->motivation_course_level != '' && $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_frequency_id', $this->motivation_course_frequency)->first();
+            $course_query = \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_frequency_id', $this->motivation_course_frequency);
+            if ($this->insertUser == 'exist') {
+                $course_query->whereIn('id', $this->add_member_courses);
+            }
+            $course = $course_query->first();
 
             $this->motivation_course_id = $course->id;
         } else {
@@ -481,6 +538,9 @@ class Presence extends Component
         $this->added = true;
         //if (!in_array($id, $this->newMembers))
         //    $this->newMembers[] = $id;
+        if (!is_array($ids)) {
+            $ids = [$ids];
+        }
 
         $this->member_ids = $ids;
 
@@ -556,7 +616,34 @@ class Presence extends Component
                 $this->validate([
                     "newMemberMotivationId" => 'required',
                 ]);
+
+                $validator = Validator::make(
+                    [
+                        'motivation_course_id' => $this->motivation_course_id,
+                    ],
+                    [
+                        'motivation_course_id' => 'nullable|integer',
+                    ]
+                );
+
                 foreach ($this->member_ids as $m) {
+                    $validator->after(function ($validator) use ($m) {
+                        if (!$this->motivation_course_id) {
+                            return;
+                        }
+
+                        $exists = \App\Models\MemberCourse::where('member_id', $m)->where('course_id', $this->motivation_course_id)->exists();
+
+                        if (!$exists) {
+                            $validator->errors()->add(
+                                'motivation_course_id',
+                                'Il corso selezionato non è associato a questo utente.'
+                            );
+                        }
+                    });
+
+                    $validator->validate();
+
                     //if ($this->manual)
                     //{
                     //\App\Models\Presence::where('calendar_id', $this->calendar->id)->where('user_id', \Auth::user()->id)->where('status', '<>', 99)->delete();

+ 4 - 4
resources/views/livewire/member.blade.php

@@ -1248,10 +1248,10 @@
                                                                     </td>
                                                                     <td style="text-align:right;width:10%;">
                                                                         <div class="row">
-                                                                            <div class="col-4">
+                                                                            <div class="col-6">
                                                                                 <button style="float:left;" type="button" class="btn" wire:click="editSubscription({{ $member_subscription->id }})" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Modifica"><i class="fa-regular fa-pen-to-square"></i></button>
                                                                             </div>
-                                                                            <div class="col-4">
+                                                                            <div class="col-6">
                                                                                 <button type="button" class="btn" onclick="confirm('Sei sicuro?') || event.stopImmediatePropagation()" wire:click="deleteSubscription({{ $member_subscription->id }})" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Elimina"><i class="fa-regular fa-trash-can"></i></button>
                                                                             </div>
                                                                         </div>
@@ -1323,10 +1323,10 @@
                                                                     </td>
                                                                     <td style="text-align:right;width:10%;">
                                                                         <div class="row">
-                                                                            <div class="col-4">
+                                                                            <div class="col-6">
                                                                                 <button style="float:left;" type="button" class="btn" wire:click="editCourse({{ $member_course->id }})" data-bs-toggle="popover"  data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Modifica"><i class="fa-regular fa-pen-to-square"></i></button>
                                                                             </div>
-                                                                            <div class="col-4">
+                                                                            <div class="col-6">
                                                                                 <button type="button" class="btn" onclick="confirm('Sei sicuro?') || event.stopImmediatePropagation()" wire:click="deleteCourse({{ $member_course->id }})" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Elimina"><i class="fa-regular fa-trash-can"></i></button>
                                                                             </div>
                                                                         </div>

+ 22 - 22
resources/views/livewire/presence.blade.php

@@ -241,8 +241,9 @@
                     <div class="existUser">
                         <div class="row mt-2 ">
                             <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>
+                                {{-- <label for="member_id" class="form-label">Aggiungere una o più persone</label> --}}
+                                <label for="member_id" class="form-label">Selezionare l'utente</label>
+                                <select name="member_id" id="member_id" class="form-select memberClass" aria-label="Seleziona una persona" {{-- multiple --}}>
                                     <option value="">--Seleziona--</option>
                                     @foreach($members as $member)
                                     <option value="{{$member->id}}">{{$member->last_name}} {{$member->first_name}} ({{$member->fiscal_code}})</option>
@@ -252,8 +253,8 @@
                             <div class="col-md-6">
                                 <label for="newMotivation" class="form-label">Motivazione</label>
                                 <select class="form-select form-select-lg me-1 @error('newMemberMotivationId') is-invalid @enderror" id="newMemberMotivationId">
-                                    <option value="">
-                                        @foreach($motivations_add as $m)
+                                    <option value=""></option>
+                                    @foreach($motivations_add as $m)
                                     <option value="{{$m["id"]}}">{{$m["name"]}}</option>
                                     @endforeach
                                 </select>
@@ -263,12 +264,15 @@
                             </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="">
+                                <select class="form-select form-select-lg me-1 @error('motivation_course_id') is-invalid @enderror" id="motivation_course_name" wire:model="motivation_course_name">
+                                    <option value=""></option>
                                     @foreach($course_names as $m)
                                         <option value="{{$m}}">{{$m}}</option>
                                     @endforeach
                                 </select>
+                                @error('motivation_course_id')
+                                    <div class="invalid-feedback">{{ $message }}</div>
+                                @enderror
                             </div>
                             @if ($motivation_course_name)
                                 <div class="col-md-6">
@@ -557,12 +561,13 @@
             
             setTimeout(() => {
                 $('.memberClass').select2({
-                    tags: false
+                    tags: false,
+                    dropdownParent: $('.memberClass').parent(),
+                });
+                $('.memberClass').on('change', function (e) {
+                    var id = $('.memberClass').select2("val");
+                    @this.add_member_id = id;
                 });
-                /*$('.memberClass').on('change', function (e) {
-                    var data = $('.memberClass').select2("val");
-                    @this.addMember(data);
-                });                */
             }, 100);
 
             $(".btAdd").click(function(){
@@ -582,12 +587,13 @@
         Livewire.on('reload', () => {
             setTimeout(() => {
                 $('.memberClass').select2({
-                    tags: false
+                    tags: false,
+                    dropdownParent: $('.memberClass').parent(),
+                });
+                $('.memberClass').on('change', function (e) {
+                    var id = $('.memberClass').select2("val");
+                    @this.add_member_id = id;
                 });
-                /*$('.memberClass').on('change', function (e) {
-                    var data = $('.memberClass').select2("val");
-                    @this.addMember(data);
-                });                */
             }, 100);
             $(".showDelete").hide();
             $(".btSave").show();
@@ -771,9 +777,6 @@
         function change(val) {
             if (val == 1) {
                 @this.insertUser = 'exist';
-                setTimeout(() => {
-                    $('.memberClass').select2();
-                }, 100);
                 $(".existUser").css("display", "block");
                 $(".newUser").css("display", "none");
             } else if (val == 2) {
@@ -786,9 +789,6 @@
 
         Livewire.on('resetCreationForm', () => {
             @this.insertUser = 'exist';
-            setTimeout(() => {
-                $('.memberClass').select2();
-            }, 100);
             $(".existUser").css("display", "block");
             $(".newUser").css("display", "none");
         });