比较两个列表以检查Payroll Process是否正确完成(验证)

本文关键字:是否 Process 验证 检查 两个 列表 比较 Payroll | 更新日期: 2023-09-27 18:14:44

我正在学习c#,并且正在为SAP Business One制作一个Payroll Add-On。

我已经完成了计算净工资,总工资,PAYE,收入,扣除等的工资流程。每个雇员的这些计算被输入到一个临时流程数据表中。

我现在想做一个每月滚动(关闭当前月份)。为此,我必须进行一些验证,以确保在将内容从临时进程数据表删除到永久数据表之前正确地完成了计算。

我想通过比较两个列表来实现。

第一个是从SAP中的Employee Master Data提取的,它包含员工id、姓名、电话、工资单位等。我只选择了employeeid。

第二个是从Process_Data_Temp提取的,它包含员工id,净工资(U_PD_code = SYS001)等。

我想通过确保第1中的所有empid都包含在第2(完全)中并且第2个列表中的净支付不为空(U_PD_code where == SYS001不是空或空)等来匹配此列表。

我想做三个基于工资单位的比较。月= M,半月=S,周= W。我现在对月刊很感兴趣。

字段工资单位在Employee主数据中,但不在流程数据临时表中,因此我不确定如何在临时表中获得每月工资的不同empid,以便进行比较。我首先比较每月的雇员。

<<p> Process_Data_Temp字段/strong>
Code Name, U_Tax_year, U_Employee_ID, U_Process_month, U_PD_code U_Amount, U_Balance, 
U_Employer_cont_amnt

如何做到这一点?

My Code So Far

private void DoMonthEndRollover()
{
// Get service instances needed            
var getAllEmployees = Program.Kernel.Get<IEmployeeService>().GetAllEmployees().Where(x => x.salaryUnit.ToString() == "M");
var tempProcessData = Program.Kernel.Get<IProcessDataTempService>().GetAllProcessDataTemps();
// Get all employee IDs from first list
var employeeIdList = (from el in getAllEmployees select el.empID).Distinct();
// Get information from second list
var tempList = (from tl in tempProcessData orderby tl.U_Employee_ID select tl).Distinct(); ......not finished
// Check if all Employee IDs have net pay (Contained in Process Data Temporary table)
}

注意:流程数据临时表包含所有员工的计算,无论是每月、半月还是每周。

我希望我说得够清楚

比较两个列表以检查Payroll Process是否正确完成(验证)

假设employeeIDListtempList都是整数列表,您可以使用IEnumerable.Intersect来查找两个列表中的元素。

int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
IEnumerable<int> both = id1.Intersect(id2);

如果输出列表的长度与输入列表的长度相同,则它们是相同的

然而,在第一个实例中检查两个列表的长度是否相同。如果没有,那么这个过程就失败了。只有Intersect检查两个列表的长度是否相同。

还有IEnumerable.Except方法:

使用默认的相等比较器比较值,产生两个序列的集合差值。