public void CreatePayroll(PayrollMonthNoneTax payrollNoneTax, string organisationId, string month) { using var context = Context(); if (!context.Organisation.FirstOrDefault(u => u.Id == organisationId).DeclareTax) { throw new Exception("This organisation is declare tax"); } var payroll = context.PayrollMonth.FirstOrDefault(u => u.OrganisationId == organisationId && u.Month == month); var date = CurrentCambodiaTime; if (date.Year.ToString() + date.Month.ToString("00") != month) { date = new DateTime(int.Parse(month.Substring(0, 4)), int.Parse(month.Substring(4, 2)), 1, 20, 0, 0, 0); } if (payroll == null) { payroll = new Dal.Models.PayrollMonth { Month = month, EndDate = CurrentCambodiaTime, StartDate = CurrentCambodiaTime, ExchangeRate = 1, OrganisationId = organisationId, Total = payrollNoneTax.Payrolls.Sum(u => u.Salary + (u.OtherBenefit == null ? 0 : u.OtherBenefit.Value)) }; payroll.PayrollEmployee = payrollNoneTax.Payrolls.Select(u => new Dal.Models.PayrollEmployee { EmployeeId = u.EmployeeId, Date = date, Total = u.Salary + (u.OtherBenefit == null ? 0 : u.OtherBenefit.Value), TransactionDate = CurrentCambodiaTime, PayrollEmployeeNoneTax = new Dal.Models.PayrollEmployeeNoneTax { Salary = u.Salary, OtherBenefit = u.OtherBenefit } }).ToHashSet(); context.PayrollMonth.Add(payroll); context.SaveChanges(); payrollNoneTax.Id = payroll.Id; payrollNoneTax.Payrolls = context.PayrollEmployeeNoneTax.Where(u => u.IdNavigation.PayrollMonthId == payrollNoneTax.Id).Select(u => new PayrollNoneTax { Date = u.IdNavigation.Date, EmployeeId = u.IdNavigation.EmployeeId, Employee = new Employee { Id = u.IdNavigation.EmployeeId, DisplayName = u.IdNavigation.Employee.DisplayName, JobTitle = u.IdNavigation.Employee.JobTitle, Country = new Country { Id = u.IdNavigation.Employee.CountryId, Alpha2Code = u.IdNavigation.Employee.Country.Alpha2Code, Alpha3Code = u.IdNavigation.Employee.Country.Alpha3Code, Name = u.IdNavigation.Employee.Country.Name, Nationality = u.IdNavigation.Employee.Country.Nationality } }, OtherBenefit = u.OtherBenefit, Id = u.Id, Salary = u.Salary, Total = u.IdNavigation.Total, TransactionDate = u.IdNavigation.TransactionDate }).ToList(); return; } payroll.EndDate = CurrentCambodiaTime; payroll.Total = payrollNoneTax.Payrolls.Sum(u => u.Salary + (u.OtherBenefit == null ? 0 : u.OtherBenefit.Value)); foreach (var p in payrollNoneTax.Payrolls) { var updatePayroll = context.PayrollEmployee.FirstOrDefault(u => u.Id == p.Id); updatePayroll.Total = p.Salary + (p.OtherBenefit == null ? 0 : p.OtherBenefit.Value); updatePayroll.PayrollEmployeeNoneTax.OtherBenefit = p.OtherBenefit; updatePayroll.PayrollEmployeeNoneTax.Salary = p.Salary; } context.SaveChanges(); }
public void CreatePayroll(PayrollMonthTax payrollMonthTax, string organisationId, string month) { using var context = Context(); if (!context.Organisation.FirstOrDefault(u => u.Id == organisationId).DeclareTax) { throw new Exception("This organisation is not declare tax"); } var payroll = context.PayrollMonth.FirstOrDefault(u => u.OrganisationId == organisationId && u.Month == month); var date = CurrentCambodiaTime; if (date.Year.ToString() + date.Month.ToString("00") != month) { date = new DateTime(int.Parse(month.Substring(0, 4)), int.Parse(month.Substring(4, 2)), 1, 20, 0, 0, 0); } if (payroll == null) { payroll = new Dal.Models.PayrollMonth { Month = month, EndDate = CurrentCambodiaTime, StartDate = CurrentCambodiaTime, ExchangeRate = (double)payrollMonthTax.ExchangeRate, OrganisationId = organisationId, PayrollMonthTaxSalary = new Dal.Models.PayrollMonthTaxSalary { AdditionalBenefits = payrollMonthTax.AdditionalBenefitsRate, ChildOrSpouseAmount = payrollMonthTax.ChildOrSpouseAmount, NoneResidentRate = payrollMonthTax.NoneResidentRate, PayrollMonthTaxSalaryRange = payrollMonthTax.TaxSalaryRanges.Select(u => new Dal.Models.PayrollMonthTaxSalaryRange { FromAmount = u.FromAmount, TaxRate = u.Rate, ToAmount = u.ToAmount, }).ToHashSet() }, Total = payrollMonthTax.Payrolls.Sum(u => u.Salary + (u.OtherBenefit == null?0:u.OtherBenefit.Value)) }; payroll.PayrollEmployee = payrollMonthTax.Payrolls.Select(u => new Dal.Models.PayrollEmployee { EmployeeId = u.EmployeeId, Date = date, Total = u.Salary + (u.OtherBenefit == null?0:u.OtherBenefit.Value), TransactionDate = CurrentCambodiaTime, PayrollEmployeeTax = new Dal.Models.PayrollEmployeeTax { OtherBenefit = u.OtherBenefit, SalaryTax = u.DeductSalary, ConfederationThatHosts = u.Employee.IsConfederationThatHosts, IsResidentEmployee = u.Employee.IsResidentEmployee, NumberOfChilds = u.Employee.NumberOfChild, OtherBenefitTaxDeduct = u.OtherBenefitTaxDeduct, Salary = u.Salary } }).ToHashSet(); context.PayrollMonth.Add(payroll); context.SaveChanges(); payrollMonthTax.Id = payroll.Id; payrollMonthTax.Payrolls = context.PayrollEmployeeTax.Where(u => u.IdNavigation.PayrollMonthId == payrollMonthTax.Id).Select(u => new PayrollTax { Date = u.IdNavigation.Date, DeductSalary = u.SalaryTax, EmployeeId = u.IdNavigation.EmployeeId, Employee = new Employee { Id = u.IdNavigation.EmployeeId, DisplayName = u.IdNavigation.Employee.DisplayName, JobTitle = u.IdNavigation.Employee.JobTitle, Country = new Country { Id = u.IdNavigation.Employee.CountryId, Alpha2Code = u.IdNavigation.Employee.Country.Alpha2Code, Alpha3Code = u.IdNavigation.Employee.Country.Alpha3Code, Name = u.IdNavigation.Employee.Country.Name, Nationality = u.IdNavigation.Employee.Country.Nationality }, IsConfederationThatHosts = u.ConfederationThatHosts, NumberOfChild = u.NumberOfChilds, IsResidentEmployee = u.IsResidentEmployee }, NumberOfChilds = u.NumberOfChilds, OtherBenefit = u.OtherBenefit, Id = u.Id, OtherBenefitTaxDeduct = u.OtherBenefitTaxDeduct, Salary = u.Salary, Total = u.IdNavigation.Total, TransactionDate = u.IdNavigation.TransactionDate }).ToList(); return; } payroll.EndDate = CurrentCambodiaTime; payroll.Total = payrollMonthTax.Payrolls.Sum(u => u.Salary + (u.OtherBenefit == null ? 0 : u.OtherBenefit.Value)); payroll.ExchangeRate = (double)payrollMonthTax.ExchangeRate; foreach (var p in payrollMonthTax.Payrolls) { var updatePayroll = context.PayrollEmployee.FirstOrDefault(u => u.Id == p.Id); updatePayroll.Total = p.Salary + (p.OtherBenefit == null ? 0 : p.OtherBenefit.Value); updatePayroll.TransactionDate = CurrentCambodiaTime; updatePayroll.Date = date; updatePayroll.PayrollEmployeeTax.ConfederationThatHosts = p.Employee.IsConfederationThatHosts; updatePayroll.PayrollEmployeeTax.IsResidentEmployee = p.Employee.IsResidentEmployee; updatePayroll.PayrollEmployeeTax.NumberOfChilds = p.Employee.NumberOfChild; updatePayroll.PayrollEmployeeTax.OtherBenefit = p.OtherBenefit; updatePayroll.PayrollEmployeeTax.Salary = p.Salary; updatePayroll.PayrollEmployeeTax.SalaryTax = p.DeductSalary; updatePayroll.PayrollEmployeeTax.OtherBenefitTaxDeduct = p.OtherBenefitTaxDeduct; } context.SaveChanges(); }