发票折扣:负线项与内部属性
-
01-10-2019 - |
题
发票物品和整个发票的折扣应为 负线项目 或者 单独的属性 发票?
在一个类似的问题中 我是否应该将费用/折扣清单纳入订单类别,还是将其成为项目线, ,Asker更多地关注 订单 比发票(这是一个略有不同的业务实体)。提议折扣为 分离 从订单项目开始,因为它不等于费用或产品,并且可能具有不同的报告要求。因此,折扣不应简单地是负线项。
以前,我已经成功使用了否定订单项来清楚地指出和计算折扣,但是从业务角度来看,这感觉不灵活和不准确。现在,我选择为每个订单项增加折扣,以及范围内的折扣。
- 这是正确的方法吗?
- 每个项目都应该拥有自己的折扣金额和百分比吗?
域模型代码样本
这是我的域模型,它映射到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;
}
}
}
解决方案
负线项目
您将如何处理学分?即,您发票的人有三个项目,但有两个是错误的,因此您会扭转这两个错误项目的费用。有几种方法可以完成。一种解决方案是一种信用,它是发票的变体,除非将金额记入发票的人。如果您不允许负数,那么您将需要找到一种单独存储积分或将发票标记为信用的方法。在以后的情况下,他们将发行另一张发票,被标记为荣誉。当然,另一个解决方案是允许存储负线项。如何处理信用实际上是决定使用负线项是否是正确的方法。
费用和折扣
一种方法是将折扣和费用分为两种类型:
- 适用于特定订单项目的折扣
- 列举为项目但不适用于特定订单项目的折扣。
请注意,我不包括适用于订单的折扣。那是故意的。每个折扣或费用都必须列举为项目(但不一定适用于产品)。这样,每个折扣和费用都在其来源中明确。这样可以防止某人投入订单折扣,没有人能确定来源或授权。除税收以外的费用也是如此。
不隶属于 StackOverflow