|
|
@@ -32,6 +32,10 @@ class Dashboard extends Component
|
|
|
public $paid = 0;
|
|
|
|
|
|
public $courses = [];
|
|
|
+ public $active_member_courses = [];
|
|
|
+ public $active_member_courses_count = 0;
|
|
|
+ public $active_courses = 0;
|
|
|
+ public $active_subscriptions = 0;
|
|
|
public $fields = [];
|
|
|
public $recentUsers = [];
|
|
|
public $recentTransactions = [];
|
|
|
@@ -442,130 +446,167 @@ class Dashboard extends Component
|
|
|
'today_name' => $todayName
|
|
|
]);
|
|
|
|
|
|
- $memberCourses = \App\Models\MemberCourse::with(['course.level', 'course.frequency', 'member'])
|
|
|
- ->whereIn('status', [0, 1])
|
|
|
- ->whereHas('course', function ($query) {
|
|
|
- $query->whereNotNull('when');
|
|
|
- })
|
|
|
- ->get();
|
|
|
-
|
|
|
- Log::info('Total member courses found', [
|
|
|
- 'count' => $memberCourses->count()
|
|
|
- ]);
|
|
|
-
|
|
|
- $activeCourses = $memberCourses->filter(function ($memberCourse) use ($todayName) {
|
|
|
- try {
|
|
|
- $whenData = json_decode($memberCourse->course->when, true);
|
|
|
-
|
|
|
- if (!is_array($whenData)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- foreach ($whenData as $schedule) {
|
|
|
- if (
|
|
|
- isset($schedule['day']) &&
|
|
|
- is_array($schedule['day']) &&
|
|
|
- in_array($todayName, $schedule['day'])
|
|
|
- ) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (\Exception $e) {
|
|
|
- Log::debug('Error parsing course schedule', [
|
|
|
- 'member_course_id' => $memberCourse->id,
|
|
|
- 'course_id' => $memberCourse->course->id,
|
|
|
- 'when' => $memberCourse->course->when,
|
|
|
- 'error' => $e->getMessage()
|
|
|
- ]);
|
|
|
- }
|
|
|
- return false;
|
|
|
- });
|
|
|
-
|
|
|
- Log::info('Active courses found for today', [
|
|
|
- 'count' => $activeCourses->count(),
|
|
|
- 'course_ids' => $activeCourses->pluck('course.id')->toArray()
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->courses = $activeCourses->map(function ($memberCourse) use ($todayName) {
|
|
|
- $whenData = json_decode($memberCourse->course->when, true);
|
|
|
-
|
|
|
- Log::debug('Processing course schedule', [
|
|
|
- 'member_course_id' => $memberCourse->id,
|
|
|
- 'course_id' => $memberCourse->course->id,
|
|
|
- 'course_name' => $memberCourse->course->name,
|
|
|
- 'when_data' => $whenData,
|
|
|
- 'looking_for_day' => $todayName
|
|
|
- ]);
|
|
|
-
|
|
|
- $todaySchedule = null;
|
|
|
-
|
|
|
- if (is_array($whenData)) {
|
|
|
- foreach ($whenData as $schedule) {
|
|
|
- if (
|
|
|
- isset($schedule['day']) &&
|
|
|
- is_array($schedule['day']) &&
|
|
|
- in_array($todayName, $schedule['day'])
|
|
|
- ) {
|
|
|
- $todaySchedule = $schedule;
|
|
|
- Log::debug('Found matching schedule', [
|
|
|
- 'schedule' => $schedule,
|
|
|
- 'course_id' => $memberCourse->course->id
|
|
|
- ]);
|
|
|
- break;
|
|
|
- }
|
|
|
+ // $memberCourses = \App\Models\MemberCourse::with(['course.level', 'course.frequency', 'member'])
|
|
|
+ // ->whereIn('status', [0, 1])
|
|
|
+ // ->whereHas('course', function ($query) {
|
|
|
+ // $query->whereNotNull('when');
|
|
|
+ // })
|
|
|
+ // ->get();
|
|
|
+
|
|
|
+ // Log::info('Total member courses found', [
|
|
|
+ // 'count' => $memberCourses->count()
|
|
|
+ // ]);
|
|
|
+
|
|
|
+ // $activeCourses = $memberCourses->filter(function ($memberCourse) use ($todayName) {
|
|
|
+ // try {
|
|
|
+ // $whenData = json_decode($memberCourse->course->when, true);
|
|
|
+
|
|
|
+ // if (!is_array($whenData)) {
|
|
|
+ // return false;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // foreach ($whenData as $schedule) {
|
|
|
+ // if (
|
|
|
+ // isset($schedule['day']) &&
|
|
|
+ // is_array($schedule['day']) &&
|
|
|
+ // in_array($todayName, $schedule['day'])
|
|
|
+ // ) {
|
|
|
+ // return true;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // } catch (\Exception $e) {
|
|
|
+ // Log::debug('Error parsing course schedule', [
|
|
|
+ // 'member_course_id' => $memberCourse->id,
|
|
|
+ // 'course_id' => $memberCourse->course->id,
|
|
|
+ // 'when' => $memberCourse->course->when,
|
|
|
+ // 'error' => $e->getMessage()
|
|
|
+ // ]);
|
|
|
+ // }
|
|
|
+ // return false;
|
|
|
+ // });
|
|
|
+
|
|
|
+ // Log::info('Active courses found for today', [
|
|
|
+ // 'count' => $activeCourses->count(),
|
|
|
+ // 'course_ids' => $activeCourses->pluck('course.id')->toArray()
|
|
|
+ // ]);
|
|
|
+
|
|
|
+ // $this->courses = $activeCourses->map(function ($memberCourse) use ($todayName) {
|
|
|
+ // $whenData = json_decode($memberCourse->course->when, true);
|
|
|
+
|
|
|
+ // Log::debug('Processing course schedule', [
|
|
|
+ // 'member_course_id' => $memberCourse->id,
|
|
|
+ // 'course_id' => $memberCourse->course->id,
|
|
|
+ // 'course_name' => $memberCourse->course->name,
|
|
|
+ // 'when_data' => $whenData,
|
|
|
+ // 'looking_for_day' => $todayName
|
|
|
+ // ]);
|
|
|
+
|
|
|
+ // $todaySchedule = null;
|
|
|
+
|
|
|
+ // if (is_array($whenData)) {
|
|
|
+ // foreach ($whenData as $schedule) {
|
|
|
+ // if (
|
|
|
+ // isset($schedule['day']) &&
|
|
|
+ // is_array($schedule['day']) &&
|
|
|
+ // in_array($todayName, $schedule['day'])
|
|
|
+ // ) {
|
|
|
+ // $todaySchedule = $schedule;
|
|
|
+ // Log::debug('Found matching schedule', [
|
|
|
+ // 'schedule' => $schedule,
|
|
|
+ // 'course_id' => $memberCourse->course->id
|
|
|
+ // ]);
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // if (!$todaySchedule) {
|
|
|
+ // Log::debug('No matching schedule found for today', [
|
|
|
+ // 'course_id' => $memberCourse->course->id,
|
|
|
+ // 'when_data' => $whenData
|
|
|
+ // ]);
|
|
|
+ // return null;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // $days = implode('-', array_map('ucfirst', $todaySchedule['day']));
|
|
|
+ // $course = $memberCourse->course;
|
|
|
+
|
|
|
+ // $courseName = $course->name ?? 'Corso Sconosciuto';
|
|
|
+ // $levelName = $course->level?->name ?? '';
|
|
|
+ // $frequencyName = $course->frequency?->name ?? '';
|
|
|
+ // $typeName = $course->getFormattedTypeField() ?? '';
|
|
|
+
|
|
|
+ // $fullCourseName = $course->getDetailsName();
|
|
|
+
|
|
|
+ // return [
|
|
|
+ // 'time' => $todaySchedule['from'] . ' - ' . $todaySchedule['to'],
|
|
|
+ // 'course_name' => $courseName,
|
|
|
+ // 'full_name' => $fullCourseName,
|
|
|
+ // 'level_name' => $levelName,
|
|
|
+ // 'type_name' => $typeName,
|
|
|
+ // 'frequency_name' => $frequencyName,
|
|
|
+ // 'days' => $days,
|
|
|
+ // 'type' => $course->type ?? 'Standard',
|
|
|
+ // 'from_time' => $todaySchedule['from'],
|
|
|
+ // 'course_id' => $course->id,
|
|
|
+ // 'member_course_id' => $memberCourse->id
|
|
|
+ // ];
|
|
|
+ // })->filter()->unique('course_id')->values();
|
|
|
+
|
|
|
+ // $sortedCourses = $this->courses->sortBy('from_time')->take(5)->values();
|
|
|
+
|
|
|
+ // Log::info('Courses sorted by time', [
|
|
|
+ // 'sorted_courses' => $sortedCourses->map(function ($course) {
|
|
|
+ // return [
|
|
|
+ // 'time' => $course['time'],
|
|
|
+ // 'from_time' => $course['from_time'],
|
|
|
+ // 'course_name' => $course['course_name'],
|
|
|
+ // 'course_id' => $course['course_id']
|
|
|
+ // ];
|
|
|
+ // })->toArray()
|
|
|
+ // ]);
|
|
|
+
|
|
|
+ // $this->courses = $sortedCourses->map(function ($course) {
|
|
|
+ // unset($course['from_time'], $course['member_course_id'], $course['course_id']);
|
|
|
+ // return $course;
|
|
|
+ // })->toArray();
|
|
|
+
|
|
|
+ $now = date('Y-m-d');
|
|
|
+ $day = substr(Carbon::now()->locale('it_IT')->dayName, 0, 3);
|
|
|
+ $this->courses = \App\Models\Course::where('enabled', true)->where('date_from', '<=', $now)->where('date_to', '>=', $now)->whereJsonContains('when', ['day' => $day])->get()->map(function ($t) use ($day) {
|
|
|
+ $when = json_decode($t->when, true);
|
|
|
+ $time = '';
|
|
|
+ foreach ($when as $w) {
|
|
|
+ if (in_array($day, $w['day'])) {
|
|
|
+ $time = $w['from'] . ' - ' . $w['to'];
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (!$todaySchedule) {
|
|
|
- Log::debug('No matching schedule found for today', [
|
|
|
- 'course_id' => $memberCourse->course->id,
|
|
|
- 'when_data' => $whenData
|
|
|
- ]);
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- $days = implode('-', array_map('ucfirst', $todaySchedule['day']));
|
|
|
- $course = $memberCourse->course;
|
|
|
-
|
|
|
- $courseName = $course->name ?? 'Corso Sconosciuto';
|
|
|
- $levelName = $course->level?->name ?? '';
|
|
|
- $frequencyName = $course->frequency?->name ?? '';
|
|
|
- $typeName = $course->getFormattedTypeField() ?? '';
|
|
|
-
|
|
|
- $fullCourseName = $course->getDetailsName();
|
|
|
-
|
|
|
return [
|
|
|
- 'time' => $todaySchedule['from'] . ' - ' . $todaySchedule['to'],
|
|
|
- 'course_name' => $courseName,
|
|
|
- 'full_name' => $fullCourseName,
|
|
|
- 'level_name' => $levelName,
|
|
|
- 'type_name' => $typeName,
|
|
|
- 'frequency_name' => $frequencyName,
|
|
|
- 'days' => $days,
|
|
|
- 'type' => $course->type ?? 'Standard',
|
|
|
- 'from_time' => $todaySchedule['from'],
|
|
|
- 'course_id' => $course->id,
|
|
|
- 'member_course_id' => $memberCourse->id
|
|
|
+ 'full_name' => $t->getDetailsName(),
|
|
|
+ 'course_name' => ($t->discipline?->name ? $t->discipline->name . " - " : "") . $t->name,
|
|
|
+ 'time' => $time,
|
|
|
];
|
|
|
- })->filter()->unique('course_id')->values();
|
|
|
+ })->sortBy([['time', 'asc'], ['course_name', 'asc']], SORT_NATURAL)->toArray();
|
|
|
+ $this->courses = array_values($this->courses);
|
|
|
|
|
|
- $sortedCourses = $this->courses->sortBy('from_time')->take(5)->values();
|
|
|
+ $member_courses = \App\Models\MemberCourse::where('date_from', '<=', $now)->where('date_to', '>=', $now)->get();
|
|
|
+ foreach ($member_courses as $member_course) {
|
|
|
+ if (!isset($this->active_member_courses[$member_course->course_id])) {
|
|
|
+ $this->active_member_courses[$member_course->course_id] = ['name' => $member_course->course->getDetailsName(), 'count' => 0];
|
|
|
+ }
|
|
|
+ $this->active_member_courses[$member_course->course_id]['count']++;
|
|
|
+ $this->active_member_courses_count++;
|
|
|
+ }
|
|
|
+ usort($this->active_member_courses, function ($a, $b) {
|
|
|
+ if ($a['count'] == $b['count']) {
|
|
|
+ return strcmp($a['name'], $b['name']);
|
|
|
+ }
|
|
|
+ return $a['count'] < $b['count'];
|
|
|
+ });
|
|
|
|
|
|
- Log::info('Courses sorted by time', [
|
|
|
- 'sorted_courses' => $sortedCourses->map(function ($course) {
|
|
|
- return [
|
|
|
- 'time' => $course['time'],
|
|
|
- 'from_time' => $course['from_time'],
|
|
|
- 'course_name' => $course['course_name'],
|
|
|
- 'course_id' => $course['course_id']
|
|
|
- ];
|
|
|
- })->toArray()
|
|
|
- ]);
|
|
|
+ $this->active_courses = \App\Models\Course::where('enabled', true)->where('date_from', '<=', $now)->where('date_to', '>=', $now)->count();
|
|
|
|
|
|
- $this->courses = $sortedCourses->map(function ($course) {
|
|
|
- unset($course['from_time'], $course['member_course_id'], $course['course_id']);
|
|
|
- return $course;
|
|
|
- })->toArray();
|
|
|
+ $this->active_subscriptions = \App\Models\MemberSubscription::where('date_from', '<=', $now)->where('date_to', '>=', $now)->count();
|
|
|
|
|
|
$endTime = microtime(true);
|
|
|
Log::info('Courses data loaded successfully', [
|
|
|
@@ -580,6 +621,10 @@ class Dashboard extends Component
|
|
|
'line' => $e->getLine()
|
|
|
]);
|
|
|
$this->courses = [];
|
|
|
+ $this->active_member_courses = [];
|
|
|
+ $this->active_member_courses_count = 0;
|
|
|
+ $this->active_courses = 0;
|
|
|
+ $this->active_subscriptions = 0;
|
|
|
}
|
|
|
}
|
|
|
|