def rule_potensi_predikat_kelulusan(self) -> RuleResult: current_sem = datetime.now().year - self.TRANSCRIPT.year_registered + ( datetime.now().month >= 8) ipk = self.TRANSCRIPT.current_ipk c_exists = False d_exists = False for course in self.TRANSCRIPT.course_taken: if course.grade[0] == 'C': c_exists = True elif course.grade[0] == 'D': d_exists = True verdict = 'Lulus' if ipk > 3.50 and not c_exists and not d_exists and current_sem <= 10: verdict = 'Dengan Pujian' elif ipk > 3.00 and not d_exists and current_sem <= 10: verdict = 'Sangat memuaskan' elif ipk > 2.76: verdict = 'Memuaskan' c_ext = '. Terdapat mata kuliah lebih rendah dari B' if c_exists else '' d_ext = '. Terdapat mata kuliah lebih rendah dari D' if d_exists else '' return RuleResult('Potensi predikat kelulusan', verdict, 'IPK: {}{}{}'.format(ipk, c_ext, d_ext))
def rule_evaluasi(self) -> List[RuleResult]: current_sem = self.get_current_semester() err = [] if current_sem == 5: if self.QUICK_STATUS.sks_taken < 45: err.append("Jumlah SKS yang telah selesai harus lebih dari " "sama dengan 45 SKS. SKS sekarang: {}".format( self.QUICK_STATUS.sks_taken)) if self.QUICK_STATUS.sum_D > 4: err.append("Jumlah SKS untuk mata kuliah yang D atau D+ " "harus kurang dari sama dengan 4 SKS. " "\nPerhatikan untuk mata kuliah:\n" + ", ".join(self.QUICK_STATUS.low_courses_names)) elif current_sem == 7: if self.QUICK_STATUS.sks_taken < 90: err.append("Jumlah SKS yang telah selesai harus lebih dari " "sama dengan 90 SKS. SKS sekarang: {}".format( self.QUICK_STATUS.sks_taken)) if self.QUICK_STATUS.sum_D > 9: err.append("Jumlah SKS untuk mata kuliah yang D atau D+ " "harus kurang dari sama dengan 9 SKS. " "\nPerhatikan untuk mata kuliah:\n" + ", ".join(self.QUICK_STATUS.low_courses_names)) elif current_sem == 15: pass return [ RuleResult('Evaluasi', 'Terkendala evaluasi akhir tahun', e) for e in err ]
def rule_penyelesaian_studi(self) -> RuleResult: failed_courses = [ c.course_code for c in self.TRANSCRIPT.course_taken if c.grade == 'E' ] if len(failed_courses) != 0: return RuleResult('Penyelesaian studi', 'Terdapat mata kuliah yang tidak lulus', ('{}. Luluskan matakuliah dan ' 'konsultasi ke dosen PA ' 'untuk mencapai resolusi terkait ' 'hal ini.').format(", ".join(failed_courses)))
def rule_ujian_skripsi(self) -> List[RuleResult]: err = [] if self.QUICK_STATUS.sks_taken < 140: err.append("Jumlah SKS yang telah selesai harus lebih dari " "sama dengan 140 SKS. SKS sekarang: {}".format( self.QUICK_STATUS.sks_taken)) if self.QUICK_STATUS.sum_D > 14: err.append("Jumlah SKS untuk mata kuliah yang D atau D+ harus " "kurang dari 14 SKS. " "\nPerhatikan untuk mata kuliah:\n" + ", ".join(self.QUICK_STATUS.low_courses_names)) return [ RuleResult('Ujian skripsi', 'Tidak dapat dilaksanakan semester ini', e) for e in err ]
def rule_pertemuan_tiap_semester(self) -> List[RuleResult]: res = [] for a in self.ATTENDANCES: course_sks = COURSE_SKS_ALL.get(a.kodemk, 3) if (course_sks == 4 and a.total_pertemuan < 30) or ( course_sks != 4 and a.total_pertemuan < 16): res.append( RuleResult('Jumlah perkuliahan tiap semester', '{} / {} SKS'.format(a.kodemk, course_sks), ('Tidak memenuhi total pertemuan ' 'tiap semester. Sekarang: {}. ' 'Kuliah harus ' 'dilakukan sebanyak 16 kali ' 'apabila < 4 SKS, dan 30 kali ' 'apabila 4 ' 'SKS.').format(a.total_pertemuan))) return res
def rule_hadir_kuliah(self) -> List[RuleResult]: res = [] for a in self.ATTENDANCES: course_sks = COURSE_SKS_ALL.get(a.kodemk, 3) if (course_sks == 4 and a.jumlah_kehadiran < 24) or ( course_sks != 4 and a.jumlah_kehadiran < 13): res.append( RuleResult('Presensi mata kuliah tiap semester', '{} / {} SKS'.format(a.kodemk, course_sks), ('Tidak memenuhi total presensi ' 'mahasiswa tiap semester. ' 'Sekarang: {}. ' 'Harus hadir kuliah setidaknya ' 'sebanyak 13 kali apabila < 4 ' 'SKS, ' 'dan 24 kali apabila 4 SKS.').format( a.jumlah_kehadiran))) return res
def rule_special_course(self) -> List[RuleResult]: err = [] if self.QUICK_STATUS.sks_taken < 110: err.append("Jumlah SKS yang telah selesai harus lebih dari " "sama dengan 110 SKS. SKS sekarang: {}".format( self.QUICK_STATUS.sks_taken)) if self.QUICK_STATUS.sum_D > 11: err.append("Jumlah SKS untuk mata kuliah yang D atau D+ harus " "kurang dari 11 SKS. " "\nPerhatikan untuk mata kuliah:\n" + ", ".join(self.QUICK_STATUS.low_courses_names)) if self.QUICK_STATUS.current_ipk < 2.00: err.append("IPK sekarang harus lebih dari sama dengan 2.00. " "IPK sekarang: {}".format( self.QUICK_STATUS.current_ipk)) return [ RuleResult('Pengerjaan KP dan PMKM', 'Tidak dapat dilaksanakan semester ini', e) for e in err ]
def rule_batas_waktu_studi(self) -> RuleResult: current_sem = self.get_current_semester() return RuleResult( 'Batas waktu studi', 'Batas waktu studi: {} semester'.format(14 - current_sem), '')