Luca Parisio 9 mesi fa
parent
commit
b8b26b31d6

+ 1 - 1
app/Http/Livewire/Course.php

@@ -144,7 +144,7 @@ class Course extends Component
         if (isset($_GET["year"]))
             $this->selectedYear = $_GET["year"];
         else
-            $this->selectedYear = $this->course_years[0];
+            $this->selectedYear =  sizeof($this->course_years) > 0 ? $this->course_years[0] : '';
             //$this->selectedYear = date("Y") . "-" . (date("Y") + 1);
         $this->records = \App\Models\Course::where('parent_id', null)->where('year', $this->selectedYear)->with('type', 'duration')->get();
         return view('livewire.course');

+ 73 - 17
app/Http/Livewire/Member.php

@@ -734,6 +734,8 @@ class Member extends Component
             $c = \App\Models\Course::findOrFail($this->course_course_id);
             $this->course_price = formatPrice($c->price);
             $this->course_subscription_price = formatPrice($c->subscription_price);
+            $this->course_date_from = $c->date_from;
+            $this->course_date_to = $c->date_to;
             // Controllo se sono già iscritto la corso
             $this->course_exist = \App\Models\MemberCourse::where('course_id', $this->course_course_id)->where('member_id', $this->dataId)->count() > 0;
 
@@ -868,10 +870,9 @@ class Member extends Component
             $this->addError('fiscal_code', 'Codice fiscale già presente.');
             return;
         }
-
+        
         $this->validate($rules);
-        //$this->emit('setErrors');
-
+        
         try {
 
             $name = '';
@@ -886,6 +887,8 @@ class Member extends Component
 
             $mother_docs = implode("|", $this->mother_document_files);
 
+            
+
             $member = \App\Models\Member::create([
                 'first_name' => strtoupper($this->first_name),
                 'last_name' => strtoupper($this->last_name),
@@ -931,6 +934,7 @@ class Member extends Component
                 'to_complete' => false,
                 'enabled' => $this->enabled
             ]);
+            
             session()->flash('success, Tesserato creato');
             updateMemberData($member->id);
             $this->resetFields();
@@ -1445,20 +1449,21 @@ class Member extends Component
         $this->validate(['course_course_id' => 'required']);
         try {
 
-            \App\Models\MemberCourse::create([
-                'member_id' => $this->dataId,
-                'course_id' => $this->course_course_id,
-                'date_from' => $this->course_date_from,
-                'date_to' => $this->course_date_to,
-                'course_subscription_id' => $this->course_course_subscription_id,
-                'status' => $this->course_status,
-                'subscribed' => false, // default non iscritto
-                'price' => currencyToDouble($this->course_price),
-                'subscription_price' => currencyToDouble($this->course_subscription_price),
-                'notes' => $this->course_note,
-                'months' => json_encode($this->course_months),
-                'when' => json_encode($this->course_when)
-            ]);
+            $mc = new \App\Models\MemberCourse();
+            $mc->member_id = $this->dataId;
+            $mc->course_id = $this->course_course_id;
+            $mc->date_from = $this->course_date_from;
+            $mc->date_to = $this->course_date_to;
+            $mc->course_subscription_id = $this->course_course_subscription_id;
+            $mc->status = $this->course_status;
+            $mc->subscribed = false;
+            $mc->price = currencyToDouble($this->course_price);
+            $mc->subscription_price = currencyToDouble($this->course_subscription_price);
+            $mc->notes = $this->course_note;
+            $mc->months = json_encode($this->course_months);
+            $mc->when = json_encode($this->course_when);
+            $mc->save();
+            
             // Se il corso ha associato una categoria iscrivo anche al gruppo
             $c = \App\Models\Course::findOrFail($this->course_course_id);
             if ($c) {
@@ -1470,6 +1475,56 @@ class Member extends Component
                     ]);
                 }
             }
+
+            // Creo i pagamenti in base alla tipologia
+            $r = \App\Models\CourseSubscription::findOrFail($this->course_course_subscription_id);
+
+            $start = $this->course_date_from;
+
+            // Creo il pagamento per l'iscrizione
+            $rate = new \App\Models\Rate();
+            $rate->member_id = $this->dataId;
+            $rate->member_course_id = $mc->id;
+            $rate->course_subscription_id = null;
+            $rate->price = currencyToDouble($this->course_subscription_price);
+            $rate->date = $start;
+            $rate->months = json_encode([]);
+            $rate->note = '';
+            $rate->status = 0;
+            $rate->is_subscription = true;
+            $rate->save();
+
+            $go = true;
+            while($go)
+            {
+
+                $mms = [];
+                $mms[] = date("m", strtotime($start));
+                for($jj=2; $jj<=$r->months;$jj++)
+                {
+                    $mms[] = date('m', strtotime("+" . $jj . " months", strtotime($start)));
+                }
+
+                $rate = new \App\Models\Rate();
+                $rate->member_id = $this->dataId;
+                $rate->member_course_id = $mc->id;
+                $rate->course_subscription_id = $this->course_course_subscription_id;
+                $rate->price = currencyToDouble($this->course_price);
+                $rate->date = $start;
+                $rate->months = json_encode($mms);
+                $rate->note = '';
+                $rate->status = 0;
+                $rate->save();
+                
+                $start = date('Y-m-d', strtotime("+" . $r->months . " months", strtotime($start)));
+
+                if ($start > $this->course_date_to)
+                {
+                    $go = false;
+                    break;
+                }
+            }
+
             session()->flash('success, Corso creato');
             $this->resetCourseFields();
             $this->addCourse = false;
@@ -1493,6 +1548,7 @@ class Member extends Component
                 $c = \App\Models\Course::findOrFail($this->course_course_id);
                 $this->course_name = $c->name . " (" . $c->year . ")";
                 $this->course_level_id = $c->course_level_id;
+                $this->course_course_type = $c->type;
                 $this->course_type_id = $c->course_type_id;
                 $this->course_frequency_id = $c->course_frequency_id;
 

+ 1 - 1
app/Http/Livewire/PaymentMethod.php

@@ -36,7 +36,7 @@ class PaymentMethod extends Component
     public function resetFields(){
         $this->name = '';
         $this->money = false;
-        $this->type = '';
+        $this->type = 'ALL';
         $this->corrispettivo_fiscale = false;
         $this->enabled = true;
         $this->emit('load-data-table');

+ 87 - 0
app/Http/Livewire/Rate.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Http\Livewire;
+
+use Livewire\Component;
+use Barryvdh\DomPDF\Facade\Pdf;
+use App\Models\Member;
+
+
+class Rate extends Component
+{
+    public $records;
+
+    public $member_id = 0;
+    public $member_course_id = 0;
+
+    public $filterStatus = '';
+    public $hasFilter = false;
+    public $filterFrom = '', $filterTo = '';
+    public $filteredMemberId = '';
+    public $members = [];
+    public $detail = '';
+
+    public function mount()
+    {
+        // Load members for the dropdown
+        $this->member_id = isset($_GET["member_id"]) ? $_GET["member_id"] : 0;
+        $this->member_course_id = isset($_GET["member_course_id"]) ? $_GET["member_course_id"] : 0;
+        if ($this->member_id > 0 && $this->member_course_id > 0)
+        {
+            $mc = \App\Models\MemberCourse::findOrFail($this->member_course_id);
+            $this->detail = 'Riepilogo rate ' . $mc->course->name . ' di ' . $mc->member->first_name . " " . $mc->member->last_name;
+        }
+    }
+
+    public function render()
+    {
+
+        /*if ($this->hasFilter)
+        {
+            $r = \App\Models\Receipt::with('member');
+            if ($this->filterStatus != '')
+                $r = $r->where('status', $this->filterStatus);
+            if ($this->filterFrom != '')
+                $r = $r->where('date', '>=', $this->filterFrom);
+            if ($this->filterTo != '')
+                $r = $r->where('date', '<=', $this->filterTo);
+            if ($this->filteredMemberId != '')
+                $r = $r->where('member_id', $this->filteredMemberId);
+
+            $this->records = $r->get();
+        }
+        else
+        {*/
+            $this->records = \App\Models\Rate::with('member')->where('member_course_id', $this->member_course_id)->get();
+        //}
+
+        //$this->emit('load-data-table');
+
+        return view('livewire.rate');
+    }
+
+    public function printReceipt($id)
+    {
+        $this->emit('load-data-table');
+        $receipt = \App\Models\Receipt::findOrFail($id);
+        //$pdf = PDF::loadView('pdf/receipt', array('datas' => $datas, 'from' => $x, 'to' => $y, 'who' => '', 'matricola' => $matricola));
+        $pdf = PDF::loadView('receipt', array('receipt' => $receipt));//->output();
+        return $pdf->stream('aaa.pdf');
+
+    }
+
+    public function search()
+    {
+        $this->hasFilter = true;
+    }
+
+    public function disableSearch()
+    {
+        $this->filterStatus = "";
+        $this->filterTo = '';
+        $this->filterFrom = '';
+        $this->filteredMemberId = '';
+        $this->hasFilter = false;
+    }
+
+}

+ 19 - 2
app/Http/Livewire/RecordIN.php

@@ -47,6 +47,7 @@ class RecordIN extends Component
     }
 
     public $courseId = 0;
+    public $rateId = 0;
     public $months = array();
 
     public $records, $dataId, $member_id, $supplier_id,
@@ -231,6 +232,7 @@ class RecordIN extends Component
         $this->currentReceip = null;
         $this->parent = '';
         $this->courseId = 0;
+        $this->rateId = 0;
         $this->months = array();
         $this->rows = array();
         $this->rows[] = array('causal_id' => isset($_GET["causalId"]) ? $_GET["causalId"] : null, 'when' => array(array('month' => date("n"), 'year' => date("Y"), 'period' => '')),  'amount' => null, 'vat_id' => null, 'note' => '', 'commercial' => 0);
@@ -372,6 +374,10 @@ class RecordIN extends Component
                 $mc = \App\Models\MemberCourse::findOrFail($this->courseId);
                 $course = \App\Models\Course::findOrFail($mc->course_id);
             }
+            if (isset($_GET["rateId"]))
+            {
+                $this->rateId = $_GET["rateId"];
+            }
             if (isset($_GET["months"]))
             {
 
@@ -408,6 +414,7 @@ class RecordIN extends Component
 
                 $this->createSubscription = 1;
                 $this->courseId = $_GET["courseId"];
+                $this->rateId = $_GET["rateId"];
                 $price = $_GET["subscription_price"] / 100 * 100;
                 $this->refreshAfter = 1;
                 if ($count == 1)
@@ -571,6 +578,7 @@ class RecordIN extends Component
                 'corrispettivo_fiscale' => $this->corrispettivo_fiscale,
                 'date' => $this->date,
                 'type' => $this->type,
+                'amount' => 0,
                 'financial_movement' => $this->financial_movement,
                 'deleted' => $this->deleted
             ]);
@@ -623,7 +631,7 @@ class RecordIN extends Component
             $record->save();
 
             // se sto pagando un corso, aggiorno lo status dei mesi
-            if ($this->courseId > 0)
+            /*if ($this->courseId > 0)
             {
                 $record->months = json_encode($this->months);
                 $record->member_course_id = $this->courseId;
@@ -641,7 +649,7 @@ class RecordIN extends Component
                 if ($this->createSubscription == 1)
                     $c->subscribed = true;
                 $c->save();
-            }
+            }*/
 
             if (!$this->financial_movement)
             {
@@ -653,6 +661,15 @@ class RecordIN extends Component
                 }
             }
 
+            // Se sto pagamento una rata aggiorno lo stato della rata
+            if ($this->rateId > 0)
+            {
+                $rate = \App\Models\Rate::findOrFail($this->rateId);
+                $rate->status = 1;
+                $rate->record_id = $record->id;
+                $rate->save();
+            }
+
             session()->flash('success','Movimento creato');
             $this->resetFields();
             $this->add = false;

+ 40 - 0
app/Models/Rate.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Rate extends Model
+{
+    use HasFactory;
+
+    protected $fillable = [
+        'member_id',
+        'member_course_id',
+        'course_subscription_id',
+        'price',
+        'date',
+        'months',
+        'note',
+        'status',
+        'record_id',
+        'is_subscription'
+    ];
+
+    public function member()
+    {
+        return $this->belongsTo(Member::class);
+    }
+
+    public function member_course()
+    {
+        return $this->belongsTo(MemberCourse::class, 'course_type_id');
+    }
+
+    public function course_subscription()
+    {
+        return $this->belongsTo(CourseSubscription::class, 'course_subscription_id');
+    }
+
+}

+ 1 - 1
database/migrations/2023_03_17_132306_create_categories_table.php

@@ -15,7 +15,7 @@ return new class extends Migration
     {
         Schema::create('categories', function (Blueprint $table) {
             $table->id();
-            $table->unsignedBigInteger('parent_id');
+            $table->unsignedBigInteger('parent_id')->nullable();
             $table->foreign('parent_id')->nullable()->references('id')->on('categories')->onUpdate('cascade')->onDelete('cascade');
             $table->string('name');
             $table->integer('enabled')->default(1);

+ 2 - 2
database/migrations/2023_03_20_212903_create_members_table.php

@@ -41,11 +41,11 @@ return new class extends Migration
             $table->string('email')->nullable();
             $table->string('image')->nullable();
             $table->string('father_name')->nullable();
-            $table->string('father_mail')->nullable();
+            $table->string('father_email')->nullable();
             $table->string('father_phone')->nullable();
             $table->string('father_fiscal_code')->nullable();
             $table->string('mother_name')->nullable();
-            $table->string('mother_mail')->nullable();
+            $table->string('mother_email')->nullable();
             $table->string('mother_phone')->nullable();
             $table->string('mother_fiscal_code')->nullable();
             $table->string('birth_place')->nullable();

+ 1 - 1
database/migrations/2023_03_24_150306_create_causals_table.php

@@ -15,7 +15,7 @@ return new class extends Migration
     {
         Schema::create('causals', function (Blueprint $table) {
             $table->id();
-            $table->unsignedBigInteger('parent_id');
+            $table->unsignedBigInteger('parent_id')->nullable();
             $table->foreign('parent_id')->nullable()->references('id')->on('causals')->onUpdate('cascade')->onDelete('cascade');
             $table->string('name');
             $table->enum('type', ['IN', 'OUT']);

+ 1 - 1
database/migrations/2023_03_24_150349_create_records_table.php

@@ -27,7 +27,7 @@ return new class extends Migration
             //$table->integer('month');
             //$table->integer('year');
             $table->enum('type', ['IN', 'OUT']);
-            //$table->decimal('amount', $precision = 8, $scale = 2);
+            $table->decimal('amount', $precision = 8, $scale = 2);
             $table->integer('commercial')->default(1);
 
             //$table->string('note')->nullable();

+ 2 - 2
database/migrations/2023_12_11_110000_create_courses_table.php

@@ -15,9 +15,9 @@ return new class extends Migration
     {
         Schema::create('courses', function (Blueprint $table) {
             $table->id();
-            $table->unsignedBigInteger('parent_id');
+            $table->unsignedBigInteger('parent_id')->nullable();
             $table->foreign('parent_id')->nullable()->references('id')->on('courses')->onUpdate('cascade')->onDelete('cascade');
-            $table->unsignedBigInteger('category_id');
+            $table->unsignedBigInteger('category_id')->nullable();
             $table->foreign('category_id')->nullable()->references('id')->on('categories')->onUpdate('cascade')->onDelete('cascade');
             $table->string('name');
             $table->integer('enabled')->default(1);

+ 43 - 0
database/migrations/2025_04_08_125700_create_rates_table.php

@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('rates', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('member_id')->nullable();
+            $table->foreign('member_id')->nullable()->references('id')->on('members')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('member_course_id')->nullable();
+            $table->foreign('member_course_id')->nullable()->references('id')->on('member_courses')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('course_subscription_id')->nullable();
+            $table->foreign('course_subscription_id')->nullable()->references('id')->on('course_subscriptions')->onUpdate('cascade')->onDelete('cascade');
+            $table->decimal('price', $precision = 8, $scale = 2);
+            $table->datetime('date')->nullable();
+            $table->string('months')->nullable();
+            $table->string('note')->nullable();
+            $table->integer('status')->default(0);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('rates');
+    }
+};

+ 35 - 0
database/migrations/2025_04_09_093800_add_fields_to_rates_table.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('rates', function (Blueprint $table) {
+            $table->boolean('is_subscription')->nullable();
+            $table->unsignedBigInteger('record_id')->nullable();
+            $table->foreign('record_id')->nullable()->references('id')->on('records')->onUpdate('cascade')->onDelete('set null');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('rates', function (Blueprint $table) {
+            $table->dropColumn('record_id');
+            $table->dropColumn('is_subscription');
+        });
+    }
+};

BIN
public/img/leezard.png


+ 9 - 5
resources/views/layouts/app.blade.php

@@ -176,6 +176,8 @@
                 print "Discipline";
             if (Request::is('cards'))
                 print "Tesseramenti";
+            if (Request::is('rates'))
+                print "Corsi - Rate";
             if (Request::is('course_subscriptions'))
                 print "Corsi - Abbonamenti";
             if (Request::is('courses'))
@@ -315,11 +317,13 @@
                                             <span class="ms-3 d-md-inline">Iscritti</span>
                                         </a>
                                     </li>
-                                    <li class="nav-item" style="{{Request::is('course_list') ? 'background-color: #c5d9e6;' : ''}}">
-                                        <a href="/course_list" class="nav-link d-flex align-items-center linkMenu">
-                                            <span class="ms-3 d-md-inline">Pagamenti</span>
-                                        </a>
-                                    </li>
+                                    @if(false)
+                                        <li class="nav-item" style="{{Request::is('course_list') ? 'background-color: #c5d9e6;' : ''}}">
+                                            <a href="/course_list" class="nav-link d-flex align-items-center linkMenu">
+                                                <span class="ms-3 d-md-inline">Pagamenti</span>
+                                            </a>
+                                        </li>
+                                    @endif
                                 </ul>
                             </div>
                         </div>

+ 9 - 0
resources/views/livewire/course_member.blade.php

@@ -278,6 +278,7 @@
                     <th scope="col">Sesso</th>
                     <th scope="col">Telefono</th>
                     <th scope="col">Certificato</th>
+                    <th scope="col">...</th>
                 </tr>
             </thead>
             <tbody id="checkall-target">
@@ -693,6 +694,14 @@
                             html += '</span>';
                             return html;
                         }
+                    },
+                    { data: 'column_10',
+                        render: function (data, type, row) {
+
+                            console.log(row);
+                            var html = '<a href="/rates?member_id=' + row["column_7"] + '&member_course_id=' + data + '">Dettaglio</a>';
+                            return html;
+                        }  
                     }],
                 layout: {
                     topStart: null,

+ 1 - 1
resources/views/livewire/course_subscription.blade.php

@@ -78,7 +78,7 @@
                                 <div class="form--item">
                                     <label for="months" class="form-label">Mesi</label>
                                     <select class="form-control" id="months" wire:model="months">
-                                        @for($i=1;$i<=12;$i++)
+                                        @for($i=0;$i<=12;$i++)
                                             <option value="{{$i}}">{{$i}}</option>
                                         @endfor
                                     </select>

+ 59 - 53
resources/views/livewire/member.blade.php

@@ -1148,7 +1148,12 @@
                                                                 {{$member_course->course->level->name ?? ""}}<br>
                                                             </td>
                                                             <td style="width:30%">
-                                                                @foreach(json_decode($member_course->when) as $xx => $x)
+                                                                @php
+                                                                $when = $member_course->when;
+                                                                if ($when == '[{"to": "", "day": [], "from": ""}]')
+                                                                    $when = $member_course->course->when;
+                                                                @endphp
+                                                                @foreach(json_decode($when) as $xx => $x)
                                                                     @if($xx > 0)
                                                                         <br>
                                                                     @endif
@@ -1159,17 +1164,7 @@
                                                                 @endforeach
                                                             </td>
                                                             <td style="width:25%">
-                                                                @php
-                                                                $aMo = json_decode($member_course->months);
-                                                                if (sizeof($aMo) == 1)
-                                                                {
-                                                                    print($this->getMonth($aMo[0]->m));
-                                                                }
-                                                                if (sizeof($aMo) > 1)
-                                                                {
-                                                                    print($this->getMonth($aMo[0]->m) . " - " . $this->getMonth($aMo[sizeof($aMo) - 1]->m));
-                                                                }
-                                                                @endphp
+                                                                {{date("d/m/Y", strtotime($member_course->date_from))}} - {{date("d/m/Y", strtotime($member_course->date_to))}}                                                                
                                                             </td>
                                                             @if(false)
                                                                 <td style="width:10%">Iscrizione:<br><b>{{$member_course->status == 1 ? 'Pagata' : ($member_course->status == 2 ? 'Da pagare' : 'Sospesa')}}</b></td>
@@ -1180,29 +1175,31 @@
 
                                                         </tr>
                                                         @if(in_array($member_course->id, $showCourse))
-                                                            <tr>
-                                                                <td colspan="5">
-                                                                    <a class="{{$this->getSubscriptionStatus($member_course->subscribed, $member_course->id)}}" wire:click="setCreateSubscription({{$member_course->subscribed}}, {{$member_course->id}})" style="float:none; width:150px;{{$this->getSubscriptionStatus($member_course->subscribed,$member_course->id) == 'blue' || $this->getSubscriptionStatus($member_course->subscribed,$member_course->id) == 'orange' || $this->getSubscriptionStatus($member_course->subscribed,$member_course->id) == 'yellow' ? 'cursor:pointer' : ''}}">Iscrizione</a><br>
-                                                                    <a class="{{$this->getMonthStatus(9, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(9, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(9, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Set</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(10, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(10, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(10, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Ott</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(11, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(11, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(11, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Nov</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(12, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(12, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(12, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Dic</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(1, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(1, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(1, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Gen</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(2, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(2, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(2, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Feb</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(3, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(3, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(3, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Mar</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(4, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(4, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(4, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Apr</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(5, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(5, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(5, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Mag</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(6, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(6, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(6, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Giu</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(7, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(7, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(7, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Lug</a>&nbsp;
-                                                                    <a class="{{$this->getMonthStatus(8, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(8, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(8, $member_course->months, $member_course->id) , ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Ago</a>&nbsp;
-                                                                </td>
-                                                                <td>
-                                                                    <button 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>&nbsp;
-                                                                    <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>
-                                                                </td>
-                                                            </tr>
-                                                            <tr>
-                                                                <td colspan="6">
+                                                            @if(false)
+                                                                <tr>
+                                                                    <td colspan="5">
+                                                                        <a class="{{$this->getSubscriptionStatus($member_course->subscribed, $member_course->id)}}" wire:click="setCreateSubscription({{$member_course->subscribed}}, {{$member_course->id}})" style="float:none; width:150px;{{$this->getSubscriptionStatus($member_course->subscribed,$member_course->id) == 'blue' || $this->getSubscriptionStatus($member_course->subscribed,$member_course->id) == 'orange' || $this->getSubscriptionStatus($member_course->subscribed,$member_course->id) == 'yellow' ? 'cursor:pointer' : ''}}">Iscrizione</a><br>
+                                                                        <a class="{{$this->getMonthStatus(9, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(9, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(9, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Set</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(10, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(10, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(10, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Ott</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(11, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(11, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(11, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Nov</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(12, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(12, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(12, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Dic</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(1, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(1, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(1, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Gen</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(2, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(2, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(2, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Feb</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(3, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(3, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(3, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ?  'style=cursor:pointer' : ''}}>Mar</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(4, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(4, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(4, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Apr</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(5, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(5, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(5, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Mag</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(6, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(6, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(6, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Giu</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(7, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(7, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(7, $member_course->months, $member_course->id), ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Lug</a>&nbsp;
+                                                                        <a class="{{$this->getMonthStatus(8, $member_course->months, $member_course->id)}}" wire:click="setPayMonth(8, '{{ $member_course->months }}', {{$member_course->id}})" {{in_array($this->getMonthStatus(8, $member_course->months, $member_course->id) , ['blue', 'orange', 'yellow', 'orange half']) ? 'style=cursor:pointer' : ''}}>Ago</a>&nbsp;
+                                                                    </td>
+                                                                    <td>
+                                                                        <button 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>&nbsp;
+                                                                        <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>
+                                                                    </td>
+                                                                </tr>
+                                                            @endif
+                                                            <tr >
+                                                                <td  colspan="5">
                                                                     @if($selectedCourseMember == $member_course->id)
                                                                         @if(sizeof($payMonths) > 0 || $createSubscription)
                                                                             <button class="btn--ui primary" style="color:white" wire:click="newPayment({{$member_course}})">Nuova entrata</button>&nbsp;
@@ -1217,7 +1214,12 @@
                                                                         {{$member_course->notes}}
                                                                     @endif
                                                                 </td>
+                                                                <td>
+                                                                    <button 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>&nbsp;
+                                                                    <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>
+                                                                </td>
                                                             </tr>
+                                                        
                                                         @endif
 
                                                     @endforeach
@@ -1307,29 +1309,33 @@
                                                                 <label for="course_price" class="form-label">Costo mensile</label>
                                                                 <input class="form-control" type="text" id="course_price" placeholder="Costo mensile" wire:model="course_price" onkeyup="onlyNumberAmount(this)">
                                                             </div>
-                                                            @if(false)
-                                                            <div class="col-md-6">
-                                                                <label for="course_status" class="form-label">Stato iscrizione</label>
-                                                                <select id="course_status" class="form-select  @error('course_status') is-invalid @enderror" aria-label="Stato" wire:model="course_status">
-                                                                    <option value="">
-                                                                    <option value="1">Pagata
-                                                                    <option value="2">Da pagare
-                                                                    <option value="3">Sospesa
-                                                                </select>
-                                                            </div>
-                                                            @endif
+                                                            
                                                         </div>
                                                     
-                                                        <div class="row mt-4 course--duration">
-                                                            <div class="col-md-12">
-                                                                <label for="duration" class="form-label">Durata del corso</label>
-                                                                <div class="d-flex course--duration_mounth">
-                                                                    @foreach($course_months_list as $cm)
-                                                                        <a class="{{$this->checkMonth($cm) ? 'selected' : 'notSelected'}}" wire:click="setMonth({{$cm}})">{{getMonthName($cm, true)}}</a>
-                                                                    @endforeach
+                                                        @if(false)
+                                                            <div class="row mt-4 course--duration">
+                                                                <div class="col-md-12">
+                                                                    <label for="duration" class="form-label">Durata del corso</label>
+                                                                    <div class="d-flex course--duration_mounth">
+                                                                        @foreach($course_months_list as $cm)
+                                                                            <a class="{{$this->checkMonth($cm) ? 'selected' : 'notSelected'}}" wire:click="setMonth({{$cm}})">{{getMonthName($cm, true)}}</a>
+                                                                        @endforeach
+                                                                    </div>
                                                                 </div>
                                                             </div>
+                                                        @endif
+
+                                                        <div class="row mt-4">
+                                                            <div class="col-md-6">
+                                                                <label for="course_date_from" class="form-label">Data inizio</label>
+                                                                <input class="form-control" type="date" id="course_date_from" wire:model="course_date_from">
+                                                            </div>
+                                                            <div class="col-md-6">
+                                                                <label for="course_date_to" class="form-label">Data fine</label>
+                                                                <input class="form-control" type="date" id="course_date_to" wire:model="course_date_to">
+                                                            </div>
                                                         </div>
+
                                                         <div class="row mt-4">
                                                             <div class="col-md-6">
                                                                 <label for="course_subscription_price" class="form-label">Costo iscrizione</label>

+ 456 - 0
resources/views/livewire/rate.blade.php

@@ -0,0 +1,456 @@
+<div class="col card--ui" id="card--dashboard">
+
+    <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">Rate</h2>
+        </div>
+
+        <!--
+        <div class="title--section_addButton"  wire:click="add()" style="cursor: pointer;">
+            <div class="btn--ui entrata d-flex justify-items-between">
+                <a href="#" wire:click="add()" style="color:white">Aggiungi</a>
+            </div>
+        </div>
+        -->
+
+    </header>
+
+    <div class="showFilter" style="display:none" wire:ignore.self>
+        <hr size="1">
+        <div class="row g-3">
+            <div class="col-md-2">
+                <div class="row">
+                    <div class="col-md-12" style="margin-bottom:10px;">
+                        <b>Periodo</b>
+                    </div>
+                    <div class="col-12 mb-2">
+                        <input id="dateFrom" type="date" class="form-control filterFrom" name="txtFrom">
+                    </div>
+                    <div class="col-12">
+                        <input id="dateTo" type="date" class="form-control filterTo" name="txtTo">
+                    </div>
+                    <div class="col-6 mt-2">
+                        <button class="btn--ui lightGrey todayButton" style="width:100%"
+                            onclick="setToday('{{date("Y-m-d")}}')">OGGI</button>
+                    </div>
+                    <div class="col-6 mt-2">
+                        <button class="btn--ui lightGrey yesterdayButton" style="width:100%"
+                            onclick="setYesterday('{{date("Y-m-d", strtotime("-1 days"))}}')">IERI</button>
+                    </div>
+                </div>
+            </div>
+            <div class="col-md-2">
+                <div class="row">
+                    <div class="col-md-12" style="margin-bottom:10px;">
+                        <b>Stato</b>
+                    </div>
+                    <div class="col-12">
+                        <select class="form-select filterStatus">
+                            <option value="">--Seleziona--
+                            <option value="1">Attiva
+                            <option value="99">Annullata
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-md-3">
+                <div class="row">
+                    <div class="col-md-12" style="margin-bottom:10px;">
+                        <b>Cerca Utente</b>
+                    </div>
+                    <div class="col-12">
+                        <select class="form-select filterMember" wire:model="filteredMemberId">
+                            <option value="">--Seleziona Utente--</option>
+                            @foreach($members as $member)
+                                <option value="{{ $member->id }}">{{ $member->last_name }} {{ $member->first_name }}
+                                </option>
+                            @endforeach
+                        </select>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="row g-3">
+            <div class="col-md-12" style="text-align:right">
+                <button class="btn--ui_outline light" onclick="reset()">RESET</button>
+                <button class="btn--ui" onclick="loadDataTable()">FILTRA</button>
+            </div>
+        </div>
+        <hr size="1">
+    </div>
+
+    <section id="resume-table">
+        <div class="compare--chart_wrapper d-none"></div>
+
+        <h3>{{$detail}}</h3><br>
+
+        <table class="table tablesaw tableHead tablesaw-stack table--lista_ricevute" id="tablesaw-350" width="100%">
+            <thead>
+                <tr>
+                    <th scope="col"></th>
+                    <th scope="col">Data scadenza</th>
+                    <th scope="col">Rata</th>
+                    <th scope="col">Competenza</th>
+                    <th scope="col">Prezzo</th>
+                    <th scope="col">Stato pagamento</th>
+                    <th scope="col">...</th>
+                </tr>
+            </thead>
+            <tbody id="checkall-target">
+                @foreach($records as $record)
+                    <tr>
+                        <td></td>
+                        <td>{{date("d/m/Y", strtotime($record->date))}}</td>
+                        <td>{{$record->course_subscription ? $record->course_subscription->name : 'Iscrizione'}}</td>
+                        <td></td>
+                        <td>{{formatPrice($record->price)}}</td>
+                        <td>
+                            <span class="tablesaw-cell-content">
+                                <span class="badge tessera-badge {{$record->status == 0 ? 'due' : ($record->status == 1 ? 'active' : 'suspended')}}">{{$record->status == 0 ? 'Da pagare' : ($record->status == 1 ? 'Pagato' : 'Sospeso')}}</span>
+                            </span>
+                        </td>
+                        <td>
+                            @if($record->status == 1)
+                                <button type="button" class="btn u"
+                                    onclick="document.location.href='/in?id={{$record->record_id}}'" data-bs-toggle="popover"
+                                    data-bs-trigger="hover focus" data-bs-placement="bottom"
+                                    data-bs-content="Visualizza ricevuta"><i class="fa-regular fa-eye"></i></button>
+                            @endif
+                            @if($record->status == 0)
+                                <a target="_blank" class="btn  u" href="/in?new=1&memberId={{$record->member_id}}&causalId=&subCausalId=&createSubscription=&months={{implode("|", json_decode($record->months))}}&price={{$record->price}}&subscription_price=&courseId={{$record->member_course_id}}&rateId={{$record->id}}" data-bs-toggle="popover"
+                                data-bs-trigger="hover focus" data-bs-placement="bottom"
+                                data-bs-content="Crea entrata"><i class="fa-regular fa-file-lines"></i></a>
+                            @endif
+                        </td>
+                    </tr>
+                @endforeach
+            </tbody>
+        </table>
+
+    </section>
+
+</div>
+
+
+@push('scripts')
+    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
+    <style>
+        .select2-container--default .select2-selection--single {
+            background-color: #E9F0F5;
+            border: 0.0625rem solid #DFE5EB;
+            font-size: 0.75rem;
+        }
+
+        .select2-selection {
+            height: 38px !important;
+        }
+
+        .select2-selection__rendered {
+            padding-top: 3px;
+        }
+
+        .select2 {
+            width: 100% !important;
+        }
+    </style>
+    <script src="https://code.jquery.com/jquery-2.2.4.min.js"
+        integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
+    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
+@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>
+
+
+    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
+    <style>
+        .select2-container--default .select2-selection--single {
+            background-color: #E9F0F5;
+            border: 0.0625rem solid #DFE5EB;
+            font-size: 0.75rem;
+        }
+
+        .select2-selection {
+            height: 38px !important;
+        }
+
+        .select2-selection__rendered {
+            padding-top: 3px;
+        }
+
+        .select2 {
+            width: 100% !important;
+        }
+
+        .select2-selection--multiple {
+            overflow: hidden !important;
+            height: auto !important;
+        }
+
+        .select2-container {
+            box-sizing: border-box;
+            display: inline-block;
+            margin: 0;
+            position: relative;
+            vertical-align: middle;
+        }
+
+        .select2-container .select2-selection--single {
+            box-sizing: border-box;
+            cursor: pointer;
+            display: block;
+            height: 38px;
+            user-select: none;
+            -webkit-user-select: none;
+        }
+
+        .select2-container .select2-selection--single .select2-selection__rendered {
+            display: block;
+            padding-left: 8px;
+            padding-right: 20px;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+        }
+
+        .select2-selection__choice__display {
+            color: #000000 !important;
+        }
+    </style>
+    <script src="https://code.jquery.com/jquery-2.2.4.min.js"
+        integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
+    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></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 () {
+            loadDataTable();
+        });
+
+        $('.filterStatus').select2({ "language": { "noResults": function () { return "Nessun risultato"; } } });
+        $('.filterMember').select2({
+            "language": { "noResults": function () { return "Nessun risultato"; } }
+        });
+
+
+        Livewire.on('load-data-table', () => {
+            $('.filterStatus').select2({ "language": { "noResults": function () { return "Nessun risultato"; } } });
+            $('.filterMember').select2({ "language": { "noResults": function () { return "Nessun risultato"; } } });
+
+            loadDataTable();
+        });
+
+        Livewire.on('load-data-table', () => {
+            setTimeout(function () { loadDataTable() }, 100);
+        });
+
+        Livewire.on('destroy-data-table', () => {
+            $('#tablesaw-350').DataTable().destroy();
+        });
+
+        function destroyDataTable() {
+            $('#tablesaw-350').DataTable().destroy();
+        }
+
+        var isFilter = false;
+        $(document).ready(function () {
+            $(document).on("click", ".showHideFilter", function () {
+                if (isFilter) {
+                    isFilter = false;
+                    $(".showFilter").hide();
+                }
+                else {
+                    isFilter = true;
+                    $(".showFilter").show();
+                }
+            });
+        });
+
+        function sendMail(id) {
+            $.get("/receipt/mail/" + id, function (data, status) {
+                alert('Mail inviata');
+            });
+        }
+
+        @if(isset($_GET["showFilters"]))
+            var filterStatus = localStorage.getItem("filterStatusReceipt");
+            if (filterStatus) {
+                $('.filterStatus').val(filterStatus).trigger('change');
+            }
+            var filterFrom = localStorage.getItem("filterFromReceipt");
+            if (filterFrom) {
+                $('input[name="txtFrom"]').val(filterFrom);
+            }
+            var filterTo = localStorage.getItem("filterToReceipt");
+            if (filterTo) {
+                $('input[name="txtTo"]').val(filterFrom);
+            }
+            var filterMember = localStorage.getItem("filterMemberReceipt");
+            if (filterMember) {
+                $('.filterMember').val(filterMember).trigger('change');
+            }
+        @endif
+
+            function reset() {
+                $(".todayButton").addClass("lightGrey");
+                $(".yesterdayButton").addClass("lightGrey");
+                $('.filterStatus').val(null).trigger("change");
+                $('.filterMember').val(null).trigger("change");
+                $('.filterFrom').val('');
+                $('.filterTo').val('');
+                destroyDataTable();
+                loadDataTable();
+            }
+
+        function loadDataTable() {
+
+            if ($.fn.DataTable.isDataTable('#tablesaw-350')) {
+                $('#tablesaw-350').DataTable().destroy();
+            }
+
+            var filterStatus = $('.filterStatus').val();
+            localStorage.setItem("filterStatusReceipt", filterStatus);
+
+            var filterFrom = $('.filterFrom').val();
+            localStorage.setItem("filterFromReceipt", filterFrom);
+
+            var filterTo = $('.filterTo').val();
+            localStorage.setItem("filterToReeipt", filterTo);
+
+            var filterMember = $('.filterMember').val();
+            localStorage.setItem("filterMemberReceipt", filterMember);
+
+            $('#tablesaw-350').DataTable({
+                serverSide: true,
+                ajax: {
+                    url: '/get_receipts?filterStatus=' + filterStatus + '&filterFrom=' + filterFrom + '&filterTo=' + filterTo + '&filterMember=' + filterMember,
+                    dataSrc: function (json) {
+                        if (json.totals) {
+                            totals = json.totals;
+                        }
+                        return json.data;
+                    }
+                },
+                thead: {
+                    'th': { 'background-color': 'blue' }
+                },
+                columns: [
+                    {
+                        data: 'year'
+                    },
+                    {
+                        data: 'number'
+                    },
+                    {
+                        data: 'last_name'
+                    },
+                    {
+                        data: 'first_name'
+                    },
+                    {
+                        data: "status",
+                        render: function (data) {
+                            // Split class and text
+                            var ret = '<span class="tablesaw-cell-content"><span class="badge tessera-badge ' + (data == 1 ? 'active' : 'suspended') + '">' + (data == 1 ? 'Attiva' : 'Annullata') + '</span></span>';
+                            return ret;
+                        }
+                    },
+                    {
+                        data: 'date'
+                    },
+                    {
+                        data: 'totals'
+                    },
+                    {
+                        data: "action",
+                        render: function (data) {
+                            var ids = data.split("|");
+                            // Split class and text
+                            var ret = '<button type="button" class="btn u" onclick="document.location.href=' + "'" + '/in?id=' + ids[1] + "&from=receipts'" + '" data-bs-toggle="popover"  data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Visualizza ricevuta"><i class="fa-regular fa-eye"></i></button>';
+                            ret += '<a target="_blank" class="btn  u" href="/receipt/' + ids[0] + '" data-bs-toggle="popover"  data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Stampa ricevuta"><i class="fa-regular fa-file-lines"></i></a>';
+                            ret += '<a target="_blank" class="btn u" onclick="sendMail(' + ids[0] + ')"><i class="fa-regular fa-envelope" data-bs-toggle="popover"  data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Invia email"></i></a>';
+                            return ret;
+                        }
+                    }
+                ],
+                layout: {
+                    topStart: null,
+                    topEnd: null,
+                    top1A: {
+                        buttons: [
+                            {
+                                extend: 'collection',
+                                text: 'ESPORTA',
+                                buttons: [
+                                    {
+                                        extend: 'excelHtml5', "action": newexportaction,
+                                        title: 'Ricevute',
+                                        exportOptions: {
+                                            columns: ":not(':last')"
+                                        }
+                                    },
+                                    {
+                                        extend: 'pdfHtml5', "action": newexportaction,
+                                        title: 'Ricevute',
+                                        exportOptions: {
+                                            columns: ":not(':last')"
+                                        }
+                                    },
+                                    {
+                                        extend: 'print', "action": newexportaction,
+                                        text: 'Stampa',
+                                        title: 'Ricevute',
+                                        exportOptions: {
+                                            columns: ":not(':last')"
+                                        }
+                                    }
+                                ],
+                                dropup: true
+                            }
+                        ]
+                    },
+                    top1B: {
+                        pageLength: {
+                            menu: [[10, 25, 50, 100, 100000], [10, 25, 50, 100, "Tutti"]]
+                        }
+                    },
+                    top1C: 'search',
+                },
+                order: [[0, 'desc'], [1, 'asc']],
+                pagingType: 'numbers',
+                "language": {
+                    "url": "/assets/js/Italian.json"
+                },
+                "fnInitComplete": function (oSettings, json) {
+                    var html = '&nbsp;<a href="#" class="showHideFilter btn--ui"><i class="fa-solid fa-sliders"></i></a>';
+                    $(".dt-search").append(html);
+                }
+            });
+            $('#tablesaw-350 thead tr th').addClass('col');
+            $('#tablesaw-350 thead tr th').css("background-color", "#f6f8fa");
+            $('#tablesaw-350').on('draw.dt', function () {
+                $('[data-bs-toggle="popover"]').popover()
+            });
+
+            $(document).ready(function () {
+                $(document).on("click", ".addData", function () {
+                    $(".title--section_addButton").trigger("click")
+                });
+            });
+
+        }*/
+
+    </script>
+@endpush

+ 2 - 1
routes/web.php

@@ -1,5 +1,4 @@
 <?php
-
 use Illuminate\Support\Facades\Route;
 use Barryvdh\DomPDF\Facade\Pdf;
 use Illuminate\Support\Facades\Redirect;
@@ -80,6 +79,7 @@ Route::group(['middleware' => 'auth'], function () {
     Route::get('/records_in_out', \App\Http\Livewire\RecordINOUT::class);
     Route::get('/users', \App\Http\Livewire\User::class);
     Route::get('/profile', \App\Http\Livewire\Profile::class);
+    Route::get('/rates', \App\Http\Livewire\Rate::class);
     Route::get('/reports', \App\Http\Livewire\Reports::class);
 });
 
@@ -1424,6 +1424,7 @@ Route::get('/get_course_members', function () {
             "column_5" => $r->phone,
             "column_6" => $certificateInfo,
             "column_7" => $r->member_id,
+            "column_10" => $r->id,
         );
     }