Files
alrahma_sunday_school_api/app/Services/Admin/AdminProgressQueryService.php
T
2026-03-05 12:29:37 -05:00

83 lines
2.8 KiB
PHP

<?php
namespace App\Services\Admin;
use App\Models\ClassProgressReport;
use Illuminate\Database\Eloquent\Builder;
class AdminProgressQueryService
{
public function baseIndexQuery(): Builder
{
return ClassProgressReport::query()
->from('class_progress_reports')
->select([
'class_progress_reports.*',
'cs.class_section_name',
])
->selectRaw("CONCAT(COALESCE(u.firstname, ''), ' ', COALESCE(u.lastname, '')) AS teacher_name")
->leftJoin('classSection as cs', 'cs.class_section_id', '=', 'class_progress_reports.class_section_id')
->leftJoin('users as u', 'u.id', '=', 'class_progress_reports.teacher_id');
}
public function applyFilters(Builder $query, array $filters): Builder
{
if (!empty($filters['from'])) {
$query->where('week_start', '>=', $filters['from']);
}
if (!empty($filters['to'])) {
$query->where('week_end', '<=', $filters['to']);
}
if (!empty($filters['class_section_id'])) {
$query->where('class_progress_reports.class_section_id', (int) $filters['class_section_id']);
}
if (!empty($filters['status'])) {
$query->where('class_progress_reports.status', $filters['status']);
}
return $query;
}
public function baseShowQuery(): Builder
{
return ClassProgressReport::query()
->from('class_progress_reports')
->select([
'class_progress_reports.*',
'cs.class_section_name',
])
->selectRaw("CONCAT(COALESCE(u.firstname, ''), ' ', COALESCE(u.lastname, '')) AS teacher_name")
->leftJoin('classSection as cs', 'cs.class_section_id', '=', 'class_progress_reports.class_section_id')
->leftJoin('users as u', 'u.id', '=', 'class_progress_reports.teacher_id');
}
public function groupReportsByWeekAndSection(array $rows): array
{
$groups = [];
foreach ($rows as $row) {
$key = ($row['week_start'] ?? '') . '_' . ($row['class_section_id'] ?? '');
if ($key === '_') {
continue;
}
if (!isset($groups[$key])) {
$groups[$key] = [
'week_start' => $row['week_start'] ?? null,
'week_end' => $row['week_end'] ?? null,
'class_section_id' => $row['class_section_id'] ?? null,
'class_section_name' => $row['class_section_name'] ?? '',
'reports' => [],
];
}
$subject = (string) ($row['subject'] ?? 'unknown');
$groups[$key]['reports'][$subject] = $row;
}
return $groups;
}
}