FabioFratini 10 ماه پیش
والد
کامیت
5eb15e13ba
1فایلهای تغییر یافته به همراه134 افزوده شده و 30 حذف شده
  1. 134 30
      routes/web.php

+ 134 - 30
routes/web.php

@@ -6,6 +6,8 @@ use Illuminate\Support\Facades\Redirect;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\Artisan;
+use Illuminate\Support\Facades\Log;
+
 
 
 /*
 /*
 |--------------------------------------------------------------------------
 |--------------------------------------------------------------------------
@@ -30,7 +32,7 @@ Route::get('/login', function () {
 
 
 Route::post('/login', function () {
 Route::post('/login', function () {
 
 
-    if(\Auth::attempt(array('email' => $_POST["email"], 'password' => $_POST["password"])))
+    if(Auth::attempt(array('email' => $_POST["email"], 'password' => $_POST["password"])))
     {
     {
         return Redirect::to('/dashboard');
         return Redirect::to('/dashboard');
     }
     }
@@ -255,22 +257,66 @@ Route::group(['middleware' => 'auth'],function(){
             $allScadIds = [];
             $allScadIds = [];
 
 
             foreach ($scadenzaValues as $filterValue) {
             foreach ($scadenzaValues as $filterValue) {
-                if ($filterValue == "1")
-                    $scadIds = \App\Models\MemberCertificate::where('expire_date', '<', date("Y-m-d"))->pluck('member_id')->toArray();
-                else if ($filterValue == "2")
-                    $scadIds = \App\Models\MemberCertificate::where('expire_date', '>=', date("Y-m-d"))
-                    ->where('expire_date', '<=', date("Y-m-d", strtotime("+1 month")))
-                    ->pluck('member_id')->toArray();
-                else if ($filterValue == "3")
+                if ($filterValue == "1") {
+                    $memberLatestCerts = DB::table('member_certificates')
+                        ->select('member_id', DB::raw('MAX(expire_date) as latest_expire_date'))
+                        ->groupBy('member_id')
+                        ->get();
+
+                    $expiredMemberIds = [];
+                    foreach ($memberLatestCerts as $cert) {
+                        if (date('Y-m-d', strtotime($cert->latest_expire_date)) < date('Y-m-d')) {
+                            $expiredMemberIds[] = $cert->member_id;
+                        }
+                    }
+                    $scadIds = $expiredMemberIds;
+
+                    Log::info("Expired certificates filter - member count: " . count($scadIds));
+                    Log::info("Expired certificates member IDs: " . implode(", ", $scadIds));
+                } else if ($filterValue == "2") {
+                    $memberLatestCerts = DB::table('member_certificates')
+                        ->select('member_id', DB::raw('MAX(expire_date) as latest_expire_date'))
+                        ->groupBy('member_id')
+                        ->get();
+
+                    $expiringMemberIds = [];
+                    foreach ($memberLatestCerts as $cert) {
+                        $expireDate = date('Y-m-d', strtotime($cert->latest_expire_date));
+                        $today = date('Y-m-d');
+                        $oneMonthLater = date('Y-m-d', strtotime("+1 month"));
+
+                        if ($expireDate >= $today && $expireDate <= $oneMonthLater) {
+                            $expiringMemberIds[] = $cert->member_id;
+                        }
+                    }
+                    $scadIds = $expiringMemberIds;
+                } else if ($filterValue == "3") {
                     $scadIds = \App\Models\Member::whereNotIn('id', \App\Models\MemberCertificate::pluck('member_id'))->pluck('id')->toArray();
                     $scadIds = \App\Models\Member::whereNotIn('id', \App\Models\MemberCertificate::pluck('member_id'))->pluck('id')->toArray();
-                else if ($filterValue == "4")
-                    $scadIds = \App\Models\MemberCertificate::where('expire_date', '>', date("Y-m-d", strtotime("+1 month")))->pluck('member_id')->toArray();
+                } else if ($filterValue == "4") {
+                    $memberLatestCerts = DB::table('member_certificates')
+                        ->select('member_id', DB::raw('MAX(expire_date) as latest_expire_date'))
+                        ->groupBy('member_id')
+                        ->get();
+
+                    $validMemberIds = [];
+                    foreach ($memberLatestCerts as $cert) {
+                        $expireDate = date('Y-m-d', strtotime($cert->latest_expire_date));
+                        $oneMonthLater = date('Y-m-d', strtotime("+1 month"));
+
+                        if ($expireDate > $oneMonthLater) {
+                            $validMemberIds[] = $cert->member_id;
+                        }
+                    }
+                    $scadIds = $validMemberIds;
+                }
 
 
                 $allScadIds = array_merge($allScadIds, $scadIds);
                 $allScadIds = array_merge($allScadIds, $scadIds);
             }
             }
 
 
             $allScadIds = array_unique($allScadIds);
             $allScadIds = array_unique($allScadIds);
 
 
+            Log::info("Total members after filterScadenza: " . count($allScadIds));
+
             $x = $x->whereIn('id', $allScadIds);
             $x = $x->whereIn('id', $allScadIds);
         }
         }
         if ($_GET["filterStatus"] != "null")
         if ($_GET["filterStatus"] != "null")
@@ -340,6 +386,18 @@ Route::group(['middleware' => 'auth'],function(){
         else
         else
             $x = $x->get();
             $x = $x->get();
 
 
+        $latestCertificates = [];
+        foreach ($x as $member) {
+            $latestCert = \App\Models\MemberCertificate::where('member_id', $member->id)
+                ->orderBy('expire_date', 'desc')
+                ->first();
+
+            if ($latestCert) {
+                $latestCertificates[$member->id] = $latestCert->expire_date;
+            }
+        }
+        Log::info($latestCertificates);
+
         foreach($x as $idx => $r)
         foreach($x as $idx => $r)
         {
         {
 
 
@@ -360,7 +418,23 @@ Route::group(['middleware' => 'auth'],function(){
             // $has_certificate = $r->hasCertificate();
             // $has_certificate = $r->hasCertificate();
             $y = '';
             $y = '';
 
 
-            if ($r->certificate_date != '') {
+            if (isset($latestCertificates[$r->id])) {
+                Log::info("Using latest certificate for member " . $r->id);
+                $latest_date = $latestCertificates[$r->id];
+                $status = '';
+
+                if ($latest_date < date("Y-m-d")) {
+                    $status = "0"; // Expired
+                } else if ($latest_date <= date("Y-m-d", strtotime("+1 month"))) {
+                    $status = "1"; // Expiring soon
+                } else {
+                    $status = "2"; // Valid
+                }
+
+                $y = $status . "|" . date("d/m/Y", strtotime($latest_date));
+            } else if ($r->certificate_date != '') {
+                Log::info("Member " . $r->id . " not found in latest certificates array");
+
                 $status = '';
                 $status = '';
 
 
                 if ($r->certificate_date < date("Y-m-d")) {
                 if ($r->certificate_date < date("Y-m-d")) {
@@ -1296,34 +1370,64 @@ Route::group(['middleware' => 'auth'],function(){
 
 
             foreach ($scadenzaValues as $filterValue) {
             foreach ($scadenzaValues as $filterValue) {
                 if ($filterValue == "1") {
                 if ($filterValue == "1") {
-                    $scadIds = \App\Models\MemberCertificate::where('expire_date', '<', date("Y-m-d"))
-                        ->pluck('member_id')
-                        ->toArray();
-                    $allScadIds = array_merge($allScadIds, $scadIds);
-                }
-                else if ($filterValue == "2") {
-                    $scadIds = \App\Models\MemberCertificate::where('expire_date', '>=', date("Y-m-d"))
-                        ->where('expire_date', '<=', date("Y-m-d", strtotime("+1 month")))
-                        ->pluck('member_id')
-                        ->toArray();
-                    $allScadIds = array_merge($allScadIds, $scadIds);
-                }
-                else if ($filterValue == "3") {
+                    $memberLatestCerts = DB::table('member_certificates')
+                        ->select('member_id', DB::raw('MAX(expire_date) as latest_expire_date'))
+                        ->groupBy('member_id')
+                        ->get();
+
+                    $expiredMemberIds = [];
+                    foreach ($memberLatestCerts as $cert) {
+                        if (date('Y-m-d', strtotime($cert->latest_expire_date)) < date('Y-m-d')) {
+                            $expiredMemberIds[] = $cert->member_id;
+                        }
+                    }
+                    $allScadIds = array_merge($allScadIds, $expiredMemberIds);
+
+                    Log::info("Course members - Expired certificates filter - member count: " . count($expiredMemberIds));
+                } else if ($filterValue == "2") {
+                    $memberLatestCerts = DB::table('member_certificates')
+                        ->select('member_id', DB::raw('MAX(expire_date) as latest_expire_date'))
+                        ->groupBy('member_id')
+                        ->get();
+
+                    $expiringMemberIds = [];
+                    foreach ($memberLatestCerts as $cert) {
+                        $expireDate = date('Y-m-d', strtotime($cert->latest_expire_date));
+                        $today = date('Y-m-d');
+                        $oneMonthLater = date('Y-m-d', strtotime("+1 month"));
+
+                        if ($expireDate >= $today && $expireDate <= $oneMonthLater) {
+                            $expiringMemberIds[] = $cert->member_id;
+                        }
+                    }
+                    $allScadIds = array_merge($allScadIds, $expiringMemberIds);
+                } else if ($filterValue == "3") {
                     $scadIds = \App\Models\Member::whereNotIn('id', \App\Models\MemberCertificate::pluck('member_id'))
                     $scadIds = \App\Models\Member::whereNotIn('id', \App\Models\MemberCertificate::pluck('member_id'))
                         ->pluck('id')
                         ->pluck('id')
                         ->toArray();
                         ->toArray();
                     $allScadIds = array_merge($allScadIds, $scadIds);
                     $allScadIds = array_merge($allScadIds, $scadIds);
-                }
-                else if ($filterValue == "4") {
-                    $scadIds = \App\Models\MemberCertificate::where('expire_date', '>', date("Y-m-d", strtotime("+1 month")))
-                        ->pluck('member_id')
-                        ->toArray();
-                    $allScadIds = array_merge($allScadIds, $scadIds);
+                } else if ($filterValue == "4") {
+                    $memberLatestCerts = DB::table('member_certificates')
+                        ->select('member_id', DB::raw('MAX(expire_date) as latest_expire_date'))
+                        ->groupBy('member_id')
+                        ->get();
+
+                    $validMemberIds = [];
+                    foreach ($memberLatestCerts as $cert) {
+                        $expireDate = date('Y-m-d', strtotime($cert->latest_expire_date));
+                        $oneMonthLater = date('Y-m-d', strtotime("+1 month"));
+
+                        if ($expireDate > $oneMonthLater) {
+                            $validMemberIds[] = $cert->member_id;
+                        }
+                    }
+                    $allScadIds = array_merge($allScadIds, $validMemberIds);
                 }
                 }
             }
             }
 
 
             // Remove duplicates
             // Remove duplicates
             $allScadIds = array_unique($allScadIds);
             $allScadIds = array_unique($allScadIds);
+            Log::info("Course members - Total members after filterCertificateScadenza: " . count($allScadIds));
 
 
             // Apply filter using the collected IDs
             // Apply filter using the collected IDs
             $datas = $datas->whereIn('member_id', $allScadIds);
             $datas = $datas->whereIn('member_id', $allScadIds);