diff --git a/src/registrasi-sidsem/registrasi-sidsem.module.ts b/src/registrasi-sidsem/registrasi-sidsem.module.ts index 37af696b48ea52963d04e037d01f18d89037cc0d..2c719e4bb91688835ae74a0deddff814efc15d31 100644 --- a/src/registrasi-sidsem/registrasi-sidsem.module.ts +++ b/src/registrasi-sidsem/registrasi-sidsem.module.ts @@ -14,6 +14,9 @@ import { BerkasSidsem } from "src/entities/berkasSidsem.entity"; import { Topik } from "src/entities/topik.entity"; import { PenggunaModule } from "src/pengguna/pengguna.module"; import { PengujiSidsem } from "src/entities/pengujiSidsem.entity"; +import { KonfigurasiModule } from "src/konfigurasi/konfigurasi.module"; +import { KonfigurasiService } from "src/konfigurasi/konfigurasi.service"; +import { Konfigurasi } from "src/entities/konfigurasi.entity"; @Module({ imports: [ @@ -25,12 +28,19 @@ import { PengujiSidsem } from "src/entities/pengujiSidsem.entity"; BerkasSidsem, Topik, PengujiSidsem, + Konfigurasi, ]), AuthModule, RegistrasiTesisModule, PenggunaModule, + KonfigurasiModule, ], controllers: [RegistrasiSidsemController], - providers: [RegistrasiSidsemService, CustomStrategy, RegistrasiTesisService], + providers: [ + RegistrasiSidsemService, + CustomStrategy, + RegistrasiTesisService, + KonfigurasiService, + ], }) export class RegistrasiSidsemModule {} diff --git a/src/registrasi-sidsem/registrasi-sidsem.service.ts b/src/registrasi-sidsem/registrasi-sidsem.service.ts index de643d6189ee0907bcc2ef450d5aad9fe11dfb6c..07cb020c2aabcfb42927d591a402b7c238a25099 100644 --- a/src/registrasi-sidsem/registrasi-sidsem.service.ts +++ b/src/registrasi-sidsem/registrasi-sidsem.service.ts @@ -27,6 +27,9 @@ import { RegStatus } from "src/entities/pendaftaranTesis.entity"; import { RegistrasiTesisService } from "src/registrasi-tesis/registrasi-tesis.service"; import { BerkasSidsem } from "src/entities/berkasSidsem.entity"; import { Pengguna, RoleEnum } from "src/entities/pengguna.entity"; +import { KonfigurasiService } from "src/konfigurasi/konfigurasi.service"; +import { KonfigurasiKeyEnum } from "src/entities/konfigurasi.entity"; +import * as dayjs from "dayjs"; @Injectable() export class RegistrasiSidsemService { @@ -41,6 +44,7 @@ export class RegistrasiSidsemService { private berkasSidsemRepo: Repository<BerkasSidsem>, private regTesisService: RegistrasiTesisService, private dataSource: DataSource, + private konfService: KonfigurasiService, ) {} private async getLatestPendaftaranSidsem(mhsId: string) { @@ -84,10 +88,52 @@ export class RegistrasiSidsemService { .getOne(); } + konfKeysMapping = { + [TipeSidsemEnum.SEMINAR_1]: { + start: KonfigurasiKeyEnum.AWAL_SEMPRO, + end: KonfigurasiKeyEnum.AKHIR_SEMPRO, + }, + [TipeSidsemEnum.SEMINAR_2]: { + start: KonfigurasiKeyEnum.AWAL_SEM_TESIS, + end: KonfigurasiKeyEnum.AKHIR_SEM_TESIS, + }, + [TipeSidsemEnum.SIDANG]: { + start: KonfigurasiKeyEnum.AWAL_SIDANG, + end: KonfigurasiKeyEnum.AKHIR_SIDANG, + }, + }; + + private async getSidsemKonfOrFail(tipe: TipeSidsemEnum) { + const mapping = this.konfKeysMapping[tipe]; + const [start, end] = await Promise.all([ + this.konfService.getKonfigurasiByKey(mapping.start), + this.konfService.getKonfigurasiByKey(mapping.end), + ]); + + if (!start || !end) { + throw new BadRequestException( + `Sidang seminar bertipe ${tipe} belum dikonfigurasi`, + ); + } + + return { start: new Date(start), end: new Date(end) }; + } + async create( mhsId: string, dto: CreatePengajuanSidsemDto, ): Promise<PengajuanSidsemIdDto> { + const { start, end } = await this.getSidsemKonfOrFail(dto.tipe); + + if ( + dayjs(new Date()).isBefore(dayjs(start).startOf("d")) || + dayjs(new Date()).isAfter(dayjs(end).endOf("d")) + ) { + throw new BadRequestException( + "Sidang seminar belum dibuka atau sudah ditutup", + ); + } + const regTesis = await this.regTesisService.getNewestRegByMhsOrFail(mhsId); if (regTesis.status !== RegStatus.APPROVED) {