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
Esempio n. 2
0
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_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 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
Esempio n. 5
0
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 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