示例#1
0
        /// <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);
        }