コード例 #1
0
        /// <summary>
        /// Updates Employee entity performing all necessary validations.
        /// </summary>
        /// <param name="aEmployee">Employee entity to update</param>
        /// <param name="aUpdateOption">Do nothing, Do SaveChanges</param>
        /// <param name="aSalaryPlanId">SalaryPlan Id, if <= 0 then unchanged</param>
        /// <param name="aLastName">Last name, if null then unchanged</param>
        /// <param name="aFirstName">First name, if null then unchanged</param>
        /// <param name="aMiddleName">Middle name, if null then unchanged, if empty then set to null</param>
        /// <param name="aEmploymentDate">Employment date, if zero then unchanged</param>
        /// <param name="aManager">Manager entity, if null then set to null</param>
        /// <returns>Success, A required field is incorrect, EmployeeType is Employee but this Employee has subordinates, Manager is already this Employee's subordinate</returns>
        public EEmployeeUpdateResult UpdateEmployee(Employee aEmployee, EEmployeeUpdateOption aUpdateOption, int aSalaryPlanId, string aLastName, string aFirstName, string aMiddleName, DateTime aEmploymentDate, Employee aManager)
        {
            if (aSalaryPlanId <= 0)
            {
                aSalaryPlanId = aEmployee.SalaryPlanId;
            }
            aLastName ??= aEmployee.LastName;
            aFirstName ??= aEmployee.FirstName;
            if (aMiddleName == null)
            {
                aMiddleName = aEmployee.MiddleName;
            }
            else if (aMiddleName.Length == 0)
            {
                aMiddleName = null;
            }
            if (aEmploymentDate.Ticks <= 0L)
            {
                aEmploymentDate = aEmployee.EmploymentDate;
            }
            EEmployeeUpdateResult res = EEmployeeUpdateResult.FailRequiredField;

            if ((aSalaryPlanId > 0) && !string.IsNullOrWhiteSpace(aLastName) && !string.IsNullOrWhiteSpace(aFirstName) && (aEmploymentDate >= CompanyDateOfEstablishment))
            {
                SalaryPlan aSalaryPlan = EmployeeListDB.SalaryPlans.Find(aSalaryPlanId);
                if (aSalaryPlan != null)
                {
                    res = EEmployeeUpdateResult.FailEmployeeType;
                    if ((aSalaryPlan.EmployeeType > SalaryPlan.EEmployeeType.Employee) || (aEmployee.Subordinates == null) || !aEmployee.Subordinates.Any())
                    {
                        res = EEmployeeUpdateResult.FailManagerIsSubordinate;
                        if ((aManager == null) || !EmployeeHelper.IsSubordinate(aEmployee, aManager))
                        {
                            aEmployee.LastName       = aLastName;
                            aEmployee.FirstName      = aFirstName;
                            aEmployee.MiddleName     = aMiddleName;
                            aEmployee.EmploymentDate = aEmploymentDate;
                            aEmployee.SalaryPlanId   = aSalaryPlanId;
                            aEmployee.Manager        = aManager;

                            if (aUpdateOption == EEmployeeUpdateOption.SaveChanges)
                            {
                                EmployeeListDB.SaveChanges();
                            }
                            res = EEmployeeUpdateResult.Success;
                        }
                    }
                }
            }
            return(res);
        }
コード例 #2
0
        /// <summary>
        /// Creates a new Employee entity performing all necessary validations.
        /// </summary>
        /// <param name="aNewEmployee">Newly created Employee</param>
        /// <param name="aUpdateOption">Do nothing, Add to table Employees, Add to table Employees and do SaveChanges</param>
        /// <param name="aSalaryPlanId">SalaryPlan Id</param>
        /// <param name="aLastName">Last name</param>
        /// <param name="aFirstName">First name</param>
        /// <param name="aMiddleName">Middle name</param>
        /// <param name="aEmploymentDate">Employment date</param>
        /// <param name="aManager">Manager entity</param>
        /// <returns>Success, A required field is incorrect, Employee with the same name already exists</returns>
        public EEmployeeUpdateResult CreateNewEmployee(out Employee aNewEmployee, EEmployeeUpdateOption aUpdateOption, int aSalaryPlanId, string aLastName, string aFirstName, string aMiddleName, DateTime aEmploymentDate, Employee aManager = null)
        {
            EEmployeeUpdateResult res = EEmployeeUpdateResult.FailRequiredField;

            aNewEmployee = null;
            if ((aSalaryPlanId > 0) && !string.IsNullOrWhiteSpace(aLastName) && !string.IsNullOrWhiteSpace(aFirstName) && (aEmploymentDate >= CompanyDateOfEstablishment))
            {
                SalaryPlan aSalaryPlan = EmployeeListDB.SalaryPlans.Find(aSalaryPlanId);
                if (aSalaryPlan != null)
                {
                    res = EEmployeeUpdateResult.FailAlreadyExists;
                    var aEmployee = new Employee
                    {
                        LastName       = aLastName,
                        FirstName      = aFirstName,
                        MiddleName     = aMiddleName,
                        EmploymentDate = aEmploymentDate,
                        SalaryPlanId   = aSalaryPlanId
                    };
                    if (!EmployeeListDB.Employees.Any(v => v.Equals(aEmployee)))
                    {
                        aEmployee.Manager = aManager;
                        aNewEmployee      = aEmployee;

                        if (aUpdateOption > EEmployeeUpdateOption.None)
                        {
                            EmployeeListDB.Employees.Add(aEmployee);
                            if (aUpdateOption == EEmployeeUpdateOption.SaveChanges)
                            {
                                EmployeeListDB.SaveChanges();
                            }
                        }
                        res = EEmployeeUpdateResult.Success;
                    }
                }
            }
            return(res);
        }