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

目標

返金処理機能を実装する

返金処理機能

返金処理機能

ここでは、前回に引き続き、お会計後に、ご返金対応が必要な場合に備えて返金処理機能を実装します。返金処理は各商品ごとに個数を指定して処理できるように実装します。ここでは、前回と同様に、feature-receiptブランチで作業を行います。

apps/ordersapp/models.py

apps/ordersapp/models.pyにRefundBillモデルをを追加し、BillモデルとOrderモデルとのリレーションを定義します。

RefundBillモデル

# 返金伝票(RefundBill)モデル
class RefundBill(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    original_bill_id = db.Column(
        db.Integer, db.ForeignKey("bill.id"), nullable=False
    )  # 元の伝票ID
    table_id = db.Column(db.Integer, nullable=False)
    order_id = db.Column(db.Integer, nullable=False) 
    product_name = db.Column(db.String(100), nullable=False)
    quantity = db.Column(db.Integer, nullable=False)
    vat_number = db.Column(db.Integer, default=0)
    discount_number = db.Column(db.Integer, default=0)
    refund_amount = db.Column(db.Integer, nullable=False)  # 返金金額
    created_at = db.Column(
        db.DateTime, default=func.now(), server_default=func.now()
    )  # 作成日時

    # RefundBillモデルのordersリレーションを明示的に修正
    orders = db.relationship("Order", back_populates="refund_bill", lazy=True)

    # 元の伝票とのリレーション
    original_bill = db.relationship("Bill", back_populates="refunds")

    @property
    def total(self):
        return self.quantity * self.refund_amount

    def __repr__(self):
        return f"<RefundBill {self.id} - Original Bill {self.original_bill_id}>"

    def calculate_refund_amount(self):
        """返金対象の注文の合計金額を計算"""
        total_refund = sum(order.total for order in self.orders)
        self.refund_amount = total_refund
        return self.refund_amount

    def get_created_at_jst(self):
        """JST に変換し取得"""
        if self.created_at is None:
            return None
        return (self.created_at + timedelta(hours=9)).strftime("%Y-%m-%d %H:%M")

Billモデル

Billモデルに次の内容を追記します。

    # 単品ごとの返金フラグ(返金されているかどうか)
    refunds = db.relationship("RefundBill", back_populates="original_bill", lazy=True)

Orderモデル

Orderモデルに次の内容を追記します。

    # 返金伝票との関連(外部キー追加)
    refund_bill_id = db.Column(
        db.Integer, db.ForeignKey("refund_bill.id"), nullable=True
    )

    refund_bill = db.relationship(
        "RefundBill", back_populates="orders"
    )  # RefundBill とのリレーション

apps/ordersapp/models.pyの全体

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

今回は以上になります。

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

apps/ordersapp/models.pyの全体

こちらは現在、非公開です。

ブックマークのすすめ

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

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