Example #1
0
        public virtual ActionResult Create(EmployeeInfoViewModel viewModel)
        {
            //validate birthdate
            if (!viewModel.EmployeeInfo.Employee.BirthDate.IsValidBirthDate())
            {
                GetDropDowns(viewModel, viewModel.EmployeeInfo.EmployeeId);
                ModelState.AddModelError("", ErrorMessages.INVALID_DATE);
                return(View("Details", viewModel));
            }

            //validate employee code
            var existingEmployeeCode = _employeeRepository.Find(x => x.EmployeeCode == viewModel.EmployeeInfo.Employee.EmployeeCode && x.IsActive);

            if (existingEmployeeCode != null && existingEmployeeCode.Any())
            {
                GetDropDowns(viewModel, viewModel.EmployeeInfo.EmployeeId);
                ModelState.AddModelError("", ErrorMessages.USED_EMPLOYEECODE);
                return(View("Details", viewModel));
            }

            var employee = viewModel.EmployeeInfo.Employee.MapItem <Employee>();

            employee.Gender = viewModel.Gender;
            var employeeInfo = viewModel.EmployeeInfo;

            employeeInfo.Employee         = employee;
            employeeInfo.PositionId       = viewModel.PositionId != 0 ? viewModel.PositionId : (int?)null;
            employeeInfo.SalaryFrequency  = (FrequencyType)viewModel.PaymentFrequency;
            employeeInfo.EmploymentStatus = viewModel.EmploymentStatus;

            var newEmployee = _employeeInfoRepository.Add(employeeInfo).Employee;

            _employeeInfoHistoryRepository.Add(employeeInfo.MapItem <EmployeeInfoHistory>());

            _unitOfWork.Commit();

            //departments
            var departments = viewModel.CheckedDepartments != null
                            ? viewModel.CheckedDepartments.Split(',').Select(Int32.Parse)
                            : new List <int>();

            _employeeRepository.UpdateDepartment(departments, employee.EmployeeId);

            //employee deductions
            if (!String.IsNullOrEmpty(viewModel.CheckedEmployeeDeductions))
            {
                var employeeDeductions = viewModel.CheckedEmployeeDeductions != null
                        ? JsonConvert.DeserializeObject <List <EmployeeDeduction> >(viewModel.CheckedEmployeeDeductions)
                        : new List <EmployeeDeduction>();

                _employeeDeductionService.UpdateEmployeeDeduction(employeeDeductions, viewModel.EmployeeInfo.EmployeeId);
            }

            //work schedule
            if (viewModel.WorkScheduleId > 0)
            {
                _employeeWorkScheduleService.Add(viewModel.WorkScheduleId, employee.EmployeeId);
            }

            _unitOfWork.Commit();

            //upload the picture and update the record
            var imagePath = UploadImage(newEmployee.EmployeeId);

            if (!String.IsNullOrEmpty(imagePath))
            {
                _employeeRepository.Update(newEmployee);
                newEmployee.Picture = imagePath;
                _unitOfWork.Commit();
            }

            _logger.Info(LoggerMessages.INFO_USER_CREATE, newEmployee.EmployeeId, User.Identity.GetUserId());
            return(RedirectToAction("Index"));
        }