python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

  • Flask-SocketIOを利用して新規の伝票が作成されたときに連動して伝票一覧の表示をリアルタイムで更新する機能を追加する
  • Flask-SocketIOを利用して注文が行われた時、伝票一覧の表示をリアルタイムで更新する機能を追加する
  • Flask-SocketIOを利用して「会計予定に変更」「注文可能に戻す」ボタンの押下に連動して伝票一覧の表示をリアルタイムで変更する機能を追加する
  • 注文確認テーブルと伝票一覧の反映をリアルタイムで行う機能を追加する(Flask-SocketIO未使用)

管理者用注文管理アプリケーションの修正

feature-socketioブランチ

ここでは、引き続き、注文管理アプリケーションでFlask-SocketIOを利用する機能追加を行うので、継続して「feature-socketioブランチ」を利用します。

管理者用注文管理アプリケーションの修正プログラミング(5)

Flask-SocketIOを利用して新規の伝票が作成されたときに連動して伝票一覧の表示をリアルタイムで更新する機能

app.pyの編集(ordersapp内)

app.pyファイルに次の修正を加えます。

修正内容1(order_menu)

@orders_bp.route("/order/table/<int:table_id>", methods=["GET"])
def order_menu(table_id):
    table = Table.query.get_or_404(table_id)

    # table.billがリストである場合、その中で最新のBillを取得
    bill = table.bill[-1] if table.bill else None

    # Billが存在しない場合、新規作成
    if bill is None or bill.status == "paid":
        # 新しいBillを作成
        bill = Bill(status="Order in progress", table_id=table.id)
        db.session.add(bill)
        table.bill.append(bill)  # table.billリストに新しいBillを追加
        db.session.commit()

#ここを追加################################
        socketio.emit(
            "bill_update",
            {
                "message": "新しい伝票が作成されました",
            },
            room="register_room",  # 追加:register_list.html 側の端末が入っているルーム
        )
#ここまで#################################

    categories = Category.query.all()
    products = Product.query.all()
    cart = get_cart(table_id)

    # 現在のテーブルの注文履歴を取得
    orders = Order.query.filter_by(table_id=table.id, bill_id=bill.id).all()

    # Billの状態をデバッグ
    print(f"Bill: {bill}")  # ここでbillを参照

    # 消費税額を全て取得
    vat_list = Vat.query.all()
    priority_vat = [vat for vat in vat_list if vat.priority]

    # 指定された bill_id に関連する注文を取得
    orders = Order.query.filter_by(bill_id=bill.id).all()

    # 優先の消費税がある場合に適用
    if priority_vat:
        default_vat = priority_vat[0]  # 優先 VAT を取得
        updated = False  # 変更があったかをチェック

        for order in orders:
            if order.vat_id is None:  # VAT が設定されていない場合
                order.vat_id = default_vat.id
                order.vat_number = default_vat.number
                updated = True

        if updated:
            db.session.commit()  # 必要な場合のみコミット

    # 合計金額の計算(各注文ごとの消費税率を適用)
    total_amount = sum(
        order.total + (order.total / 100 * (order.vat_number or 0))  # VATがない場合は0%
        for order in orders
    )

    # Billが正しく作成されているかをデバッグ
    if bill:
        print(f"Created Bill ID: {bill.id}, Status: {bill.status}")
    else:
        print("Bill is not found for the table")

    return render_template(
        "order_menu.html",
        products=products,
        cart=cart,
        table=table,
        categories=categories,
        total_amount=total_amount,
        orders=orders,  # 注文履歴を渡す
        title="メニュー一覧",
    )

この続きはNoteとなります。

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...