def verifyDigitalSign(resultpasscode): kodedosen = resultpasscode.split(';')[1] tglttd = resultpasscode.split(';')[2] blnttd = resultpasscode.split(';')[3] thnttd = resultpasscode.split(';')[4] jamttd = resultpasscode.split(';')[5] mntttd = resultpasscode.split(';')[6] dtkttd = resultpasscode.split(';')[7] jnsdkm = resultpasscode.split(';')[8] datadosen = kelas.getAllDataDosens(kodedosen) penerbitantandatangan = f'{jamttd}:{mntttd}:{dtkttd} {tglttd} {bkd.bulanSwitcher(blnttd)} {thnttd}' if datadosen: namadosen = kelas.getNamaDosen(kodedosen) datalahirdosen = datadosen[7].strftime('%d-%m-%Y') tahunlahirdosen = datalahirdosen.split('-')[2] bulanlahirdosen = bkd.bulanSwitcher(datalahirdosen.split('-')[1]) tanggallahirdosen = datalahirdosen.split('-')[0] datalahirdosen = tanggallahirdosen + ' ' + bulanlahirdosen + ' ' + tahunlahirdosen msgreply = f'Ini yaaa data yang Akang/Teteh minta\n\nKode Dosen: {kodedosen}\nNama Dosen: {namadosen}\nNIDN: {datadosen[2]}\nTempat/Tgl Lahir: {datadosen[6]}/{datalahirdosen}\nHandphone: {datadosen[12]}\nE-mail: {datadosen[13]}\n\nJenis Dokumen: {jnsdkm}\nPenerbitan Tanda Tangan: {penerbitantandatangan}' return msgreply km_data = kelas.getDataMahasiswa(kodedosen) nama_km = capitalizeName(km_data[1]) handphone_km = km_data[2] email_km = km_data[3] return f"Ini yaaa data yang Akang/Teteh minta" \ f"\n\nNPM KM: {kodedosen}" \ f"\nNama KM: {nama_km}" \ f"\nHandphone KM: {handphone_km}" \ f"\nE-Mail KM: {email_km}" \ f"\n\nJenis Dokumen: {jnsdkm}" \ f"\nPenerbitan Tanda Tangan: {penerbitantandatangan}"
def replymsg(driver, data): wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0]) wa.typeAndSendMessage(driver, wmsg) studentid = kelas.getNpmandNameMahasiswa(data[0])[0] databimbingan = bimbingan_dosen.getDataBimbingan(studentid) if databimbingan == (): msgreply = 'mohon maaf data tidak dapat ditemukan...' else: msgreply = 'ini yaaa data bimbingannya ....' for i in databimbingan: nama = kelas.getStudentNameOnly(studentid) topik = i[3].split(';') target_selesai = topik[0] target_selanjutnya = topik[1] datalog = i[7] datalog = datalog.split(';') namadosen = kelas.getNamaDosen(i[5]) msgreply += '\n\nNama: {nama}\nNPM: {studentid}\nTipe: {tipe}\nPertemuan: {pertemuanke}\nSudah Dikerjakan: {targetselesai}\nPekerjaan Selanjutnya: {targetselanjutnya}\nNilai: {nilai}\nPenilai: {penilai} / {namadosen}\nJumlah Percakapan: {log}'.format( nama=nama, studentid=i[0], tipe=i[1], pertemuanke=i[2], targetselesai=target_selesai, targetselanjutnya=target_selanjutnya, nilai=i[4], penilai=i[5], log=str(len(datalog)), namadosen=namadosen) return msgreply
def mainMakePdf(list_mahasiswa, kode_dosen, tipe_bimbingan): doc = SimpleDocTemplate( f'./beritaacarapitak/BERITA ACARA PITAK-{tipe_bimbingan.upper()}-{kelas.getTahunID()}-{kode_dosen}-{kelas.getEmailDosen(kode_dosen)}.pdf', pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30, bottomMargin=18) doc.pagesize = portrait(A4) elements = [] logo = Image("logoKAMBING.PNG", 3.5 * inch, 1 * inch) logo.hAlign = "LEFT" styles = getSampleStyleSheet() styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) styles.add(ParagraphStyle(name='Center', alignment=TA_CENTER)) styles.add(ParagraphStyle(name='Right', alignment=TA_RIGHT)) for npm in list_mahasiswa: studentid, studentname = getDataMahasiswa(npm) status_nilai, nilai_total = totalNilai( studentid, config.MINIMUM_PERTEMUAN_BIMBINGAN, kode_dosen, tipe_bimbingan) status_nilai = True if status_nilai: JUDUL_BIMBINGAN = f"{getJudulFromNpm(npm)}" KODE_DOSEN = kode_dosen NAMA_DOSEN = kelas.getNamaDosen(KODE_DOSEN) NIDN_DOSEN = getNIDNDosen(KODE_DOSEN) TAHUN_AJARAN = kelas.getTahunAjaran( kelas.getProdiIDwithStudentID(studentid)).split(' ')[-1] makePdf(npm_mahasiswa=studentid, nama_mahasiswa=studentname, tipe_bimbingan=getTipeBimbingan(studentid), nama_pembimbing=NAMA_DOSEN, kode_dosen_pembimbing=KODE_DOSEN, nidn_pembimbing=NIDN_DOSEN, tahun_ajaran=TAHUN_AJARAN, photo=cekPhotoRoute(studentid), judul=JUDUL_BIMBINGAN, total_nilai=str(nilai_total), elements=elements, logo=logo, styles=styles, kode_dosen_koordinator='NN056L') elements.append(PageBreak()) else: pass doc.build(elements)
def makeListDosenAfterApprove(jadwalidlist): sublistdata = makeSublistJadwalIDandDosenID(jadwalidlist) datagrouping = groupingDataBySecondElement(sublistdata) msgreply = '' for dosenid in datagrouping: namadosen = kelas.getNamaDosen(dosenid) datagroup = datagrouping[dosenid] msgreply += f'\n\nNama Dosen: {namadosen}' for jadwal in datagroup: matkuldetails = kelas.getMkDetails(jadwal[0]) namamatkul = matkuldetails[2] namakelas = kelas.toKelas(matkuldetails[-1]) msgreply += f'\n{jadwal[0]} | {namamatkul} | {namakelas}' return msgreply
def verifyDigitalSign(resultpasscode): resultpasscode=resultpasscode.split(';') tanggal=resultpasscode[1].split('-')[0] bulan=bkd.bulanSwitcher(resultpasscode[1].split('-')[1]) tahun=resultpasscode[1].split('-')[2] sah_jam=resultpasscode[2] nama_dosen=kelas.getNamaDosen(resultpasscode[3]) npm_mahasiswa=resultpasscode[4] kode_tipe_bimbingan=switcherTipeBimbingantoKode(resultpasscode[5]) total_nilai=resultpasscode[6] msgreply = f"Ini data yang diminta yaaaa\n\nNama Dosen: {nama_dosen}\nPenerbitan Tanda Tangan: {sah_jam} {tanggal} {bulan} {tahun}" for i in getDataBimbinganForReply(npm_mahasiswa, resultpasscode[3]): msgreply+=f"\n\nPertemuan: {i[0]}\nTanggal: {i[1].strftime('%d-%m-%Y')}\nSudah Dikerjakan: {i[2].split(';')[0]}\nPekerjaan Selanjutnya: {i[2].split(';')[1]}\nNilai: {i[3]}" msgreply+=f'\n\n*Nilai Rata-Rata _{total_nilai}_*' return msgreply
def replymsg(driver, data): kode_dosen_approve = message.normalize(data[3]).split(' ')[-1] if kelas.getNamaDosen(kode_dosen_approve): npm_mahasiswa_list = berita_acara_pitak.getListMahasiswa( kode_dosen_approve.upper()) datamahasiswa = '' for npm in npm_mahasiswa_list: data = approve_kambing.getDataPembimbing( npm, kode_dosen_approve.upper()) pembimbingke = approve_kambing.pembimbingPositionAs( data, kode_dosen_approve.upper()) updateApprovalKoordinator( npm, pembimbingke, pembimbingke.replace('pembimbing', 'koordinator'), kode_dosen_approve.upper(), 'true') datamahasiswa += f'NPM: {npm}\nNama: {kelas.getStudentNameOnly(npm)}\n\n' msgreply = f'sudah di approve yaaa dengan Dosen {kelas.getNamaDosen(kode_dosen_approve.upper())} dan ini daftar mahasiswa bimbingannya:\n\n{datamahasiswa}' else: msgreply = f'aduhhhh #BOTNAME# nggak tau nih kode dosen {kode_dosen_approve} ini siapa yaaa.... ga bisa nemuin nih #BOTNAME# coba yaaaa diperhatikan lagiii....' return msgreply
def verifyDigitalSign(resultpasscode): kodedosen = resultpasscode.split(';')[1] tglttd = resultpasscode.split(';')[2] blnttd = resultpasscode.split(';')[3] thnttd = resultpasscode.split(';')[4] jamttd = resultpasscode.split(';')[5] mntttd = resultpasscode.split(';')[6] dtkttd = resultpasscode.split(';')[7] nmrsrt = resultpasscode.split(';')[8] jnsdkm = resultpasscode.split(';')[9] datadosen = kelas.getAllDataDosens(kodedosen) penerbitantandatangan = f'{jamttd}:{mntttd}:{dtkttd} {tglttd} {bulanSwitcher(blnttd)} {thnttd}' namadosen = kelas.getNamaDosen(kodedosen) datalahirdosen = datadosen[7].strftime('%d-%m-%Y') tahunlahirdosen = datalahirdosen.split('-')[2] bulanlahirdosen = bulanSwitcher(datalahirdosen.split('-')[1]) tanggallahirdosen = datalahirdosen.split('-')[0] datalahirdosen = tanggallahirdosen + ' ' + bulanlahirdosen + ' ' + tahunlahirdosen msgreply = f'Ini yaaa data yang Akang/Teteh minta\n\nKode Dosen: {kodedosen}\nNama Dosen: {namadosen}\nNIDN: {datadosen[2]}\nTempat/Tgl Lahir: {datadosen[6]}/{datalahirdosen}\nHandphone: {datadosen[12]}\nE-mail: {datadosen[13]}\n\nJenis Dokumen: {jnsdkm}\nNomor Dokumen: {nmrsrt}\nPenerbitan Tanda Tangan: {penerbitantandatangan}' return msgreply
def replymsg(driver, data): wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0]) wa.typeAndSendMessage(driver, wmsg) num = data[0] msg = data[3] msg = message.normalize(msg) npm = [] kodedosen = kelas.getKodeDosen(num) for i in getMahasiswaBimbingan(kelas.getTahunID()): if i[1] == kodedosen or i[2] == kodedosen: npm.append(i[0]) try: datefromdatabasehomebase = bimbingan_dosen.getStartDate(num) startdate = datetime.date(datefromdatabasehomebase) if 'pertemuan' in msg: pertemuan = msg.split(' pertemuan ')[1] else: pertemuan, datemulai, dateakhir = bimbingan_dosen.countPertemuan( startdate) try: pertemuan = int(pertemuan) msgreply = 'Nama Dosen: {lecturername}\nProdi: {prodi}\nPertemuan: {pertemuan}'.format( lecturername=kelas.getNamaDosen(kodedosen), prodi=pertemuan_bimbingan.getHomebase(num), pertemuan=str( pertemuan)) + '\n\nNPM | Nama | Status Bimbingan\n\n' for i in npm: cek = cek_bimbingan(i, kodedosen, pertemuan) namamahasiswa = kelas.getStudentNameOnly(i) if cek == None: msgreply += '*' + i + '*' + ' | ' + namamahasiswa + ' | ' + '*_BELUM BIMBINGAN_*' + '\n' else: msgreply += '*' + i + '*' + ' | ' + namamahasiswa + ' | ' + '*_SUDAH BIMBINGAN_*' + '\n' except: msgreply = 'wahhh salah di pertemuan nih bosqqqqqqqqqqqq coba pertemuannya make angka yak jangan make hurup....' except: msgreply = 'ihhhhh belum diset nih tanggal awal bimbingannya coba deh Bapak/Ibu dosen komunikasi ya sama KAPRODI untuk set tanggal mulai bimbingannnya, tutorial bisa dibaca di panduan iteung yaaa yang bagian *kaprodi* hatur tengkyuuu....' return msgreply
def kelasMulai(data): msg = data[3] msg = message.normalize(msg) if kelas.cekSiap(): grp = data[1] num = data[0] if isJadwalID(kelas.getKodeDosen(num), grp.split('-')[0]): try: rencana_kehadiran = kelas.rencana_kehadiran(grp.split('-')[0]) kehadiran = kelas.getKehadiran(grp.split('-')[0]) if (kehadiran != rencana_kehadiran and kehadiran < rencana_kehadiran) or (kelas.isSudahKelas( jadwalid=grp.split('-')[0], lecturercode=kelas.getKodeDosen(num=num))): # if kelas.is_time_to_attendant(grp.split('-')[0]): if kelas.isMatkul(grp.split('-')[0]): jadwalid = grp.split('-')[0] jadwalserial = kelas.getJadwalSerial(jadwalid=jadwalid) if jadwalserial == '0': jadwalid = jadwalid else: jadwalid = jadwalserial abc = 1 listStudent = '\n\nBerikut Peserta Absensinya:\n' for i in kelas.pesertaAbsensi(jadwalid=jadwalid): npm = i[-1] nama = kelas.getStudentNameOnly(npm) listStudent += f'{abc}. {npm} {nama} {kelas.getStudentPhoneNumberFromNPM(npm)} {kelas.getStudentEmail(npm)}\n' abc += 1 coursename = kelas.getDataMatkul(grp.split('-')[0])[1] messages = reply.getWaitingMessage( os.path.basename(__file__).split('.')[0]) messages = messages.replace('#MATKUL#', coursename) messages = messages.replace('#BOTNAME#', config.bot_name) if 'luring' in msg: link = '\n\nLink Kelas Luring (offline):\n' + config.link_kelas_luring + grp.replace( ' ', '%20') msgreply = messages + link + listStudent else: msgreply = messages + listStudent else: listMK = kelas.getListMK(kelas.getKodeDosen(data[0])) guide = 'Yahh... Nama grupnya belum JADWALID-KELAS-NAMA. yuk ubah #BOTNAME# kasih contoh 17312-A-KECERDASAN BUAT klo lupa kode mata kuliah #BOTNAME# kasih ya ini daftarnya : \n' msgreply = guide + listMK # else: # data = kelas.jam_mulai_jam_selesai(grp.split('-')[0]) # return f'iwiwiwiwiwiwwwwwwww jam sekarang diluar batas waktu kelas nihhh mohon untuk memulai kelas pada jamnya yaaa... \n\nMatakuliah: {data["Nama"]}\nJam Mulai: {data["JamMulai"]}\nJam Selesai: {data["JamSelesai"]}' elif kehadiran == '': msgreply = 'yahhhhh kehadirannya ngga #BOTNAME# temuin coba di cek lagi jadwal idnya yaaa....' else: jadwalid = grp.split('-')[0] datamatkul = kelas.getMatakuliahInfowithJadwalID(jadwalid) if datamatkul == None: msgreply = "mohon maaf JadwalID salah bisa untuk dicek kembali...." else: datamatkul = kelas.getMatakuliahInfowithJadwalID( jadwalid) prodi = kelas.switcherJurusan(datamatkul[5]) mkkode = datamatkul[11] namamatkul = datamatkul[12] hari = kelas.toHari(str(datamatkul[13])) jammulai = datamatkul[14] jamselesai = datamatkul[15] dosen = kelas.getNamaDosen(datamatkul[21]) rencanakehadiran = datamatkul[22] kehadiran = datamatkul[23] msgreply = 'Mohon maaf Untuk kuliah daring ini sudah memenuhi kuota pertemuan pada jadwal kali ini...\n\n' msgreply += f"Jadwal ID: {jadwalid}\nProgram Studi: {prodi}\nKode Matakuliah: {mkkode}\nNama Matakuliah: {namamatkul}\nHari: {hari}\nJam Mulai: {jammulai}\nJam Selesai: {jamselesai}\nDosen/Kode Dosen: {dosen}/{datamatkul[21]}\nRencana Kehadiran: {rencanakehadiran}\nKehadiran: {kehadiran}" except Exception as e: print(str(e)) listMK = kelas.getListMK(kelas.getKodeDosen(data[0])) guide = 'Di setting dulu ya nama groupnya jadi JADWALID-KELAS-NAMA contoh : 17312-A-KECERDASAN BUAT, ini daftarnya : \n' msgreply = guide + listMK else: listMK = kelas.getListMK(kelas.getKodeDosen(data[0])) guide = 'aduwww waduwduwwww ini bukan Jadwal ID Bapak/Ibu dosen nihhhh, yang bener yang dibawah ini yaaa.... : \n' msgreply = guide + listMK else: msgreply = 'Mohon maaf server Akademik SIAP sedang dalam kondisi DOWN, mohon untuk menginformasikan ke ADMIN dan tunggu hingga beberapa menit kemudian, lalu ulangi kembali, terima kasih....' return msgreply
def makePDFandSend(num): checkDir() lecturercode = kelas.getKodeDosen(num) lecturername = kelas.getNamaDosen(lecturercode) dosenHomeBase = getDosenHomebase(num) checkDirQrcode() # generate dosen barcode link = makeLinkVerifiy(lecturercode) makeQrcodeLinkVerifySign(link, 'dosen', lecturercode) # generate kaprodi barcode kaprodinipycode = getNipyKaProdi(dosenHomeBase) kaprodiDosenID = getDosenIDfromNIPY(kaprodinipycode) link = makeLinkVerifiy(kaprodiDosenID) makeQrcodeLinkVerifySign(link, 'kaprodi', lecturercode) # generate deputi barcode deputinipycode = getNipyDeputi(9) deputiDosenID = getDosenIDfromNIPY(deputinipycode) link = makeLinkVerifiy(deputiDosenID) makeQrcodeLinkVerifySign(link, 'deputi', lecturercode) pertemuankurang = [] mkkodes = getMkKode(lecturercode) for mkkode in mkkodes: jadwalids = getJadwalID(mkkode[0], lecturercode) try: pdf = makePDFHeader() for jadwalid in jadwalids: print(jadwalid) matkuldetailsfix = kelas.getMkDetails(jadwalid[0]) if getRencanaKehadiran(jadwalid[0]) == 0: print('rencana kehadiran 0') elif getProgramID(jadwalid[0]) == '.KER.' and getKehadiran( jadwalid[0]) < getRencanaKehadiran(jadwalid[0]): print( 'program kerja sama dan jumlah kehadiran kurang dari rencana kehadiran' ) else: matkuldetails = kelas.getMkDetails(jadwalid[0]) datamatkulbap = getBKDMatkul(jadwalid[0]) semester = countSemester(jadwalid[0]) sks = getSks(jadwalid[0]) nama_kelas = kelas.toKelas(matkuldetails[6]) kode_matkul = matkuldetails[1] nama_matkul = matkuldetails[2] datenow = datetime.date( datetime.now()).strftime('%d-%m-%Y') tanggalbap = datenow.split('-')[0] bulanbap = datenow.split('-')[1] tahunbap = datenow.split('-')[2] kode_nomor = f'ITeung/{tanggalbap}/{bulanbap}/{tahunbap}' tanggalpdfbap = f'{tanggalbap} {bulanSwitcher(bulanbap)} {tahunbap}' datafixbap = [] datawkwkbap = [ 'Pertemuan', 'Tanggal', 'Materi Perkuliahan', 'Jam Mulai', 'Jam Selesai' ] datafixbap.append(datawkwkbap) for i in datamatkulbap: matkuldatalist = [] matkuldatalist.append(i[0]) matkuldatalist.append(i[1].strftime('%d-%m-%Y')) matkuldatalist.append(i[2]) matkuldatalist.append(str(i[3])) matkuldatalist.append(str(i[4])) datafixbap.append(matkuldatalist) makePDFBAP(pdf, datafixbap, kode_nomor, tanggalpdfbap, kode_matkul, nama_matkul, nama_kelas, semester, sks) studentid, studentname = getandsetStudentIDandStudentNAME( jadwalid[0]) presensidosens1 = getPresensiDosen(jadwalid[0], 0, 8) presensidosens2 = getPresensiDosen(jadwalid[0], 7, 15) for i in range(2): if i == 0: pertemuan = countPertemuan(presensidosens1) pdfpertemuan = ['1', '2', '3', '4', '5', '6', '7'] else: pertemuan = countPertemuan(presensidosens2) pdfpertemuan = [ '8', '9', '10', '11', '12', '13', '14' ] datas = list( zip(pertemuan[0], pertemuan[1], pertemuan[2], pertemuan[3], pertemuan[4], pertemuan[5], pertemuan[6])) total = countTotal(datas) datas = list( zip(studentid, studentname, pertemuan[0], pertemuan[1], pertemuan[2], pertemuan[3], pertemuan[4], pertemuan[5], pertemuan[6])) number = countNumber(studentid) datapdf = list( zip(number, studentid, studentname, pertemuan[0], pertemuan[1], pertemuan[2], pertemuan[3], pertemuan[4], pertemuan[5], pertemuan[6], total)) tanggal = tanggalBKDPresensi( getTanggalFromPresensiDosen(jadwalid[0])) datapdf.append(tanggal) statusapprove = cekStatusApproveBAP(jadwalid[0]) makePDFInner(datapdf, matkuldetails, lecturername, pdf, pdfpertemuan, lecturercode, statusapprove) matkuldetailsfix = matkuldetails makePDFFooter(matkuldetailsfix, lecturercode, pdf) except Exception as e: print(str(e)) print(f'pertemuan kurang dari {config.kehadiran}') pertemuankurang.append(jadwalid[0]) cekkurangmateri = cekKurangMateri(cekMateriByGrouping(lecturercode)) cekkurangapproval = cekKurangApproval( cekApprovalBAPByGrouping(lecturercode)) if len(pertemuankurang) > 0 or cekkurangmateri[ 0] == False or cekkurangapproval[0] == False: msgkurang = '' if len(pertemuankurang) > 0: msgkurang += f'hai haiii, kamu yang request BAP yaaa?{config.whatsapp_api_lineBreak}wahhh ada yang kurang nih pertemuannya ini Jadwal ID nya yaaa:' for i in pertemuankurang: kelasdetails = kelas.getMkDetails(i) msgkurang += f'{config.whatsapp_api_lineBreak}{i} | {kelasdetails[2]} | {kelas.toKelas(kelasdetails[-1])}' if cekkurangmateri[0] == False: kurangmateri = '' for i in cekkurangmateri[1]: kelasdetails = kelas.getMkDetails(i[0]) kurangmateri += f'{config.whatsapp_api_lineBreak}{i[0]} | {kelasdetails[2]} | {kelas.toKelas(kelasdetails[-1])}' msgkurang += f'{config.whatsapp_api_lineBreak}{config.whatsapp_api_lineBreak}aduhhhh ternyata ada yang kurang nih ketika kamu request BAP, matkul dengan Jadwal ID:{kurangmateri}{config.whatsapp_api_lineBreak}materinya kurang nihhhhh, tolong lengkapi lagiii yaaa caranya ketik ini *iteung panduan dosen kelas online* dan baca panduan nomor 13 dan 14' if cekkurangapproval[0] == False: kurangapprove = '' for i in cekkurangapproval[1]: siapayangkurang = '' kelasdetails = kelas.getMkDetails(i[0]) if i[1] == False: siapayangkurang += ' | KAPRODI' if i[2] == False: siapayangkurang += ' | DEPUTI AKADEMIK' kurangapprove += f'{config.whatsapp_api_lineBreak}{i[0]} | {kelasdetails[2]} | {kelas.toKelas(kelasdetails[-1])} {siapayangkurang}' msgkurang += f'{config.whatsapp_api_lineBreak}{config.whatsapp_api_lineBreak}wuowwww ada yang kurang nih ketika kamu request BAP, status approval nya masih belum di ACC nih dengan Jadwal ID:{kurangapprove}{config.whatsapp_api_lineBreak}' wa.setOutbox(numbers.normalize(num), msgkurang) else: mail( getLecturerMail(lecturercode), f'Halooooo, {config.bot_name} ngirim file nich....', f'ini ya file Absensi BKD yang Bapak/Ibu minta silahkan di cek... ehee....', getFilePath(getLecturerMail(lecturercode), 'bkd'))
def createAbsensiPage(contain, styles, kode_dosen, prodi, tipe_kelas, listMahasiswa, qrWhiteImage, qrDosen): contain.append(Image('logo_absensi_perwalian.PNG', 17.5 * cm, 4 * cm)) contain.append(Spacer(1, .5 * cm)) text = '<font size="12">(harap dilampirkan juga bukti absensi dalam bentuk screenshoot wa atau google form untuk absensi pada halaman berikutnya)</font>' contain.append(Paragraph(text, styles["Justify"])) contain.append(Spacer(1, .5 * cm)) data = [ ['NAMA DOSEN', ':', kelas.getNamaDosen(kode_dosen)], ['PROGRAM STUDI', ':', prodi], ['KELAS', ':', tipe_kelas], ] table = Table(data, [5 * cm, .5 * cm, 10.5 * cm], len(data) * [.6 * cm]) table.setStyle( TableStyle([ ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ])) contain.append(table) contain.append(Spacer(1, .7 * cm)) data = [[ Paragraph('<font size="12"><b>No</b></font>', styles["Center"]), Paragraph('<font size="12"><b>NPM</b></font>', styles["Center"]), Paragraph('<font size="12"><b>Nama Mahasiswa</b></font>', styles["Center"]), Paragraph('<font size="12"><b>Tanda Tangan</b></font>', styles["Center"]) ]] data.extend(listMahasiswa) table = Table(data, [1 * cm, 2 * cm, 10 * cm, 3 * cm], len(data) * [1.5 * cm]) table.setStyle( TableStyle([ ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), ('ALIGN', (0, 1), (-1, -1), 'LEFT'), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('ALIGN', (-1, 0), (-1, -1), 'CENTER'), ('INNERGRID', (0, 0), (-1, -1), 1, colors.black), ('BOX', (0, 0), (-1, -1), 1, colors.black), ])) contain.append(table) contain.append(Spacer(1, .7 * cm)) data = [ [ Paragraph('<font size="12"></font>', styles["Center"]), Paragraph('<font size="12"></font>', styles["Center"]), Paragraph('<font size="12"><b>Mengetahui,</b></font>', styles["Center"]) ], [ Paragraph('<font size="12"></font>', styles["Center"]), Paragraph('<font size="12"></font>', styles["Center"]), Paragraph('<font size="12"><b>Dosen Wali,</b></font>', styles["Center"]) ], [ Image(qrWhiteImage, 4 * cm, 4 * cm), Image(qrWhiteImage, 4 * cm, 4 * cm), Image(qrDosen, 4 * cm, 4 * cm) ], [ Paragraph(f'<font size="12"></font>', styles["Center"]), Paragraph(f'<font size="12"></font>', styles["Center"]), Paragraph( f'<font size="12"><u>{capitalizeName(kelas.getNamaDosenTanpaGelar(kode_dosen))}</u></font>', styles["Center"]) ], ] table = Table(data, [6.8 * cm, 6.8 * cm, 6.8 * cm], [.6 * cm, .6 * cm, 4.5 * cm, 1 * cm]) table.setStyle( TableStyle([ ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), ('ALIGN', (0, 1), (-1, -1), 'CENTER'), ])) contain.append(table)
def createBeritaAcaraPage(contain, styles, tahunAkademik, hariSekarang, tglSekarang, kode_dosen, prodi, tipe_kelas, jumlahMhs, jumlahHadir, jumlahTdkHadir, listMasukan, qrKm, qrWhiteImage, qrDosen, namaKm): contain.append(Image('logo_berita_acara_perwalian.PNG', 17.5 * cm, 4 * cm)) contain.append(Spacer(1, .5 * cm)) text = f'<font size="12">Pada hari ini {hariSekarang} tanggal {tglSekarang}, telah dilaksanakan Perwalian Tahun Akademik {tahunAkademik} dengan data sebagai berikut:</font>' contain.append(Paragraph(text, styles["Justify"])) contain.append(Spacer(1, .5 * cm)) data = [ ['Nama Dosen Wali', ':', kelas.getNamaDosen(kode_dosen)], ['Jurusan / Kelas', ':', f'{prodi} / {tipe_kelas}'], ['Jumlah Mahasiswa', ':', jumlahMhs], ['Jumlah yang hadir', ':', jumlahHadir], ['Jumlah yang tidak hadir', ':', jumlahTdkHadir], ] table = Table(data, [5 * cm, .5 * cm, 10.5 * cm], len(data) * [.6 * cm]) table.setStyle( TableStyle([ ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ])) contain.append(table) contain.append(Spacer(1, .7 * cm)) text = '<font size="12">Catatan masukan dari mahasiswa :</font>' contain.append(Paragraph(text, styles["Justify"])) contain.append(Spacer(1, .1 * cm)) style = TableStyle([ ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) s = getSampleStyleSheet() s = s['BodyText'] s.wordWrap = 'CJK' data1 = [[Paragraph(cell, s) for cell in row] for row in listMasukan] tab = Table(data1, hAlign='LEFT', colWidths=[20, 450]) tab.setStyle(style) contain.append(tab) contain.append(Spacer(1, .6 * cm)) # table = Table(listMasukan, [.6 * cm, 15.2 * cm], len(listMasukan) * [1 * cm]) # table.setStyle(TableStyle([ # ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), # ('VALIGN', (0, 0), (-1, -1), 'TOP'), # ('ALIGN', (0, 0), (-1, -1), 'LEFT'), # ])) # contain.append(table) # contain.append(Spacer(1, .7 * cm)) data = [ [ Paragraph('<font size="12"><b>Ketua Kelas,</b></font>', styles["Center"]), Paragraph('<font size="12"><b></b></font>', styles["Center"]), Paragraph('<font size="12"><b>Dosen Wali,</b></font>', styles["Center"]) ], [ Image(qrKm, 4 * cm, 4 * cm), Image(qrWhiteImage, 4 * cm, 4 * cm), Image(qrDosen, 4 * cm, 4 * cm) ], [ Paragraph(f'<font size="12"><u>{namaKm}</u></font>', styles["Center"]), Paragraph(f'<font size="12"></font>', styles["Center"]), Paragraph( f'<font size="12"><u>{capitalizeName(kelas.getNamaDosenTanpaGelar(kode_dosen))}</u></font>', styles["Center"]) ], ] table = Table(data, [6.8 * cm, 6.8 * cm, 6.8 * cm], [.6 * cm, 4.5 * cm, 1 * cm]) table.setStyle( TableStyle([ ('FONT', (0, 0), (-1, -1), 'Times-Roman', 12), ('ALIGN', (0, 1), (-1, -1), 'CENTER'), ])) contain.append(table) contain.append(PageBreak())
def replymsg(driver, data): wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0]) wa.typeAndSendMessage(driver, wmsg) num = data[0] msg = data[3] msg = message.normalize(msg) datefromdatabasehomebase = getStartDate(num) if datefromdatabasehomebase is None: msgreply = 'wahhh kayaknya jadwal start bimbingannya belum diset sama kaprodi kamu deehhhh, coba minta di setting dulu jadwalnya....' else: startdate = datetime.date(datefromdatabasehomebase) pertemuan, datemulai, dateakhir = countPertemuan(startdate) if pertemuan == False: msgreply = 'yahhh pertemuannya udah kelewat batasss, yang sabar yaaaaaa..... :(' else: successsplit = '' try: studentid = msg.split('bimbingan ')[1].split(' ')[1] tipe = msg.split('bimbingan ')[1].split(' ')[0] target_selesai = msg.split('sudah dikerjakan ')[1].split( ' pekerjaan selanjutnya')[0] terget_selanjutnya = msg.split( 'pekerjaan selanjutnya ')[1].split(' nilai')[0] topik = target_selesai + ';' + terget_selanjutnya nilai = msg.split('nilai ')[1].split(' passcode')[0] passcode = msg.split('passcode ')[1] except: successsplit = 'error' if successsplit == 'error': msgreply = 'wahhhh salah nih keywordnya coba diperbaikin deh....' else: obj = AES.new(config.key, AES.MODE_CBC, config.iv) dec = bytes.fromhex(passcode) resultpasscode = obj.decrypt(dec).decode('utf-8') datenow = datetime.date(datetime.now()).strftime('%d%m%Y') hari = datetime.now().strftime('%A') hari = bimbingan_mahasiswa.hariSwitcher(hari) studentphonenumber = kelas.getStudentPhoneNumberFromNPM( studentid) studentphonenumber = normalizePhoneNumberToWhatsappVersion( studentphonenumber) logmsg = '' for i in getLogMessageStudent(datemulai, dateakhir, kelas.getKodeDosen(num), studentphonenumber): if i[0] != '': logmsg += i[0] + ';' if logmsg == '': msgreply = 'mohon maaf tidak ada diskusi diantara Dosen dan Mahasiswa maka tidak bisa di input... atau dosen dan mahasiswa kurang aktif diskusi' else: if resultpasscode == studentid + datenow + hari: if int(nilai) > 100: msgreply = 'buset nilainya kaga salah itu bos?? gede benerr......' else: kodedosen = kelas.getKodeDosen(num) if isSudahInputBimbingan(studentid, pertemuan, kodedosen): updateNilaiBimbingan(studentid=studentid, nilai=nilai, topik=topik, pertemuan=pertemuan, logmsg=logmsg) msgreply = 'oke sudah iteung update yaaa nilainya.....' else: insertBimbingan(studentid=studentid, lecturerid=kodedosen, tipe=tipe, topik=topik, nilai=nilai, pertemuan=pertemuan, logmsg=logmsg) msgreply = 'oke sudah di input yaaa....' nama = kelas.getStudentNameOnly(studentid) databimbingan = getDataBimbingan(studentid) if databimbingan == None: msgreply = 'maaf data bimbingan tidak dapat ditemukan' else: pembimbing1 = databimbingan[0][-3] pembimbing2 = None for i in databimbingan: if i[-3] != pembimbing1: pembimbing2 = databimbingan.index(i) break if pembimbing2 is None: pembimbing2 = False pembimbing1 = databimbingan[0:] else: pembimbing1 = databimbingan[0:pembimbing2] pembimbing2 = databimbingan[pembimbing2:] msgreply += '\n\n*PENILAIAN DOSEN PEMBIMBING*' for i in pembimbing1: topik = i[3].split(';') target_selesai = topik[0] target_selanjutnya = topik[1] datalog = i[7] datalog = datalog.split(';') namadosen = kelas.getNamaDosen(i[5]) msgreply += '\n\nNama: {nama}\nNPM: {studentid}\nTipe: {tipe}\nPertemuan: {pertemuanke}\nSudah Dikerjakan: {targetselesai}\nPekerjaan Selanjutnya: {targetselanjutnya}\nNilai: {nilai}\nPenilai: {penilai} / {namadosen}\nJumlah Percakapan: {log}'.format( nama=nama, studentid=i[0], tipe=i[1], pertemuanke=i[2], targetselesai=target_selesai, targetselanjutnya=target_selanjutnya, nilai=i[4], penilai=i[5], log=str(len(datalog)), namadosen=namadosen) if pembimbing2 == False: msgreply += '\n\n*PENILAIAN DOSEN PEMBIMBING*\npembimbing belum input nilai' else: msgreply += '\n\n*PENILAIAN DOSEN PEMBIMBING*' for i in pembimbing2: topik = i[3].split(';') target_selesai = topik[0] target_selanjutnya = topik[1] datalog = i[7] datalog = datalog.split(';') namadosen = kelas.getNamaDosen(i[5]) msgreply += '\n\nNama: {nama}\nNPM: {studentid}\nTipe: {tipe}\nPertemuan: {pertemuanke}\nSudah Dikerjakan: {targetselesai}\nPekerjaan Selanjutnya: {targetselanjutnya}\nNilai: {nilai}\nPenilai: {penilai} / {namadosen}\nJumlah Percakapan: {log}'.format( nama=nama, studentid=i[0], tipe=i[1], pertemuanke=i[2], targetselesai=target_selesai, targetselanjutnya= target_selanjutnya, nilai=i[4], penilai=i[5], log=str(len(datalog)), namadosen=namadosen) else: msgreply = 'passcodenya salah bosqueeeeee' return msgreply
def replymsg(driver, data): ssl._create_default_https_context = ssl._create_unverified_context num = numbers.normalize(data[0]) studentid,studentname=kelas.getNpmandNameMahasiswa(num) tipe_bimbingan = cek_bimbingan_dosen.cekTipeBimbingan(data[3]) statusapprovalkambing = cekApprovalKambingAtBeginning(studentid, tipe_bimbingan) if tipe_bimbingan: if statusapprovalkambing is not None: if tipe_bimbingan == 'ta': if 'false' in statusapprovalkambing or '' in statusapprovalkambing: msgreply = 'wiwiwiwiwi KAMBING kamu belum di approve nih sama Bapak/Ibu dosen yang ini nih:' if 'false' == statusapprovalkambing[0] or '' == statusapprovalkambing[0]: kodedosen1 = getKodeDosenBimbingan(studentid)[0] namadosen = kelas.getNamaDosen(kodedosen1) msgreply += f'\n{kodedosen1} | {namadosen} | PEMBIMBING 1' if 'false' == statusapprovalkambing[1] or '' == statusapprovalkambing[1]: kodedosen1 = getKodeDosenBimbingan(studentid)[1] namadosen = kelas.getNamaDosen(kodedosen1) msgreply += f'\n{kodedosen1} | {namadosen} | PEMBIMBING 2' else: KODE_DOSEN_BIMBINGAN = getKodeDosenBimbingan(studentid) status_nilai1, nilai_total1 = totalNilai(studentid, config.MINIMUM_PERTEMUAN_BIMBINGAN, KODE_DOSEN_BIMBINGAN[0]) status_nilai2, nilai_total2 = totalNilai(studentid, config.MINIMUM_PERTEMUAN_BIMBINGAN, KODE_DOSEN_BIMBINGAN[1]) if status_nilai1 and status_nilai2: JUDUL_BIMBINGAN = getJudulBimbingan(studentid, kelas.getTahunID()) KODE_DOSEN_BIMBINGAN = getKodeDosenBimbingan(studentid) if KODE_DOSEN_BIMBINGAN is None: msgreply = f'data dengan npm {studentid} tidak ditemukan' else: for KODE_DOSEN in KODE_DOSEN_BIMBINGAN: NAMA_DOSEN = kelas.getNamaDosen(KODE_DOSEN) NIDN_DOSEN = getNIDNDosen(KODE_DOSEN) TAHUN_AJARAN = kelas.getTahunAjaran(kelas.getProdiIDwithStudentID(studentid)).split(' ')[-1] photo = berita_acara_pitak.cekPhotoRoute(studentid) makePdf( npm_mahasiswa=studentid, nama_mahasiswa=studentname, tipe_bimbingan=tipe_bimbingan, nama_pembimbing=NAMA_DOSEN, kode_dosen_pembimbing=KODE_DOSEN, nidn_pembimbing=NIDN_DOSEN, tahun_ajaran=TAHUN_AJARAN, photo=photo, judul=JUDUL_BIMBINGAN, total_nilai=totalNilai(studentid, config.MINIMUM_PERTEMUAN_BIMBINGAN, KODE_DOSEN)[1] ) bkd.mail(kelas.getDataMahasiswa(studentid)[3], f'eyyowwwwwww {config.bot_name} nihhhh mau nganter file yang kamu mintaaa', f'ini ya file KAMBING (Kartu Bimbingan) yang Akang/Teteh minta silahkan di cek... ehee....', bkd.getFilePath(kelas.getDataMahasiswa(studentid)[3], 'kambing', switcherTipeBimbingan(tipe_bimbingan))) msgreply = f"sudah selesai dan sudah dikirim ke email kamu yang {kelas.getDataMahasiswa(studentid)[3]} yaa...." else: msgreply = f'mohon maaf belum bisa cetak kartu bimbingan dikarenakan pertemuan masih ada yang kurang' if status_nilai1 == False: msgreply += f'\n{KODE_DOSEN_BIMBINGAN[0]} | {kelas.getNamaDosen(KODE_DOSEN_BIMBINGAN[0])}' if status_nilai2 == False: msgreply += f'\n{KODE_DOSEN_BIMBINGAN[1]} | {kelas.getNamaDosen(KODE_DOSEN_BIMBINGAN[1])}' else: if statusapprovalkambing[0] == 'false' or statusapprovalkambing[0] == '': msgreply = 'wiwiwiwiwi KAMBING kamu belum di approve nih sama Bapak/Ibu dosen yang ini nih:' kodedosen1 = getKodeDosenBimbingan(studentid)[0] namadosen = kelas.getNamaDosen(kodedosen1) msgreply += f'\n{kodedosen1} | {namadosen} | PEMBIMBING 1' else: KODE_DOSEN_BIMBINGAN = getKodeDosenBimbingan(studentid) status_nilai1, nilai_total1 = totalNilai(studentid, config.MINIMUM_PERTEMUAN_BIMBINGAN, KODE_DOSEN_BIMBINGAN[0]) if status_nilai1: JUDUL_BIMBINGAN = getJudulBimbingan(studentid, kelas.getTahunID()) KODE_DOSEN_BIMBINGAN = getKodeDosenBimbingan(studentid) if KODE_DOSEN_BIMBINGAN is None: msgreply = f'data dengan npm {studentid} tidak ditemukan' else: KODE_DOSEN = KODE_DOSEN_BIMBINGAN[0] NAMA_DOSEN = kelas.getNamaDosen(KODE_DOSEN) NIDN_DOSEN = getNIDNDosen(KODE_DOSEN) TAHUN_AJARAN = kelas.getTahunAjaran(kelas.getProdiIDwithStudentID(studentid)).split(' ')[-1] photo = berita_acara_pitak.cekPhotoRoute(studentid) makePdf( npm_mahasiswa=studentid, nama_mahasiswa=studentname, tipe_bimbingan=tipe_bimbingan, nama_pembimbing=NAMA_DOSEN, kode_dosen_pembimbing=KODE_DOSEN, nidn_pembimbing=NIDN_DOSEN, tahun_ajaran=TAHUN_AJARAN, photo=photo, judul=JUDUL_BIMBINGAN, total_nilai=totalNilai(studentid, config.MINIMUM_PERTEMUAN_BIMBINGAN, KODE_DOSEN)[1] ) getFilePath(kelas.getDataMahasiswa(studentid)[3], 'kambing', switcherTipeBimbingan(tipe_bimbingan)) bkd.mail(kelas.getDataMahasiswa(studentid)[3], f'eyyowwwwwww {config.bot_name} nihhhh mau nganter file yang kamu mintaaa', f'ini ya file KAMBING (Kartu Bimbingan) yang Akang/Teteh minta silahkan di cek... ehee....', getFilePath(kelas.getDataMahasiswa(studentid)[3], 'kambing', switcherTipeBimbingan(tipe_bimbingan))) msgreply = f"sudah selesai dan sudah dikirim ke email kamu yang {kelas.getDataMahasiswa(studentid)[3]} yaa...." else: msgreply = f'mohon maaf belum bisa cetak kartu bimbingan dikarenakan pertemuan masih ada yang kurang:' if status_nilai1 == False: msgreply += f'\n{KODE_DOSEN_BIMBINGAN[0]} | {kelas.getNamaDosen(KODE_DOSEN_BIMBINGAN[0])}' else: msgreply = f'mohon maaf data dengan npm {studentid} tidak bisa ditemukan' else: msgreply = 'Mana nihhhh tipe bimbingannya coba dicek lagi yaa....' return msgreply