コード例 #1
0
def replymsg(driver, data):
    wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0])
    wa.typeAndSendMessage(driver, wmsg)
    msg = data[3].lower()
    num = numbers.normalize(data[0])
    # tahun_id = '20192'
    tahun_id = kelas.getTahunID()
    if kelas.getNpmandNameMahasiswa(num):
        npm, nama=kelas.getNpmandNameMahasiswa(num)
        try:
            if checkMhs(npm):
                if checkRevisi(npm, tahun_id):
                    msgreply = checkRevisi(npm, tahun_id)
                    msgreply += f'\n{checkSidang(npm, tahun_id)}'
                else:
                    msgreply = "Revisi dulu gih sana...."
                
            else:
                msgreply = "Kamu emg ikutan sidang? jgn ngadi-ngadi deh..."
        except Exception as e: 
            msgreply = f"Error {str(e)}"
    else:
        msgreply = f"Hayoo siapa kamu"
    
    
    
    return msgreply
コード例 #2
0
def replymsg(driver, data):
    if kelas.getKodeDosen(data[0]):
        kode_dosen = kelas.getKodeDosen(data[0])
        dosen_homebase = getHomebaseDosen(kode_dosen)
        nama_file = f'jadwal_sidang_ta_{dosen_homebase}.xlsx'
        status, df = openJadwalExcel(nama_file)
        if status == False:
            msgreply = 'mohon untuk memberikan jadwal sidang dalam bentuk excel ke admin'
        else:
            if 'penguji pendamping' in message.normalize(data[3]):
                msgreply = 'ini dia jadwal sidangnya yaaa....\n\n'
                for i, j in df.iterrows():
                    if j[3] == kode_dosen:
                        msgreply += f'PENGUJI UTAMA: {kelas.getNamaDosen(j[2])}\n' \
                                    f'PENGUJI PENDAMPING: {kelas.getNamaDosen(j[3])}\n' \
                                    f'NPM MAHASISWA: {j[4]}\n' \
                                    f'NAMA MAHASISWA: {kelas.getStudentNameOnly(j[4])}\n' \
                                    f'JADWAL SIDANG: {j[5]}\n' \
                                    f'JAM SIDANG: {j[6]}\n\n'
            elif 'penguji utama' in message.normalize(data[3]):
                msgreply = 'ini dia jadwal sidangnya yaaa....\n\n'
                for i, j in df.iterrows():
                    if j[2] == kode_dosen:
                        msgreply += f'PENGUJI UTAMA: {kelas.getNamaDosen(j[2])}\n' \
                                    f'PENGUJI PENDAMPING: {kelas.getNamaDosen(j[3])}\n' \
                                    f'NPM MAHASISWA: {j[4]}\n' \
                                    f'NAMA MAHASISWA: {kelas.getStudentNameOnly(j[4])}\n' \
                                    f'JADWAL SIDANG: {j[5]}\n' \
                                    f'JAM SIDANG: {j[6]}\n\n'
            else:
                msgreply = 'ini dia jadwal sidangnya yaaa....\n\n'
                for i, j in df.iterrows():
                    if j[2] == kode_dosen or j[3] == kode_dosen:
                        msgreply+=f'PENGUJI UTAMA: {kelas.getNamaDosen(j[2])}\n' \
                                  f'PENGUJI PENDAMPING: {kelas.getNamaDosen(j[3])}\n' \
                                  f'NPM MAHASISWA: {j[4]}\n' \
                                  f'NAMA MAHASISWA: {kelas.getStudentNameOnly(j[4])}\n' \
                                  f'JADWAL SIDANG: {j[5]}\n' \
                                  f'JAM SIDANG: {j[6]}\n\n'
    else:
        mahasiswa_homebase = kelas.getProdiIDwithStudentID(
            kelas.getNpmandNameMahasiswa(data[0])[0])
        nama_file = f'jadwal_sidang_ta_{mahasiswa_homebase}.xlsx'
        status, df = openJadwalExcel(nama_file)
        if status == False:
            msgreply = 'mohon untuk memberikan jadwal sidang dalam bentuk excel ke admin'
        else:
            msgreply = 'ini dia jadwal sidangnya yaaa....\n\n'
            for i, j in df.iterrows():
                if str(j[4]) == str(kelas.getNpmandNameMahasiswa(data[0])[0]):
                    msgreply += f'PENGUJI UTAMA: {kelas.getNamaDosen(j[2])}\n' \
                                f'PENGUJI PENDAMPING: {kelas.getNamaDosen(j[3])}\n' \
                                f'NPM MAHASISWA: {j[4]}\n' \
                                f'NAMA MAHASISWA: {kelas.getStudentNameOnly(j[4])}\n' \
                                f'JADWAL SIDANG: {j[5]}\n' \
                                f'JAM SIDANG: {j[6]}\n\n'
    return msgreply
コード例 #3
0
def replymsg(driver, data):
    wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0])
    wa.typeAndSendMessage(driver, wmsg)
    msg = data[3].lower()
    num = numbers.normalize(data[0])
    # tahun_id = '20192'
    tahun_id = kelas.getTahunID()
    if kelas.getKodeDosen(num):
        kodeDosen = kelas.getKodeDosen(num)
        try:
            npm = [
                npm for npm in msg.split(' ')
                if npm.isdigit() and len(npm) == 7
            ][0]
        except:
            npm = None

        if npm:
            try:
                if checkMhs(npm):
                    if checkRevisi(npm, tahun_id):
                        msgreply = "Ini revisian dari Anda cuy..." + checkRevisi(
                            npm, tahun_id)
                    else:
                        msgreply = "Emg udh masukin revisi???"
                else:
                    msgreply = "Salah mahasiswa ato npm mungkin..."
            except Exception as e:
                msgreply = f"Error {str(e)}"
        else:
            try:
                if checkRevisiPenguji(tahun_id, kodeDosen):
                    msgreply = "Ini revisian dari anda cuy..." + checkRevisiPenguji(
                        tahun_id, kodeDosen)
                else:
                    msgreply = "Emg udh masukin revisi???"
            except Exception as e:
                msgreply = f"Error {str(e)}"

    elif kelas.getNpmandNameMahasiswa(num):
        npm, nama = kelas.getNpmandNameMahasiswa(num)
        try:
            if checkMhs(npm):
                if checkRevisi(npm, tahun_id):
                    msgreply = "Selamat revisian cuy..., semangat <3<3" + checkRevisi(
                        npm, tahun_id)
                else:
                    msgreply = "Kamu emg udh sidang? jgn ngadi-ngadi deh..., mungkin aja blm dibikin revisinya sama penguji bersangkutan..., semangat <3<3"
            else:
                msgreply = "Kamu emg ikutan sidang? jgn ngadi-ngadi deh..."
        except Exception as e:
            msgreply = f"Error {str(e)}"
    else:
        msgreply = f"Hayoo siapa kamu"

    return msgreply
コード例 #4
0
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
コード例 #5
0
def auth(data):
    if kelas.getNpmandNameMahasiswa(data[0]) != None or kelas.getKodeDosen(
            data[0]) != '':
        ret = True
    else:
        ret = False
    return ret
コード例 #6
0
def hadirAbsensiData(group_name, tipe, kode_dosen):
    data = kelas.getnumonly(group_name, tipe)
    data_fix = []
    nomor_urut = 1
    tahun_angkatan = f"{group_name.split('-')[3]}1"
    kelas_number = f'{kelas.kodeKelas(group_name.split("-")[2])}'
    data_peserta_perwalian = [
        i["MhswID"] for i in perwalian_mulai.getPesertaPerwalian(
            kode_dosen, tahun_angkatan, kelas_number)
    ]
    for i in data:
        data_i = []
        data_i.append(f'{nomor_urut}.')
        try:
            npm, nama = kelas.getNpmandNameMahasiswa(i[0])
            if npm in data_peserta_perwalian:
                nama = capitalizeName(nama)
                data_i.append(f'{npm}')
                data_i.append(f'{nama}')
                data_i.append(f'HADIR')
                data_fix.append(data_i)
                nomor_urut += 1
        except:
            pass
    return data_fix
コード例 #7
0
def replymsg(driver, data):
    npm, nama = kelas.getNpmandNameMahasiswa(data[0])
    msg=data[3]
    msg=message.normalize(msg)
    try:
        pembimbing_1 = msg.split(' pembimbing 1 ')[1].split(' pembimbing 2 ')[0]
        pembimbing_2 = msg.split(' pembimbing 2 ')[1].split(' judul ')[0]
        tipe_bimbingan= msg.split(' tipe bimbingan ')[1]
        judul = data[3].split(' judul ')[1].split(' tipe bimbingan ')[0]
    except:
        return f'aduuuu salah keyword nih bro bro bri brii.... coba dicek lagi yaa keywordnyaa....'
    if cekBimbinganData(npm):
        updateBimbinganData(
            npm,
            pembimbing_1.upper(),
            pembimbing_2.upper(),
            judul,
            tipe_bimbingan
        )
        msgreply=f'okeee sudah {config.bot_name} update menjadi'
    else:
        insertNewBimbinganData(
            npm,
            pembimbing_1.upper(),
            pembimbing_2.upper(),
            judul,
            tipe_bimbingan
        )
        msgreply=f'okeee sudah {config.bot_name} masukin yaaa datanya'
    msgreply+=f'\n\nNPM: {npm}\nNama: {nama}\nPembimbing 1: {kelas.getNamaDosen(pembimbing_1)}\nPembimbing 2: {"-" if pembimbing_2 == "-" else kelas.getNamaDosen(pembimbing_2)}\nJudul: {judul}\nTipe Bimbingan: {kambing.switcherTipeBimbingan(tipe_bimbingan)}'
    return msgreply
コード例 #8
0
def replymsg(driver, data):
    npm, nama = kelas.getNpmandNameMahasiswa(data[0])
    judul = data[3].split(' pitak ')[1]
    tahunid = kelas.getTahunID()
    if tahunid[-1] == '3':
        tahunid = str(int(tahunid) - 1)
    updateJudulPitak(npm, judul, tahunid)
    msgreply = f'oke sudah #BOTNAME# update judulnya menjadi {judul}'
    return msgreply
コード例 #9
0
def replymsg(driver, data):
    msgreply = ""
    if kelas.cekSiap():
        num = numbers.normalize(data[0])
        try:
            if kelas.getNpmandNameMahasiswa(num):
                npm, nama = kelas.getNpmandNameMahasiswa(num)
                # print(npm, nama)
                tahunID = kelas.getTahunID()
                namaMhs, prodiMhs, singkatan, prodiID, email = getMahasiswaByNpm(
                    npm)
                # print(namaMhs, prodiMhs, singkatan, prodiID, email)
                noSurat = insertMhs(npm, prodiID, tahunID)
                # print(noSurat)
                if checkApproveMhs(npm, prodiID, tahunID):
                    data = f"{npm};{singkatan};{noSurat}"
                    subprocess.Popen([
                        "python", "run.py",
                        os.path.basename(__file__).split('.')[0], data
                    ],
                                     cwd=config.cwd)
                    wmsg = reply.getWaitingMessage(
                        os.path.basename(__file__).split('.')[0])
                    wmsg = wmsg.replace('#EMAIL#', email)
                    wmsg = wmsg.replace('#BOTNAME#', config.bot_name)
                    wa.typeAndSendMessage(driver, wmsg)
                else:
                    msgreply = "SKMK anda telah diajukan, silahkan hubungi Ka. Baak untuk minta approve SKMK yang telah diajukan"
            else:
                msgreply = f"Ikan teri pake saos.. anda siapa bos..\nSebenarnya ada beberapa kemungkinan, pertama kamu bukan mahasiswa yg udh wisuda.. Mungkin no hp di SIAP salah kali... apalagi ya.. kyknya itu aja.."

        except Exception as e:
            msgreply = f'Ikan hiu makan tomat.. ada error mat... {str(e)}'

    else:
        # pass
        wa.typeAndSendMessage(
            driver,
            'Mohon maaf server Akademik SIAP sedang dalam kondisi DOWN, mohon untuk menginformasikan ke ADMIN dan tunggu'
        )
    return msgreply
コード例 #10
0
def prosesdata():
    req = request.get_json()
    number=req['number']
    url=req['url']
    groupname = url.split('/')[-1].replace('%20', ' ')
    message = 'hadir'
    alias = kelas.getNpmandNameMahasiswa(number)[1]
    isgroup='true'
    tipe='luring'
    log.save(number, message, alias, groupname, isgroup, tipe)
    res = make_response(jsonify({'message': 'JSON data received'}), 200)
    return res
コード例 #11
0
def replymsg(driver, data):
    npm, nama = kelas.getNpmandNameMahasiswa(data[0])
    datava = getDataPayment(npm)
    if datava:
        datenow = datetime.date(datetime.now()).strftime('%d-%m-%Y')
        yearnow = datetime.date(datetime.now()).strftime('%Y')
        trxid = datava['trx_id']
        npm = app.cekNpmInTrxID(trxid)
        tipesemester = app.cekTipeSemester(trxid)
        tahunid = f'{yearnow}{tipesemester}'
        prodiid = f'{npm[0]}{npm[3]}'
        virtual_account = datava['virtual_account']
        customer_name = datava['customer_name']
        trx_amount = datava['trx_amount']
        payment_amount = datava['payment_amount']
        cumulative_payment_amount = datava['cumulative_payment_amount']
        payment_ntb = datava['payment_ntb']
        datetime_payment = datava['datetime_payment']
        datetime_payment_iso8601 = datava['datetime_payment_iso8601']
        ws = app.openfile().active
        prodi_singkatan = app.getProdiSingkatanFromProdiID(
            kelas.getProdiIDwithStudentID(npm)).lower()
        tingkat = f"tk{int(datetime.now().strftime('%Y')) - int(kelas.getTahunAngkatanWithStudentID(npm)) + 1}"
        angkatan = kelas.getTahunAngkatanWithStudentID(npm)
        key = f'{prodi_singkatan}{tingkat}{angkatan}'
        default_amount_payment = app.getDataDefault(key, ws)
        message = f'Hai haiiiii kamu sudah transfer pembayaran semester yaaaa dengan\n\n*NPM: {npm}*\n*Nama: {customer_name}*\n*Virtual Account: {virtual_account}*\n*Tanggal: {datetime_payment}*\n*Jumlah Transfer: {app.floatToRupiah(payment_amount)}*\n*Total Sudah Bayar: {app.floatToRupiah(cumulative_payment_amount)}*\n*Total Harus Bayar: {app.floatToRupiah(trx_amount)}*\n*Sisa Yang Harus Dibayar: {app.floatToRupiah(float(int(trx_amount)-int(cumulative_payment_amount)))}*'
        if int(trx_amount) > int(default_amount_payment):
            amount_tunggakan = int(trx_amount) - int(default_amount_payment)
            fifty_percent_default_payment = int(default_amount_payment) / 2
            minimum_payment = int(amount_tunggakan) + int(
                fifty_percent_default_payment)
        else:
            minimum_payment = int(trx_amount) / 2
        app.openfile().close()
        if float(cumulative_payment_amount) >= float(minimum_payment):
            if app.cekSudahAdaKHS(npm, tahunid, 'A'):
                app.updateBiayaKHS(npm, tahunid,
                                   trx_amount - cumulative_payment_amount)
                message += f'\n\nterima kasih yaaa sudah bayar semester, semangat kuliahnya kakaaaa......'
            else:
                message += f'\n\nKamu *sudah bisa* isi KRS yaaa coba cek di *SIAP* yaaa...., #BOTNAME# ucapkan terima kasihhhh dan jangan salah saat isi KRS yaaa....'
                message = message.replace('#BOTNAME#', config.bot_name)
                app.insertnewKHS(npm, tahunid, prodiid,
                                 app.cekSesiSemester(tipesemester, npm),
                                 trx_amount - cumulative_payment_amount)
        else:
            message += f'\n\nYahhhh kamu *belum bisa* isi KRS nihhhh coba *buat surat* lalu *ajukan ke pihak BAUK* agar kamu bisa isi KRS..... Suratnya udah {config.bot_name} kirim ke *{kelas.getStudentEmail(npm)}*'
            surat_va.makePdfAndSendToEmail(npm)
        msgreply = message
    else:
        msgreply = 'kamu belum ada transfer'
    return msgreply
コード例 #12
0
def replymsg(driver, data):
    grp=data[1]
    msg=data[3]
    try:
        materi=msg.split(' materi ')[1]
    except:
        return 'duhh materinya mana nihhh'
    kode_pleton=grp.split("-")[1]
    nama_pleton=absensi_cb_mulai.pletonSwitcher(kode_pleton)
    npm_koor=kelas.getNpmandNameMahasiswa(data[0])[0]
    msgreply=makePDFandSEND(
        kode_pleton=kode_pleton,
        nama_pleton=nama_pleton,
        group_name=grp,
        materi=materi,
        npm_koor_pleton=npm_koor
    )
    msgreply+=f'\nsudah {config.bot_name} kirim absensi PDF ke email {kelas.getStudentEmail(kelas.getNpmandNameMahasiswa(data[0])[0])} yaa...'
    return msgreply
コード例 #13
0
def replymsg(driver, data):
    wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0])
    wa.typeAndSendMessage(driver, wmsg)
    msg=data[3]
    msg=message.normalize(msg)
    successsplit=''
    try:
        tipe_bimbingan=msg.split('bimbingan ')[1].split(' sudah dikerjakan')[0]
        studentid=kelas.getNpmandNameMahasiswa(data[0])[0]
        # topik=msg.split('topik ')[1].split(' nilai')[0].replace(' ', '%20')
        # pertemuan=msg.split('pertemuan ')[1].split(' nilai')[0]
        target_selesai = msg.split('sudah dikerjakan ')[1].split(' pekerjaan selanjutnya')[0].replace(' ', '%20')
        terget_selanjutnya = msg.split('pekerjaan selanjutnya ')[1].split(' nilai')[0].replace(' ', '%20')
        nilai=msg.split('nilai ')[1]
    except:
        successsplit='error'
    if successsplit == 'error':
        msgreply='wahh salah keyword bosqqq'
    else:
        if tipeSwitcher(tipe_bimbingan) == True:
            datenow = datetime.date(datetime.now()).strftime('%d%m%Y')
            hari = datetime.now().strftime('%A')
            hari = hariSwitcher(hari)
            obj = AES.new(config.key, AES.MODE_CBC, config.iv)
            cp = obj.encrypt(studentid+datenow+hari)
            passcode=cp.hex()
            msgreply='Mohon untuk klik link berikut untuk konfirmasi bimbingan:\n\nhttps://api.whatsapp.com/send?phone={nomoriteung}&text=iteung%20input%20bimbingan%20{tipebimbingan}%20{npm}%0Asudah%20dikerjakan%20{targetselesai}%0Apekerjaan%20selanjutnya%20{targetselanjutnya}%0Anilai%20{nilai}%0Apasscode%20{passcode}'.format(
                nomoriteung=config.nomor_iteung,
                tipebimbingan=tipe_bimbingan,
                npm=studentid,
                nilai=nilai,
                passcode=passcode,
                targetselesai=target_selesai,
                targetselanjutnya=terget_selanjutnya
            )
        else:
            msgreply='tuh salah nih tipe bimbingannya coba di cek lagi yaa qaqa ehee.....'
    return msgreply
コード例 #14
0
def replymsg(driver, data):
    wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0])
    wa.typeAndSendMessage(driver, wmsg)
    msg = data[3]
    msg = message.normalize(msg)
    try:
        tipe_bimbingan = msg.split(' bimbingan ')[1].split(
            ' sudah dikerjakan')[0]
        studentid = kelas.getNpmandNameMahasiswa(data[0])[0]
        target_selesai = msg.split('sudah dikerjakan ')[1].split(
            ' pekerjaan selanjutnya')[0].replace(' ', '%20')
        terget_selanjutnya = msg.split('pekerjaan selanjutnya ')[1].split(
            ' nilai')[0].replace(' ', '%20')
        nilai = msg.split('nilai ')[1]
    except:
        return 'duh salah keyword nih bosqqqq'
    if tipeSwitcher(tipe_bimbingan):
        datenow = datetime.date(datetime.now()).strftime('%d%m%Y')
        hari = datetime.now().strftime('%A')
        hari = hariSwitcher(hari)
        data = bytes(f'{studentid}{datenow}{hari}', 'utf-8')
        passcode = encryptData(data)
        return f'Mohon untuk klik link berikut untuk konfirmasi bimbingan:\n\nhttps://api.whatsapp.com/send?phone={config.nomor_iteung}&text=iteung%20input%20bimbingan%20{tipe_bimbingan}%20{studentid}%0Asudah%20dikerjakan%20{target_selesai}%0Apekerjaan%20selanjutnya%20{terget_selanjutnya}%0Anilai%20{nilai}%0Apasscode%20{passcode["ciphertext"].replace("+", "plussign")}%0Aivcode%20{passcode["iv"].replace("+", "plussign")}'
    return 'duh salah nih tipe bimbingannya coba di cek lagi yaa qaqa ehee.....'
コード例 #15
0
def replymsg(driver, data):
    npm, nama = kelas.getNpmandNameMahasiswa(data[0])
    msgreply = ''
    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'
        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
コード例 #16
0
def auth(data):
    if kelas.getNpmandNameMahasiswa(data[0]):
        return True
    else:
        return False
コード例 #17
0
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
コード例 #18
0
def replymsg(driver, data):
    npm, nama = kelas.getNpmandNameMahasiswa(data[0])
    datava = getDataPayment(npm)
    if datava:
        datenow = datetime.date(datetime.now()).strftime('%d-%m-%Y')
        yearnow = datetime.date(datetime.now()).strftime('%Y')
        trxid = datava['trx_id']
        npm = app.cekNpmInTrxID(trxid)
        tipesemester = app.cekTipeSemester(trxid)
        tahunid = f'{yearnow}{tipesemester}'
        prodiid = getProdiIDfromNPM(npm)
        if prodiid == '64':
            prodiid = '54'
        virtual_account = datava['virtual_account']
        customer_name = datava['customer_name']
        trx_amount = datava['trx_amount']
        payment_amount = datava['payment_amount']
        cumulative_payment_amount = datava['cumulative_payment_amount']
        payment_ntb = datava['payment_ntb']
        datetime_payment = datava['datetime_payment']
        datetime_payment_iso8601 = datava['datetime_payment_iso8601']
        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)
        message = f'Hai haiiiii kamu sudah transfer pembayaran semester yaaaa dengan\n\n*NPM: {npm}*\n*Nama: {customer_name}*\n*Virtual Account: {virtual_account}*\n*Tanggal: {datetime_payment}*\n*Jumlah Transfer: {app.floatToRupiah(payment_amount)}*\n*Total Sudah Bayar: {app.floatToRupiah(cumulative_payment_amount)}*\n*Total Harus Bayar: {app.floatToRupiah(trx_amount)}*\n*Sisa Yang Harus Dibayar: {app.floatToRupiah(float(int(trx_amount)-int(cumulative_payment_amount)))}*'
        if str(angkatan) == '2020':
            biaya_sisa = trx_amount - cumulative_payment_amount
            if biaya_sisa <= 0:
                percentage = 100
            else:
                percentage = 75
            app.updateBiayaKHS(npm, kelas.getTahunID(), biaya_sisa, percentage)
            message += f'\n\nterima kasih yaaa sudah bayar semester, semangat kuliahnya kakaaaa......'
            return message
            # return f'Mohon maaf untuk angkatan {angkatan}, sementara waktu verifikasi keuangan *BELUM* dapat dilakukan silahkan *VERIFIKASI KEMBALI SETELAH* tanggal *4 Desember 2020*.'
        key = f'{prodi_singkatan}{tingkat}{angkatan}'
        default_amount_payment = app.getDataDefault(key, ws)
        if default_amount_payment:
            default_amount_payment = int(default_amount_payment)
        else:
            if prodi_singkatan[:2] == 'd4':
                default_amount_payment = 2500000
            elif prodi_singkatan[:2] == 'd3':
                default_amount_payment = 2000000
            else:
                default_amount_payment = int(default_amount_payment)
        message = f'Hai haiiiii kamu sudah transfer pembayaran semester yaaaa dengan\n\n*NPM: {npm}*\n*Nama: {customer_name}*\n*Virtual Account: {virtual_account}*\n*Tanggal: {datetime_payment}*\n*Jumlah Transfer: {app.floatToRupiah(payment_amount)}*\n*Total Sudah Bayar: {app.floatToRupiah(cumulative_payment_amount)}*\n*Total Harus Bayar: {app.floatToRupiah(trx_amount)}*\n*Sisa Yang Harus Dibayar: {app.floatToRupiah(float(int(trx_amount)-int(cumulative_payment_amount)))}*'
        if int(trx_amount) > int(default_amount_payment):
            amount_tunggakan = int(trx_amount) - int(default_amount_payment)
            fifty_percent_default_payment = int(default_amount_payment) / 2
            minimum_payment = int(amount_tunggakan) + int(
                fifty_percent_default_payment)
            transfer_spp = int(cumulative_payment_amount) - int(
                amount_tunggakan)
            percentage = int(
                float(int(transfer_spp) / int(default_amount_payment)) * 100)
        else:
            potongan = int(default_amount_payment) - int(trx_amount)
            minimum_payment = int(default_amount_payment) / 2
            cumulative_payment_amount += potongan
            transfer_spp = int(cumulative_payment_amount)
            percentage = int(
                float(int(transfer_spp) / int(default_amount_payment)) * 100)
        if percentage >= 75 and percentage <= 100:
            if percentage == 100:
                percentage = 100
            else:
                percentage = 75
        else:
            percentage = 0
        app.openfile().close()
        if float(cumulative_payment_amount) >= float(minimum_payment):
            if app.cekSudahAdaKHS(npm, kelas.getTahunID(), 'A'):
                app.updateBiayaKHS(npm, kelas.getTahunID(),
                                   trx_amount - cumulative_payment_amount,
                                   percentage)
                message += f'\n\nterima kasih yaaa sudah bayar semester, semangat kuliahnya kakaaaa......'
            else:
                message += f'\n\nKamu *sudah bisa* isi KRS yaaa coba cek di *SIAP* yaaa...., #BOTNAME# ucapkan terima kasihhhh dan jangan salah saat isi KRS yaaa....'
                message = message.replace('#BOTNAME#', config.bot_name)
                app.insertnewKHS(npm, kelas.getTahunID(), prodiid,
                                 app.cekSesiSemester(tipesemester, npm),
                                 trx_amount - cumulative_payment_amount,
                                 percentage)
        else:
            message += f'\n\nYahhhh kamu *belum bisa* isi KRS nihhhh coba *buat surat* lalu *ajukan ke pihak BAUK* agar kamu bisa isi KRS..... Suratnya udah {config.bot_name} kirim ke *{kelas.getStudentEmail(npm)}*'
            surat_va.makePdfAndSendToEmail(npm)
        msgreply = message
    else:
        msgreply = 'kamu belum ada transfer'
    return msgreply
コード例 #19
0
def replymsg(driver, data):
    npm = kelas.getNpmandNameMahasiswa(data[0])[0]
    makePdfAndSendToEmail(npm)
    msgreply = f'okeee sudah dikirim ke email kamu yang {kelas.getStudentEmail(npm)} yaa... coba buruan dicekk...'
    return msgreply
コード例 #20
0
def replymsg(driver, data):
    npm, nama=kelas.getNpmandNameMahasiswa(data[0])
    judul=data[3].split(' pitak ')[1]
    updateJudulPitak(npm, judul, kelas.getTahunID())
    msgreply=f'oke sudah #BOTNAME# update judulnya menjadi {judul}'
    return msgreply
コード例 #21
0
def auth(data):
    if kelas.getNpmandNameMahasiswa(data[0]) == None:
        ret = False
    else:
        ret = True
    return ret
コード例 #22
0
def replymsg(driver, data):    
    if kelas.cekSiap():    
        num = numbers.normalize(data[0])
        tahunID = '20192'
        msg = data[3].lower().split(' ')
        msgreply = ""
        try:
            if kelas.getKodeDosen(num):          
                dosenID = kelas.getKodeDosen(num)
                
                email = kelas.getEmailDosen(dosenID)
                wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0])
                wmsg = wmsg.replace('#EMAIL#', email)
                wmsg = wmsg.replace('#BOTNAME#', config.bot_name)
                wa.typeAndSendMessage(driver, wmsg)
                
                tipe = 'ta'
                
                df = pd.read_excel(f'jadwal_sidang_ta_14.xlsx')
                listPem = ['koor', 'tipe', 'tahun']
                df = df.loc[:, listPem]
                df = df.drop_duplicates()
                df = df.loc[(df["koor"] == dosenID) & (df["tipe"] == tipe) & (df["tahun"] == int(tahunID))]
                
                if df.empty:
                    msgreply = "Harus koornya cuy ato Anda salah tipe sidang..."
                else:
                    if checkStatusSidangKoor(dosenID, tahunID, tipe):
                        data = f"{'dosen'};{dosenID};{tahunID};{email};{tipe}"
                        subprocess.Popen(["python", "run.py", os.path.basename(__file__).split('.')[0],data], cwd=config.cwd)
                        msgreply = ""
                    else:
                        msgreply = "Blm ada tuh..."
                    
            elif kelas.getNpmandNameMahasiswa(num):
                try:
                    npm, nama=kelas.getNpmandNameMahasiswa(num)
                    
                    email = getEmail(npm)
                    wmsg = reply.getWaitingMessage(os.path.basename(__file__).split('.')[0])
                    wmsg = wmsg.replace('#EMAIL#', email)
                    wmsg = wmsg.replace('#BOTNAME#', config.bot_name)
                    wa.typeAndSendMessage(driver, wmsg)
                    
                    kategori = getKategoriSidang(npm, tahunID)
                    if checkRevisiStatus(npm, tahunID):
                        if checkStatusSidang(npm, tahunID, kategori):
                            email = getEmail(npm)
                            data = f"{'mahasiswa'};{npm};{tahunID};{email};{kategori}"
                            subprocess.Popen(["python", "run.py", os.path.basename(__file__).split('.')[0],data], cwd=config.cwd)
                            msgreply = ""
                        else:
                            msgreply = "Approve dulu dari semuanya pembimbing, penguji, koordinator, kaprodi..."
                    else:
                        msgreply = "Approve dulu dari semuanya kedua penguji..."
                    
                except Exception as e: 
                    msgreply = f"Errornya: {str(e)}"
            else:
                msgreply = f"Hayoo siapa kamu"
            
        except Exception as e: 
            msgreply = f'Wadaw.. anda salah keyword... {str(e)}'
        
    else:
        wa.typeAndSendMessage(
            driver, '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
コード例 #23
0
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