public double CalcSalary(Employee employee, DateTime time) { var wage = employee.WageRate; var span = time - employee.EmploymentDate; int years = span.Days / 365; if (years > 0) { var maxWage = wage * 1.4; while (years-- > 0 && wage < maxWage) { wage += employee.WageRate * 0.05; } } if (employee.GetDirectSubordinates() != null) { double subordinateWage = 0; foreach (Employee empl in employee.GetDirectSubordinates()) { subordinateWage += EmployeeSalaryCalculator.GetInstance().CalculateSalary(empl, time); } wage += subordinateWage * 0.05; } return(Math.Round(wage, 2)); }
static void Main(string[] args) { do { double totalHoursWorked = GetTotalHoursWorked(); double hourlyRate = GetHourlyRate(); string location = GetLocation(); var calculatorType = GetCalculatorType(location); var calculator = new EmployeeSalaryCalculator(calculatorType); var employee = new Employee { HoursWorked = totalHoursWorked, HourlyRate = hourlyRate, Location = location }; employee.Salary = calculator.CalculateSalary(employee); PrintResults(employee); Console.WriteLine("Do you want to continue? (y/n)"); } while (Console.ReadLine() != "n"); }
private double GetWage(int idx, DateTime wageTime) { Employee employee = Converter.GetEmployee(EmployeesFromDb[idx]); if (employee.EmploymentDate > wageTime) { throw new Exception("Выберите дату позднее даты трудоустройства сотрудника."); } string password = PasswordInput != null?PasswordInput() : ""; // hashes of employee and his/her boss List <string> allPossiblePasswordInfos = new List <string>(); allPossiblePasswordInfos.AddRange(Converter.GetEmployeePasswords(EmployeesFromDb[idx])); string adminPswInfo = AdminPasswordReceiver(); if (adminPswInfo != null) { allPossiblePasswordInfos.Add(adminPswInfo); } foreach (string passInfo in allPossiblePasswordInfos) { if (PasswordChecker?.Invoke(password, passInfo) ?? true) { return(EmployeeSalaryCalculator.GetInstance().CalculateSalary(employee, wageTime)); } } throw new Exception("У Вас отсутствуют права доступа"); }
public void EmployeeSalaryCalculatorShouldReturnExpectedValue() { double Salary = 1500; var salEmpl = new EmployeeSalaryCalculator(); var actual = salEmpl.Calculate(Salary); Assert.AreEqual(1500 + 300, actual); }
public void SocialSecurityShouldBeProperlyDeductedForItalyEmployees() { var employee = new Employee { HourlyRate = 1, HoursWorked = 1, Location = "italy" }; var salaryCalculator = new EmployeeSalaryCalculator(new ItalaySalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.Deduction.SocialSecurityContribution, 0.0919); }
public void IncomeTaxShouldBeProperlyDeductedForItalyEmployees() { var employee = new Employee { HourlyRate = 1, HoursWorked = 1, Location = "italy" }; var salaryCalculator = new EmployeeSalaryCalculator(new ItalaySalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.Deduction.IncomeTax, 0.25); }
public void CompulsoryPensionShouldBeProperlyDeductedForIrelandEmployees() { var employee = new Employee { HourlyRate = 1, HoursWorked = 1, Location = "ireland" }; var salaryCalculator = new EmployeeSalaryCalculator(new IrelandSalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.Deduction.Pension, 0.04); }
public void UniversalChargeShouldBeProperlyDeductedForIrelandEmployeesWhenSalaryIsMore() { var employee = new Employee { HourlyRate = 100, HoursWorked = 10, Location = "ireland" }; var salaryCalculator = new EmployeeSalaryCalculator(new IrelandSalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.Deduction.UniversalSocialCharge, 75); }
public void PensionShouldBeProperlyDeductedForGermanyEmployees() { var employee = new Employee { HourlyRate = 1, HoursWorked = 1, Location = "germany" }; var salaryCalculator = new EmployeeSalaryCalculator(new GermanySalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.Deduction.Pension, 0.02); }
public void IncomeTaxShouldBeProperlyDeductedForGermanyEmployeesIfSalaryIsMore() { var employee = new Employee { HourlyRate = 100, HoursWorked = 10, Location = "germany" }; var salaryCalculator = new EmployeeSalaryCalculator(new GermanySalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.Deduction.IncomeTax, 292); }
public void SalaryShouldBeProperlyCalculatedForIrelandEmployees() { var employee = new Employee { HourlyRate = 10, HoursWorked = 1, Location = "ireland" }; var salaryCalculator = new EmployeeSalaryCalculator(new IrelandSalaryCalculator()); var salary = salaryCalculator.CalculateSalary(employee); Assert.AreEqual(salary.GrossSalary, 10); }
public void PermanentContract__SalaryGross_eq_and_CopyrightLawsPercent_eq__Tax_eq( decimal salaryGross, float copyrightLawsPercent, decimal expectedValue) { // arrange var builder = new EmployeeSalaryCalculationResultBuilder(); var calculator = new EmployeeSalaryCalculator(builder); var context = new EmployeeSalaryCalculationContext(); context.Parameters.SocialInsuranceSetting = EmployeeExampleValues.SocialInsuranceSetting; context.Parameters.HealthInsuranceSetting = EmployeeExampleValues.HealthInsuranceSetting; context.Parameters.EmploymentRelationshipTaxSetting = EmployeeExampleValues.EmploymentRelationshipTaxSetting; // act var calculationResult = calculator.Calculate(salaryGross, copyrightLawsPercent, context); // assert calculationResult.Tax.Should().Be(expectedValue); }
static void Main(string[] args) { var builder = new EmployeeSalaryCalculationResultBuilder(); var calculator = new EmployeeSalaryCalculator(builder); var consoleReporter = new PermanentContractSalaryCalculationConsoleReporter(); var context = new EmployeeSalaryCalculationContext { Parameters = new EmployeeParameters { SocialInsuranceSetting = EmployeeExampleValues.SocialInsuranceSetting, EmploymentRelationshipTaxSetting = EmployeeExampleValues.EmploymentRelationshipTaxSetting, HealthInsuranceSetting = EmployeeExampleValues.HealthInsuranceSetting } }; var calculationResult = calculator.Calculate(13000m, 80f, context); consoleReporter.Report(calculationResult, context); Console.WriteLine("Wcisnij <ENTER> aby zakonczyc"); Console.ReadLine(); }
private double GetCompanyWage(DateTime wageTime) { string password = PasswordInput != null?PasswordInput() : ""; if (password.Length > 0) { if (PasswordChecker(password, AdminPasswordReceiver())) { double overallSalary = 0; foreach (CompanyEmployee employee in Context.CompanyEmployees.Local) { if (employee.EmploymentDate > wageTime) { continue; } Employee e = Converter.GetEmployee(employee); overallSalary += EmployeeSalaryCalculator.GetInstance().CalculateSalary(e, wageTime); } return(overallSalary); } } throw new Exception("У Вас отсутствуют права доступа"); }