首页 > 解决方案 > 根据用户日期生成 + 分组新发票行

问题描述

我的情况如下:

用户被分配到一个或多个发票项目组(具有详细信息:用户名)。

一个项目组(= InvoiceLine)具有:

itemgroupDetail (=InvoiceLineDetail) 有:

然而,我的数量是基于用户的数量。

例子:

用户 A,于 2018 年 11 月加入,在列表“G1 组”中。

2018 年 11 月加入的用户 A 在列表“G2 组”中。

2018 年 11 月加入的用户 B 在列表“G3 组”中。

用户 B,于 2018 年 3 月加入,位于列表“G1 组”中。

用户 C,于 2018 年 3 月加入,在列表“G3 组”中

什么需要开具发票?所有项目组。但是如果用户在开票月份加入,组本身也需要是一个单独的发票行(因为新用户需要开票一次,其中包含他所在组的设置成本)。

我的发票行(结果)需要看起来像

Quantity    Itemgroup   
    2       G1
    1       G2
    2       G3
    1       G1 NEW
    1       G2 NEW
    1       G3 NEW

我的问题是我不知道应该如何解决我需要动态创建新发票行(带有新细节)的事实。

这是我知道的代码:

我从创建发票行开始(但我还没有设置数量):

 public List<Company_Recurring_Invoice_Line> getInvoiceLines(int invoiceID)
        {
            List<Company_Recurring_Invoice_Line> lines = new List<Company_Recurring_Invoice_Line>();
            SqlCommand command = new SqlCommand(@"SELECT * FROM ITEMGROUPS", conn);
            command.Parameters.Add("@invoiceID", SqlDbType.Int).Value = invoiceID;
            conn.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                Company_Recurring_Invoice_Line line = new Company_Recurring_Invoice_Line();
                line.invoiceID = invoiceID;
                line.itemgroupID = int.Parse(reader["id"].ToString());
                line.unitPrice = decimal.Parse(reader["price"].ToString());
                line.description = reader["name"].ToString();
                lines.Add(line);
            }
            conn.Close();
            return lines;
        }

此后,对于每个发票行,我检查用户 + 设置发票行的数量并将详细信息存储到发票行:

public Company_Invoice getInvoiceLineDetails(Company_Recurring_Invoice invoice)
        {
            Company_Recurring_Invoice i = invoice;

            foreach (Company_Recurring_Invoice_Line line in i.InvoiceLines)
            {
                getInvoiceLineDetails(line);
            }
            return i;
        }

public Company_Recurring_Invoice_Line getInvoiceLineLineDetails(Company_Recurring_Invoice_Line _line)
        {
            Company_Recurring_Invoice_Line Line = _line;
            Line.InvoiceLineDetails = new List<Company_Recurring_Invoice_Line_Detail>();
            SqlCommand command = new SqlCommand(@"SELECT * FROM PERSON WHERE ITEMGROUPID = @ITEMGROUP", conn);
            command.Parameters.Add("@ITEMGROUP", SqlDbType.Int).Value = Line.itemgroupID;
            conn.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
// We create a new detail line (with the name of the user + check it's date) 
//THIS IS WHERE I NEED TO CHECK IF THE MONTH OF THE USER = MONTH OF INVOICING AND ADD IT TO AN EXISTING OR NEW INVOICE LINE TOO 
            DateTime Date = DateTime.Parse(reader["joindate"].ToString());

                    Line.quantity++;
                    Company_Recurring_Invoice_Line_Detail detail = new Company_Recurring_Invoice_Line_Detail();
                detail.Value = reader["name"].ToString();
                detail.Company_Recurring_Invoice_Line = Line.InvoiceLineID;
                Line.InvoiceLineDetails.Add(detail);
            }
            conn.Close();
            return Line;
        }

我的代码非常适合不是新用户(我的行+详细信息生成完美),但我正在摸索如何实现这样一个事实,即它还需要创建一个单独的发票行 IF 的日期例如,用户是 11。请记住,新发票行也需要由多个用户填充。

实现这一点的最佳方法是什么?由于优化在这里并不重要,我一直在考虑为这个或新类创建单独的方法(首先生成旧的,然后创建新的),但我可以不这样做吗?

标签: c#.netsql-serverlist

解决方案


推荐阅读