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
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
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 paymentSpp(npm): prodi_singkatan = app.getProdiSingkatanFromProdiID(kelas.getProdiIDwithStudentID(npm)).lower() tingkat = f"tk{int(kelas.getTahunID()[:-1]) - int(kelas.getTahunAngkatanWithStudentID(npm)) + 1}" angkatan = kelas.getTahunAngkatanWithStudentID(npm) payment_spp = getSPP(npm) if angkatan == '2020': return f'*DATA VIRTUAL ACCOUNT BNI SPP (Semester Ganjil 2020/2021)*\n\n' \ f'*Kode Transaksi: {payment_spp["trx_id"]}*\n' \ f'*Virtual Account: {payment_spp["virtual_account"]}*\n' \ f'Status Virtual Account: Aktif\n' \ f'Customer Name: {payment_spp["customer_name"]}\n' \ f'Customer Email: {payment_spp["customer_email"]}\n' \ f'Customer Phone Number: {payment_spp["customer_phone"]}\n' \ f'Jumlah Tagihan: {app.floatToRupiah(float(payment_spp["trx_amount"]))}\n' key = f'{prodi_singkatan}{tingkat}{angkatan}' ws = app.openfile().active biaya_pokok_spp = app.getDataDefault(key, ws) app.openfile().close() try: if biaya_pokok_spp: biaya_pokok_spp=int(biaya_pokok_spp) else: if prodi_singkatan[:2] == 'd4': biaya_pokok_spp = 2500000 elif prodi_singkatan[:2] == 'd3': biaya_pokok_spp = 2000000 else: biaya_pokok_spp = int(biaya_pokok_spp) if int(payment_spp['trx_amount']) > int(biaya_pokok_spp): tunggakan = float(int(payment_spp['trx_amount']) - int(biaya_pokok_spp)) amount_tunggakan = int(payment_spp["trx_amount"]) - int(biaya_pokok_spp) fifty_percent_default_payment = int(biaya_pokok_spp) * (75/100) minimum_payment = int(amount_tunggakan) + int(fifty_percent_default_payment) else: tunggakan = float(0) potongan = int(biaya_pokok_spp) - int(payment_spp['trx_amount']) minimum_payment = (int(biaya_pokok_spp) - int(potongan)) * (75/100) if datetime.now() < payment_spp['expired_date']: msgreply = f'*DATA VIRTUAL ACCOUNT BNI SPP (Semester Genap 2020/2021)*\n\n' \ f'*Kode Transaksi: {payment_spp["trx_id"]}*\n' \ f'*Virtual Account: {payment_spp["virtual_account"]}*\n' \ f'Status Virtual Account: Aktif\n' \ f'Customer Name: {payment_spp["customer_name"]}\n' \ f'Customer Email: {payment_spp["customer_email"]}\n' \ f'Customer Phone Number: {payment_spp["customer_phone"]}\n' \ f'Biaya Paket SPP Per Semester: {app.floatToRupiah(float(biaya_pokok_spp))}\n' \ f'Biaya Tunggakan SPP: {app.floatToRupiah(tunggakan)}\n' \ f'Jumlah Tagihan: {app.floatToRupiah(float(payment_spp["trx_amount"]))}\n' else: msgreply = f'*DATA SPP TIDAK ADA*\n\n' except Exception as error: msgreply = f'Nomor Hp kamu Benerin dulu dongggg yang bener baru {config.bot_name} kasih liat datanya....\nATAU\nData kamu belum diupload..\n\n' return msgreply
def replymsg(driver, data): npm, nama_mahasiswa, prodi_id, phonenumber, email, penasehat_akademik = getDataMahasiswa( data[0]) virtual_account, customer_name, customer_email, customer_phone, trx_amount = getDataVaforMahasiswa( data[0]) 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}' biaya_pokok_spp = app.getDataDefault(key, ws) if trx_amount > biaya_pokok_spp: tunggakan = float(int(trx_amount) - int(biaya_pokok_spp)) lima_puluh_persen_spp = int(biaya_pokok_spp / 2) minimum_pembayaran = tunggakan + lima_puluh_persen_spp else: tunggakan = float(0) minimum_pembayaran = int(biaya_pokok_spp / 2) app.openfile().close() ayah, ibu, handphoneortu = getNamaOrangTua(npm) msgreply=f'*BIODATA MAHASISWA*\n' \ f'NPM: {npm}\n' \ f'Nama: {nama_mahasiswa}\n' \ f'Prodi: {kelas.getProdiNameWithStudentID(npm)}\n' \ f'Nomor Handphone: {phonenumber}\n' \ f'E-mail: {email}\n' \ f'Dosen Wali: {kelas.getNamaDosen(penasehat_akademik)}\n' \ f'Nama Orang Tua/Wali: {ayah} (Ayah) | {ibu} (Ibu)\n' \ f'No HP orang Tua/Wali: {handphoneortu}\n\n' \ f'*DATA VIRTUAL ACCOUNT BNI (Semester Ganjil 2020/2021)*\n' \ f'Virtual Account: {virtual_account}\n' \ f'Status Virtual Account: Aktif\n' \ f'Customer Name: {customer_name}\n' \ f'Customer Email: {customer_email}\n' \ f'Customer Phone Number: {customer_phone}\n' \ f'Biaya Pokok SPP: {app.floatToRupiah(float(biaya_pokok_spp))}\n' \ f'Biaya Tunggakan SPP: {app.floatToRupiah(tunggakan)}\n' \ f'Biaya Paket SPP Per Semester: {app.floatToRupiah(float(trx_amount))}\n' \ f'Biaya Minimal Pembayaran: {app.floatToRupiah(float(trx_amount)/2)}\n' \ f'Batas KRS: 12 Oktober 2020 - 16 Oktober 2020\n\n'\ f'*CATATAN:* Untuk mempercepat layanan KRS Realtime *(langsung bayar langsung aktif dan bisa isi KRS)* anda diwajibkan melakukan pembayaran SPP menggunakan account VA anda, apabila pembayaran SPP tidak menggunakan account VA atau menggunakan metode transfer ke rekening YPBPI atau Giro Pos maka pengisian KRS dan aktivasi membutuhkan waktu 2 s.d 4 hari untuk mengecek bukti validasi pembayaran anda. Mohon kerjasamanya.' return msgreply
def replymsg(driver, data): msgreply = '' npms = kelas.getStudentIdFromParentPhoneNumber(data[0]) for npm in npms: npm = npm[0] nama = kelas.getStudentNameOnly(npm) for trx_id in getTrxIDList(npm): trx_id = trx_id[0] payment = getDataPembayaran(trx_id) kode_transaksi = trx_id judul_transaksi = trx_id.split('-')[1] virtual_account = payment['virtual_account'] customer_name = payment['customer_name'] trx_amount = payment['trx_amount'] payment_amount = payment['payment_amount'] cumulative_payment_amount = payment['cumulative_payment_amount'] datetime_payment = payment['datetime_payment'] percentage = '' if 'SPP' in trx_id: npm = app.cekNpmInTrxID(trx_id) ws = app.openfile().active prodi_singkatan = app.getProdiSingkatanFromProdiID( kelas.getProdiIDwithStudentID(npm)).lower() tingkat = f"tk{int(kelas.getTahunID()[:-1]) - int(kelas.getTahunAngkatanWithStudentID(npm)) + 1}" angkatan = kelas.getTahunAngkatanWithStudentID(npm) if angkatan == '2020': pass else: key = f'{prodi_singkatan}{tingkat}{angkatan}' default_amount_payment = app.getDataDefault(key, ws) if int(trx_amount) > int(default_amount_payment): amount_tunggakan = int(trx_amount) - int( default_amount_payment) transfer_spp = int(cumulative_payment_amount) - int( amount_tunggakan) percentage = float( int(transfer_spp) / int(default_amount_payment)) * 100 else: potongan = int(default_amount_payment) - int( trx_amount) cumulative_payment_amount += potongan transfer_spp = int(cumulative_payment_amount) percentage = float( int(transfer_spp) / int(default_amount_payment)) * 100 app.openfile().close() if angkatan == '2020': msgreply += f'Jenis Pembayaran: *{judul_transaksi}*\n' \ f'Kode Transaksi: *{kode_transaksi}*\n' \ f'Virtual Account: *{virtual_account}*\n' \ f'Nama Pelanggan: *{customer_name}*\n' \ f'Jumlah Yang Harus Dibayar: *{app.floatToRupiah(float(trx_amount))}*\n' \ f'Jumlah Transfer: *{app.floatToRupiah(float(payment_amount))}*\n' \ f'Total Transfer: *{app.floatToRupiah(float(cumulative_payment_amount))}*\n' \ f'Tanggal dan Jam Transfer: *{datetime_payment}*\n\n' else: msgreply += f'Jenis Pembayaran: *{judul_transaksi}*\n' \ f'Kode Transaksi: *{kode_transaksi}*\n' \ f'Virtual Account: *{virtual_account}*\n' \ f'Nama Pelanggan: *{customer_name}*\n' \ f'Jumlah Yang Harus Dibayar: *{app.floatToRupiah(float(trx_amount))}*\n' \ f'Jumlah Transfer: *{app.floatToRupiah(float(payment_amount))}*\n' \ f'Total Transfer: *{app.floatToRupiah(float(cumulative_payment_amount))}*\n' \ f'Tanggal dan Jam Transfer: *{datetime_payment}*\n' \ f'Persentase Pembayaran SPP: {round(percentage)}%\n\n' return msgreply
def callback_api_va(token): try: datenow = datetime.date(datetime.now()).strftime('%d-%m-%Y') yearnow=datetime.date(datetime.now()).strftime('%Y') req=request.json trxid=req['trx_id'] npm=cekNpmInTrxID(trxid) tipesemester=cekTipeSemester(trxid) tahunid=f'{yearnow}{tipesemester}' prodiid=f'{npm[0]}{npm[3]}' virtual_account=req['virtual_account'] customer_name=req['customer_name'] trx_amount=req['trx_amount'] payment_amount=req['payment_amount'] cumulative_payment_amount=req['cumulative_payment_amount'] payment_ntb=req['payment_ntb'] datetime_payment=req['datetime_payment'] datetime_payment_iso8601=req['datetime_payment_iso8601'] resultpasscode, status = decryptToken(config.key_va, config.iv_va, token) if 'SPP' in trxid.split('-'): if status: passcodetrxid=resultpasscode.split(';')[0].replace('\n', '').replace(' ', '') passcodevirtualaccount=resultpasscode.split(';')[1].replace('\n', '').replace(' ', '') passcodedatetime=resultpasscode.split(';')[2].replace('\n', '').replace(' ', '') if passcodetrxid == trxid and passcodevirtualaccount == virtual_account and passcodedatetime == datenow: message = f'Hai haiiiii kamu sudah transfer pembayaran semester yaaaa dengan{config.whatsapp_api_lineBreak}{config.whatsapp_api_lineBreak}*NPM: {npm}*{config.whatsapp_api_lineBreak}*Nama: {customer_name}*{config.whatsapp_api_lineBreak}*Virtual Account: {virtual_account}*{config.whatsapp_api_lineBreak}*Tanggal: {datetime_payment}*{config.whatsapp_api_lineBreak}*Jumlah Transfer: {floatToRupiah(payment_amount)}*{config.whatsapp_api_lineBreak}*Total Sudah Bayar: {floatToRupiah(cumulative_payment_amount)}*{config.whatsapp_api_lineBreak}*Total Harus Bayar: {floatToRupiah(trx_amount)}*' ws = openfile().active prodi_singkatan = 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 = getDataDefault(key, ws) 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 openfile().close() if float(cumulative_payment_amount) >= float(minimum_payment): if cekSudahAdaKHS(npm, tahunid, 'A'): updateBiayaKHS(npm, tahunid, trx_amount-cumulative_payment_amount) message += f'{config.whatsapp_api_lineBreak}{config.whatsapp_api_lineBreak}terima kasih yaaa sudah bayar semester, semangat kuliahnya kakaaaa......' else: message += f'{config.whatsapp_api_lineBreak}{config.whatsapp_api_lineBreak}Kamu *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) insertnewKHS(npm, tahunid, prodiid, cekSesiSemester(tipesemester, npm), trx_amount-cumulative_payment_amount) wa.setOutbox(kelas.getHandphoneMahasiswa(npm), message) return make_response(jsonify( { "message": "success", "status": "krs otomatis" } ), 200) else: message+=f'{config.whatsapp_api_lineBreak}{config.whatsapp_api_lineBreak}Yahhhh 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)}*' wa.setOutbox(kelas.getHandphoneMahasiswa(npm), message) tes=surat_va.makePdfAndSendToEmail(npm) return make_response(jsonify( { "message": "success", "status": "kirim whatsapp bikin surat" } ), 200) else: return make_response(jsonify({'message': 'bad token'}), 401) else: return make_response(jsonify({'message': 'bad token'}), 401) else: return make_response(jsonify({'message': 'not spp'}), 200) except Exception as e: return { "code": 404, "message": f"ERROR={e}" }
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
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
def paymentSpp(npm): prodi_singkatan = app.getProdiSingkatanFromProdiID(kelas.getProdiIDwithStudentID(npm)).lower() tingkat = f"tk{int(kelas.getTahunID()[:-1]) - int(kelas.getTahunAngkatanWithStudentID(npm)) + 1}" angkatan = kelas.getTahunAngkatanWithStudentID(npm) key = f'{prodi_singkatan}{tingkat}{angkatan}' ws = app.openfile().active biaya_pokok_spp = app.getDataDefault(key, ws) app.openfile().close() payment_spp=cek_biodata_va_mahasiswa.getSPP(npm) try: if biaya_pokok_spp: biaya_pokok_spp=int(biaya_pokok_spp) else: if prodi_singkatan[:2] == 'd4': biaya_pokok_spp = 2500000 elif prodi_singkatan[:2] == 'd3': biaya_pokok_spp = 2000000 else: biaya_pokok_spp = int(biaya_pokok_spp) if int(payment_spp['trx_amount']) > int(biaya_pokok_spp): tunggakan = float(int(payment_spp['trx_amount']) - int(biaya_pokok_spp)) amount_tunggakan = int(payment_spp["trx_amount"]) - int(biaya_pokok_spp) fifty_percent_default_payment = int(biaya_pokok_spp) * (75/100) minimum_payment = int(amount_tunggakan) + int(fifty_percent_default_payment) else: tunggakan = float(0) potongan = int(biaya_pokok_spp) - int(payment_spp['trx_amount']) minimum_payment = (int(biaya_pokok_spp) - int(potongan)) * (75/100) msgreply='' percentage = '' trx_id=payment_spp['trx_id'] trx_amount=payment_spp['trx_amount'] cumulative_payment_amount=payment_spp['trx_amount'] 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': return f'*DATA VIRTUAL ACCOUNT BNI SPP (Semester Ganjil 2020/2021)*\n\n' \ f'*Kode Transaksi: {payment_spp["trx_id"]}*\n' \ f'*Virtual Account: {payment_spp["virtual_account"]}*\n' \ f'Status Virtual Account: Aktif\n' \ f'Customer Name: {payment_spp["customer_name"]}\n' \ f'Customer Email: {payment_spp["customer_email"]}\n' \ f'Customer Phone Number: {payment_spp["customer_phone"]}\n' \ f'Jumlah Tagihan: {app.floatToRupiah(float(payment_spp["trx_amount"]))}\n' \ f'Mohon *lunasi tagihan sesuai nominal* diatas agar dapat *melaksanakan UTS* sesuai *syarat dan ketentuan* bidang keuangan\n\n' 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 datetime.now() < payment_spp['expired_date']: msgreply = f'*DATA VIRTUAL ACCOUNT BNI SPP (Semester Genap 2020/2021)*\n\n' \ f'*Kode Transaksi: {payment_spp["trx_id"]}*\n' \ f'*Virtual Account: {payment_spp["virtual_account"]}*\n' \ f'Status Virtual Account: Aktif\n' \ f'Customer Name: {payment_spp["customer_name"]}\n' \ f'Customer Email: {payment_spp["customer_email"]}\n' \ f'Customer Phone Number: {payment_spp["customer_phone"]}\n' \ f'Biaya Paket SPP Per Semester: {app.floatToRupiah(float(biaya_pokok_spp))}\n' \ f'Biaya Tunggakan SPP: {app.floatToRupiah(tunggakan)}\n' \ f'Jumlah Tagihan: {app.floatToRupiah(float(payment_spp["trx_amount"]))}\n' except Exception as error: msgreply = f'ERROR: {error}\n\n' return msgreply