c# - 根据用户日期生成 + 分组新发票行
问题描述
我的情况如下:
用户被分配到一个或多个发票项目组(具有详细信息:用户名)。
一个项目组(= InvoiceLine)具有:
- ID
- 姓名
- 数量
- 成本
- 设置成本
itemgroupDetail (=InvoiceLineDetail) 有:
- ID
- 项目组 ID
- 用户名
然而,我的数量是基于用户的数量。
例子:
用户 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。请记住,新发票行也需要由多个用户填充。
实现这一点的最佳方法是什么?由于优化在这里并不重要,我一直在考虑为这个或新类创建单独的方法(首先生成旧的,然后创建新的),但我可以不这样做吗?
解决方案
推荐阅读
- email - Blazor .Net 5 身份注册与电子邮件确认
- machine-learning - PyTorch 中的置换操作是可微分操作吗
- javascript - 如何用更少的代码创建一个 jQuery 函数
- r - 使用汇总(dplyr)从列中获取第一个非空日期
- python - 选择哪一点将有正确的 mp3 文件用于导出
- c# - 使用两个数据库时,实体框架实体类型“未映射 CustomerSpendings”
- javascript - 为什么 Mongoose 只保存部分数据?
- javascript - javascript 类中的画布
- matlab - 如何使用 MATLAB for 循环创建文件名并读取它们
- android - Flutter中滑动TabBarView()时如何改变Tabs()的形状?