38259-vm/core/models.py
Flatlogic Bot 994bb04de0 SJP Admin
2026-02-07 05:16:18 +00:00

123 lines
3.7 KiB
Python

from django.db import models
class ProgramStudi(models.Model):
nama = models.CharField(max_length=100)
def __str__(self):
return self.nama
class Meta:
verbose_name_plural = "Program Studi"
class Dosen(models.Model):
nidn = models.CharField(max_length=20, unique=True)
nama = models.CharField(max_length=100)
def __str__(self):
return self.nama
class Meta:
verbose_name_plural = "Dosen"
class TahunAkademik(models.Model):
nama = models.CharField(max_length=20) # e.g., 2025/2026
is_active = models.BooleanField(default=False)
def __str__(self):
return self.nama
class Meta:
verbose_name_plural = "Tahun Akademik"
class Hari(models.Model):
nama = models.CharField(max_length=20)
def __str__(self):
return self.nama
class Meta:
verbose_name_plural = "Hari"
class MataKuliah(models.Model):
kode = models.CharField(max_length=20)
nama = models.CharField(max_length=100)
sks = models.IntegerField()
semester = models.IntegerField()
prodi = models.ForeignKey(ProgramStudi, on_delete=models.CASCADE)
def __str__(self):
return f"{self.kode} - {self.nama}"
class Meta:
verbose_name_plural = "Mata Kuliah"
unique_together = [['kode', 'prodi'], ['nama', 'prodi']]
class Ruangan(models.Model):
nama = models.CharField(max_length=50)
kapasitas = models.IntegerField()
prodi = models.ForeignKey(ProgramStudi, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return self.nama
class Meta:
verbose_name_plural = "Ruangan"
class Kelas(models.Model):
nama = models.CharField(max_length=20) # e.g., A, B, C or 1A, 1B
prodi = models.ForeignKey(ProgramStudi, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return self.nama
class Meta:
verbose_name_plural = "Kelas"
class Jam(models.Model):
range_waktu = models.CharField(max_length=50) # e.g., 07:00 - 08:40
def __str__(self):
return self.range_waktu
class Meta:
verbose_name_plural = "Jam"
class DosenPengampu(models.Model):
dosen = models.ForeignKey(Dosen, on_delete=models.CASCADE)
matkul = models.ForeignKey(MataKuliah, on_delete=models.CASCADE)
tahun_akademik = models.ForeignKey(TahunAkademik, on_delete=models.CASCADE)
prodi = models.ForeignKey(ProgramStudi, on_delete=models.CASCADE, null=True, blank=True)
kelas = models.ForeignKey(Kelas, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return f"{self.dosen.nama} - {self.matkul.nama} ({self.kelas.nama if self.kelas else '-'})"
class Meta:
verbose_name_plural = "Dosen Pengampu"
class Jadwal(models.Model):
dosen_pengampu = models.ForeignKey(DosenPengampu, on_delete=models.CASCADE)
ruangan = models.ForeignKey(Ruangan, on_delete=models.CASCADE)
hari = models.ForeignKey(Hari, on_delete=models.CASCADE)
jam = models.ForeignKey(Jam, on_delete=models.CASCADE)
kelas = models.ForeignKey(Kelas, on_delete=models.CASCADE)
is_manual = models.BooleanField(default=False)
def __str__(self):
return f"{self.dosen_pengampu.matkul.nama} - {self.hari.nama} {self.jam.range_waktu}"
class Meta:
verbose_name_plural = "Jadwal"
class DaftarHadir(models.Model):
jadwal = models.ForeignKey(Jadwal, on_delete=models.CASCADE)
tanggal = models.DateField()
pertemuan_ke = models.IntegerField(default=1)
keterangan = models.TextField(null=True, blank=True)
def __str__(self):
return f"Hadir: {self.jadwal} - Tgl: {self.tanggal}"
class Meta:
verbose_name_plural = "Daftar Hadir"