示例#1
0
        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();
        }
示例#2
0
        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();
        }