請求書項目および請求書全体の割引は、負の項目または請求書の個別のプロパティにする必要がありますか?
同様の質問で、料金/割引のリストを注文クラスに組み込むか、アイテムラインにする必要があります。質問者は請求書よりも注文に重点を置いています(これはビジネス エンティティとは少し異なります)。割引は料金または製品と同等ではなく、異なるレポート要件がある可能性があるため、注文アイテムとは別にすることが提案されています。したがって、割引は単にマイナスの項目であってはなりません。
以前は、マイナス項目を使用して割引を明確に示して計算することに成功していましたが、これは柔軟性に欠け、ビジネスの観点からは不正確だと感じています。ここで、請求書全体の割引とともに、各項目に割引を追加することにしました。
- これは正しい方法ですか?
- 各商品に独自の割引額とパーセンテージを設定する必要がありますか?
ドメイン モデルのコード サンプル
これは、SQL リポジトリにマップされる私のドメイン モデルの外観です。
public class Invoice
{
public int ID { get; set; }
public Guid JobID { get; set; }
public string InvoiceNumber { get; set; }
public Guid UserId { get; set; } // user who created it
public DateTime Date { get; set; }
public LazyList<InvoiceLine> InvoiceLines { get; set; }
public LazyList<Payment> Payments { get; set; } // for payments received
public boolean IsVoided { get; set; } // Invoices are immutable.
// To change: void -> new invoice.
public decimal Total
{
get {
return InvoiceLines.Sum(i => i.LineTotal);
}
}
}
public class InvoiceLine
{
public int ID { get; set; }
public int InvoiceID { get; set; }
public string Title { get; set; }
public decimal Quantity { get; set; }
public decimal LineItemPrice { get; set; }
public decimal DiscountPercent { get; set; } // line discount %?
public decimal DiscountAmount { get; set; } // line discount amount?
public decimal LineTotal {
get {
return (1.0M - DiscountPercent)
* (this.Quantity * (this.LineItemPrice))
- DiscountAmount;
}
}
}