private decimal GetSalaryPercentage(IEmployee employee, Company company) { decimal salaryPrecentage = 0.15m; if (employee.Department == null) { return salaryPrecentage; } salaryPrecentage = GetSalaryPercentage(employee.Department.Manager, company) - 0.01m; return salaryPrecentage; }
public decimal GetSalary(IEmployee employee, Company company) { return (decimal)employee.SalaryFactor * GetSalaryPercentage(employee, company) * company.CEO.Salary; }
private string ExecuteCreateSubDepartmentCommand(ICommand command, Company company) { string mainDepartmentName = command.Parameters[4]; var mainDepartment = company.Departments.FirstOrDefault(d => d.Name == mainDepartmentName); if (mainDepartment == null) { return string.Format($"There is no department {mainDepartmentName} in {company.Name}"); } string managerFirstName = command.Parameters[2]; string managerLastName = command.Parameters[3]; var manager = mainDepartment.Employees.FirstOrDefault(e => e.FirstName == managerFirstName && e.LastName == managerLastName); if (manager == null) { return string.Format($"There is no employee called {managerFirstName} {managerLastName} in department {mainDepartment.Name}"); } if (!(manager is Manager)) { string position = manager.GetType().Name; string realPosition = position[0].ToString(); for (int i = 1; i < position.Length; i++) { if (realPosition[i].ToString().ToUpper() == realPosition[i].ToString()) { realPosition += " " + position[i]; } else { realPosition += position[i]; } } return string.Format($"{managerFirstName} {managerLastName} is not a manager (real position: {position})"); } string departmentName = command.Parameters[1]; if (mainDepartment.SubDepartment.Any(sd => sd.Name == departmentName)) { return string.Format($"Department {departmentName} already exists in {mainDepartment.Name}"); } if (company.Departments.Any(d => d.Name == departmentName)) { return string.Format($"Department {departmentName} already exists in {company.Name}"); } var department = new Department(departmentName, manager as Manager); mainDepartment.SubDepartment.Add(department); return null; }
private string ExecuteCreateDepartmentInCompanyCommand(ICommand command, Company company) { string managerFirstName = command.Parameters[2]; string managerLastName = command.Parameters[3]; var manager = company.Employees.FirstOrDefault(e => e.FirstName == managerFirstName && e.LastName == managerLastName); if (manager == null) { return string.Format($"There is no employee called {managerFirstName} {managerLastName} in company {company.Name}"); } try { CheckEmployeeIsManager(manager); } catch (ArgumentException ex) { return ex.Message; } string departmentName = command.Parameters[1]; if (company.Departments.Any(d => d.Name == departmentName)) { return string.Format($"Department {departmentName} already exists in company {company.Name}"); } var department = new Department(departmentName, manager as Manager); company.Departments.Add(department); return null; }
private string ExecuteCreateCompanyCommand(ICommand command) { var ceo = new CEO(command.Parameters[1], command.Parameters[2], decimal.Parse(command.Parameters[3])); this.database.TotalSalaries[ceo] = 0m; var company = new Company(command.Parameters[0], ceo); if (this.database.Companies.Any(c => c.Name == company.Name)) { return string.Format($"Company {company.Name} already exists"); } this.database.Companies.Add(company); return null; }
public decimal GetSalary(IEmployee employee, Company company) { return GetSalaryPercentage(employee, company) * company.Ceo.Salary * employee.SalaryFactor; }
private string ExecuteCreateSubDepartmentCommand(ICommand command, Company company) { string mainDepartmentName = command.Parameters[4]; var mainDepartment = GetDepartment(company, mainDepartmentName); if (mainDepartment == null) { return string.Format($"There is no department {mainDepartmentName} in {company.Name}"); } string managerFirstName = command.Parameters[2]; string managerLastName = command.Parameters[3]; var manager = GetEmployeeByName(mainDepartment, managerFirstName, managerLastName); if (manager == null) { return string.Format($"There is no employee called {managerFirstName} {managerLastName} in department {mainDepartment.Name}"); } try { CheckEmployeeIsManager(manager); } catch (ArgumentException ex) { return ex.Message; } string departmentName = command.Parameters[1]; if (mainDepartment.SubDepartments.Any(sd => sd.Name == departmentName)) { return string.Format($"Department {departmentName} already exists in {mainDepartment.Name}"); } if (company.Departments.Any(d => departmentName == d.Name)) { return string.Format($"Department {departmentName} already exists in {company.Name}"); } var department = new Department(departmentName, manager as Manager); mainDepartment.SubDepartments.Add(department); return null; }
private static Department GetDepartment(Company company, string mainDepartmentName) { var mainDepartment = company.Departments.FirstOrDefault(d => d.Name == mainDepartmentName); var subDepartments = company.Departments.SelectMany(d => d.SubDepartments); while (mainDepartment == null && subDepartments.Any()) { mainDepartment = subDepartments.FirstOrDefault(sd => sd.Name == mainDepartmentName); subDepartments = subDepartments.SelectMany(sd => sd.SubDepartments); } return mainDepartment; }
private string ExecuteCreateSubDepartmentInCompanyComand(ICommand command, Company company) { var mainDepartment = company.Departments.FirstOrDefault(d => d.Name == command.Parameters[4]); if (mainDepartment == null) { return String.Format("There is no department {0} in company {1}", command.Parameters[4], company.Name); } var manager = GetEmployeeByName(mainDepartment, command.Parameters[2], command.Parameters[3]); if (manager == null) { return String.Format("There is no employee called {0} {1} in department {3}", command.Parameters[2], command.Parameters[3], mainDepartment.Name); } try { CheckEmployeeIsManager(manager); } catch (ArgumentException ex) { return ex.Message; } if (mainDepartment.SubDepartments.Any(sd => sd.Name == command.Parameters[1])) { return String.Format("Departament {0} already exists in {2}", command.Parameters[1], mainDepartment.Name); } // if (mainDepartment.Employees.Where(e => e is Manager).Cast<Manager>().Any(m => company.Departments.Select(d => d.Manager).Contains(m))) if (company.Departments.Any(d => command.Parameters[1] == d.Name)) { return String.Format("Departament {0} already exists in {2}", command.Parameters[1], company.Name); } var department = new Department(command.Parameters[1], manager as Manager); mainDepartment.SubDepartments.Add(department); // company.Departments.Add(department); return null; }
private string ExecuteCreateDepartmentInCompanyComand(ICommand command, Company company) { var manager = GetEmployeeByName(company, command.Parameters[2], command.Parameters[3]); if (manager == null) { return string.Format("There is no employee called {0} {1} in {3}", command.Parameters[2], command.Parameters[3], company.Name); } try { CheckEmployeeIsManager(manager); } catch (ArgumentException ex) { return ex.Message; } if (company.Departments.Any(d => d.Name == command.Parameters[1])) { return String.Format("Departament {0} already exists in {2}", command.Parameters[1], company.Name); } var department = new Department(command.Parameters[1], manager as Manager); company.Departments.Add(department); return null; }