def hapus_jenis_unit(id, phone_number): message = [] id = id.lower() respon_jenis_unit = requests.post(app.config['URL']+"/unit_type/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}) respon_jenis_unit = respon_jenis_unit.json() no_jenis_unit = re.findall("hapus.+", id.lower()) no_jenis_unit = regex_num(no_jenis_unit[0]) if int(no_jenis_unit) <= len(respon_jenis_unit['data']['records']): id_jenis_produk = respon_jenis_unit['data']['records'][int(no_jenis_unit)-1]['id'] hapus = requests.delete(app.config['URL']+"/unit_type/" + str(id_jenis_produk), headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}) if hapus.status_code == 200: message.append("Jenis Unit berhasil dihapus") else: message.append("Jenis Unit gagal dihapus") message.append(hapus.json()["message"]["body"]) else: message.append("Nomor Jenis Unit yang Anda masukkan salah") message.append("Silahkan ulangi kembali") pesan = [] pesan.append("Ketik *Jenis Unit* untuk kembali ke halaman Jenis Unit") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(('\n').join(pesan)) save_redis.set("%s::menu" %(phone_number), "jenis_unit") return message
def hapus_pelanggan(id, phone_number): message = [] respon_pelanggan = requests.post(app.config['URL']+"/customer/all", headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}) respon_pelanggan = respon_pelanggan.json() no_pelanggan = re.findall("hapus.+", id.lower()) no_pelanggan = regex_num(no_pelanggan[0]) if int(no_pelanggan) <= len(respon_pelanggan['data']['records']): id_pelanggan = respon_pelanggan['data']['records'][int(no_pelanggan)-1]['id'] hapus = requests.delete(app.config['URL']+"/customer/" + str(id_pelanggan), headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}) if hapus.status_code == 200: message.append("Pelanggan berhasil dihapus!") else: message.append("Pelanggan gagal dihapus! ") else: message.append("Nomor Pelanggan yang Anda masukkan salah") message.append("Silahkan ulangi kembali") pesan = [] pesan.append("Ketik *Pelanggan* untuk kembali ke halaman Pelanggan") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" %(phone_number), "pelanggan") return message
def tambah_produk(incoming_msg, phone_number): message = [] if save_redis.get("%s::menu" % (phone_number)) == "produk": message.append("Pertama, silakan masukkan Nama Produk Anda") save_redis.set("%s::menu" % (phone_number), json.dumps({"produk": "tambah"})) save_redis.set("%s::produk" % (phone_number), "nama") else: message = fungsi_produk(phone_number, incoming_msg) return message
def tambah_harga(incoming_msg, phone_number): message = [] # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if save_redis.get("%s::menu" % (phone_number)) == "harga": if respon_produk['data']['count'] != 0: message_bubble = ["Berikut ini adalah Daftar Produk milik Anda: "] all_bubble = [] for index, produk in enumerate(list_produk): tiap_data = [] tiap_data.append("%s. Produk: %s" % (index + 1, produk['name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) < 1600: message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] else: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) message.append("Silakan masukkan nomor Produk yang Anda inginkan:") save_redis.set("%s::menu" % (phone_number), json.dumps({'harga': 'tambah'})) else: message.append( "Anda belum mengisi Produk, silakan isi produk terlebih dahulu!" ) else: message = fungsi_harga(phone_number, incoming_msg) return message
def tambah_pelanggan(incoming_msg,phone_number): message = [] respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token"%(phone_number))} ) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if len(list_produk) == 0: message.append("Anda belum mengisi Produk, silakan isi produk terlebih dahulu!") message.append("Ketik *Pengaturan* untuk ke menu Pengaturan") elif save_redis.get("%s::menu" %(phone_number)) == "pelanggan": message.append("Pertama, masukkan Nama Lengkap Pelanggan Anda") save_redis.set("%s::menu" %(phone_number), json.dumps({"pelanggan":"tambah"})) save_redis.set("%s::pelanggan"%(phone_number), "nama") else: message = fungsi_pelanggan(phone_number, incoming_msg) return message
def ubah_pelanggan(incoming_msg, phone_number, id): message = [] respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] # user baru mengetikkan id if id != None: respon_pelanggan = requests.get(app.config['URL']+"/customer/"+ str(id), headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}) save_redis.set("%s::id_pelanggan" %(phone_number),id) respon_pelanggan = respon_pelanggan.json() keterangan_produk = [] keterangan_produk.append("Berikut inilah Pelanggan yang ingin Anda ubah:") keterangan_produk.append("%s. Nama: %s" % (1, respon_pelanggan['data']['name'])) keterangan_produk.append(" Email: %s" % (respon_pelanggan['data']['email'])) keterangan_produk.append(" No Telepon: %s" % (respon_pelanggan['data']['phone'])) keterangan_produk.append(" KTP: %s" % (respon_pelanggan['data']['ktp'])) keterangan_produk.append(" Produk: %s" % (respon_pelanggan['data']['product_name'])) message.append(('\n').join(keterangan_produk)) message.append("Pertama, masukkan Nama Lengkap Pelanggan Anda") save_redis.set("%s::pelanggan"%(phone_number), "nama") save_redis.set("%s::menu" %(phone_number), json.dumps({"pelanggan":"ubah"})) else: respon_pelanggan = requests.get(app.config['URL']+"/customer/"+ str(save_redis.get("%s::id_pelanggan" %(phone_number))), headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}) message += fungsi_pelanggan(phone_number, incoming_msg) return message
def tambah_jenis_unit(incoming_msg, phone_number): message = [] respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}) respon_produk = respon_produk.json() if save_redis.get("%s::menu" %(phone_number)) == "jenis_unit": list_produk = respon_produk['data']['records'] if respon_produk["data"]["count"] != 0: message_bubble = [""] all_bubble = [] for index, produk in enumerate(list_produk): tiap_data = [] tiap_data.append("%s. %s" % (index+1, produk['name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) >= 1600: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) message.append("Silakan masukkan Nomor Produk Anda") save_redis.set("%s::menu" %(phone_number),json.dumps({"jenis_unit": "tambah"})) save_redis.set("%s::jenis_unit"%(phone_number), "no_produk") else: message.append("Anda belum mengisi Produk, silakan isi produk terlebih dahulu!") send_message = ["Ketik *Jenis Unit* untuk ke menu Jenis Unit"] send_message.append("Ketik *Pengaturan* untuk ke menu Pengaturan") send_message.append("Ketik *Beranda* untuk ke menu Beranda") else: message = fungsi_jenis_unit(phone_number, incoming_msg) return message
def tambah_jenis_tagihan(incoming_msg, phone_number): message = [] respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() if save_redis.get("%s::menu" % (phone_number)) == "jenis_tagihan": list_produk = respon_produk['data']['records'] if respon_produk["data"]["count"] != 0: isi_produk = [] for index, produk in enumerate(list_produk): isi_produk.append("%s. %s" % (index + 1, produk['name'])) message.append(("\n").join(isi_produk)) message.append("Silakan masukkan Nomor Produk Anda") save_redis.set("%s::menu" % (phone_number), json.dumps({"jenis_tagihan": "tambah"})) save_redis.set("%s::jenis_tagihan" % (phone_number), "no_produk") else: message.append( "Anda belum mengisi Produk, silakan isi produk terlebih dahulu!" ) send_message = [ "Ketik *Jenis Tagihan* untuk ke menu Jenis Tagihan" ] send_message.append("Ketik *Pengaturan* untuk ke menu Pengaturan") send_message.append("Ketik *Beranda* untuk ke menu Beranda") message.append(("\n").join(send_message)) else: message = fungsi_tagihan(phone_number, incoming_msg) return message
def ubah_jenis_unit(incoming_msg, phone_number, id): message = [] respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}) respon_produk = respon_produk.json() if id != None: respon_jenis_unit = requests.get(app.config['URL']+"/unit_type/" + str(id), headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))} ) save_redis.set("%s::id_jenis_unit" %(phone_number),id) respon_jenis_unit = respon_jenis_unit.json() isi_jenis_unit = [] isi_jenis_unit.append("Berikut inilah Jenis Unit yang ingin Anda ubah:") isi_jenis_unit.append("%s. Nama: %s" % (1, respon_jenis_unit['data']["name"])) isi_jenis_unit.append(" Produk: %s" % (respon_jenis_unit['data']['product_name'])) isi_jenis_unit.append(" Deskripsi: %s\n" %(respon_jenis_unit['data']['description'])) kirim_msg = ("\n").join(isi_jenis_unit) message.append(kirim_msg) list_produk = respon_produk['data']['records'] if respon_produk["data"]["count"] != 0: message_bubble = ["Silahkan pilih nomor Produk Anda: "] all_bubble = [] for index, produk in enumerate(list_produk): tiap_data = [] tiap_data.append("%s. %s" % (index+1, produk['name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) >= 1600: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) message.append("Silakan masukkan Nomor Produk Anda") save_redis.set("%s::menu" %(phone_number),json.dumps({"jenis_unit": "ubah"})) save_redis.set("%s::jenis_unit"%(phone_number), "no_produk") else: message.append("Anda belum mengisi Produk, silakan isi produk terlebih dahulu!") send_message = ["Ketik *Jenis Unit* untuk ke menu Jenis Unit"] send_message.append("Ketik *Pengaturan* untuk ke menu Pengaturan") send_message.append("Ketik *Beranda* untuk ke menu Beranda") else: message += fungsi_jenis_unit(phone_number, incoming_msg) return message
def tambah_unit(incoming_msg, phone_number): message = [] # user diminta memasukkan jumlah unit if save_redis.get("%s::menu" % (phone_number)) == 'unit': message.append("Ikuti langkah-langkah yang Hedwig kasih tahu ya!") message.append("Pertama, masukkan jumlah unit yang ingin ditambahkan") save_redis.set("%s::menu" % (phone_number), json.dumps({"unit": "tambah"})) save_redis.set("%s::unit" % (phone_number), "jumlah_unit") # user diminta memasukkan nama unit # menyimpan data jumlah unit elif save_redis.get("%s::unit" % (phone_number)) == 'jumlah_unit': incoming_msg = incoming_msg.strip() message.append("Lalu, masukkan nama unit Anda") save_redis.set("%s::jumlah_unit" % (phone_number), incoming_msg) save_redis.set("%s::unit" % (phone_number), "nama_unit") # pindah ke fungsi unit else: message = fungsi_unit(incoming_msg, phone_number) return message
def ubah_unit(incoming_msg, phone_number, id): message = [] if id != None: respon_unit = requests.get( app.config['URL'] + "/unit/" + str(id), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) save_redis.set("%s::id_unit" % (phone_number), id) respon_unit = respon_unit.json() item = respon_unit['data'] isi_unit = [] isi_unit.append("Berikut inilah Unit yang ingin Anda ubah:") isi_unit.append("%s. Nama: %s" % (1, item['name'].capitalize())) isi_unit.append(" Produk: %s" % (item['product_name'].capitalize())) isi_unit.append(" Jenis Unit: %s" % (item['unit_type_name'].capitalize())) isi_unit.append(" Nama Pelanggan: %s" % (item['customer_name'].capitalize())) isi_unit.append(" Periode Penyewaan: %s" % (item['mapping_period_name'].capitalize())) isi_unit.append(" Ukuran Unit: %s m2" % (item['size'])) isi_unit.append(" Alamat Unit: %s" % (item['address'].capitalize())) kirim_msg = ("\n").join(isi_unit) message.append(kirim_msg) message.append("Silakan masukkan nama unit Anda") save_redis.set("%s::unit" % (phone_number), "nama_unit") save_redis.set("%s::menu" % (phone_number), json.dumps({"unit": "ubah"})) # pindah ke fungsi unit else: message += fungsi_unit(incoming_msg, phone_number) return message
def ubah_produk(incoming_msg, phone_number, id): message = [] if id != None: respon_produk = requests.get( app.config['URL'] + "/product/" + str(id), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) save_redis.set("%s::id_produk" % (phone_number), id) respon_produk = respon_produk.json() isi_produk = [] isi_produk.append("Berikut inilah Produk yang ingin Anda ubah:") isi_produk.append("%s. Nama: %s" % (1, respon_produk['data']["name"])) isi_produk.append(" Jenis Produk: %s" % (respon_produk['data']['product_type_name'])) isi_produk.append(" Alamat: %s" % (respon_produk['data']['description'])) isi_produk.append(" Bank: %s %s a.n %s \n" % (respon_produk['data']['bank_name'], respon_produk['data']['account_number'], respon_produk['data']['account_name'])) kirim_msg = ("\n").join(isi_produk) message.append(kirim_msg) message.append("Silakan masukkan Nama Produk Anda") save_redis.set("%s::menu" % (phone_number), json.dumps({"produk": "ubah"})) save_redis.set("%s::produk" % (phone_number), "nama") else: message += fungsi_produk(phone_number, incoming_msg) return message
def register(incoming_msg, phone_number, bot_responses): message = [] # user diminta memasukkan nama lengkap if save_redis.get("%s::menu" % (phone_number)) == "daftar": message.append("Pertama, silakan masukkan Nama Lengkap Anda") save_redis.set("%s::menu" % (phone_number), json.dumps({"daftar": "nama"})) # user diminta memasukkan username # menyimpan data nama elif json.loads(save_redis.get("%s::menu" % (phone_number)))["daftar"] == "nama": incoming_msg = incoming_msg.strip() save_redis.set("%s::nama" % (phone_number), incoming_msg) save_redis.set("%s::menu" % (phone_number), json.dumps({'daftar': 'username'})) message.append("Baik %s senang berkenalan denganmu!" % (incoming_msg)) message.append("Sekarang, masukkan Username yang Anda inginkan") # user diminta memasukkan password # menyimpan data username elif json.loads(save_redis.get("%s::menu" % (phone_number)))["daftar"] == "username": incoming_msg = incoming_msg.strip() save_redis.set("%s::username" % (phone_number), incoming_msg) save_redis.set("%s::menu" % (phone_number), json.dumps({'daftar': 'password'})) message.append("Selanjutnya, silakan masukkan Password Anda") message.append( "Hedwig infokan ya, password harus berisi 8-16 karakter yang terdiri dari angka, huruf, karakter atau perpaduannya" ) # user diminta memasukkan email # menyimpan data password elif json.loads(save_redis.get("%s::menu" % (phone_number)))["daftar"] == "password": incoming_msg = incoming_msg.strip() incoming_msg_regex = re.findall("^[A-Za-z0-9!@#$%^&*-_+=]{8,16}$", incoming_msg) # format password benar if incoming_msg_regex != []: save_redis.set("%s::password" % (phone_number), incoming_msg_regex[0]) save_redis.set("%s::menu" % (phone_number), json.dumps({'daftar': 'email'})) message.append("Lalu, masukkan Email Anda") # format password salah else: message.append("Password yang Anda masukkan tidak sesuai") message.append( "Password harus berisi 8-16 karakter yang terdiri dari angka, huruf, karakter atau perpaduannya" ) message.append("Silakan masukkan kembali Password Anda") # user diminta memasukkan telepon # menyimpan data email elif json.loads(save_redis.get("%s::menu" % (phone_number)))["daftar"] == "email": incoming_msg = incoming_msg.strip() incoming_msg_regex = re.findall( "^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$", incoming_msg) # format email benar if incoming_msg_regex != []: save_redis.set("%s::email" % (phone_number), incoming_msg_regex[0]) save_redis.set("%s::menu" % (phone_number), json.dumps({'daftar': 'telepon'})) message.append( "Hedwig belum tau nomor teleponmu nih! Masukkan Nomor Telepon Anda yuk" ) # format email salah else: message.append("Email yang Anda masukkan tidak sesuai") message.append("Silahkan masukkan kembali Email Anda") # user diminta memasukkan nama perusahaan # menyimpan data telepon elif json.loads(save_redis.get("%s::menu" % (phone_number)))["daftar"] == "telepon": incoming_msg = incoming_msg.strip() save_redis.set("%s::telepon" % (phone_number), incoming_msg) save_redis.set("%s::menu" % (phone_number), json.dumps({'daftar': 'perusahaan'})) message.append("Terakhir, masukkan Nama Perusahaan Anda") # menyimpan data nama perusahaan elif json.loads(save_redis.get("%s::menu" % (phone_number)))["daftar"] == "perusahaan": incoming_msg = incoming_msg.strip() rq_register = requests.post( app.config['URL'] + "/users/register", json={ "name": save_redis.get("%s::nama" % (phone_number)), "username": save_redis.get("%s::username" % (phone_number)), "password": save_redis.get("%s::password" % (phone_number)), "email": save_redis.get("%s::email" % (phone_number)), "phone": save_redis.get("%s::telepon" % (phone_number)), "company_name": incoming_msg, }) resp_register = rq_register.json() if resp_register['message']['title'] == 'Success': message = [] rq_login = requests.post( app.config['URL'] + "/users/login", json={ "email": save_redis.get("%s::email" % (phone_number)), "password": save_redis.get("%s::password" % (phone_number)) }) resp_login = rq_login.json() save_redis.set("%s::token" % (phone_number), resp_login["data"]["access_token"]) save_redis.set("%s::name" % (phone_number), resp_login["data"]["name"]) message.append("Anda berhasil terdaftar") message.append("Halo %s! Hedwig siap membantu.. " % (save_redis.get("%s::name" % (phone_number)))) send_message = ["Apa yang bisa Hedwig bantu?"] send_message.append("1. *buat tagihan* - membuat tagihan") send_message.append( "2. *riwayat tagihan* - melihat riwayat tagihan") send_message.append( "3. *pengaturan* - untuk masuk ke menu produk, jenis tagihan, jenis unit, harga, formula, pelanggan, unit, dan aktivasi rekening" ) send_msg = ["Silakan pilih menu yang Anda inginkan ya"] send_msg.append("") send_msg.append("(contoh: *1* atau *buat tagihan*)") message.append(("\n").join(send_message)) message.append(("\n").join(send_msg)) save_redis.set("%s::submenu" % (phone_number), "beranda") else: send_message = [] send_message.append("Akun Anda gagal terdaftar") send_message.append(resp_register["message"]["body"]) message.append(('\n').join(send_message)) send_message = ["Ketik *Daftar* untuk mendaftar lagi"] send_message.append("Ketik *Masuk* untuk masuk") save_redis.delete("%s::menu" % (phone_number), "") save_redis.delete("%s::nama" % (phone_number)) save_redis.delete("%s::username" % (phone_number)) save_redis.delete("%s::password" % (phone_number)) save_redis.delete("%s::email" % (phone_number)) save_redis.delete("%s::telepon" % (phone_number)) return message
def fungsi_tagihan(phone_number, incoming_msg): message = [] respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk["data"]["records"] # user diminta memasukkan nama jenis tagihan # menyimpan no produk if save_redis.get("%s::jenis_tagihan" % (phone_number)) == "no_produk": incoming_msg = incoming_msg.strip() if int(incoming_msg) > len(list_produk): message.append("Nomor yang Anda masukkan tidak ada dalam daftar") message.append("Silakan masukkan lagi No Produk Anda") else: message.append("Silakan masukkan Nama Jenis tagihan Anda") save_redis.set("%s::no_produk" % (phone_number), list_produk[int(incoming_msg) - 1]["id"]) save_redis.set("%s::jenis_tagihan" % (phone_number), "nama") # user diminta memasukkan kategori tagihan # menyimpan nama tagihan elif save_redis.get("%s::jenis_tagihan" % (phone_number)) == "nama": incoming_msg = incoming_msg.strip() isi_tipe_tagihan = [] isi_tipe_tagihan.append("1. IPL") isi_tipe_tagihan.append("2. Listrik") isi_tipe_tagihan.append("3. Air") message.append(("\n").join(isi_tipe_tagihan)) save_redis.set("%s::nama" % (phone_number), incoming_msg) save_redis.set("%s::jenis_tagihan" % (phone_number), "kategori_tagihan") message.append( "Silakan masukkan No Kategori yang ingin Anda tambahkan") # menyimpan kategori tagihan elif save_redis.get("%s::jenis_tagihan" % (phone_number)) == "kategori_tagihan": incoming_msg = incoming_msg.strip() if incoming_msg == "1": kategori = "ipl" elif incoming_msg == "2": kategori = "listrik" elif incoming_msg == "3": kategori = "air" if "tambah" in save_redis.get("%s::menu" % (phone_number)): tambah = requests.post( app.config['URL'] + "/billing_type", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "name": save_redis.get("%s::nama" % (phone_number)), "product_id": int(save_redis.get("%s::no_produk" % (phone_number))), "billing_category": kategori }) if tambah.status_code == 200: message.append("Jenis Tagihan berhasil ditambahkan") else: message.append("Jenis Tagihan gagal ditambahkan") message.append(tambah.json()["message"]["body"]) elif "ubah" in save_redis.get("%s::menu" % (phone_number)): ubah = requests.put( app.config['URL'] + "/billing_type/" + str(save_redis.get("%s::id_jenis_tagihan" % (phone_number))), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "name": save_redis.get("%s::nama" % (phone_number)), "product_id": int(save_redis.get("%s::no_produk" % (phone_number))), "billing_category": kategori }) if ubah.status_code == 200: message.append("Jenis Tagihan berhasil diubah") else: message.append("Jenis Tagihan gagal diubah") message.append(ubah.json()["message"]["body"]) pesan = [] pesan.append( "Ketik *Jenis Tagihan* untuk kembali ke halaman Jenis Tagihan") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), "jenis_tagihan") save_redis.delete("%s::jenis_tagihan" % (phone_number), "") save_redis.delete("%s::nama" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") return message
def unit(incoming_msg, phone_number, bot_responses): respon_unit = requests.post(app.config['URL'] + "/unit/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_unit = respon_unit.json() list_unit = respon_unit["data"]['records'] message = [] if "unit" in save_redis.get("%s::menu" % (phone_number)): # ketika user BELUM mengetikkan "tambah"/"ubah"/"hapus" if "tambah" in incoming_msg.lower(): message = tambah_unit(incoming_msg, phone_number) elif "ubah" in incoming_msg.lower(): no_unit = re.findall("ubah.+", incoming_msg.lower()) no_unit = regex_num(no_unit[0]) if int(no_unit) > len(list_unit): message.append( "Nomor Produk yang Anda masukkan tidak tersedia!") message.append("") message.append( "Silakan ketik *Unit* untuk kembali ke halaman sebelumnya") else: id_unit = respon_unit['data']['records'][int(no_unit) - 1]['id'] message = ubah_unit(incoming_msg, phone_number, id_unit) elif "hapus" in incoming_msg.lower(): save_redis.set("%s::unit" % (phone_number), "hapus") message = hapus_unit(incoming_msg, phone_number) # ketika user SUDAH mengetikkan "tambah"/"ubah"/"hapus" elif save_redis.get("%s::menu" % (phone_number)) == "unit": if respon_unit["data"]["count"] != 0: message_bubble = [bot_responses] all_bubble = [] for index, item in enumerate(list_unit): tiap_data = [] tiap_data.append("%s. Nama: %s" % (index + 1, item['name'].capitalize())) tiap_data.append(" Produk: %s" % (item['product_name'].capitalize())) tiap_data.append(" Jenis Unit: %s" % (item['unit_type_name'].capitalize())) tiap_data.append(" Nama Pelanggan: %s" % (item['customer_name'].capitalize())) tiap_data.append( " Periode Penyewaan: %s" % (item['mapping_period_name'].capitalize())) tiap_data.append(" Ukuran Unit: %s m2" % (item['size'])) tiap_data.append(" Alamat Unit: %s" % (item['address'].capitalize())) tiap_data.append("") tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) >= 1600: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) else: message.append("Anda belum mengisi unit!") pesan = [] pesan.append("Apa yang bisa Hedwig bantu?") pesan.append("- Ketik *tambah* untuk menambahkan unit") pesan.append( "- Ketik *ubah* <spasi> *no_unit* untuk mengubah unit") pesan.append( "- Ketik *hapus* <spasi> *no_unit* untuk menghapus unit") pesan.append("") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) else: read = json.loads(save_redis.get("%s::menu" % (phone_number))) if 'tambah' in read['unit']: message = tambah_unit(incoming_msg, phone_number) elif 'ubah' in read['unit']: message = ubah_unit(incoming_msg, phone_number, id=None) return message
def fungsi_unit(incoming_msg, phone_number): message = [] # user diminta memasukkan ukuran unit # menyimpan data nama unit if save_redis.get("%s::unit" % (phone_number)) == 'nama_unit': incoming_msg = incoming_msg.strip() save_redis.set("%s::unit" % (phone_number), "ukuran_unit") save_redis.set("%s::nama_unit" % (phone_number), incoming_msg) message.append("Sekarang, masukkan ukuran unit Anda") message.append("Ukurannya dalam m2 yaa") # user diminta memasukkan no produk # menyimpan data ukuran unit elif save_redis.get("%s::unit" % (phone_number)) == 'ukuran_unit': incoming_msg = incoming_msg.strip() # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] # ketika produk masih kosong if len(list_produk) < 1: message.append( "Anda belum mengisi produk, yuk isi produk terlebih dahulu") pesan = [] pesan.append("Ketik *Unit* untuk kembali ke halaman Unit") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), "unit") save_redis.delete("%s::unit" % (phone_number), "") save_redis.delete("%s::nama_unit" % (phone_number), "") save_redis.delete("%s::jumlah_unit" % (phone_number), "") # ketika produk ada else: send_message = [] for index, produk in enumerate(list_produk): send_message.append("%s. %s" % (index + 1, produk['name'])) message.append(("\n").join(send_message)) message.append( "Selanjutnya, pilih No Produk yang ingin Anda tambahkan") save_redis.set("%s::unit" % (phone_number), "no_produk") save_redis.set("%s::ukuran_unit" % (phone_number), incoming_msg) # user diminta memasukkan alamat # menyimpan data nomor produk elif save_redis.get("%s::unit" % (phone_number)) == 'no_produk': incoming_msg = incoming_msg.strip() # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if int(incoming_msg) > len(list_produk): message.append("Nomor yang Anda masukkan tidak ada dalam daftar!") message.append("Yuk pilih lagi No Produk Anda") else: save_redis.set("%s::unit" % (phone_number), "alamat") save_redis.set("%s::no_produk" % (phone_number), incoming_msg) message.append("Lalu, masukkan Alamat Unit Anda") # user diminta memasukkan nomor jenis unit # menyimpan data alamat elif save_redis.get("%s::unit" % (phone_number)) == 'alamat': incoming_msg = incoming_msg.strip() # data jenis unit respon_jenis_unit = requests.post( app.config['URL'] + "/unit_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_jenis_unit = respon_jenis_unit.json() list_jenis_unit = respon_jenis_unit['data']['records'] # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if len(list_jenis_unit) < 1: message.append( "Anda belum mengisi jenis unit, silakan isi jenis unit terlebih dahulu" ) pesan = [] pesan.append("Ketik *Unit* untuk kembali ke halaman Unit") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), "unit") save_redis.delete("%s::unit" % (phone_number), "") save_redis.delete("%s::jumlah_unit" % (phone_number), "") save_redis.delete("%s::nama_unit" % (phone_number), "") save_redis.delete("%s::ukuran_unit" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") else: send_message = [] jml_jenis_unit = 0 for index, jenis_unit in enumerate(list_jenis_unit): if list_produk[ int(save_redis.get("%s::no_produk" % (phone_number))) - 1]["id"] == int(jenis_unit["product_id"]): send_message.append("%s. %s" % (index + 1, jenis_unit['name'])) jml_jenis_unit += 1 if jml_jenis_unit != 0: message.append(("\n").join(send_message)) message.append( "Baik, sekarang masukkan No Jenis Unit yang ingin Anda tambahkan" ) save_redis.set("%s::unit" % (phone_number), "no_jenis_unit") save_redis.set("%s::alamat" % (phone_number), incoming_msg) else: send_msg = [] send_msg.append( "Belum ada Jenis Unit untuk Produk: %s" % (list_produk[ int(save_redis.get("%s::no_produk" % (phone_number))) - 1]['name'])) send_msg.append("") send_msg.append("Masukkan Jenis Unit terlebih dahulu!") message.append(("\n").join(send_msg)) pesan = [] pesan.append("") pesan.append("Ketik *Unit* untuk kembali ke halaman Unit") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append( "Ketik *Beranda* untuk kembali ke halaman Beranda") save_redis.set("%s::menu" % (phone_number), "unit") save_redis.delete("%s::unit" % (phone_number), "") save_redis.delete("%s::jumlah_unit" % (phone_number), "") save_redis.delete("%s::nama_unit" % (phone_number), "") save_redis.delete("%s::ukuran_unit" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") # user diminta memasukkan pelanggan # menyimpan data nomor jenis unit elif save_redis.get("%s::unit" % (phone_number)) == 'no_jenis_unit': incoming_msg = incoming_msg.strip() # data jenis unit respon_jenis_unit = requests.post( app.config['URL'] + "/unit_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_jenis_unit = respon_jenis_unit.json() list_jenis_unit = respon_jenis_unit['data']['records'] # pelanggan respon_pelanggan = requests.post( app.config['URL'] + "/customer/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_pelanggan = respon_pelanggan.json() list_pelanggan = respon_pelanggan['data']['records'] # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if int(incoming_msg) > len(list_jenis_unit): message.append("Nomor yang Anda masukkan tidak ada dalam daftar") message.append("Silakan masukkan lagi No Jenis Unit Anda") else: # ketika pelanggan masih kosong if len(list_pelanggan) < 1: message.append( "Anda belum mengisi pelanggan, yuk isi data pelanggan dahulu di halaman Pelanggan" ) pesan = [] pesan.append("Ketik *Unit* untuk kembali ke halaman Unit") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append( "Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), "unit") save_redis.delete("%s::unit" % (phone_number), "") save_redis.delete("%s::nama_unit" % (phone_number), "") save_redis.delete("%s::jumlah_unit" % (phone_number), "") save_redis.delete("%s::ukuran_unit" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") # pelanggan sudah ada else: send_message = [] jml_pelanggan = 0 for index, pelanggan in enumerate(list_pelanggan): if list_produk[int( save_redis.get("%s::no_produk" % (phone_number))) - 1]["id"] == pelanggan["product_id"]: send_message.append("%s. %s" % (index + 1, pelanggan['name'])) jml_pelanggan += 1 if jml_pelanggan != 0: message.append(("\n").join(send_message)) message.append( "Pelanggan mana yang ingin Anda tambahkan? Tulis nomornya ya!" ) save_redis.set("%s::unit" % (phone_number), "no_pelanggan") save_redis.set( "%s::no_jenis_unit" % (phone_number), list_jenis_unit[int(incoming_msg) - 1]["id"]) save_redis.set( "%s::no_produk" % (phone_number), list_produk[int( save_redis.get("%s::no_produk" % (phone_number))) - 1]["id"]) else: send_msg = [] send_msg.append( "Belum ada Pelanggan untuk Produk: %s" % (list_produk[int( save_redis.get("%s::no_produk" % (phone_number))) - 1]['name'])) send_msg.append("Masukkan Pelanggan terlebih dahulu!") message.append(("\n").join(send_msg)) pesan = [] pesan.append("Ketik *Unit* untuk kembali ke halaman Unit") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan" ) pesan.append( "Ketik *Beranda* untuk kembali ke halaman Beranda") save_redis.set("%s::menu" % (phone_number), "unit") save_redis.delete("%s::unit" % (phone_number), "") save_redis.delete("%s::nama_unit" % (phone_number), "") save_redis.delete("%s::jumlah_unit" % (phone_number), "") save_redis.delete("%s::ukuran_unit" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") # menyimpan data nomor pelanggan elif save_redis.get("%s::unit" % (phone_number)) == 'no_pelanggan': incoming_msg = incoming_msg.strip() # pelanggan respon_pelanggan = requests.post( app.config['URL'] + "/customer/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_pelanggan = respon_pelanggan.json() list_pelanggan = respon_pelanggan['data']['records'] if int(incoming_msg) > len(list_pelanggan): message.append("Nomor yang Anda masukkan tidak ada dalam daftar") message.append("Silakan masukkan lagi No Pelanggan Anda") else: mapping_period = 117 if "aturtagihan" in app.config['URL']: mapping_period = 1 if "tambah" in save_redis.get("%s::menu" % (phone_number)): for i in range( int(save_redis.get("%s::jumlah_unit" % (phone_number)))): if int(save_redis.get("%s::jumlah_unit" % (phone_number))) == 1: nama_unit = save_redis.get("%s::nama_unit" % (phone_number)) else: nama_unit = save_redis.get( "%s::nama_unit" % (phone_number)) + "-" + str(i + 1) print( "no produk: ", int(save_redis.get("%s::no_produk" % (phone_number)))) tambah = requests.post( app.config['URL'] + "/unit", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "name": nama_unit, "product_id": int( save_redis.get("%s::no_produk" % (phone_number))), "unit_type_id": int( save_redis.get("%s::no_jenis_unit" % (phone_number))), "mapping_period_id": mapping_period, "customer_id": int(list_pelanggan[int(incoming_msg) - 1]['id']), "size": int( save_redis.get("%s::ukuran_unit" % (phone_number))), "address": save_redis.get("%s::alamat" % (phone_number)) }) if tambah.status_code == 200: message.append("Unit berhasil ditambahkan!") else: message.append("Unit gagal ditambahkan!") message.append(tambah.json()["message"]["body"]) elif "ubah" in save_redis.get("%s::menu" % (phone_number)): ubah = requests.put( app.config['URL'] + "/unit/" + str(save_redis.get("%s::id_unit" % (phone_number))), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "name": save_redis.get("%s::nama_unit" % (phone_number)), "product_id": int(save_redis.get("%s::no_produk" % (phone_number))), "unit_type_id": int( save_redis.get("%s::no_jenis_unit" % (phone_number))), "mapping_period_id": mapping_period, "customer_id": int(list_pelanggan[int(incoming_msg) - 1]['id']), "size": int(save_redis.get("%s::ukuran_unit" % (phone_number))), "address": save_redis.get("%s::alamat" % (phone_number)) }) if ubah.status_code == 200: message.append("Unit berhasil diubah") else: message.append("Unit gagal diubah") message.append(ubah.json()["message"]["body"]) pesan = [] pesan.append("Ketik *Unit* untuk kembali ke halaman Unit") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), "unit") save_redis.delete("%s::jumlah_unit" % (phone_number), "") save_redis.delete("%s::nama_unit" % (phone_number), "") save_redis.delete("%s::ukuran_unit" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") save_redis.delete("%s::alamat" % (phone_number), "") save_redis.delete("%s::no_jenis_unit" % (phone_number), "") save_redis.delete("%s::no_pelanggan" % (phone_number), "") return message
def ubah_harga(incoming_msg, phone_number, id_harga=None): respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] message = [] # user baru mengetikkan 'ubah <nomor>' if id_harga is not None: respon_harga = requests.get( app.config['URL'] + "/price/" + str(id_harga), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_harga = respon_harga.json() save_redis.set("%s::id_harga" % (phone_number), id_harga) send_message = ['Berikut ini Harga yang ingin Anda ubah:'] send_message.append('Nama Produk: %s' % (respon_harga['data']['product_name'])) send_message.append('Nama Jenis Unit: %s' % (respon_harga['data']['unit_type_name'])) send_message.append('Kategori Tagihan: %s' % (respon_harga['data']['billing_category'])) send_message.append('Harga: %s' % (formatrupiah(respon_harga['data']['base_price']))) send_message = "\n".join(send_message) message.append(send_message) send_message = ['Berikut Daftar Produk Anda:'] for index, produk in enumerate(list_produk): send_message.append("%s. %s" % (index + 1, produk['name'])) send_message = "\n".join(send_message) message.append(send_message) message.append("Silakan pilih nomor Produk Anda") save_redis.set("%s::menu" % (phone_number), json.dumps({"harga": "ubah"})) else: respon_harga = requests.get( app.config['URL'] + "/price/" + str(save_redis.get("%s::id_harga" % (phone_number))), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_harga = respon_harga.json() if save_redis.get("%s::kategori_tagihan" % (phone_number)) is None or save_redis.get( "%s::no_jenis_unit" % (phone_number)) is None or save_redis.get( "%s::no_produk" % (phone_number)): send_message = ['Berikut ini Harga yang ingin Anda ubah:'] send_message.append('Nama Produk: %s' % (respon_harga['data']['product_name'])) send_message.append('Nama Jenis Unit: %s' % (respon_harga['data']['unit_type_name'])) send_message.append('Kategori Tagihan: %s' % (respon_harga['data']['billing_category'])) send_message.append( 'Harga: %s' % (formatrupiah(respon_harga['data']['base_price']))) send_message = "\n".join(send_message) message.append(send_message) message += fungsi_harga(phone_number, incoming_msg) return message
def produk(incoming_msg, phone_number, bot_responses): respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk["data"]['records'] message = [] if 'produk' in save_redis.get("%s::menu" % (phone_number)): if "tambah" in incoming_msg.lower(): message = tambah_produk(incoming_msg, phone_number) elif "ubah" in incoming_msg.lower(): no_produk = re.findall("ubah.+", incoming_msg.lower()) no_produk = regex_num(no_produk[0]) if int(no_produk) > len(respon_produk['data']['records']): message.append( "Nomor Produk yang Anda masukkan tidak tersedia!") message.append("") message.append( "Silakan ketik *Produk* untuk kembali ke halaman sebelumnya" ) else: id_produk = respon_produk['data']['records'][int(no_produk) - 1]['id'] message = ubah_produk(incoming_msg, phone_number, id_produk) elif "hapus" in incoming_msg.lower(): save_redis.set("%s::produk" % (phone_number), "hapus") message = hapus_produk(incoming_msg, phone_number) elif (save_redis.get("%s::menu" % (phone_number))) == "produk": if respon_produk["data"]["count"] != 0: message_bubble = [bot_responses] all_bubble = [] for index, item in enumerate(list_produk): tiap_data = [] tiap_data.append("%s. Nama: %s" % (index + 1, item['name'])) tiap_data.append(" Jenis Produk: %s" % (item['product_type_name'])) tiap_data.append(" Alamat: %s" % (item['description'])) tiap_data.append( " Bank: %s %s a.n %s \n" % (item['bank_name'], item['account_number'], item['account_name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) < 1600: message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] else: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) else: message.append("Anda belum mengisi produk!") pesan = ["Apa yang bisa Hedwig bantu?"] pesan.append("- Ketik *tambah* untuk menambahkan Produk") pesan.append( "- Ketik *ubah* <spasi> *no_produk* untuk mengubah Produk") pesan.append( "- Ketik *hapus* <spasi> *no_produk* untuk menghapus Produk") pesan.append("") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke Menu") message.append(("\n").join(pesan)) else: read = json.loads(save_redis.get("%s::menu" % (phone_number))) if 'tambah' in read["produk"]: message = tambah_produk(incoming_msg, phone_number) elif 'ubah' in read["produk"]: message = ubah_produk(incoming_msg, phone_number, id=None) return message
def jenis_tagihan(incoming_msg, phone_number, bot_responses): respon_jenis_tagihan = requests.post( app.config['URL'] + "/billing_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_jenis_tagihan = respon_jenis_tagihan.json() list_jenis_tagihan = respon_jenis_tagihan["data"]['records'] message = [] if "jenis_tagihan" in save_redis.get("%s::menu" % (phone_number)): if "tambah" in incoming_msg.lower(): message = tambah_jenis_tagihan(incoming_msg, phone_number) elif "ubah" in incoming_msg.lower(): no_jenis_tagihan = re.findall("ubah.+", incoming_msg.lower()) no_jenis_tagihan = regex_num(no_jenis_tagihan[0]) if int(no_jenis_tagihan) > len(list_jenis_tagihan): message.append( "Nomor Jenis Tagihan yang Anda masukkan tidak tersedia!") message.append("") message.append( "Silakan ketik *Jenis Tagihan* untuk kembali ke halaman sebelumnya" ) else: id_jenis_tagihan = respon_jenis_tagihan['data']['records'][ int(no_jenis_tagihan) - 1]['id'] message = ubah_jenis_tagihan(incoming_msg, phone_number, id_jenis_tagihan) elif "hapus" in incoming_msg.lower(): save_redis.set("%s::jenis_tagihan" % (phone_number), "hapus") message = hapus_jenis_tagihan(incoming_msg, phone_number) elif save_redis.get("%s::menu" % (phone_number)) == "jenis_tagihan": if respon_jenis_tagihan["data"]["count"] != 0: message_bubble = [bot_responses] all_bubble = [] for index, billing in enumerate(list_jenis_tagihan): tiap_data = [] tiap_data.append("%s. Nama: %s" % (index + 1, billing['name'])) tiap_data.append(" Kategori: %s" % (billing['billing_category'])) tiap_data.append(" Produk: %s\n" % (billing['product_name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) >= 1600: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) else: message.append("Anda belum mengisi jenis tagihan!") pesan = [] pesan.append("Silakan ketik menu berikut ini") pesan.append("- Ketik *tambah* untuk menambahkan Jenis Tagihan") pesan.append( "- Ketik *ubah* <spasi> *no_jenis_tagihan* untuk mengubah Jenis Tagihan" ) pesan.append( "- Ketik *hapus* <spasi> *no_jenis_tagihan* untuk menghapus Jenis Tagihan" ) pesan.append("") pesan.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke menu Beranda") message.append(("\n").join(pesan)) else: read = json.loads(save_redis.get("%s::menu" % (phone_number))) if 'tambah' in read["jenis_tagihan"]: message = tambah_jenis_tagihan(incoming_msg, phone_number) elif 'ubah' in read["jenis_tagihan"]: message = ubah_jenis_tagihan(incoming_msg, phone_number, id=None) return message
def fungsi_produk(phone_number, incoming_msg): message = [] # user diminta memasukkan jenis produk # menyimpan data nama produk if save_redis.get("%s::produk" % (phone_number)) == "nama": incoming_msg = incoming_msg.strip() isi_produk = [] if "aturtagihan" in app.config['URL']: list_tipe_produk = requests.post( app.config['URL'] + "/product_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) list_tipe_produk = list_tipe_produk.json() list_tipe_produk = list_tipe_produk["data"]["records"] for index, tipe_produk in enumerate(list_tipe_produk): isi_produk.append("%s. %s" % (index + 1, tipe_produk["name"])) else: isi_produk.append( "Sekarang, pilih nomor Jenis Produk untuk menambahkan data Produk Anda: " ) isi_produk.append("1. Apartemen") # no id 1 isi_produk.append("2. Perumahan") # no id 2 isi_produk.append("3. Kos\n") # no id 108 kirim_msg = ("\n").join(isi_produk) message.append(kirim_msg) message.append("Jenis produk berapakah yang Anda inginkan?") save_redis.set("%s::nama" % (phone_number), incoming_msg) save_redis.set("%s::produk" % (phone_number), "jenis_produk") # user diminta memasukkan alamat produk # menyimpan data jenis produk elif save_redis.get("%s::produk" % (phone_number)) == "jenis_produk": incoming_msg = incoming_msg.strip() if "aturtagihan" in app.config['URL']: save_redis.set("%s::no_tipe_produk" % (phone_number), int(incoming_msg)) else: if int(incoming_msg) == 3: save_redis.set("%s::no_tipe_produk" % (phone_number), 108) else: save_redis.set("%s::no_tipe_produk" % (phone_number), int(incoming_msg)) message.append("Lalu, ketik Alamat dari Produk Anda") save_redis.set("%s::produk" % (phone_number), "alamat") # user diminta memasukkan tanggal cetak invoice # menyimpan data alamat elif save_redis.get("%s::produk" % (phone_number)) == "alamat": incoming_msg = incoming_msg.strip() save_redis.set("%s::alamat" % (phone_number), incoming_msg) message.append( "Selanjutnya, setiap tanggal berapa Cetak Invoice Produk akan dilakukan?" ) message.append("(contoh: 1 atau 30)") save_redis.set("%s::produk" % (phone_number), "tgl_cetak") # user diminta memasukkan tgl jatuh tempo # menyimpan data tgl cetak elif save_redis.get("%s::produk" % (phone_number)) == "tgl_cetak": incoming_msg = incoming_msg.strip() save_redis.set("%s::cetak_invoice" % (phone_number), incoming_msg) message.append( "Kalau tanggal Jatuh Tempo Produknya setiap tanggal berapa?") message.append("(contoh: 1 atau 30)") save_redis.set("%s::produk" % (phone_number), "tgl_jatuh_tempo") # user diminta memasukkan bank # menyimpan tgl jatuh tempo elif save_redis.get("%s::produk" % (phone_number)) == "tgl_jatuh_tempo": incoming_msg = incoming_msg.strip() save_redis.set("%s::tempo_invoice" % (phone_number), incoming_msg) message.append("Sekarang, ketik Nama Bank dari Produk Anda") message.append("(contoh: Bank Mandiri atau Bank Niaga)") save_redis.set("%s::produk" % (phone_number), "bank") # user diminta memasukkan nomor rekening # menyimpan bank elif save_redis.get("%s::produk" % (phone_number)) == "bank": incoming_msg = incoming_msg.strip() message.append("Baik, Anda menggunakan %s" % (incoming_msg)) message.append( "Selanjutnya, berapa Nomor Rekening Bank dari bank Anda?") message.append("(contoh: 99123248113)") save_redis.set("%s::produk" % (phone_number), "nomor_rekening") respon_bank_dropdown = requests.get( app.config['URL'] + "/bank/dropdown", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_bank_dropdown = respon_bank_dropdown.json() for bank in respon_bank_dropdown["data"]: if incoming_msg.upper() in bank['name']: bank_code = bank['code'] save_redis.set("%s::bank_code" % (phone_number), bank_code) break # user diminta memasukkan nama pemilik rekening # menyimpan nomor rekening elif save_redis.get("%s::produk" % (phone_number)) == "nomor_rekening": incoming_msg = incoming_msg.strip() save_redis.set("%s::nomor_rekening" % (phone_number), incoming_msg) message.append( "Kalau Nama Pemilik Rekening dari Rekening tersebut siapa?") message.append("(contoh: Rizki Pangestu)") save_redis.set("%s::produk" % (phone_number), "nama_rekening") # menyimpan pemilik rekening elif save_redis.get("%s::produk" % (phone_number)) == "nama_rekening": incoming_msg = incoming_msg.strip() if "tambah" in save_redis.get("%s::menu" % (phone_number)): tambah = requests.post( app.config['URL'] + "/product", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "name": save_redis.get("%s::nama" % (phone_number)), "product_type_id": int(save_redis.get("%s::no_tipe_produk" % (phone_number))), "description": save_redis.get("%s::alamat" % (phone_number)), "start_date": int(save_redis.get("%s::cetak_invoice" % (phone_number))), "end_date": int(save_redis.get("%s::tempo_invoice" % (phone_number))), "bank_code": save_redis.get("%s::bank_code" % (phone_number)), "account_number": save_redis.get("%s::nomor_rekening" % (phone_number)), "account_name": incoming_msg }) if tambah.status_code == 200: message.append("Produk berhasil ditambahkan!") else: message.append("Produk gagal ditambahkan!") message.append(tambah.json()["message"]["body"]) elif "ubah" in save_redis.get("%s::menu" % (phone_number)): ubah = requests.put( app.config['URL'] + "/product/" + save_redis.get("%s::id_produk" % (phone_number)), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "name": save_redis.get("%s::nama" % (phone_number)), "product_type_id": int(save_redis.get("%s::no_tipe_produk" % (phone_number))), "description": save_redis.get("%s::alamat" % (phone_number)), "start_date": int(save_redis.get("%s::cetak_invoice" % (phone_number))), "end_date": int(save_redis.get("%s::tempo_invoice" % (phone_number))), "bank_code": save_redis.get("%s::bank_code" % (phone_number)), "account_number": save_redis.get("%s::nomor_rekening" % (phone_number)), "account_name": incoming_msg }) if ubah.status_code == 200: message.append("Produk berhasil diubah") else: message.append("Produk gagal diubah") message.append(ubah.json()["message"]["body"]) pesan = [] pesan.append("Ketik *Produk* untuk kembali ke halaman Produk") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), "produk") save_redis.delete("%s::nama" % (phone_number), "") save_redis.delete("%s::no_tipe_produk" % (phone_number), "") save_redis.delete("%s::cetak_invoice" % (phone_number), "") save_redis.delete("%s::tempo_invoice" % (phone_number), "") save_redis.delete("%s::bank_code" % (phone_number), "") save_redis.delete("%s::nomor_rekening" % (phone_number), "") return message
def login(incoming_msg, phone_number, bot_responses): message = [] # user diminta memasukkan email if save_redis.get("%s::menu" % (phone_number)) == "login": message.append("Pertama, silakan ketik Email Anda") save_redis.set("%s::menu" % (phone_number), json.dumps({"login": "******"})) # user diminta memasukkan password # menyimpan data email elif json.loads(save_redis.get("%s::menu" % (phone_number)))["login"] == "email": email = re.findall("^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$", incoming_msg) # format email benar if email != []: save_redis.set("%s::email" % (phone_number), email[0]) save_redis.set("%s::menu" % (phone_number), json.dumps({'login': '******'})) message.append("Baik, email Anda adalah %s" % (email[0])) message.append("Terakhir, silakan ketik Password Anda") # format email salah else: message.append("Email yang Anda masukkan tidak sesuai") message.append("Silakan masukkan kembali Email Anda") # menyimpan data password elif json.loads(save_redis.get("%s::menu" % (phone_number)))['login'] == 'password': passwordstr = re.findall(".+\S+$", incoming_msg) rq_login = requests.post(app.config['URL'] + "/users/login", json={ "email": save_redis.get("%s::email" % (phone_number)), "password": passwordstr[0] }) resp_login = rq_login.json() print("+++++++++++++++++ email: ", save_redis.get("%s::email" % (phone_number))) print("+++++++++++++++++ password: "******"%s::token" % (phone_number), resp_login["data"]["access_token"]) save_redis.set("%s::name" % (phone_number), resp_login["data"]["name"]) message.append("Halo %s!" % (save_redis.get("%s::name" % (phone_number)))) message.append( "Anda berhasil masuk! Sekarang Anda bisa akses fitur-fitur Hedwig" ) send_message = ["Apa yang bisa Hedwig bantu?"] send_message.append("1. *buat tagihan* - membuat tagihan") send_message.append( "2. *riwayat tagihan* - melihat riwayat tagihan") send_message.append( "3. *pengaturan* - untuk masuk ke menu produk, jenis tagihan, jenis unit, harga, formula, pelanggan, unit, dan aktivasi rekening" ) send_msg = ["Silakan pilih menu yang Anda inginkan ya"] send_msg.append("") send_msg.append("(contoh: *1* atau *buat tagihan*)") message.append(("\n").join(send_message)) message.append(("\n").join(send_msg)) save_redis.set("%s::submenu" % (phone_number), "beranda") else: message = [] message.append( "Email / Password salah. Ulangi masuk dengan ketik *masuk* atau ketik *registrasi* untuk mendaftarkan akun Anda" ) save_redis.delete("%s::email" % (phone_number), "") save_redis.delete("%s::menu" % (phone_number), "") return message
def fungsi_formula(phone_number, incoming_msg): # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] # data jenis unit respon_jenis_unit = requests.post( app.config['URL'] + "/unit_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_jenis_unit = respon_jenis_unit.json() list_jenis_unit = respon_jenis_unit['data']['records'] # data jenis tagihan respon_jenis_tagihan = requests.post( app.config['URL'] + "/billing_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_jenis_tagihan = respon_jenis_tagihan.json() list_jenis_tagihan = respon_jenis_tagihan['data']['records'] # data harga respon_harga = requests.post(app.config['URL'] + "/price/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_harga = respon_harga.json() list_harga = respon_harga['data']['records'] if "ubah" in incoming_msg: incoming_msg = incoming_msg.split() incoming_msg = incoming_msg[1] all_bubble = [] message = [] # Produk TERSIMPAN, memasukkan Jenis Unit if save_redis.get("%s::no_produk" % (phone_number)) is None: # menyimpan input produk ke session produk = incoming_msg.strip() save_redis.set("%s::no_produk" % (phone_number), int(produk)) # menampilkan data yang sudah dimasukkan send_message = ["Data yang sudah dimasukkan:"] send_message.append("Produk: %s" % (list_produk[int(produk) - 1]['name'])) save_redis.set("%s::message" % (phone_number), ("\n").join(send_message)) all_bubble.append("\n".join(send_message)) # mengambil data jenis unit berdasarkan produk yang dipilih send_message = ["Silakan pilih nomor Jenis Unit Anda:"] jml_jenis_unit = 0 for index, jenis_unit in enumerate(list_jenis_unit): tiap_data = [] if list_produk[int(produk) - 1]['id'] == jenis_unit['product_id']: tiap_data.append("%s. %s" % (index + 1, jenis_unit['name'])) jml_jenis_unit += 1 else: continue tiap_data = '\n'.join(tiap_data) if len(send_message[0]) + len(tiap_data) >= 1600: all_bubble.append(send_message) send_message = [''] send_message.append(tiap_data) send_message = "\n".join(send_message) send_message = [send_message] all_bubble.append(send_message) if jml_jenis_unit != 0: for bubble in all_bubble: message.append(bubble) else: send_message = [ "Belum ada Jenis Unit untuk Produk: %s" % (list_produk[int(produk) - 1]['name']) ] send_message.append("Masukkan Jenis Unit terlebih dahulu") message.append(("\n").join(send_message)) send_message = ["Ketik *Pengaturan* untuk ke menu Pengaturan"] send_message.append("Ketik *Beranda* untuk ke menu Beranda") message.append(("\n").join(send_message)) save_redis.delete("%s::menu" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") # Jenis Unit TERSIMPAN, memasukkan Jenis Tagihan elif save_redis.get("%s::no_jenis_unit" % (phone_number)) is None: # menyimpan input jenis unit ke session input_jenis_unit = incoming_msg.strip() save_redis.set("%s::no_jenis_unit" % (phone_number), list_jenis_unit[int(input_jenis_unit) - 1]['id']) send_message = [] # menampilkan data yang sudah dimasukkan send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append( "Jenis Unit: %s" % (list_jenis_unit[int(input_jenis_unit) - 1]['name'])) save_redis.set("%s::message" % (phone_number), ("\n").join(send_message)) all_bubble.append('\n'.join(send_message)) # mengambil data jenis tagihan berdasarkan produk yang diinput send_message = ["Silakan pilih nomor Jenis Tagihan Anda:"] jml_jenis_tagihan = 0 for index, jenis_tagihan in enumerate(list_jenis_tagihan): tiap_data = [] if list_produk[int(save_redis.get("%s::no_produk" % (phone_number))) - 1]["id"] == jenis_tagihan['product_id']: tiap_data.append("%s. %s" % (index + 1, jenis_tagihan['name'])) jml_jenis_tagihan += 1 else: continue tiap_data = '\n'.join(tiap_data) if len(send_message[0]) + len(tiap_data) >= 1600: all_bubble.append(send_message) send_message = [''] send_message.append(tiap_data) send_message = '\n'.join(send_message) send_message = [send_message] all_bubble.append(send_message) if jml_jenis_tagihan != 0: for bubble in all_bubble: message.append(bubble) else: send_message = [ "Belum ada Jenis Tagihan untuk Produk: %s" % (list_produk[ int(save_redis.get("%s::no_produk" % (phone_number))) - 1]['name']) ] send_message.append("Masukkan Jenis Tagihan terlebih dahulu") message.append(("\n").join(send_message)) send_message = ["Ketik *Pengaturan* untuk ke menu Pengaturan"] send_message.append("Ketik *Beranda* untuk ke menu Beranda") message.append(("\n").join(send_message)) save_redis.delete("%s::menu" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") save_redis.delete("%s::no_jenis_unit" % (phone_number), "") # Jenis Tagihan TERSIMPAN, memasukkan Jenis Perhitungan elif save_redis.get("%s::no_jenis_tagihan" % (phone_number)) is None: # menyimpan input jenis tagihan ke session input_jenis_tagihan = incoming_msg.strip() save_redis.set("%s::no_jenis_tagihan" % (phone_number), list_jenis_tagihan[int(input_jenis_tagihan) - 1]['id']) # menampilkan data yang sudah dimasukkan send_message = [] send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append( "Jenis Tagihan: %s" % (list_jenis_tagihan[int(input_jenis_tagihan) - 1]['name'])) save_redis.set("%s::message" % (phone_number), ("\n").join(send_message)) all_bubble.append('\n'.join(send_message)) # mengambil jenis perhitungan send_message = ["Silakan pilih Jenis Perhitungan yang Anda inginkan:"] send_message.append("1. Formula") send_message.append("2. Range") all_bubble.append('\n'.join(send_message)) # kirim tiap bubble chat for bubble in all_bubble: message.append(bubble) # Jenis Perhitungan TERSIMPAN, memasukkan Kategori Tagihan elif save_redis.get("%s::jenis_perhitungan" % (phone_number)) is None: # menyimpan input jenis perhitungan ke session input_jenis_perhitungan = incoming_msg.strip() pilihan = '' if int(input_jenis_perhitungan) == 1: pilihan = 'formula' save_redis.set("%s::jenis_perhitungan" % (phone_number), pilihan) elif int(input_jenis_perhitungan) == 2: pilihan = 'range' save_redis.set("%s::jenis_perhitungan" % (phone_number), pilihan) # menampilkan data yang sudah dimasukkan send_message = [] send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append("Jenis Perhitungan: %s" % (pilihan)) save_redis.set("%s::message" % (phone_number), ("\n").join(send_message)) all_bubble.append('\n'.join(send_message)) # mengambil kategori tagihan send_message = ["Silakan pilih Kategori Tagihan yang Anda inginkan:"] send_message.append("1. IPL") send_message.append("2. Listrik") send_message.append("3. Air") all_bubble.append('\n'.join(send_message)) # kirim tiap bubble chat for bubble in all_bubble: message.append(bubble) # Kategori Tagihan TERSIMPAN, memasukkan Harga elif save_redis.get("%s::kategori_tagihan" % (phone_number)) is None: # menyimpan input kategori tagihan ke session input_kategori_tagihan = incoming_msg.strip() pilihan = '' if int(input_kategori_tagihan) == 1: pilihan = 'IPL' save_redis.set("%s::kategori_tagihan" % (phone_number), pilihan.lower()) elif int(input_kategori_tagihan) == 2: pilihan = 'listrik' save_redis.set("%s::kategori_tagihan" % (phone_number), pilihan) elif int(input_kategori_tagihan) == 3: pilihan = 'air' save_redis.set("%s::kategori_tagihan" % (phone_number), pilihan) # menampilkan data yang sudah dimasukkan send_message = [] send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append("Kategori tagihan: %s" % (pilihan)) save_redis.set("%s::message" % (phone_number), ("\n").join(send_message)) all_bubble.append('\n'.join(send_message)) # jika user memilih 'FORMULA' untuk JENIS PERHITUNGAN if save_redis.get("%s::jenis_perhitungan" % (phone_number)) == 'formula': # mengambil data harga send_message = ['Silakan pilih nomor pada Daftar Harga Anda:'] jml_jenis_harga = 0 for index, jenis_harga in enumerate(list_harga): tiap_data = [] if int(save_redis.get( "%s::no_jenis_unit" % (phone_number))) == int( jenis_harga['unit_type_id']) and save_redis.get( "%s::kategori_tagihan" % (phone_number)).lower( ) == jenis_harga['billing_category'].lower(): tiap_data.append( "%s. %s" % (index + 1, formatrupiah(jenis_harga['base_price']))) jml_jenis_harga += 1 else: continue tiap_data = '\n'.join(tiap_data) if len(send_message[0]) + len(tiap_data) >= 1600: all_bubble.append(send_message) send_message = [''] send_message.append(tiap_data) send_message = '\n'.join(send_message) send_message = [send_message] all_bubble.append(send_message) if jml_jenis_harga != 0: for bubble in all_bubble: message.append(bubble) else: send_message = ['Belum ada Harga yang tersedia'] send_message.append("Masukkan Harga terlebih dahulu") message.append(("\n").join(send_message)) send_message = ["Ketik *Pengaturan* untuk ke menu Pengaturan"] send_message.append("Ketik *Beranda* untuk ke menu Beranda") message.append(("\n").join(send_message)) save_redis.delete("%s::menu" % (phone_number), "") save_redis.delete("%s::kategori_tagihan" % (phone_number), "") save_redis.delete("%s::jenis_perhitungan" % (phone_number), "") save_redis.delete("%s::no_jenis_tagihan" % (phone_number), "") save_redis.delete("%s::no_jenis_unit" % (phone_number), "") save_redis.delete("%s::no_produk" % (phone_number), "") # jika user memilih RANGE untuk JENIS PERHITUNGAN elif save_redis.get("%s::jenis_perhitungan" % (phone_number)) == 'range': message = ['Masukkan range harga:'] # Harga TERSIMPAN, memasukkan Formula elif save_redis.get("%s::no_harga" % (phone_number)) is None: # menyimpan input harga input_nomor_harga = incoming_msg.strip() save_redis.set("%s::no_harga" % (phone_number), list_harga[int(input_nomor_harga) - 1]['id']) # menampilkan data yang sudah dimasukkan send_message = [] send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append("Harga: %s" % (formatrupiah( list_harga[int(input_nomor_harga) - 1]['base_price']))) save_redis.set("%s::message" % (phone_number), ("\n").join(send_message)) all_bubble.append('\n'.join(send_message)) # contoh pengisian formula send_message = ['Silakan masukkan formula seperti contoh ini:'] send_message.append("*price.base_price * unit.size*") all_bubble.append('\n'.join(send_message)) for bubble in all_bubble: message.append(bubble) # Nembak endpoint untuk pilihan Jenis Perhitungan Formula else: input_formula = incoming_msg.strip() if json.loads(save_redis.get("%s::menu" % (phone_number)))['formula'] == 'tambah': tambah = requests.post( app.config['URL'] + "/formula", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "product_id": int(list_produk[ int(save_redis.get("%s::no_produk" % (phone_number))) - 1]['id']), "unit_type_id": int(save_redis.get("%s::no_jenis_unit" % (phone_number))), "billing_type_id": int(save_redis.get("%s::no_jenis_tagihan" % (phone_number))), "charge_type": save_redis.get("%s::jenis_perhitungan" % (phone_number)), "billing_category": save_redis.get("%s::kategori_tagihan" % (phone_number)), "price_id": int(save_redis.get("%s::no_harga" % (phone_number))), "formulation": input_formula, }) if tambah.status_code == 200: message = ["Formula berhasil ditambahkan"] else: message = ["Formula gagal ditambahkan"] message.append(tambah.json()["message"]["body"]) message = [("\n").join(message)] elif json.loads(save_redis.get("%s::menu" % (phone_number)))['formula'] == 'ubah': ubah = requests.put( app.config['URL'] + "/formula/" + str(save_redis.get("%s::id_formula" % (phone_number))), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "product_id": int(list_produk[ int(save_redis.get("%s::no_produk" % (phone_number))) - 1]['id']), "unit_type_id": int(save_redis.get("%s::no_jenis_unit" % (phone_number))), "billing_type_id": int(save_redis.get("%s::no_jenis_tagihan" % (phone_number))), "charge_type": save_redis.get("%s::jenis_perhitungan" % (phone_number)), "billing_category": save_redis.get("%s::kategori_tagihan" % (phone_number)), "price_id": int(save_redis.get("%s::no_harga" % (phone_number))), "formulation": input_formula, }) if ubah.status_code == 200: message = ["Formula berhasil diubah"] else: message = ["Formula gagal diubah"] message.append(ubah.json()["message"]["body"]) message = [("\n").join(message)] send_message = ["Ketik *Formula* untuk ke menu Formula"] send_message.append( "Ketik *Pengaturan* untuk kembali ke menu Pengaturan") send_message.append("Ketik *Beranda* untuk kembali ke menu Beranda") message.append(("\n").join(send_message)) save_redis.set("%s::menu" % (phone_number), "formula") save_redis.delete("%s::no_produk" % (phone_number), "") save_redis.delete("%s::no_jenis_unit" % (phone_number), "") save_redis.delete("%s::no_jenis_tagihan" % (phone_number), "") save_redis.delete("%s::jenis_perhitungan" % (phone_number), "") save_redis.delete("%s::kategori_tagihan" % (phone_number), "") save_redis.delete("%s::no_harga" % (phone_number), "") return message
def pelanggan(incoming_msg, phone_number, bot_responses): respon_pelanggan = requests.post(app.config['URL']+"/customer/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}) respon_pelanggan = respon_pelanggan.json() list_pelanggan = respon_pelanggan["data"]['records'] message = [] if "pelanggan" in save_redis.get("%s::menu" %(phone_number)): if "tambah" in incoming_msg.lower(): message = tambah_pelanggan(incoming_msg, phone_number) elif "ubah" in incoming_msg.lower(): no_pelanggan = re.findall("ubah.+", incoming_msg.lower()) no_pelanggan = regex_num(no_pelanggan[0]) if int(no_pelanggan) > len(list_pelanggan): message.append("Nomor Pelanggan yang " + save_redis.get("%s::name" %(phone_number)) +" masukkan tidak tersedia!") message.append("") message.append("Ketik *Pelanggan* untuk kembali ke halaman sebelumnya") else: id_pelanggan = respon_pelanggan['data']['records'][int(no_pelanggan)-1]['id'] message = ubah_pelanggan(incoming_msg, phone_number,id_pelanggan) elif "hapus" in incoming_msg.lower(): save_redis.set("%s::menu" %(phone_number), json.dumps({"pelanggan":"hapus"})) message = hapus_pelanggan(incoming_msg, phone_number) elif save_redis.get("%s::menu" %(phone_number)) == "pelanggan": if respon_pelanggan["data"]["count"] != 0: message_bubble = [bot_responses] all_bubble = [] for index, item in enumerate(list_pelanggan): tiap_data = [] tiap_data.append("%s. Nama: %s" % (index+1, item['name'])) tiap_data.append(" Email: %s" %(item['email'])) tiap_data.append(" No Telepon: %s" % (item['phone'])) tiap_data.append(" KTP: %s" % (item['ktp'])) tiap_data.append(" Produk: %s\n" % (item['product_name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) < 1600: message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] else: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) else: message.append("Anda belum mengisi Pelanggan!") pesan = [] message.append("Apa yang bisa Hedwig bantu?") pesan.append("- Ketik *tambah* untuk menambahkan Pelanggan") pesan.append("- Ketik *ubah* <spasi> *no_pelanggan* untuk mengubah Pelanggan") pesan.append("- Ketik *hapus* <spasi> *no_pelanggan* untuk menghapus Pelanggan") pesan.append("") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.delete("%s::nama" %(phone_number), "") save_redis.delete("%s::email" %(phone_number), "") save_redis.delete("%s::telepon" %(phone_number), "") save_redis.delete("%s::ktp" %(phone_number), "") save_redis.delete("%s::pelanggan" %(phone_number), "") else: read = json.loads(save_redis.get("%s::menu" %(phone_number))) if 'tambah' in read['pelanggan']: message = tambah_pelanggan(incoming_msg, phone_number) elif 'ubah' in read['pelanggan']: message = ubah_pelanggan(incoming_msg, phone_number,id=None) return message
def fungsi_pelanggan(phone_number, incoming_msg): message = [] # user diminta memasukkan email pelanggan # menyimpan data nama if save_redis.get("%s::pelanggan" %(phone_number)) == "nama": incoming_msg = incoming_msg.strip() save_redis.set("%s::pelanggan" %(phone_number), "email") save_redis.set("%s::nama" %(phone_number), incoming_msg) message.append("Kedua, masukkan Email Pelanggan terlebih dahulu" ) # user diminta memasukkan no telepon # menyimpan data email elif save_redis.get("%s::pelanggan" %(phone_number)) == "email": incoming_msg = incoming_msg.strip() incoming_msg_regex = re.findall("^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$", incoming_msg) # format email benar if incoming_msg_regex != []: save_redis.set("%s::email" %(phone_number), incoming_msg_regex[0]) save_redis.set("%s::pelanggan" %(phone_number), "telepon") message.append("Ketiga, masukkan Nomor Telepon Pelanggan") message.append("Contoh: 081339222111") # format email salah else: message.append("Email yang Anda masukkan tidak sesuai format email") message.append("Silakan masukkan kembali Email Anda") # user diminta memasukkan KTP pelanggan # menyimpan data telepon elif save_redis.get("%s::pelanggan" %(phone_number)) == "telepon": incoming_msg = incoming_msg.strip() incoming_msg_regex = re.findall("\+?([ -]?\d+)+|\(\d+\)([ -]\d+)", incoming_msg) if incoming_msg_regex != []: save_redis.set("%s::telepon" %(phone_number), incoming_msg) save_redis.set("%s::pelanggan" %(phone_number), "ktp") message.append("Keempat, masukkan No KTP pelanggan Anda") else: message.append("Nomor Telepon yang Anda masukkan tidak sesuai") message.append("Silakan masukkan kembali Nomor Telepon pelanggan Anda") # user diminta memasukkan no produk # menyimpan data ktp elif save_redis.get("%s::pelanggan" %(phone_number)) == "ktp": incoming_msg = incoming_msg.strip() respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token"%(phone_number))} ) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if len(incoming_msg) == 16: save_redis.set("%s::ktp" %(phone_number), incoming_msg) save_redis.set("%s::pelanggan" %(phone_number), "no_produk") send_message = ['Berikut Daftar Produk Anda:'] for index, produk in enumerate(list_produk): send_message.append("%s. %s" % (index+1, produk['name'])) message.append(("\n").join(send_message)) message.append("Terakhir, masukkan No Produk yang dihuni oleh Pelanggan Anda") else: message.append("No KTP yang Anda masukkan harus 16 digit") message.append("Silakan masukkan lagi No KTP pelanggan Anda lagi") # menyimpan no produk elif save_redis.get("%s::pelanggan" %(phone_number)) == "no_produk": incoming_msg = incoming_msg.strip() respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token"%(phone_number))} ) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] if int(incoming_msg) > len(list_produk): message.append("Nomor yang Anda masukkan tidak ada dalam daftar") message.append("Silakan masukkan lagi No Produk Anda") else: # ketika tambah pelanggan if "tambah" in save_redis.get("%s::menu" %(phone_number)): tambah = requests.post(app.config['URL']+"/customer", headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}, json={ "name": save_redis.get("%s::nama" %(phone_number)), "email": save_redis.get("%s::email" %(phone_number)), "phone": save_redis.get("%s::telepon" %(phone_number)), "ktp": save_redis.get("%s::ktp" %(phone_number)), "product_id": list_produk[int(incoming_msg)-1]['id'] }) if tambah.status_code == 200: message.append("Pelanggan Anda berhasil ditambahkan!") else: message.append("Pelanggan gagal ditambahkan!") message.append(tambah.json()["message"]["body"]) # ketika ubah pelanggan if "ubah" in save_redis.get("%s::menu" %(phone_number)): ubah = requests.put(app.config['URL']+"/customer/"+str(save_redis.get("%s::id_pelanggan" %(phone_number))), headers={"Authorization": "Bearer "+ save_redis.get("%s::token" %(phone_number))}, json={ "name": save_redis.get("%s::nama" %(phone_number)), "email": save_redis.get("%s::email" %(phone_number)), "phone": save_redis.get("%s::telepon" %(phone_number)), "ktp": save_redis.get("%s::ktp" %(phone_number)), "product_id": list_produk[int(incoming_msg)-1]['id'] }) if ubah.status_code == 200: message.append("Pelanggan berhasil diubah") else: message.append("Pelanggan gagal diubah") message.append(ubah.json()["message"]["body"]) pesan = [] pesan.append("Ketik *Pelanggan* untuk kembali ke halaman Pelanggan") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" %(phone_number), "pelanggan") save_redis.delete("%s::nama" %(phone_number), "") save_redis.delete("%s::email" %(phone_number), "") save_redis.delete("%s::telepon" %(phone_number), "") save_redis.delete("%s::ktp" %(phone_number), "") save_redis.delete("%s::pelanggan" %(phone_number), "") return message
def fungsi_harga(phone_number, incoming_msg): # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] # data jenis unit respon_jenis_unit = requests.post( app.config['URL'] + "/unit_type/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_jenis_unit = respon_jenis_unit.json() list_jenis_unit = respon_jenis_unit['data']['records'] if "ubah" in incoming_msg: incoming_msg = incoming_msg.split() incoming_msg = incoming_msg[1] # ketika user memasukkan nomor produk if save_redis.get("%s::no_produk" % (phone_number)) is None: input_produk = incoming_msg.strip() message = [] # menyimpan input produk ke session save_redis.set("%s::no_produk" % (phone_number), list_produk[int(input_produk) - 1]['id']) # menampilkan data yang sudah dimasukkan send_message = ["Data yang sudah dimasukkan:"] nama_produk = list_produk[int(input_produk) - 1]['name'] send_message.append("Nama Produk: %s" % (nama_produk)) save_redis.set("%s::message" % (phone_number), "Nama Produk: %s" % (nama_produk)) message.append("\n".join(send_message)) # mengambil data jenis unit berdasarkan produk yang dimasukkan send_message = ["Sekarang, silakan pilih nomor Jenis Unit Anda:"] for index, jenis_unit in enumerate(list_jenis_unit): if list_produk[int(input_produk) - 1]['id'] == jenis_unit['product_id']: send_message.append("%s. %s" % (index + 1, jenis_unit['name'])) if len(send_message) > 1: message.append("\n".join(send_message)) else: send_message = [ "Belum ada Jenis Unit untuk Produk: %s" % (list_produk[int(input_produk) - 1]['name']) ] send_message.append( "Masukkan Jenis Unit terlebih dahulu di Menu Jenis Unit") message.append(("\n").join(send_message)) send_message = ["Ketik *Pengaturan* untuk ke menu Pengaturan"] send_message.append("Ketik *Beranda* untuk ke menu Beranda") message.append(("\n").join(send_message)) # ketika user memasukkan nomor jenis unit elif save_redis.get("%s::no_jenis_unit" % (phone_number)) is None: input_jenis_unit = incoming_msg.strip() message = [] # menyimpan input jenis unit ke session save_redis.set("%s::no_jenis_unit" % (phone_number), list_jenis_unit[int(input_jenis_unit) - 1]['id']) # menampilkan data yang sudah dimasukkan send_message = ["Data yang sudah dimasukkan:"] send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append( "Nama Jenis Unit: %s" % (list_jenis_unit[int(input_jenis_unit) - 1]['name'])) message.append("\n".join(send_message)) save_redis.set("%s::message" % (phone_number), "\n".join(send_message)) # menampilkan pilihan kategori tagihan send_message = ["Lalu, pilih Kategori Tagihan yang Anda inginkan:"] send_message.append("1. IPL") send_message.append("2. Listrik") send_message.append("3. Air") message.append("\n".join(send_message)) # user memasukkan kategori tagihan elif save_redis.get("%s::kategori_tagihan" % (phone_number)) is None: message = [] # menyimpan input kategori tagihan ke session input_kategori_tagihan = incoming_msg.strip() pilihan = '' if int(input_kategori_tagihan) == 1: pilihan = 'IPL' save_redis.set("%s::kategori_tagihan" % (phone_number), pilihan) elif int(input_kategori_tagihan) == 2: pilihan = 'Listrik' save_redis.set("%s::kategori_tagihan" % (phone_number), pilihan) elif int(input_kategori_tagihan) == 3: pilihan = 'Air' save_redis.set("%s::kategori_tagihan" % (phone_number), pilihan) # menampilkan data yang sudah dimasukkan send_message = [] send_message.append(save_redis.get("%s::message" % (phone_number))) send_message.append("Kategori Tagihan: %s" % (pilihan)) save_redis.set("%s::message" % (phone_number), "\n".join(send_message)) message.append("\n".join(send_message)) # meminta user memasukkan harga message.append("Selanjutnya, masukkan harga yang Anda inginkan") # user memasukkan harga else: input_harga = incoming_msg.strip() # cek apakah tambah if json.loads(save_redis.get("%s::menu" % (phone_number)))['harga'] == 'tambah': tambah = requests.post( app.config['URL'] + "/price", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "unit_type_id": int(save_redis.get("%s::no_jenis_unit" % (phone_number))), "billing_category": save_redis.get("%s::kategori_tagihan" % (phone_number)).lower(), "base_price": int(input_harga), }) if tambah.status_code == 200: message = ["Harga berhasil ditambahkan!"] else: tambah = tambah.json() message = ["Harga gagal ditambahkan!"] message.append(tambah["message"]["body"]) save_redis.set("%s::menu" % (phone_number), "harga") elif json.loads(save_redis.get("%s::menu" % (phone_number)))['harga'] == 'ubah': ubah = requests.put( app.config['URL'] + "/price/" + str(save_redis.get("%s::id_harga" % (phone_number))), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "unit_type_id": int(save_redis.get("%s::no_jenis_unit" % (phone_number))), "billing_category": save_redis.get("%s::kategori_tagihan" % (phone_number)).lower(), "base_price": int(input_harga), }) if ubah.status_code == 200: message = ['Harga berhasil diubah'] else: message = ['Harga gagal diubah'] message.append(ubah.json()["message"]["body"]) save_redis.set("%s::menu" % (phone_number), "harga") send_message = ["Ketik *Harga* untuk ke menu Harga"] send_message.append("Ketik *Pengaturan* untuk ke menu Pengaturan") send_message.append("Ketik *Beranda* untuk ke menu Beranda") message.append(("\n").join(send_message)) save_redis.delete("%s::no_produk" % (phone_number)) save_redis.delete("%s::no_jenis_unit" % (phone_number)) save_redis.delete("%s::kategori_tagihan" % (phone_number)) save_redis.delete("%s::message" % (phone_number)) return message
def fungsi_jenis_unit(phone_number, incoming_msg): message = [] respon_produk = requests.post(app.config['URL']+"/product/all", headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}) respon_produk = respon_produk.json() list_produk = respon_produk["data"]["records"] # user diminta memasukkan nama jenis unit # menyimpan no produk if save_redis.get("%s::jenis_unit"%(phone_number)) == "no_produk": incoming_msg = incoming_msg.strip() if int(incoming_msg) > len(list_produk): message.append("Nomor yang Anda masukkan tidak ada dalam daftar") message.append("Silakan masukkan lagi No Produk Anda") else: message.append("Silakan masukkan Nama Jenis Unit Anda:") save_redis.set("%s::no_produk" %(phone_number), list_produk[int(incoming_msg)-1]["id"]) save_redis.set("%s::jenis_unit" %(phone_number), "nama") # user diminta memasukkan deskripsi jenis unit # menyimpan nama jenis unit elif save_redis.get("%s::jenis_unit"%(phone_number)) == "nama": incoming_msg = incoming_msg.strip() save_redis.set("%s::nama_jenis_unit" %(phone_number),incoming_msg) message.append("Silakan masukkan Deskripsi Jenis Unit Anda:") save_redis.set("%s::jenis_unit" %(phone_number),"deskripsi") # menyimpan deskripsi jenis unit elif save_redis.get("%s::jenis_unit"%(phone_number)) == "deskripsi": incoming_msg = incoming_msg.strip() if "tambah" in save_redis.get("%s::menu" %(phone_number)): tambah = requests.post(app.config['URL']+"/unit_type", headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}, json={ "name": save_redis.get("%s::nama_jenis_unit" %(phone_number)), "description": incoming_msg, "product_id": int(save_redis.get("%s::no_produk" %(phone_number))) } ) if tambah.status_code == 200: message.append("Jenis Unit berhasil ditambahkan") else: message.append("Jenis Unit gagal ditambahkan") message.append(tambah.json()["message"]["body"]) elif "ubah" in save_redis.get("%s::menu" %(phone_number)): ubah = requests.put(app.config['URL']+"/unit_type/"+save_redis.get("%s::id_jenis_unit" %(phone_number)), headers={"Authorization": "Bearer " + save_redis.get("%s::token" %(phone_number))}, json={ "name": save_redis.get("%s::nama_jenis_unit" %(phone_number)), "description": incoming_msg, "product_id": int(save_redis.get("%s::no_produk" %(phone_number))) } ) if ubah.status_code == 200: message.append("Jenis Unit berhasil diubah") else: message.append("Jenis Unit gagal diubah") message.append(ubah.json()["message"]["body"]) pesan = [] pesan.append("Ketik *Jenis Unit* untuk kembali ke halaman Jenis Unit") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" %(phone_number), "jenis_unit") save_redis.delete("%s::nama_jenis_unit" %(phone_number), "") save_redis.delete("%s::no_produk" %(phone_number), "") return message
def tagihan(incoming_msg, phone_number, bot_responses): respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk["data"]['records'] unit = requests.post(app.config['URL'] + "/unit/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_unit = unit.json() list_unit = respon_unit['data']['records'] message = [] if save_redis.get("%s::menu" % (phone_number)) == "tagihan": if respon_produk["data"]["count"] != 0: message_bubble = [ "Ini adalah daftar Produknya %s: " % (save_redis.get("%s::name" % (phone_number))) ] all_bubble = [] for index, item in enumerate(list_produk): tiap_data = [] tiap_data.append("%s. Nama: %s" % (index + 1, item['name'])) tiap_data = ('\n').join(tiap_data) if len(message_bubble[0]) + len(tiap_data) < 1600: message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] else: all_bubble.append(message_bubble) message_bubble = [''] message_bubble.append(tiap_data) message_bubble = ('\n').join(message_bubble) message_bubble = [message_bubble] all_bubble.append(message_bubble) for bubble in all_bubble: message.append(bubble) message.append( "Sekarang, ketik no produk yang ingin dibuat tagihannya") else: message.append( "Anda belum mengisi produk! Isi dulu yuk produknya..") pesan = [] pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), json.dumps({"tagihan": "tambah"})) elif json.loads(save_redis.get("%s::menu" % (phone_number)))['tagihan'] == 'tambah': no_produk = re.findall(".+", incoming_msg) no_produk = regex_num(no_produk[0]) if int(no_produk) > len(list_produk): message.append( "Nomor Produk yang Anda masukkan tidak ada! Isi lagi yuk pakai Nomor Produk yang lain.." ) message.append("") message.append( "Atau Anda bisa ketik *tagihan* untuk kembali ke halaman sebelumnya" ) else: save_redis.set("%s::id_produk" % (phone_number), list_produk[int(no_produk) - 1]['id']) message.append("Selanjutnya, pilih nomor Unit Anda") jml_unit = 0 pesan = [] for index, unit in enumerate(list_unit): if list_produk[int(no_produk) - 1]['id'] == unit['product_id']: pesan.append("%s. %s" % (index + 1, unit['name'])) jml_unit += 1 message.append("\n".join(pesan)) if jml_unit == 0: message.append("Belum ada Unit untuk Produk: %s" % (list_produk[int(no_produk) - 1]['name'])) pesan = [] pesan.append( "Anda belum mengisi unit, silakan isi unit terlebih dahulu!" ) message.append("\n".join(pesan)) save_redis.set("%s::menu" % (phone_number), json.dumps({"tagihan": "tambah_dua"})) elif json.loads(save_redis.get("%s::menu" % (phone_number)))['tagihan'] == 'tambah_dua': no_unit = re.findall(".+", incoming_msg) no_unit = regex_num(no_unit[0]) if int(no_unit) > len(list_unit): message.append( "Nomor Unit yang Anda masukkan tidak tersedia! Isi lagi yuk pakai Nomor Unit yang lain.." ) message.append("") message.append( "Ketik *Tagihan* untuk kembali ke halaman sebelumnya") message.append( "Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") message.append("Ketik *Beranda* untuk kembali ke halaman Beranda") else: save_redis.set("%s::id_unit" % (phone_number), list_unit[int(no_unit) - 1]['id']) message.append( "Sekarang Hedwig tahu kapan *Mulai Waktu Tagihan*?") message.append("Tulisnya pakai format *(yyyy-mm-dd)* ya") save_redis.set("%s::menu" % (phone_number), json.dumps({"tagihan": "tambah_tiga"})) elif json.loads(save_redis.get( "%s::menu" % (phone_number)))['tagihan'] == 'tambah_tiga': mulai_waktu = re.findall(".+", incoming_msg) mulai_waktu = mulai_waktu[0] message.append("Kalau *Selesai Waktu Tagihan* nya kapan?") message.append("Ini juga pakai format *(yyyy-mm-dd)* ya") save_redis.set("%s::mulai_waktu" % (phone_number), mulai_waktu) save_redis.set("%s::menu" % (phone_number), json.dumps({"tagihan": "tambah_empat"})) elif json.loads(save_redis.get( "%s::menu" % (phone_number)))['tagihan'] == "tambah_empat": selesai_waktu = re.findall(".+", incoming_msg) selesai_waktu = selesai_waktu[0] unit_id = int(save_redis.get("%s::id_unit" % (phone_number))) if "aturtagihan" in app.config['URL']: unit_id = [unit_id] tambah = requests.post( app.config['URL'] + "/billing/generate", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={ "product_id": int(save_redis.get("%s::id_produk" % (phone_number))), "periode": save_redis.get("%s::mulai_waktu" % (phone_number)), "unit_id": unit_id, "start_date": save_redis.get("%s::mulai_waktu" % (phone_number)), "end_date": selesai_waktu }) resp_tambah = tambah.json() if tambah.status_code != 200: message.append(resp_tambah["message"]["body"]) message.append( "Tagihan gagal dibuat! Anda harus aktivasi rekening Anda terlebih dahulu atau lengkapi informasi properti Anda!" ) else: for indeks in range(len(resp_tambah['data'])): if resp_tambah['data'][indeks]['unit_id'] == int( save_redis.get("%s::id_unit" % (phone_number))): billing_id = resp_tambah['data'][indeks]['id'] print('BILLING ID', billing_id) link = requests.post( app.config['URL'] + "/canopus/user_payment/" + str(billing_id), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) send_wa = requests.post( app.config['URL'] + "/billing/send/wa", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }, json={"billing_id": int(billing_id)}) respon_link = link.json() send_wa = send_wa.json()["data"]["wa_template"] send_wa = send_wa.replace(" ", "%20") if link.status_code == 200: message.append("Tagihan berhasil dibuat!") message.append( "Klik tautan di bawah ini untuk mengirim Link Tagihan ke pelanggan Anda melalui whatsapp" ) message.append(send_wa) message.append( "Atau kirim Link Tagihan berikut ini ke pelanggan Anda secara manual" ) message.append(respon_link['data']) else: message.append(respon_link["message"]["body"]) message.append( "Link Tagihan gagal dibuat! Anda harus melengkapi informasi tagihan di menu *Pengaturan* dan verifikasi rekening untuk mengaktifkan pembayaran digital!" ) pesan = [] pesan.append("Ketik *Tagihan* untuk kembali ke halaman sebelumnya") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) save_redis.set("%s::menu" % (phone_number), 'tagihan') return message
def ubah_formula(incoming_msg, phone_number, id_formula=None): all_bubble = [] message = [] # data produk respon_produk = requests.post( app.config['URL'] + "/product/all", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_produk = respon_produk.json() list_produk = respon_produk['data']['records'] # data formula yang dipilih if id_formula is None: respon_formula = requests.get( app.config['URL'] + "/formula/" + str(save_redis.get("%s::id_formula" % (phone_number))), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) else: respon_formula = requests.get( app.config['URL'] + "/formula/" + str(id_formula), headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) respon_formula = respon_formula.json() send_message = ["Berikut ini Formula yang ingin Anda ubah:"] send_message.append("Produk: %s" % (respon_formula['data']["product_name"])) send_message.append("Jenis Unit: %s" % (respon_formula['data']['unit_type_name'])) send_message.append("Jenis Tagihan: %s" % (respon_formula['data']['billing_type_name'])) send_message.append("Jenis Perhitungan: %s" % (respon_formula['data']['charge_type'])) send_message.append("Kategori Tagihan: %s" % (respon_formula['data']['billing_category'])) send_message.append("Harga: %s" % (formatrupiah(respon_formula['data']['base_price']))) send_message.append("Formula: %s" % (respon_formula['data']['formulation'])) all_bubble.append('\n'.join(send_message)) if id_formula is not None: save_redis.set("%s::id_formula" % (phone_number), id_formula) if respon_produk["data"]["count"] != 0: send_message = ["Silahkan pilih nomor Produk Anda: "] for index, produk in enumerate(list_produk): tiap_data = [] tiap_data.append("%s. %s" % (index + 1, produk['name'])) tiap_data = '\n'.join(tiap_data) if len(send_message[0]) + len(tiap_data) >= 1600: all_bubble.append(send_message) send_message = [''] send_message.append(tiap_data) send_message = '\n'.join(send_message) send_message = [send_message] all_bubble.append(("\n").join(send_message)) for bubble in all_bubble: message.append(bubble) save_redis.set("%s::menu" % (phone_number), json.dumps({"formula": "ubah"})) else: message.append( "Anda belum mengisi Produk, silakan isi produk terlebih dahulu!" ) else: for bubble in all_bubble: message.append(bubble) message += fungsi_formula(phone_number, incoming_msg) return message
def riwayat_tagihan(incoming_msg, phone_number, bot_responses): semua = requests.post(app.config['URL'] + "/billing/list", headers={ "Authorization": "Bearer " + save_redis.get("%s::token" % (phone_number)) }) semua = semua.json() list_semua = semua['data'] all_bubble = [] message = [] pesan = [] if "riwayat" == save_redis.get("%s::menu" % (phone_number)): send_message = [] send_message.append(bot_responses) send_message.append("") send_message.append('1. *semua* - untuk melihat semua riwayat tagihan') send_message.append( '2. *unpaid* - untuk melihat riwayat tagihan yang belum terbayarkan' ) send_message.append( '3. *paid* - untuk melihat riwayat tagihan yang sudah terbayarkan') send_message.append( '4. *generate link* - untuk membuat link tagihan dari tagihan yang sudah pernah dibuat' ) message.append(("\n").join(send_message)) save_redis.set("%s::menu" % (phone_number), json.dumps({"riwayat": "masuk"})) save_redis.delete("%s::submenu" % (phone_number), "") else: if len(list_semua) > 0: jumlah = 0 index = 0 status = "" send_message = [ 'Berikut ini adalah 10 Daftar Riwayat Tagihan terbaru Anda:\n' ] while jumlah < 10 and index < len(list_semua): if "1" == incoming_msg or "semua" == incoming_msg.lower(): jumlah += 1 elif "2" == incoming_msg or "unpaid" == incoming_msg.lower(): status = "unpaid" if list_semua[index]['billing_status'] == 1: jumlah += 1 else: index += 1 continue if "3" == incoming_msg or "paid" == incoming_msg.lower(): status = "paid" if list_semua[index]['billing_status'] == 2 or list_semua[ index]['billing_status'] == 3: jumlah += 1 else: index += 1 continue tiap_data = [] tiap_data.append("%s. ID Tagihan: %s" % (index + 1, list_semua[index]['billing_id'])) tiap_data.append(" Produk: %s" % (list_semua[index]['product_name'])) tiap_data.append(" Unit: %s" % (list_semua[index]['unit_name'])) tiap_data.append(" Nama Pelanggan: %s" % (list_semua[index]['customer_name'])) tiap_data.append( " Tagihan Sebelumnya: %s" % (formatrupiah(list_semua[index]['previous_balance']))) tiap_data.append( " Tagihan Saat Ini: %s" % (formatrupiah(list_semua[index]['current_balance']))) tiap_data.append(" Jumlah Tagihan: %s" % (formatrupiah(list_semua[index]['total']))) tiap_data.append(" Denda: %s" % (formatrupiah(list_semua[index]['charge']))) tiap_data.append( " Periode: %s" % (convertDate(list_semua[index]['billing_periode']))) tiap_data.append( " Mulai Tagihan: %s" % (convertDate(list_semua[index]['billing_start_date']))) tiap_data.append( " Jatuh Tempo: %s" % (convertDate(list_semua[index]['billing_end_date']))) if list_semua[index]['billing_status'] == 0: status = "Unsent" elif list_semua[index]['billing_status'] == 1: status = "Unpaid" elif list_semua[index]['billing_status'] == 2: status = "Paid - Manually" elif list_semua[index]['billing_status'] == 3: status = "Paid - AturTagihan" elif list_semua[index]['billing_status'] == 4: status = "Settlement - AturTagihan" elif list_semua[index]['billing_status'] == 5: status = "Expired" tiap_data.append(" Status: %s\n" % (status)) tiap_data = ('\n').join(tiap_data) if len(send_message[0]) + len(tiap_data) >= 1600: all_bubble.append(send_message) send_message = [''] send_message.append(tiap_data) send_message = ('\n').join(send_message) send_message = [send_message] index += 1 all_bubble.append(send_message) for bubble in all_bubble: message.append(bubble) send_message = [] if jumlah == 0: message = [ 'Tidak ada riwayat tagihan dengan status *%s*' % (status) ] else: pesan_msg = [] pesan_msg.append( 'Kalau mau lihat Riwayat Tagihan yang lebih detail, Anda bisa klik link di bawah ini:' ) pesan_msg.append( "https://dashboard.aturtagihan.com/riwayat-tagihan") message.append(("\n").join(pesan_msg)) else: send_message = ['Anda belum memiliki riwayat tagihan'] save_redis.set("%s::menu" % (phone_number), "riwayat") message.append(("\n").join(send_message)) pesan.append( "Ketik *Riwayat Tagihan* untuk kembali ke halaman Riwayat Tagihan") pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan") pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda") message.append(("\n").join(pesan)) return message