def cekNPM(msgs): for i in msgs: if kelas.getStudentNameOnly(i) != None: if kelas.getStudentNameOnly(i): return i, True else: continue
def replymsg(driver, data): wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0]) wmsg = wmsg.replace('#BOTNAME#', config.bot_name) wa.typeAndSendMessage(driver, wmsg) num = numbers.normalize(data[0]) msg = message.normalize(data[3]) npm = msg.split(' ')[-1] kodedosen = kelas.getKodeDosen(num) if npm == "all": msgreply = 'ok sudah di approve semua berkas KAMBING-nya sama #BOTNAME# yyyyaaa' sudah, siap, belum = bimbinganCekApprovalBimbingan(kodedosen) if siap == []: msgreply = 'yah datanya belum ada lagi nih yang siap untuk di approve, coba deh cek dengan cara ketik #BOTNAME# cek approval kambing' else: for j in siap: pembimbing_ke = pembimbingPositionAs( getDataPembimbing(j, kodedosen), kodedosen) setSingleApprovalBimbingan(j, kodedosen, pembimbing_ke, 'true') nama_mahasiswa = kelas.getStudentNameOnly(j) msgreply += f'\n\nNPM: {j}\nNama: {nama_mahasiswa}' else: data = getDataPembimbing(npm, kodedosen) if data == None: msgreply = f'npm {npm} tidak ditemukan didata bimbingan Bapak/Ibu dosen' else: pembimbing_ke = pembimbingPositionAs(data, kodedosen) setSingleApprovalBimbingan(npm, kodedosen, pembimbing_ke, 'true') nama_mahasiswa = kelas.getStudentNameOnly(npm) msgreply = 'oke sudah #BOTNAME# approve untuk KAMBING' msgreply += f'\n\nNPM: {npm}\nNama: {nama_mahasiswa}' return msgreply
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 getandsetStudentIDandStudentNAME(jadwalid): studentid = [] studentname = [] jadwalserial = kelas.getJadwalSerial(jadwalid=jadwalid) if jadwalserial == '0': jadwalid = jadwalid else: jadwalid = jadwalserial studentlists = getListStudent(jadwalid) for studentlist in studentlists: studentid.append(studentlist[-1]) studentname.append(kelas.getStudentNameOnly(studentlist[-1])) return studentid, studentname
def verifyDigitalSign(resultpasscode): npm_koor_pleton = 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] data_koor_pleton = kelas.getDataMahasiswa(npm_koor_pleton) penerbitantandatangan = f'{jamttd}:{mntttd}:{dtkttd} {tglttd} {bkd.bulanSwitcher(blnttd)} {thnttd}' nama_koor_pleton = kelas.getStudentNameOnly(npm_koor_pleton) msgreply = f'Ini yaaa data yang Akang/Teteh minta\n\nNPM: {npm_koor_pleton}\nNama Mahasiswa: {nama_koor_pleton}\nHandphone: {data_koor_pleton[2]}\nE-mail: {data_koor_pleton[3]}\n\nJenis Dokumen: {jnsdkm}\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) tipe_bimbingan=cekTipeBimbingan(msg) if tipe_bimbingan: for i in getMahasiswaBimbingan(kelas.getTahunID(), tipe_bimbingan): if i[1]==kodedosen or i[2]==kodedosen: npm.append(i[0]) try: datefromdatabasehomebase=bimbingan_dosen.getStartDate(num, tipe_bimbingan) 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=f'Nama Dosen: {kelas.getNamaDosen(kodedosen)}\n' \ f'Prodi: {pertemuan_bimbingan.getHomebase(num)}\n' \ f'Pertemuan: {pertemuan}\n\n' \ f'NPM | Nama | Status Bimbingan\n\n' for i in npm: cek=cek_bimbingan(i, kodedosen, pertemuan, tipe_bimbingan) namamahasiswa=kelas.getStudentNameOnly(i) if cek == None: msgreply+=f'*{i}* | {namamahasiswa} | *_BELUM BIMBINGAN_*\n' else: msgreply+=f'*{i}* | {namamahasiswa} | *_SUDAH BIMBINGAN_*\n' except Exception as e: msgreply=f'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....' else: msgreply='eh eh eh mana nihhh tipe bimbingannya harus dimasukin ke keyword yaaaa tipe bimbingannya cek di panduan mahasiswa bimbingan yaaa...' 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 mainPages(kode_dosen, prodi_id, nama_dosen, km_npm, nama_prodi, tipe_kelas, catatan, group_name, jmlPesertaPerwalian): checkDir() namaFile = f"surat_perwalian/SURAT-PERWALIAN-{kode_dosen}-{kelas.getTahunID()}-{prodi_id}-{tipe_kelas}-{kelas.getEmailDosen(kode_dosen)}.pdf" # check dir qrcode checkDirQrcode() # generate dosen barcode link = makeLinkVerifiy(kode_dosen) makeQrcodeLinkVerifySign(link, 'dosen', kode_dosen) # generate km barcode link = makeLinkVerifiy(km_npm) makeQrcodeLinkVerifySign(link, 'km', kode_dosen) # generate kaprodi barcode # kaprodinipycode = bkd.getNipyKaProdi(prodi_id) # kaprodiDosenID = bkd.getDosenIDfromNIPY(kaprodinipycode) # link = makeLinkVerifiy(kaprodiDosenID) # makeQrcodeLinkVerifySign(link, 'kaprodi', kode_dosen) # generate deputi barcode # deputinipycode = bkd.getNipyDeputi(9) # deputiDosenID = bkd.getDosenIDfromNIPY(deputinipycode) # link = makeLinkVerifiy(deputiDosenID) # makeQrcodeLinkVerifySign(link, 'deputi', kode_dosen) masukan = catatanToList(catatan) # namaDeputi = nama_deputi # namaKaprodi = nama_kaprodi prodi = nama_prodi listMahasiswa = hadirAbsensiData(group_name, 'daring', kode_dosen) jumlahMhs = jmlPesertaPerwalian jumlahHadir = len(listMahasiswa) jumlahTdkHadir = jumlahMhs - jumlahHadir cekPerwalianLog(kode_dosen, prodi_id, kelas.getTahunID(), group_name, jumlahMhs, jumlahHadir, jumlahTdkHadir, catatan) # statusappove=cekStatusApprovePerwalian(kode_dosen, kelas.getTahunID()) qrWhiteImage = 'bkdqrcode/whiteimage.png' # if statusappove[1] == 'true': # qrDeputi = f'surat_perwalian_qrcode/deputiqrcode-{kelas.getTahunID()}-{kode_dosen}.png' # # qrKaprodi = 'bkdqrcode/whiteimage.png' # if statusappove[0] == 'true': # qrKaprodi = f'surat_perwalian_qrcode/kaprodiqrcode-{kelas.getTahunID()}-{kode_dosen}.png' qrKm = f'surat_perwalian_qrcode/kmqrcode-{kelas.getTahunID()}-{kode_dosen}.png' qrDosen = f'surat_perwalian_qrcode/dosenqrcode-{kelas.getTahunID()}-{kode_dosen}.png' tahunAkademik = f'{int(kelas.getTahunID()[:-1])} - {int(kelas.getTahunID()[:-1]) + 1}' hariSekarang = daysEnToInd(datetime.now().strftime('%A')) tglSekarang = bkd.sahTanggal() listMasukan = masukan doc = SimpleDocTemplate(namaFile, pagesize=A4, rightMargin=2.5 * cm, leftMargin=2.5 * cm, topMargin=2.5 * cm, bottomMargin=2.5 * cm) contain = [] styles = getSampleStyleSheet() styles.add( ParagraphStyle(name='Justify', alignment=TA_JUSTIFY, fontName='Times', fontSize=12)) styles.add( ParagraphStyle(name='Center', alignment=TA_CENTER, fontName='Times')) createBeritaAcaraPage(contain, styles, tahunAkademik, hariSekarang, tglSekarang, kode_dosen, prodi, tipe_kelas, jumlahMhs, jumlahHadir, jumlahTdkHadir, listMasukan, qrKm, qrWhiteImage, qrDosen, kelas.getStudentNameOnly(km_npm)) createAbsensiPage(contain, styles, kode_dosen, prodi, tipe_kelas, listMahasiswa, qrWhiteImage, qrDosen) doc.build(contain) bkd.mail( kelas.getEmailDosen(kode_dosen), f'alooooo {config.bot_name} kirim file Absensi Perwalian NICHHHHHHH', f'Tolong dicek kembali yaaa datanya, dan jangan lupa buruann minta approvalnya ke KAPRODI dan DEPUTI yaa....', bkd.getFilePath(kelas.getEmailDosen(kode_dosen), 'surat_perwalian', kelas.getTahunID()))
def replymsg(driver, data): msgreply = '' npms = kelas.getStudentIdFromParentPhoneNumber(data[0]) for npm in npms: npm = npm[0] nama = kelas.getStudentNameOnly(npm) for trx_id in getTrxIDList(npm): trx_id = trx_id[0] payment = getDataPembayaran(trx_id) kode_transaksi = trx_id judul_transaksi = trx_id.split('-')[1] virtual_account = payment['virtual_account'] customer_name = payment['customer_name'] trx_amount = payment['trx_amount'] payment_amount = payment['payment_amount'] cumulative_payment_amount = payment['cumulative_payment_amount'] datetime_payment = payment['datetime_payment'] percentage = '' if 'SPP' in trx_id: npm = app.cekNpmInTrxID(trx_id) ws = app.openfile().active prodi_singkatan = app.getProdiSingkatanFromProdiID( kelas.getProdiIDwithStudentID(npm)).lower() tingkat = f"tk{int(kelas.getTahunID()[:-1]) - int(kelas.getTahunAngkatanWithStudentID(npm)) + 1}" angkatan = kelas.getTahunAngkatanWithStudentID(npm) if angkatan == '2020': pass else: key = f'{prodi_singkatan}{tingkat}{angkatan}' default_amount_payment = app.getDataDefault(key, ws) if int(trx_amount) > int(default_amount_payment): amount_tunggakan = int(trx_amount) - int( default_amount_payment) transfer_spp = int(cumulative_payment_amount) - int( amount_tunggakan) percentage = float( int(transfer_spp) / int(default_amount_payment)) * 100 else: potongan = int(default_amount_payment) - int( trx_amount) cumulative_payment_amount += potongan transfer_spp = int(cumulative_payment_amount) percentage = float( int(transfer_spp) / int(default_amount_payment)) * 100 app.openfile().close() if angkatan == '2020': msgreply += f'Jenis Pembayaran: *{judul_transaksi}*\n' \ f'Kode Transaksi: *{kode_transaksi}*\n' \ f'Virtual Account: *{virtual_account}*\n' \ f'Nama Pelanggan: *{customer_name}*\n' \ f'Jumlah Yang Harus Dibayar: *{app.floatToRupiah(float(trx_amount))}*\n' \ f'Jumlah Transfer: *{app.floatToRupiah(float(payment_amount))}*\n' \ f'Total Transfer: *{app.floatToRupiah(float(cumulative_payment_amount))}*\n' \ f'Tanggal dan Jam Transfer: *{datetime_payment}*\n\n' else: msgreply += f'Jenis Pembayaran: *{judul_transaksi}*\n' \ f'Kode Transaksi: *{kode_transaksi}*\n' \ f'Virtual Account: *{virtual_account}*\n' \ f'Nama Pelanggan: *{customer_name}*\n' \ f'Jumlah Yang Harus Dibayar: *{app.floatToRupiah(float(trx_amount))}*\n' \ f'Jumlah Transfer: *{app.floatToRupiah(float(payment_amount))}*\n' \ f'Total Transfer: *{app.floatToRupiah(float(cumulative_payment_amount))}*\n' \ f'Tanggal dan Jam Transfer: *{datetime_payment}*\n' \ f'Persentase Pembayaran SPP: {round(percentage)}%\n\n' return msgreply
def makePDFandSEND(kode_pleton, nama_pleton, group_name, materi, npm_koor_pleton): folder_name='absensi_cb' checkDir(folder_name) doc = SimpleDocTemplate(f'./{folder_name}/ABSENSI-CB-PLETON-{npm_koor_pleton}-{kode_pleton}-{nama_pleton}-{kelas.getStudentEmail(npm_koor_pleton)}.pdf', pagesize=letter, leftMargin=30, rightMargin=30, topMargin=.1, bottomMargin=130) doc.pagesize = portrait(A4) elements = [] elements.append(Image(f'./skpi/header.png', 19 * cm, 2.5 * cm)) elements.append(Spacer(1, 0 * cm)) absensi_from_log = kelas.getnumonly(groupname=group_name, tipe='daring') npm_and_nama = [] for phone_number in absensi_from_log: peserta_cb_phone_number = numbers.normalize(phone_number[0]) if peserta_cb_phone_number in config.nomor_koor_pleton_cb: continue else: npm_nama = kelas.getNpmandNameMahasiswa(peserta_cb_phone_number) npm_and_nama.append(npm_nama) pdfmetrics.registerFont(TTFont('TNR', 'timesdownload.ttf')) pdfmetrics.registerFont(TTFont('TNRB', 'timesdownloadbd.ttf')) 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)) styles.add(ParagraphStyle(name='absensi_cb_style', fontName="TNRB", fontSize=14, alignment=TA_CENTER)) styles.add(ParagraphStyle(name='Times', fontName="TNR")) ptext = '<font>ABSENSI CHARACTER BUILDING 2020</font>' elements.append(Paragraph(f'{ptext}', styles["absensi_cb_style"])) elements.append(Spacer(1, 35)) waktu_tanggal=datetime.now().strftime("%d-%m-%Y %H:%M:%S") data = [ [f'<font name="Times" size="10">Kode Pleton</font>', f'<font name="Times" size="10">:</font>', f'<font name="Times" size="10">{kode_pleton}</font>', f'<font name="Times" size="10">Nama Pleton</font>', f'<font name="Times" size="10">:</font>', f'<font name="Times" size="10">{nama_pleton}</font>'], [f'<font name="Times" size="10">Materi</font>', f'<font name="Times" size="10">:</font>', f'<font name="Times" size="10">{materi}</font>', f'<font name="Times" size="10">Tanggal dan Waktu</font>', f'<font name="Times" size="10">:</font>', f'<font name="Times" size="10">{waktu_tanggal}</font>'], ] style = TableStyle( [ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ] ) s = getSampleStyleSheet() s = s["BodyText"] s.wordWrap = 'CJK' data1 = [[Paragraph(cell, s) for cell in row] for row in data] tab = Table(data1, hAlign='CENTER', colWidths=[2.5*cm, .5*cm, 4.5*cm, 4*cm, .5*cm, 4.5*cm]) tab.setStyle(style) elements.append(tab) elements.append(Spacer(1, 0.35 * inch)) data = [['Nomor', 'NPM', 'Nama', 'Program Studi']] nomor=1 for npmnama in npm_and_nama: if npmnama: data_for_append=[] data_for_append.append(f'{str(nomor)}.') data_for_append.append(npmnama[0]) data_for_append.append(npmnama[1]) data_for_append.append(kelas.getProdiNameWithStudentID(npmnama[0])) data.append(data_for_append) nomor+=1 else: continue style = TableStyle([('FONT', (0, 0), (-1, -1), 'Helvetica-Bold'), ('VALIGN', (0, -1), (-1, -1), 'MIDDLE'), ('ALIGN', (0, -1), (-1, -1), 'CENTER'), ('INNERGRID', (0, 0), (-1, -1), 0.50, colors.black), ('BOX', (0, 0), (-1, -1), 0.25, colors.black) ]) s = getSampleStyleSheet() s = s["Normal"] s.wordWrap = 'CJK' data2 = [[Paragraph(cell, s) for cell in row] for row in data] t = Table(data2, hAlign='CENTER', colWidths=[1.5 * cm, 2 * cm, 8 * cm, 6 * cm]) t.setStyle(style) elements.append(t) elements.append(Spacer(1, 10)) ptext = '<font size=10> </font>' elements.append(Paragraph(ptext, styles["Right"])) elements.append(Spacer(1, .5 * inch)) bulan = date.today().strftime("%m") d2 = date.today().strftime(f"%d {bkd.bulanSwitcher(bulan)} %Y") ptext = '<font name="Times" size="10">Bandung, ' + d2 + '</font>' elements.append(Paragraph(ptext, styles["Right"])) elements.append(Spacer(1, 12)) ptext = '<font name="Times" size="10">Koordinator Pleton,</font>' elements.append(Paragraph(ptext, styles["Right"])) elements.append(Spacer(1, .1 * inch)) qrcode_path=makeQrcodeLinkVerifySign(link=makeLinkVerifiy(npm_koor_pleton), nama_pleton=nama_pleton, kode_pleton=kode_pleton, npm_koor_pleton=npm_koor_pleton) im = Image(qrcode_path, 1.5 * inch, 1.5 * inch) im.hAlign = "RIGHT" elements.append(im) ptext = '<font name="Times" size="10">' + kelas.getStudentNameOnly(npm_koor_pleton) + '</font>' elements.append(Paragraph(ptext, styles["Right"])) elements.append(Spacer(1, 1)) ptext = '<font name="Times" size="10">NIM. ' + npm_koor_pleton + '</font>' elements.append(Paragraph(ptext, styles["Right"])) elements.append(Spacer(1, 1)) doc.build(elements, onFirstPage=header_footer, onLaterPages=header_footer) bkd.mail( kelas.getStudentEmail(npm_koor_pleton), f'Halooooo, {config.bot_name} ngirim file nich....', f'ini ya file Absensi Character Building 2020 yang Akang/Teteh minta silahkan di cek... ehee....', getFilePath( kelas.getStudentEmail(npm_koor_pleton), folder_name, kode_pleton, nama_pleton, npm_koor_pleton ) ) msgreply = f'Kode Pleton: {kode_pleton}\n' \ f'Nama Pleton: {nama_pleton}\n' \ f'Materi: {materi}\n' \ f'Koordinator Pleton: {kelas.getStudentNameOnly(npm_koor_pleton)}\n' \ f'Tanggal dan Waktu: {waktu_tanggal}\n' \ f'Absensi Peserta CB:\n' number = 1 for data_npm_nama in npm_and_nama: if data_npm_nama: msgreply += f'{number}. {data_npm_nama[0]} - {data_npm_nama[1]}\n' number += 1 else: continue 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) 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