发票物品和整个发票的折扣应为 负线项目 或者 单独的属性 发票?

在一个类似的问题中 我是否应该将费用/折扣清单纳入订单类别,还是将其成为项目线, ,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;
        }
    }
}
有帮助吗?

解决方案

负线项目

您将如何处理学分?即,您发票的人有三个项目,但有两个是错误的,因此您会扭转这两个错误项目的费用。有几种方法可以完成。一种解决方案是一种信用,它是发票的变体,除非将金额记入发票的人。如果您不允许负数,那么您将需要找到一种单独存储积分或将发票标记为信用的方法。在以后的情况下,他们将发行另一张发票,被标记为荣誉。当然,另一个解决方案是允许存储负线项。如何处理信用实际上是决定使用负线项是否是正确的方法。

费用和折扣

一种方法是将折扣和费用分为两种类型:

  1. 适用于特定订单项目的折扣
  2. 列举为项目但不适用于特定订单项目的折扣。

请注意,我不包括适用于订单的折扣。那是故意的。每个折扣或费用都必须列举为项目(但不一定适用于产品)。这样,每个折扣和费用都在其来源中明确。这样可以防止某人投入订单折扣,没有人能确定来源或授权。除税收以外的费用也是如此。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top