update the new school year model
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\BadgeScan;
|
||||
|
||||
use App\Http\Controllers\Api\Core\BaseApiController;
|
||||
use App\Services\BadgeScan\BadgeScanService;
|
||||
use App\Services\SchoolYears\SchoolYearContextService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
@@ -13,6 +14,7 @@ class BadgeScanController extends BaseApiController
|
||||
{
|
||||
public function __construct(
|
||||
private BadgeScanService $badgeScan,
|
||||
private SchoolYearContextService $schoolYears,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
@@ -24,13 +26,21 @@ class BadgeScanController extends BaseApiController
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'badge_scan' => ['required', 'string', 'max:255'],
|
||||
'school_year' => ['nullable', 'string', 'max:50'],
|
||||
'semester' => ['nullable', 'string', 'max:50'],
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidationError($validator->errors()->toArray());
|
||||
}
|
||||
|
||||
$result = $this->badgeScan->processScan($validator->validated()['badge_scan']);
|
||||
$payload = $validator->validated();
|
||||
$context = $this->schoolYears->options($payload['school_year'] ?? null, $payload['semester'] ?? null);
|
||||
$result = $this->badgeScan->processScan(
|
||||
$payload['badge_scan'],
|
||||
$context['school_year'] ?? null,
|
||||
$context['semester'] ?? null
|
||||
);
|
||||
|
||||
if (! $result['recognized']) {
|
||||
return $this->error($result['message'], Response::HTTP_NOT_FOUND);
|
||||
@@ -46,10 +56,19 @@ class BadgeScanController extends BaseApiController
|
||||
/**
|
||||
* Authenticated scan log listing (legacy RFIDController::log).
|
||||
*/
|
||||
public function logs(): JsonResponse
|
||||
public function logs(Request $request): JsonResponse
|
||||
{
|
||||
$context = $this->schoolYears->options(
|
||||
$request->query('school_year'),
|
||||
$request->query('semester')
|
||||
);
|
||||
|
||||
return $this->success([
|
||||
'logs' => $this->badgeScan->scanLogRows(),
|
||||
'logs' => $this->badgeScan->scanLogRows(
|
||||
$context['school_year'] ?? null,
|
||||
$context['semester'] ?? null
|
||||
),
|
||||
'meta' => $context,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,9 @@ class ClassProgressController extends BaseApiController
|
||||
return $this->respondSuccess(
|
||||
$this->buildMetaPayload(
|
||||
$request->validated('class_id'),
|
||||
(int) ($request->validated('sunday_count') ?? 12)
|
||||
(int) ($request->validated('sunday_count') ?? 12),
|
||||
$request->query('school_year'),
|
||||
$request->query('semester')
|
||||
),
|
||||
'Progress metadata loaded.'
|
||||
);
|
||||
@@ -66,7 +68,7 @@ class ClassProgressController extends BaseApiController
|
||||
fn (array $assignment) => (int) ($assignment['class_id'] ?? 0) === $activeClassId
|
||||
) ?? ($assignments[0] ?? []);
|
||||
$sundayCount = (int) ($request->validated('sunday_count') ?? 12);
|
||||
$payload = $this->buildMetaPayload($activeClassId > 0 ? $activeClassId : null, $sundayCount);
|
||||
$payload = $this->buildMetaPayload($activeClassId > 0 ? $activeClassId : null, $sundayCount, $schoolYear, $semester);
|
||||
$payload['classes'] = $assignments;
|
||||
$payload['defaults'] = [
|
||||
'class_id' => $activeClassId > 0 ? $activeClassId : null,
|
||||
@@ -87,6 +89,9 @@ class ClassProgressController extends BaseApiController
|
||||
}
|
||||
|
||||
$filters = $request->validated();
|
||||
$meta = $this->queryService->meta($filters['school_year'] ?? null, $filters['semester'] ?? null);
|
||||
$filters['school_year'] = $filters['school_year'] ?? ($meta['school_year'] ?? null);
|
||||
$filters['semester'] = $filters['semester'] ?? ($meta['semester'] ?? null);
|
||||
$paginator = $this->queryService->listReports($auth, $filters);
|
||||
|
||||
if (!empty($filters['group_by_week'])) {
|
||||
@@ -96,6 +101,7 @@ class ClassProgressController extends BaseApiController
|
||||
|
||||
return $this->respondSuccess([
|
||||
'items' => ClassProgressReportResource::collection($paginator->items()),
|
||||
'meta' => $meta,
|
||||
'pagination' => [
|
||||
'current_page' => $paginator->currentPage(),
|
||||
'per_page' => $paginator->perPage(),
|
||||
@@ -241,13 +247,16 @@ class ClassProgressController extends BaseApiController
|
||||
return $user;
|
||||
}
|
||||
|
||||
private function buildMetaPayload(?int $classId, int $sundayCount): array
|
||||
private function buildMetaPayload(?int $classId, int $sundayCount, ?string $schoolYear = null, ?string $semester = null): array
|
||||
{
|
||||
$meta = $this->queryService->meta($schoolYear, $semester);
|
||||
|
||||
return [
|
||||
'subject_sections' => $this->metaService->subjectSections(),
|
||||
'status_options' => $this->metaService->statusOptions(),
|
||||
'sunday_options' => $this->metaService->sundayOptionsAlignedWithCi($sundayCount),
|
||||
'curriculum' => $this->metaService->curriculumOptions($classId),
|
||||
'curriculum' => $this->metaService->curriculumOptions($classId, $meta['school_year'] ?? null),
|
||||
'meta' => $meta,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ use App\Http\Requests\SchoolYears\CloseSchoolYearRequest;
|
||||
use App\Http\Requests\SchoolYears\PreviewCloseSchoolYearRequest;
|
||||
use App\Http\Requests\SchoolYears\SaveSchoolYearRequest;
|
||||
use App\Services\SchoolYears\SchoolYearClosureService;
|
||||
use App\Services\SchoolYears\SchoolYearContextService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
@@ -14,14 +15,44 @@ use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class SchoolYearController extends BaseApiController
|
||||
{
|
||||
public function __construct(private SchoolYearClosureService $service)
|
||||
{
|
||||
public function __construct(
|
||||
private SchoolYearClosureService $service,
|
||||
private SchoolYearContextService $context
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function index(): JsonResponse
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
return response()->json(['ok' => true, 'data' => $this->service->list()]);
|
||||
$context = $this->context->options(
|
||||
$request->query('school_year'),
|
||||
$request->query('semester')
|
||||
);
|
||||
|
||||
return response()->json([
|
||||
'ok' => true,
|
||||
'data' => $this->service->list(),
|
||||
'meta' => $context,
|
||||
'school_years' => $context['school_years'],
|
||||
'current_school_year' => $context['current_school_year'],
|
||||
'current_semester' => $context['current_semester'],
|
||||
]);
|
||||
}
|
||||
|
||||
public function current(Request $request): JsonResponse
|
||||
{
|
||||
return response()->json([
|
||||
'ok' => true,
|
||||
'data' => $this->context->options(
|
||||
$request->query('school_year'),
|
||||
$request->query('semester')
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
public function options(Request $request): JsonResponse
|
||||
{
|
||||
return $this->current($request);
|
||||
}
|
||||
|
||||
public function store(SaveSchoolYearRequest $request): JsonResponse
|
||||
|
||||
@@ -10,6 +10,7 @@ use App\Http\Resources\Subjects\SubjectCurriculumResource;
|
||||
use App\Models\SubjectCurriculum;
|
||||
use App\Services\Subjects\SubjectCurriculumService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class SubjectCurriculumController extends BaseApiController
|
||||
{
|
||||
@@ -18,15 +19,16 @@ class SubjectCurriculumController extends BaseApiController
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function index(): JsonResponse
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$data = $this->service->list();
|
||||
$data = $this->service->list($request->query('school_year'));
|
||||
|
||||
return response()->json([
|
||||
'ok' => true,
|
||||
'classes' => SubjectClassResource::collection($data['classes']),
|
||||
'entries' => SubjectCurriculumResource::collection($data['entries']),
|
||||
'subject_labels' => $data['subject_labels'],
|
||||
'meta' => $data['meta'],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user