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 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 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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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 riwayat_tagihan(incoming_msg, phone_number, bot_responses):
    semua = requests.post(app.config['URL'] + "/billing/list",
                          headers={
                              "Authorization":
                              "Bearer " + save_redis.get("%s::token" %
                                                         (phone_number))
                          })
    semua = semua.json()
    list_semua = semua['data']

    all_bubble = []
    message = []
    pesan = []

    if "riwayat" == save_redis.get("%s::menu" % (phone_number)):
        send_message = []
        send_message.append(bot_responses)
        send_message.append("")
        send_message.append('1. *semua* - untuk melihat semua riwayat tagihan')
        send_message.append(
            '2. *unpaid* - untuk melihat riwayat tagihan yang belum terbayarkan'
        )
        send_message.append(
            '3. *paid* - untuk melihat riwayat tagihan yang sudah terbayarkan')
        send_message.append(
            '4. *generate link* - untuk membuat link tagihan dari tagihan yang sudah pernah dibuat'
        )
        message.append(("\n").join(send_message))
        save_redis.set("%s::menu" % (phone_number),
                       json.dumps({"riwayat": "masuk"}))
        save_redis.delete("%s::submenu" % (phone_number), "")

    else:
        if len(list_semua) > 0:
            jumlah = 0
            index = 0
            status = ""
            send_message = [
                'Berikut ini adalah 10 Daftar Riwayat Tagihan terbaru Anda:\n'
            ]
            while jumlah < 10 and index < len(list_semua):
                if "1" == incoming_msg or "semua" == incoming_msg.lower():
                    jumlah += 1
                elif "2" == incoming_msg or "unpaid" == incoming_msg.lower():
                    status = "unpaid"
                    if list_semua[index]['billing_status'] == 1:
                        jumlah += 1
                    else:
                        index += 1
                        continue
                if "3" == incoming_msg or "paid" == incoming_msg.lower():
                    status = "paid"
                    if list_semua[index]['billing_status'] == 2 or list_semua[
                            index]['billing_status'] == 3:
                        jumlah += 1
                    else:
                        index += 1
                        continue

                tiap_data = []
                tiap_data.append("%s. ID Tagihan: %s" %
                                 (index + 1, list_semua[index]['billing_id']))
                tiap_data.append("    Produk: %s" %
                                 (list_semua[index]['product_name']))
                tiap_data.append("    Unit: %s" %
                                 (list_semua[index]['unit_name']))
                tiap_data.append("    Nama Pelanggan: %s" %
                                 (list_semua[index]['customer_name']))
                tiap_data.append(
                    "    Tagihan Sebelumnya: %s" %
                    (formatrupiah(list_semua[index]['previous_balance'])))
                tiap_data.append(
                    "    Tagihan Saat Ini: %s" %
                    (formatrupiah(list_semua[index]['current_balance'])))
                tiap_data.append("    Jumlah Tagihan: %s" %
                                 (formatrupiah(list_semua[index]['total'])))
                tiap_data.append("    Denda: %s" %
                                 (formatrupiah(list_semua[index]['charge'])))
                tiap_data.append(
                    "    Periode: %s" %
                    (convertDate(list_semua[index]['billing_periode'])))
                tiap_data.append(
                    "    Mulai Tagihan: %s" %
                    (convertDate(list_semua[index]['billing_start_date'])))
                tiap_data.append(
                    "    Jatuh Tempo: %s" %
                    (convertDate(list_semua[index]['billing_end_date'])))
                if list_semua[index]['billing_status'] == 0:
                    status = "Unsent"
                elif list_semua[index]['billing_status'] == 1:
                    status = "Unpaid"
                elif list_semua[index]['billing_status'] == 2:
                    status = "Paid - Manually"
                elif list_semua[index]['billing_status'] == 3:
                    status = "Paid - AturTagihan"
                elif list_semua[index]['billing_status'] == 4:
                    status = "Settlement - AturTagihan"
                elif list_semua[index]['billing_status'] == 5:
                    status = "Expired"
                tiap_data.append("    Status: %s\n" % (status))
                tiap_data = ('\n').join(tiap_data)

                if len(send_message[0]) + len(tiap_data) >= 1600:
                    all_bubble.append(send_message)
                    send_message = ['']
                send_message.append(tiap_data)
                send_message = ('\n').join(send_message)
                send_message = [send_message]

                index += 1
            all_bubble.append(send_message)

            for bubble in all_bubble:
                message.append(bubble)
            send_message = []
            if jumlah == 0:
                message = [
                    'Tidak ada riwayat tagihan dengan status *%s*' % (status)
                ]
            else:
                pesan_msg = []
                pesan_msg.append(
                    'Kalau mau lihat Riwayat Tagihan yang lebih detail, Anda bisa klik link di bawah ini:'
                )
                pesan_msg.append(
                    "https://dashboard.aturtagihan.com/riwayat-tagihan")
                message.append(("\n").join(pesan_msg))

        else:
            send_message = ['Anda belum memiliki riwayat tagihan']
        save_redis.set("%s::menu" % (phone_number), "riwayat")

        message.append(("\n").join(send_message))

        pesan.append(
            "Ketik *Riwayat Tagihan* untuk kembali ke halaman Riwayat Tagihan")

    pesan.append("Ketik *Pengaturan* untuk kembali ke halaman Pengaturan")
    pesan.append("Ketik *Beranda* untuk kembali ke halaman Beranda")
    message.append(("\n").join(pesan))

    return message