def hapus_unit(id, phone_number):
    message = []
    respon_unit = requests.post(app.config['URL'] + "/unit/all",
                                headers={
                                    "Authorization":
                                    "Bearer " + save_redis.get("%s::token" %
                                                               (phone_number))
                                })
    respon_unit = respon_unit.json()
    no_unit = re.findall("hapus.+", id.lower())
    no_unit = regex_num(no_unit[0])
    if int(no_unit) <= len(respon_unit['data']['records']):
        id_unit = respon_unit['data']['records'][int(no_unit) - 1]['id']
        hapus = requests.delete(app.config['URL'] + "/unit/" + str(id_unit),
                                headers={
                                    "Authorization":
                                    "Bearer " + save_redis.get("%s::token" %
                                                               (phone_number))
                                })
        if hapus.status_code == 200:
            message.append("Unit berhasil dihapus!")
        else:
            message.append("Unit gagal dihapus! ")
    else:
        message.append("Nomor Unit yang Anda masukkan salah")
        message.append("Silakan ulangi kembali")

    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.delete("%s::unit" % (phone_number), "")
    save_redis.set("%s::menu" % (phone_number), "unit")
    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 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
Exemple #4
0
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_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_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 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 hapus_jenis_tagihan(id, phone_number):
    message = []
    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()
    no_jenis_tagihan = re.findall("hapus.+", id.lower())
    no_jenis_tagihan = regex_num(no_jenis_tagihan[0])
    if int(no_jenis_tagihan) <= len(respon_jenis_tagihan['data']['records']):
        id_jenis_tagihan = respon_jenis_tagihan['data']['records'][
            int(no_jenis_tagihan) - 1]['id']
        hapus = requests.delete(
            app.config['URL'] + "/billing_type/" + str(id_jenis_tagihan),
            headers={
                "Authorization":
                "Bearer " + save_redis.get("%s::token" % (phone_number))
            })
        if hapus.status_code == 200:
            message.append("Jenis Tagihan berhasil dihapus!")
        else:
            message.append("Jenis Tagihan gagal dihapus! ")

    else:
        message.append("Nomor Jenis Tagihan yang Anda masukkan salah")
        message.append("Silakan ulangi kembali")

    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))

    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 hapus_formula(id_formula, phone_number):
    hapus = requests.delete(app.config['URL'] + "/formula/" + str(id_formula),
                            headers={
                                "Authorization":
                                "Bearer " + save_redis.get("%s::token" %
                                                           (phone_number))
                            })
    if hapus.status_code == 200:
        message = ["Formula berhasil dihapus!"]
    else:
        message = ["Formula gagal dihapus!"]

    message.append("")
    message.append("Ketik *Formula* untuk kembali ke halaman Formula")
    message.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan")
    message.append("Ketik *Beranda* untuk kembali ke halaman Beranda")

    return [("\n").join(message)]
def hapus_harga(id_harga, phone_number):
    hapus = requests.delete(app.config['URL'] + "/price/" + str(id_harga),
                            headers={
                                "Authorization":
                                "Bearer " + save_redis.get("%s::token" %
                                                           (phone_number))
                            })
    if hapus.status_code == 200:
        message = ['Harga berhasil dihapus']
    else:
        message = ['Harga gagal dihapus']
        message.append(hapus.json()["message"]["body"])

    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))
    return message
Exemple #12
0
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 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
Exemple #15
0
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
Exemple #16
0
def jenis_unit(incoming_msg, phone_number, bot_responses):
    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']
    message = []
    if "jenis_unit" in save_redis.get("%s::menu" %(phone_number)):
        if "tambah" in incoming_msg.lower():
            message = tambah_jenis_unit(incoming_msg, phone_number)
        elif "ubah" in incoming_msg.lower():
            incoming_msg = incoming_msg.lower()
            no_jenis_unit = re.findall("ubah.+", incoming_msg.lower())
            no_jenis_unit = regex_num(no_jenis_unit[0])
            if int(no_jenis_unit) > len(respon_jenis_unit['data']['records']):
                message.append("Nomor Jenis Unit yang Anda masukkan tidak tersedia!")
                message.append("")
                message.append("Silahkan ketik *Jenis Unit* untuk kembali ke halaman sebelumnya")
            else:
                id_jenis_produk = respon_jenis_unit['data']['records'][int(no_jenis_unit)-1]['id']
                message = ubah_jenis_unit(incoming_msg, phone_number, id_jenis_produk)
        elif "hapus" in incoming_msg.lower():
            message = hapus_jenis_unit(incoming_msg, phone_number)
        elif save_redis.get("%s::menu" %(phone_number)) == "jenis_unit":
            if respon_jenis_unit["data"]["count"] != 0:
                message_bubble = [bot_responses]
                all_bubble = []
                for index, item in enumerate(list_jenis_unit):
                    tiap_data = []
                    tiap_data.append("%s. Nama: %s" % (index+1, item['name']))
                    tiap_data.append("    Produk: %s" % (item['product_name']))
                    tiap_data.append("    Deskripsi: %s \n" %
                                     (item['description']))
                    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 jenis unit!")

            pesan = []
            pesan.append("Silahkan ketik menu berikut ini")
            pesan.append("- Ketik *tambah* untuk menambahkan Jenis Unit")
            pesan.append("- Ketik *ubah* <spasi> *no_jenis_unit* untuk mengubah Jenis Unit")
            pesan.append("- Ketik *hapus* <spasi> *no_jenis_unit* untuk menghapus Jenis Unit")
            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["jenis_unit"]:
                message = tambah_jenis_unit(incoming_msg, phone_number)
            elif 'ubah' in read["jenis_unit"]:
                message = ubah_jenis_unit(incoming_msg, phone_number, id=None)

    return message
Exemple #17
0
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 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 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
Exemple #21
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 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 harga(incoming_msg, phone_number, bot_responses):
    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']
    message = []

    if "harga" in save_redis.get("%s::menu" % (phone_number)):
        # ketika user BELUM mengetikkan "tambah"/"ubah"/"hapus"
        if "tambah" in incoming_msg.lower():
            message = tambah_harga(incoming_msg, phone_number)
        elif "ubah" in incoming_msg.lower():
            no_harga = re.findall("\d+", incoming_msg)
            no_harga = int(no_harga[0])
            # ketika nomor yang dimasukkan user ADA dalam daftar
            if no_harga <= len(list_harga):
                id_harga = list_harga[no_harga - 1]['id']
                message = ubah_harga(incoming_msg, phone_number, id_harga)
            # nomor yang dimasukkan TIDAK ADA
            else:
                message.append(
                    "Nomor yang Anda masukkan tidak ada dalam daftar")
                message.append("Silakan masukkan lagi")

        elif "hapus" in incoming_msg.lower():
            no_harga = re.findall("\d+", incoming_msg)
            no_harga = int(no_harga[0])
            # ketika nomor yang dimasukkan user ADA dalam daftar
            if no_harga <= len(list_harga):
                id_harga = list_harga[no_harga - 1]['id']
                message = hapus_harga(id_harga, phone_number)
            # nomor yang dimasukkan TIDAK ADA
            else:
                message.append(
                    "Nomor yang Anda masukkan tidak ada dalam daftar")
                message.append("Silakan masukkan lagi")

        # ketika user SUDAH mengetikkan "tambah"/"ubah"/"hapus"
        elif save_redis.get("%s::menu" % (phone_number)) == "harga":
            if respon_harga["data"]["count"] != 0:
                message_bubble = [bot_responses]
                all_bubble = []
                for index, harga in enumerate(list_harga):
                    tiap_data = []
                    tiap_data.append("%s. Produk: %s" %
                                     (index + 1, harga['product_name']))
                    tiap_data.append("    Jenis Unit: %s" %
                                     (harga['unit_type_name']))
                    tiap_data.append("    Kategori Tagihan: %s" %
                                     (harga['billing_category']))
                    tiap_data.append("    Harga: %s" %
                                     (formatrupiah(harga['base_price'])))
                    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 Harga. Isi dulu yuk!")

            # INI NANTI FUNCTION SENDIRI YA!
            bubble = ["Apa yang ingin Anda lakukan?"]
            bubble.append("- Ketik *tambah* untuk menambahkan harga")
            bubble.append(
                "- Ketik *ubah* <spasi> *no_harga* untuk mengubah harga")
            bubble.append(
                "- Ketik *hapus* <spasi> *no_harga* untuk menghapus harga")
            message.append(("\n").join(bubble))

            bubble = ["Ketik *Pengaturan* untuk kembali ke menu Pengaturan"]
            bubble.append("Ketik *Beranda* untuk kembali ke menu Beranda")
            message.append(("\n").join(bubble))

            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))
        else:
            if 'tambah' in json.loads(
                    save_redis.get("%s::menu" % (phone_number)))['harga']:
                message = tambah_harga(incoming_msg, phone_number)
            elif 'ubah' in json.loads(
                    save_redis.get("%s::menu" % (phone_number)))['harga']:
                message = ubah_harga(incoming_msg, 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_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 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 formula(incoming_msg, phone_number, bot_responses):
    respon_formula = requests.post(
        app.config['URL'] + "/formula/all",
        headers={
            "Authorization":
            "Bearer " + save_redis.get("%s::token" % (phone_number))
        })
    respon_formula = respon_formula.json()
    list_formula = respon_formula["data"]['records']
    message = []
    if "formula" in save_redis.get("%s::menu" % (phone_number)):
        # ketika user BELUM mengetikkan "tambah"/"ubah"/"hapus"
        if "tambah" in incoming_msg.lower():
            message = tambah_formula(incoming_msg, phone_number)
        elif "ubah" in incoming_msg.lower():
            no_formula = re.findall("\d+", incoming_msg)
            no_formula = int(no_formula[0])
            # ketika nomor yang dimasukkan user ADA dalam list
            if no_formula <= len(list_formula):
                id_jenis_formula = list_formula[no_formula - 1]['id']
                message = ubah_formula(incoming_msg, phone_number,
                                       id_jenis_formula)

            # ketika nomor yang dimasukkan TIDAK ADA
            else:
                message.append(
                    "Nomor yang Anda masukkan tidak ada dalam daftar")
                message.append("Silakan masukkan lagi")

        elif "hapus" in incoming_msg.lower():
            no_formula = re.findall("\d+", incoming_msg)
            no_formula = int(no_formula[0])
            # ketika nomor yang dimasukkan user ADA dalam list
            if no_formula <= len(list_formula):
                id_jenis_produk = list_formula[no_formula]['id']
                message = hapus_formula(id_jenis_produk, phone_number)
            # ketika nomor yang dimasukkan TIDAK ADA
            else:
                message.append(
                    "Nomor yang Anda masukkan tidak ada dalam daftar")
                message.append("Silakan masukkan lagi")

        # ketika user SUDAH mengetikkan "tambah"/"ubah"/"hapus"
        elif save_redis.get("%s::menu" % (phone_number)) == "formula":
            if respon_formula["data"]["count"] != 0:
                all_bubble = []
                message_bubble = [bot_responses]
                for index, formula in enumerate(list_formula):
                    tiap_data = []
                    tiap_data.append("%s. Produk: %s" %
                                     (index + 1, formula['product_name']))
                    tiap_data.append("    Jenis Unit: %s" %
                                     (formula['unit_type_name']))
                    tiap_data.append("    Jenis Tagihan: %s" %
                                     (formula['billing_type_name']))
                    tiap_data.append("    Kategori Tagihan: %s" %
                                     (formula['billing_category']))
                    tiap_data.append("    Jenis Perhitungan: %s" %
                                     (formula['charge_type']))
                    tiap_data.append("    Formula: %s" %
                                     (formula['formulation']))
                    tiap_data.append("    Harga Dasar: %s" %
                                     (formatrupiah(formula['base_price'])))
                    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 Formula!")

            bubble = ["Apa yang bisa Hedwig bantu?"]
            bubble.append("Ketik *tambah* untuk menambahkan Formula")
            bubble.append(
                "Ketik *ubah* <spasi> *no_formula* untuk mengubah Formula")
            bubble.append(
                "Ketik *hapus* <spasi> *no_formula* untuk menghapus Formula")
            message.append(("\n").join(bubble))
            bubble = ["Ketik *pengaturan* untuk kembali ke menu Pengaturan"]
            bubble.append("Ketik *beranda* untuk kembali ke menu Beranda")
            message.append(("\n").join(bubble))
        else:
            if 'tambah' in json.loads(
                    save_redis.get("%s::menu" % (phone_number)))['formula']:
                message = tambah_formula(incoming_msg, phone_number)
            elif 'ubah' in json.loads(
                    save_redis.get("%s::menu" % (phone_number)))['formula']:
                message = ubah_formula(incoming_msg, 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 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