1

請求書と支払いを追跡するシステムを設計する方法に少し苦労しています。現在、機能している 2 つのオブジェクト (BillPayment) がありますが、それらの間のアカウンティングを追跡する方法がわかりません。

基本的には、支払い済みの特定の請求書と、すべての会計処理後の合計残高を知る必要があるだけです。私はこれを2つの方法で行うことができると考えています:

1) 特定の請求書を特定の支払いにマッピングして、各トランザクションを追跡する別の会計テーブルを作成します。これにより、特定の請求書に残っている金額をデータベースで簡単に調べることができます。欠点は、新しいオブジェクトが作成されるたびにこのテーブルに新しいレコードを作成する必要があるため、複雑さが増しているように見えることです。

2)トランザクション履歴全体を調べて会計を行うことにより、特定の請求書に残っている金額をオンザフライで計算するロジックを書くだけにしてください。プラス面として、これは常に正しいことが保証されていますが、静的な値になるはずの値を取得するために同じ計算を何度も繰り返し行うのは、ちょっと間違っているようです。

過去にこのような課題に直面した人はいますか?もしそうなら、どのように解決しましたか? 私が見逃しているベストプラクティスはありますか?

4

3 に答える 3

1

1 つのテーブル: トランザクション。請求書には正の値があり、支払いには負の値があります。必要に応じて transaction_type (Invoice、Payment、Credit、Refund) の列を指定できます。また、その列で Rails STI を使用することもできます。その他の便利な列 - number、payment_type (credit/cash/check/eft)、日付。

残りの残高は、単にすべての値の合計です。残高がマイナスの場合は、クレジットが必要です。

支払いを特定の請求書に適用する必要がある場合 (正確な計算方法かどうかは完全にはわかりません)、支払いを請求書にマップする 2 番目のテーブル (paid_bills) を金額とともに作成できます。おそらく、すべてのpaid_bills.payment_idの合計は、支払い自体を超えることはできません.

ユーザー向けに物を表示するときは、いつでも記号を反転できます - 支払いを正の数として表示し、支払いフォームが正の数を送信したときにそれを負に戻します。

これは、最良の会計慣行を維持しながらこれを行うために、私が長年にわたって見つけた最良の方法です.

于 2013-05-17T23:47:56.367 に答える
0

データベースを使用できる場合は、請求書用のテーブルのみを作成し、ブール型の「支払い済み」のフィールドを追加します。請求書が支払われたかどうかを知りたい場合は、このフィールドをチェックしてください。全体的な残高を知りたい場合は、支払済みの請求書の金額を加算し、未払いの請求書を差し引いてください。

そうでない場合は、それらのクラスのいずれかに静的変数を使用して、グローバルなバランスを保つことができます。また、Bills の有料または非有料のフィールド、または Paid オブジェクトへのポインター (null に初期化され、これが作成されると Paid オブジェクトを指す)

于 2013-05-17T17:26:18.520 に答える