Ejemplo n.º 1
0
        private string ExecuteCreateEmployeeCommand(ICommand command)
        {
            string companyName = command.Parameters[3];
            var    company     = this.database.Companies.FirstOrDefault(c => c.Name == companyName);

            if (company == null)
            {
                return(string.Format($"Company {companyName} does not exist"));
            }

            string firstName = command.Parameters[0];
            string lastName  = command.Parameters[1];

            if (company.Employees.Any(e => e.FirstName == firstName && e.LastName == lastName))
            {
                return(string.Format($"Employee {firstName} {lastName} already exists in {company.Name} (no department)"));
            }

            var firstConflictingEmployee = company.Departments
                                           .SelectMany(d => d.Employees)
                                           .FirstOrDefault(e => e.FirstName == firstName && e.LastName == lastName);

            if (firstConflictingEmployee != null)
            {
                return(string.Format($"Employee {firstName} {lastName} already exists in {company.Name} (in department {firstConflictingEmployee.Department.Name})"));
            }

            var employeeTypeName = command.Parameters[2];
            var employeeType     = Assembly
                                   .GetExecutingAssembly()
                                   .GetType(BaseModelNamespace + employeeTypeName);

            var employee = Activator.CreateInstance(employeeType, new object[] { command.Parameters[0], command.Parameters[1] }) as IEmployee;

            if (command.Parameters.Count == 4)
            {
                company.Employees.Add(employee);
                company.CEO.SubordinateEmployees.Add(employee);
            }
            else //command.Parameters.Count = 5
            {
                string departmentName = command.Parameters[4];
                var    department     = GetDepartment(company, departmentName);
                if (department == null)
                {
                    department = company.Departments.SelectMany(d => d.SubDepartments).FirstOrDefault(sd => sd.Name == departmentName);
                }

                if (department == null)
                {
                    return(string.Format($"Department {departmentName} does not exist in company {company.Name}"));
                }

                department.Employees.Add(employee);
                department.Manager.SubordinateEmployees.Add(employee);
                employee.Department = department;
            }

            decimal salary = salaryManager.GetSalary(employee, company);

            employee.Salary = salary;
            this.database.TotalSalaries[employee] = 0m;
            return(null);
        }
        private string ExecuteCreateEmployeeCommand(ICommand command)
        {
            string firstName   = command.Parameters[0];
            string lastName    = command.Parameters[1];
            string companyName = command.Parameters[3];
            var    company     = this.database.Companies.FirstOrDefault(c => c.Name == companyName);

            if (company == null)
            {
                return(string.Format($"Company {companyName} does not exist"));
            }

            if (company.Employees.Any(e => e.FirstName == firstName && e.LastName == lastName))
            {
                return(string.Format($"Employee {firstName} {lastName} already exists in {company.Name} (no department)"));
            }


            var firstConflictingEmployee = company
                                           .Departments
                                           .SelectMany(d => d.Employees)
                                           .FirstOrDefault(e => e.FirstName == firstName && e.LastName == lastName);

            if (firstConflictingEmployee != null)
            {
                return(string.Format($"Employee {firstName} {lastName} already exists in {company.Name} (in department {firstConflictingEmployee.Department.Name})"));
            }
            //IPaidPerson person;

            //switch (command.Parameters[2])
            //{
            //    case "Regular":
            //        person = new Regular(firstName, lastName, 0m);
            //        break;
            //}

            var employeeTypeName = command.Parameters[2];
            var employeeType     = Assembly.GetExecutingAssembly().GetType("Capitalism.Models." + employeeTypeName);
            var employee         = Activator.CreateInstance(employeeType,
                                                            args: new object[] { command.Parameters[0], command.Parameters[1], null }) as Employee;

            decimal salary = salaryManager.GetSalary(employee, company);

            employee.Salary = salary;
            this.database.TotalSalaries[employee] = 0;

            if (command.Parameters.Count == 4)
            {
                company.Employees.Add(employee);
                company.CEO.SubordinateEmployees.Add(employee);
            }
            else //command.Parameters.Count == 5
            {
                var departmentName = command.Parameters[4];
                var department     = company.Departments.FirstOrDefault(d => d.Name == departmentName);
                if (department == null)
                {
                    department = company.Departments.SelectMany(d => d.SubDepartments).FirstOrDefault(sd => sd.Name == departmentName);
                }

                if (department == null)
                {
                    return(string.Format($"Department {departmentName} does not exist in {company.Name}"));
                }

                department.Employees.Add(employee);
                department.Manager.SubordinateEmployees.Add(employee);
                employee.Department = department;
            }
            return(null);
        }