Exemple #1
0
    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))
Exemple #2
0
    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
        ]
Exemple #3
0
 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)))
Exemple #4
0
    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
        ]
Exemple #5
0
 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
Exemple #6
0
    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
Exemple #7
0
    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
        ]
Exemple #8
0
 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), '')