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 { return response()->json([ 'ok' => true, 'data' => $this->service->createYear($request->validated(), $this->getCurrentUserId()), ], Response::HTTP_CREATED); } public function update(SaveSchoolYearRequest $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->updateYear($schoolYear, $request->validated(), $this->getCurrentUserId()), ]); } public function summary(int $schoolYear): JsonResponse { return response()->json(['ok' => true, 'data' => $this->service->summary($schoolYear)]); } public function validateClose(PreviewCloseSchoolYearRequest $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'validation' => $this->service->validateClose($schoolYear, $request->validated()), ]); } public function previewClose(PreviewCloseSchoolYearRequest $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->previewClose($schoolYear, $request->validated()), ]); } public function close(CloseSchoolYearRequest $request, int $schoolYear): JsonResponse { try { $result = $this->service->close($schoolYear, $request->validated(), $this->getCurrentUserId()); } catch (ValidationException $e) { throw $e; } catch (\Throwable $e) { return response()->json([ 'ok' => false, 'message' => $e->getMessage(), ], Response::HTTP_CONFLICT); } return response()->json(['ok' => true, 'data' => $result]); } public function reopen(Request $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->reopen($schoolYear, $this->getCurrentUserId()), ]); } public function parentBalances(Request $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->parentBalances($schoolYear, $request->query('to_school_year')), ]); } public function promotionPreview(Request $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->promotionPreview($schoolYear, $request->query('to_school_year')), ]); } public function closingReport(int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->closingReport($schoolYear), ]); } public function archive(Request $request, int $schoolYear): JsonResponse { return response()->json([ 'ok' => true, 'data' => $this->service->archive($schoolYear, $this->getCurrentUserId()), ]); } }