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}"
Exemple #2
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
Exemple #3
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
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())
Exemple #13
0
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