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

目標

領収書を出力した伝票の領収書印刷ボタンに「領収書印刷済み」と表示させる
伝票一覧で各テーブルが入店からどのくらい時間が経過しているか表示させる

領収書出力機能

領収書出力機能のための準備

ここでは、お会計後にお客様に領収書をお渡しした伝票が確認できるように伝票一覧と伝票詳細に領収書発行済みと表示される機能を追加します。ここでは、前回同様feature-receiptブランチを利用してい作業を行います。

apps/ordersapp/models.pyファイルの編集

apps/ordersapp/models.pyファイルのBillモデルに領収書の発行有無を確認できるようにinvoice_flagを追加します。

invoice_flag = db.Column(db.Boolean, default=False)

apps/ordersapp/models.pyファイルのBillモデルの全体

# 伝票(Bill)モデル
class Bill(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    status = db.Column(
        db.String(20), default="Order in progress"
    )  # 伝票のステータス(Order in progress, pending, paid)
    table_id = db.Column(
        db.Integer, db.ForeignKey("table.id"), nullable=False
    )  # テーブルとの関連
    orders = db.relationship("Order", backref="bill", lazy=True, cascade="all, delete")

    table = db.relationship("Table", back_populates="bill")  # 1つのテーブルに1つの伝票
    created_at = db.Column(db.DateTime, default=func.now(), server_default=func.now())

    cash_amount = db.Column(db.Integer, default=0)  # 現金支払額
    cashless_amount = db.Column(db.Integer, default=0)  # キャッシュレス支払額

    invoice_flag = db.Column(db.Boolean, default=False)

    @property
    def total_amount(self):
        return sum(order.total for order in self.orders)  # 関連する注文の合計

    def __repr__(self):
        return f"<Bill {self.id} - Status: {self.status}>"

    def get_created_at_jst(self):
        """JST に変換し、さらに9時間を加算して取得"""
        if self.created_at is None:
            return None
        return (self.created_at + timedelta(hours=9)).strftime("%Y-%m-%d %H:%M")

apps/registerapp/app.py

apps/companyapp/app.pyのルート:register_listの「subtotal_price」を次のように修正します。

        # 各 bill の割引金額、税抜き金額、税込み金額を計算
        bill.subtotal_price = sum(
            (order.total * (100 - (order.discount_number or 0)) / 100)
            for order in orders
        )

apps/companyapp/app.pyの末尾に次の内容を追記します。

@register_bp.route("/receipt/invoice/printout/<int:bill_id>", methods=["GET", "POST"])
@login_required
def print_out_invoice(bill_id):
    bill = Bill.query.get_or_404(bill_id)

    # 領収書発行フラグをTrueにする
    bill.invoice_flag = True
    db.session.commit()

    flash("領収書を発行しました。", "success")
    return redirect(url_for("register.view_bill", bill_id=bill_id))

apps/companyapp/app.pyの全体

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

今回は以上になります。

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

ブックマークのすすめ

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

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