Explorar o código

calendar_settings - aggiunto nuovo modulo

ferrari hai 1 mes
pai
achega
75c82e9516

+ 7 - 2
app/Http/Livewire/Calendar.php

@@ -41,6 +41,8 @@ class Calendar extends Component
 
     public $lastDate = null;
 
+    public $course_colors = [];
+
     public function boot()
     {
         app(TenantMiddleware::class)->setupTenantConnection();
@@ -56,6 +58,7 @@ class Calendar extends Component
         $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->course_colors = \App\Models\CourseColor::pluck('hex', 'name')->toArray();
 
         if (isset($_GET["name_filter"]))
             $this->name_filter = $_GET["name_filter"];
@@ -77,8 +80,10 @@ class Calendar extends Component
         {
             $s = $c->motivation ? $c->motivation->name : '';
             $data = array('id' => $c->id, 'title' => ($c->course ? $c->course->name : $c->name) . ($c->status == 99 ? ' (annullata - ' . $s . ')' : ''), 'start' => $c->from, 'end' => $c->to);
-            if ($c->course && $c->course->color != '')
-                $data['color'] = $c->course->color;
+            // if ($c->course && $c->course->color != '')
+            //     $data['color'] = $c->course->color;
+            if (isset($this->course_colors[$c->name]))
+                $data['color'] = $this->course_colors[$c->name];
             if ($c->status == 99)
                 $data['color'] = "#808080";
             $this->records[] = $data;

+ 61 - 0
app/Http/Livewire/CalendarSettings.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Http\Livewire;
+
+use Livewire\Component;
+use App\Http\Middleware\TenantMiddleware;
+
+class CalendarSettings extends Component
+{
+    public $course_colors = [];
+    public $colors = [];
+
+    public $changed = false;
+
+    public function boot()
+    {
+        app(TenantMiddleware::class)->setupTenantConnection();
+    }
+
+    public function mount()
+    {
+        $this->changed = false;
+
+        $courses = \App\Models\Course::select('name')->groupBy('name')->orderBy('name', 'asc')->get();
+        foreach ($courses as $course) {
+            $name = $course->name;
+            if (!\App\Models\CourseColor::where('name', $name)->exists()) {
+                \App\Models\CourseColor::create([
+                    'name' => $name,
+                    'hex' => '#d6c7fe',
+                ]);
+            }
+        }
+
+        $this->course_colors = \App\Models\CourseColor::get();
+        foreach ($this->course_colors as $color) {
+            $this->colors[$color->id] = $color->hex;
+        }
+    }
+
+    public function render()
+    {
+        return view('livewire.calendar_settings');
+    }
+
+    public function updatedColors() {
+        $this->changed = true;
+    }
+
+    public function store() {
+        foreach ($this->colors as $id => $hex) {
+            \App\Models\CourseColor::whereId($id)->update([
+                'hex' => $hex,
+            ]);
+        }
+
+        $this->changed = false;
+
+        $this->emit('success');
+    }
+}

+ 16 - 0
app/Models/CourseColor.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class CourseColor extends Model
+{
+    use HasFactory;
+
+    protected $fillable = [
+        'name',
+        'hex',
+    ];
+}

+ 33 - 0
database/migrations/2025_12_23_105434_create_course_colors_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use App\Database\Migrations\TenantMigration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('course_colors', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->string('hex');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('course_colors');
+    }
+};

+ 33 - 0
public/css/new_style.css

@@ -1333,3 +1333,36 @@ button.download-png {
     top: 0;
     right: 0;
 }
+
+.course-color input[type="color"] {
+    width: 40px;
+    height: 40px;
+    border: none;
+    border-radius: 5px;
+    box-shadow: none;
+    outline: none;
+}
+
+.course-color input[type="color"]::-webkit-color-swatch-wrapper,
+.course-color input[type="color"]::-webkit-color-swatch {
+    border: none;
+    border-radius: 5px;
+    box-shadow: none;
+    outline: none;
+}
+
+.course-color {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+    align-items: center;
+}
+
+.course-color span {
+    font-weight: bold;
+}
+
+.btn--ui[disabled] {
+    background-color: #aaa !important;
+}

+ 8 - 2
resources/views/livewire/calendar.blade.php

@@ -26,8 +26,14 @@
             </div>
             <div class="col-auto mt-2">
                 <a style="cursor:pointer" href="#" data-bs-toggle="modal" data-bs-target="#calendarNewModal" class="openNewModal addData btn--ui">
-                    {{-- <i class="fa-solid fa-plus"></i> --}}
-                    Aggiungi lezione
+                    <i class="fa-solid fa-plus"></i>
+                    {{-- Aggiungi lezione --}}
+                </a>
+            </div>
+            <div class="col-auto mt-2">
+                <a style="cursor:pointer" href="/calendar_settings" class="btn--ui">
+                    <i class="fa-solid fa-gear"></i>
+                    {{-- Impostazioni calendario --}}
                 </a>
             </div>
         </div>

+ 67 - 0
resources/views/livewire/calendar_settings.blade.php

@@ -0,0 +1,67 @@
+<div class="col card--ui" id="card--dashboard">
+
+    <a class="btn--ui lightGrey" href="/calendar"><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">Impostazioni calendario</h2>
+        </div>
+    </header>
+
+    <div class="row">
+        <div class="col-12 mb-3">
+            <h3 class="primary">Corsi</h3>
+        </div>
+        <div class="col-12 mb-3">
+            @foreach ($course_colors as $course)
+                <div class="course-color mb-4 gap-3">
+                    <input type='color' wire:model='colors.{{$course->id}}' />
+                    <span>{{$course->name}}</span>
+                </div>
+            @endforeach
+        </div>
+        <div class="col-12 mb-3 text-end">
+            <button wire:click='store()' class='btn--ui'@if (!$changed) disabled @endif>Salva modifiche</button>
+        </div>
+    </div>
+
+    
+    <div wire:ignore.self class="modal fade saved-modal" id="savedModal" tabindex="-1" role="dialog" aria-labelledby="savedModal" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header"></div>
+                <div class="modal-body pt-4 pb-4 text-center fw-bold">Modifiche salvate con successo</div>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+@push('scripts')
+<style>
+.modal-backdrop.show{
+    opacity: 0.3
+}
+</style>
+@endpush
+
+@push('scripts')
+<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
+
+<script>
+Livewire.on('success', () => {
+    isSaving = true;
+    showSavedAlert();
+});
+
+let saved_alert_timeout;
+function showSavedAlert() {
+    $('#savedModal').modal("show");
+    clearTimeout(saved_alert_timeout);
+    saved_alert_timeout = setTimeout(() => {
+        $('#savedModal').modal("hide");
+    }, 3000);
+}
+</script>
+@endpush

+ 1 - 0
routes/web.php

@@ -134,6 +134,7 @@ Route::group(['middleware' => 'tenant'], function () {
 
     Route::get('/motivations', \App\Http\Livewire\Motivation::class);
     Route::get('/calendar', \App\Http\Livewire\Calendar::class);
+    Route::get('/calendar_settings', \App\Http\Livewire\CalendarSettings::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);