/// <summary> /// Add new Tutor /// </summary> /// <param name="model"></param> /// <returns></returns> public StatusModel Add(TutorModel model) { var status = new StatusModel(false, String.Empty); try { using (var unitOfWork = new UnitOfWork <BelibaHomaDBEntities>()) { //Updating the User Role in the model model.User.UserRole = UserRole.Tutor; //Retrieving Related Entities by using the repositories and GetById function (all but User which was not yet created) var academicInstitutionRepository = unitOfWork.GetRepository <IAcademicInstitutionRepository>(); var academicInstitution = academicInstitutionRepository.GetByKey(model.AcademicInstitution.Id); var academicMajorRepository = unitOfWork.GetRepository <IAcademicMajorRepository>(); var academicMajor = academicMajorRepository.GetByKey(model.AcademicMajor.Id); var academicMajor1 = new AcademicMajor(); academicMajor1 = model.AcademicMajor1.Id != 0 ? academicMajorRepository.GetByKey(model.AcademicMajor1.Id) : null; var userRepository = unitOfWork.GetRepository <IUserRepository>(); //Running some server side validations if (model.User.IdNumber.Length != 9) { status.Message = "מספר תעודת הזהות צריך להכיל בדיוק 9 ספרות"; throw new System.ArgumentException(status.Message, "model"); } if (model.Birthday > DateTime.Now.AddYears(-15)) { status.Message = "תאריך הלידה של החונך צריך להיות לפחות לפני 15 שנים"; throw new System.ArgumentException(status.Message, "model"); } if (academicInstitution.InstitutionType == (int)InstitutionType.Mechina && model.AcademicYear != 0 && model.SemesterNumber != 0) { status.Message = "החונך במכינה, שנת הלימודים ומספר הסמסטר צריכים להיות 0"; throw new System.ArgumentException(status.Message, "model"); } if (academicInstitution.InstitutionType != (int)InstitutionType.Mechina && (model.AcademicYear == 0 || model.SemesterNumber == 0)) { status.Message = "אם החונך איננו ממוסד מסוג מכינה, על מספר הסמסטר והשנה האקדמית להיות שונים מ-0"; throw new System.ArgumentException(status.Message, "model"); } if (model.User.Area != null && academicInstitution.Area != (int)model.User.Area) { status.Message = "המוסד האקדמי של החונך נמצא באזור פעילות שונה מהאזור שהוזן לחונך"; throw new System.ArgumentException(status.Message, "model"); } //Adding the User Model to the DB (By using the Add function in UserService) var userStatus = _userService.Add(model.User); if (userStatus.Success) { //Get the new user entity from DB (also linked to Tutor) var user = userRepository.GetByKey(userStatus.Data); //Updating "not input" fields in Tutor model model.TutorHours = 0; model.TutorHoursBonding = 0; //Mapping the model into Tutor Entity var tutorRepository = unitOfWork.GetRepository <ITutorRepository>(); var entity = model.MapTo <Tutor>(); //Linking the Complexed entities to the retrieved ones entity.AcademicInstitution = academicInstitution; entity.AcademicMajor = academicMajor; entity.AcademicMajor1 = academicMajor1; entity.User = user; entity.AcademicInstitutionId = academicInstitution.Id; entity.AcademicMajorId = academicMajor.Id; if (model.AcademicMajor1.Id != 0) { entity.AcademicMinorId = academicMajor1.Id; } entity.UserId = user.Id; //Finally Adding the entity to DB tutorRepository.Add(entity); unitOfWork.SaveChanges(); //If we got here - Yay! :) status.Success = true; status.Message = String.Format("חונך {0} הוזן בהצלחה", model.User.FullName); } else { status.Message = userStatus.Message; } } } catch (Exception ex) { if (status.Message == String.Empty) { status.Message = String.Format("שגיאה במהלך הוספת החונך"); } LogService.Logger.Error(status.Message, ex); } return(status); }