public EmployeeBenefitDTO(EmployeeBenefit employeeBenefit, bool deepCopy) { this.employeeBenefitId = employeeBenefit.EmployeeBenefitId; this.employeeId = employeeBenefit.EmployeeId; this.benefitId = employeeBenefit.BenefitId; this.createdDate = employeeBenefit.CreatedDate.ToJavaScriptDate(); this.discountApplied = employeeBenefit.Employee.EmployeeDiscounts.Any(ed => ed.BenefitDiscount.Benefit.BenefitId == employeeBenefit.BenefitId); this.isActive = employeeBenefit.IsActive; this.isDeleted = employeeBenefit.IsDeleted; // Only deep copy these if we have a specific need to. // These items will not deep copy their child items. if (deepCopy) { this.employee = new EmployeeDTO(employeeBenefit.Employee, false); this.benefit = CheckDiscounts(employeeBenefit); } }
private BenefitDTO CheckDiscounts(EmployeeBenefit employeeBenefit, EmployeeDependent dependent) { // Create the DTO BenefitDTO benefit = new BenefitDTO(employeeBenefit.Benefit, false); // Check to see if there is a discount for this benefit. EmployeeDiscount discount = dependent.EmployeeDiscounts.Where(ed => ed.BenefitDiscount.Benefit.BenefitId == employeeBenefit.BenefitId).FirstOrDefault(); // If there is... if (discount != null) { // Is the discount a percentage? if (discount.BenefitDiscount.Percent > 0) { benefit.benefitCostDependent = benefit.benefitCostDependent * ((100 - (decimal)discount.BenefitDiscount.Percent.Value) / 100); } // Or is it an amount? else if (discount.BenefitDiscount.Amount > 0) { benefit.benefitCostDependent -= discount.BenefitDiscount.Amount.Value; } } // Return the DTO. return benefit; }
public static void Initialize(BenefitsDataContext db) { if (db.Database.ProviderName != "Microsoft.EntityFrameworkCore.InMemory") { db.Database.Migrate(); } if (db.Employees.Any()) { return; } var employeeBenefit = new EmployeeBenefit() { AnnualCost = 1000, IsEnabled = true, Description = "Medical benefit for household", }; employeeBenefit.BenefitDiscounts = new List <BenefitDiscount>() { new NameStartsWithBenefitDiscount() { NameStartsWith = "A", Percent = 0.01M, } }; db.EmployeeBenefits.AddRange(employeeBenefit); var dependentBenefit = new DependentBenefit() { AnnualCost = 500, IsEnabled = true, Description = "Medical benefit for dependents" }; dependentBenefit.BenefitDiscounts = new List <BenefitDiscount>() { new NameStartsWithBenefitDiscount() { NameStartsWith = "A", Percent = 0.1M, } }; db.DependentBenefits.AddRange(dependentBenefit); var employee = new Employee() { FirstName = "John", LastName = "Doe", StartDate = new DateTime(2020, 1, 1), Dependents = new List <Dependent>() { new Dependent() { FirstName = "Jane", LastName = "Doe", DependentRelationshipToEmployee = DependentRelationshipToEmployee.Spouse, }, new Dependent() { FirstName = "Kevin", LastName = "Doe", DependentRelationshipToEmployee = DependentRelationshipToEmployee.Child, }, new Dependent() { FirstName = "Alex", LastName = "Doe", DependentRelationshipToEmployee = DependentRelationshipToEmployee.Child, } } }; employee.Paychecks = BuildPaychecks(employee, 2020); db.Employees.AddRange( employee ); db.SaveChanges(); }