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")); }