Example #1
0
        internal void CreateNewFaculty(NewFacultyViewModel model, int?uniId)
        {
            using (var db = new ErasmusDbContext())
            {
                if (model.Id.HasValue)
                {
                    //Edit functionality
                    var faculty = db.Faculties.SingleOrDefault(x => x.Id == model.Id);
                    if (faculty == null)
                    {
                        throw new FormValidationException("Invalid faculty provided");
                    }

                    var fieldsOfStudy = new List <FieldOfStudy>();
                    if (model.SelectedFos != null && model.SelectedFos.Any())
                    {
                        fieldsOfStudy = db.FieldsOfStudy.Where(x => model.SelectedFos.Contains(x.Id)).ToList();
                        if (fieldsOfStudy.Count != model.SelectedFos.Count)
                        {
                            throw new ValidationException("Some fields of study were not found.");
                        }
                    }

                    var oldFos = faculty.StudyFields;
                    foreach (var fos in oldFos)
                    {
                        //Reset fos if removed
                        fos.FacultyId = null;
                    }
                    db.SaveChanges();

                    faculty.Name        = model.Name;
                    faculty.StudyFields = fieldsOfStudy;
                    db.SaveChanges();
                    return;
                }
                else
                {
                    //New functionality
                    var fieldsOfStudy = new List <FieldOfStudy>();
                    if (model.SelectedFos != null && model.SelectedFos.Any())
                    {
                        fieldsOfStudy = db.FieldsOfStudy.Where(x => model.SelectedFos.Contains(x.Id)).ToList();
                        if (fieldsOfStudy.Count != model.SelectedFos.Count)
                        {
                            throw new ValidationException("Some fields of study were not found.");
                        }
                    }

                    db.Faculties.Add(new Faculty()
                    {
                        Name         = model.Name,
                        StudyFields  = fieldsOfStudy,
                        UniversityId = uniId
                    });

                    db.SaveChanges();
                }
            }
        }
Example #2
0
        internal int CreateUniversity(NewUniversityViewModel model, string userId)
        {
            using (var db = new ErasmusDbContext())
            {
                var user = db.Users.SingleOrDefault(x => x.Id == userId);

                var uni = db.Universities.Add(new University()
                {
                    Name        = model.Name,
                    Address     = model.Address,
                    City        = model.City,
                    Country     = model.Country,
                    ErasmusCode = model.ErasmusCode
                });

                db.SaveChanges();

                user.UniversityId = uni.Id;
                db.SaveChanges();

                db.UserPermissions.Add(new UserPermissions()
                {
                    UserId       = userId,
                    UniversityId = uni.Id
                });
                db.SaveChanges();
                return(uni.Id);
            }
        }
Example #3
0
        internal void CreateNewFieldOfStudy(NewFieldOfStudyViewModel model, int?uniId)
        {
            using (var db = new ErasmusDbContext())
            {
                if (model.Id.HasValue)
                {
                    //Edit
                    var fos = db.FieldsOfStudy.SingleOrDefault(x => x.Id == model.Id && x.UniversityId == uniId);
                    if (fos == null)
                    {
                        throw new FormValidationException("Invalid field of study");
                    }

                    var studySubjects = new List <StudySubjects>();
                    if (model.SelectedStudySubjects != null && model.SelectedStudySubjects.Any())
                    {
                        studySubjects = db.StudySubjects.Where(x => model.SelectedStudySubjects.Contains(x.Id)).ToList();
                        if (studySubjects.Count != model.SelectedStudySubjects.Count)
                        {
                            throw new ValidationException("Some study subjects were not found.");
                        }
                    }

                    foreach (var subject in fos.StudySubjects)
                    {
                        subject.FieldOfStudyId = null;
                    }
                    db.SaveChanges();

                    fos.Degree        = model.Degree;
                    fos.Name          = model.Name;
                    fos.StudySubjects = studySubjects;
                    db.SaveChanges();
                }
                else
                {
                    //New
                    var studySubjects = new List <StudySubjects>();
                    if (model.SelectedStudySubjects != null && model.SelectedStudySubjects.Any())
                    {
                        studySubjects = db.StudySubjects.Where(x => model.SelectedStudySubjects.Contains(x.Id)).ToList();
                        if (studySubjects.Count != model.SelectedStudySubjects.Count)
                        {
                            throw new ValidationException("Some study subjects were not found.");
                        }
                    }

                    db.FieldsOfStudy.Add(new FieldOfStudy()
                    {
                        Name          = model.Name,
                        Degree        = model.Degree,
                        StudySubjects = studySubjects,
                        UniversityId  = uniId
                    });

                    db.SaveChanges();
                }
            }
        }
Example #4
0
        internal void ChangeUserPermissions(UserPermissionsModel model)
        {
            using (var db = new ErasmusDbContext())
            {
                var user = db.Users.SingleOrDefault(x => x.Id == model.UserId);

                if (user != null)
                {
                    var permissions = db.UserPermissions.Where(x => x.UserId == user.Id);
                    if (permissions.Any())
                    {
                        db.UserPermissions.RemoveRange(permissions);
                        db.SaveChanges();
                    }

                    try
                    {
                        if (model.Permissions != null && model.Permissions.Any())
                        {
                            foreach (var perm in model.Permissions)
                            {
                                db.UserPermissions.Add(new UserPermissions()
                                {
                                    UserId       = user.Id,
                                    UniversityId = perm.UniversityId,
                                    FacultyId    = perm.FacultyId.HasValue ? perm.FacultyId : null
                                });
                            }
                            db.SaveChanges();
                        }
                    }
                    catch (Exception e)
                    {
                        return;
                    }
                }
            }
        }
Example #5
0
        internal void CreateStudySubject(NewStudySubjectViewModel model, int?uniId)
        {
            using (var db = new ErasmusDbContext())
            {
                if (model.Id != null)
                {
                    //Edit
                    var sub = db.StudySubjects.SingleOrDefault(x => x.Id == model.Id && x.UniversityId == uniId);
                    if (sub == null)
                    {
                        throw new FormValidationException("Invalid subject");
                    }

                    sub.Credits    = model.Credits;
                    sub.Evaluation = model.Evaluation;
                    sub.Language   = model.Language;
                    sub.Name       = model.Name;
                    sub.Semester   = model.Semester;
                    db.SaveChanges();
                }
                else
                {
                    //New
                    db.StudySubjects.Add(new StudySubjects()
                    {
                        Credits      = model.Credits,
                        Evaluation   = model.Evaluation,
                        Language     = model.Language,
                        Name         = model.Name,
                        Semester     = model.Semester,
                        UniversityId = uniId
                    });

                    db.SaveChanges();
                }
            }
        }
Example #6
0
        public void CreateStudySubject(NewStudySubjectViewModel model)
        {
            using (var db = new ErasmusDbContext())
            {
                db.StudySubjects.Add(new StudySubjects()
                {
                    Credits    = model.Credits,
                    Evaluation = model.Evaluation,
                    Language   = model.Language,
                    Name       = model.Name,
                    Semester   = model.Semester
                });

                db.SaveChanges();
            }
        }
Example #7
0
 public void DeleteAgreement(string userId, int id)
 {
     using (var db = new ErasmusDbContext())
     {
         var agreement = db.Agreements.SingleOrDefault(x => x.Id == id);
         if (agreement == null)
         {
             throw new FormValidationException("Agreement not found");
         }
         if (agreement.ErasmusUserId != userId)
         {
             throw new FormValidationException("Not allowed to change state for this agreement");
         }
         db.Agreements.Remove(agreement);
         db.SaveChanges();
     }
 }
Example #8
0
 public void SaveNewUniversityAgreement(string userId, int targetId)
 {
     using (var db = new ErasmusDbContext())
     {
         var user      = db.Users.SingleOrDefault(x => x.Id == userId);
         var targetUni = db.Universities.SingleOrDefault(x => x.Id == targetId);
         if (user.University != null && targetUni != null)
         {
             db.UniversityAgreements.Add(new UniversityAgreements()
             {
                 SourceUniversityId = user.UniversityId.Value,
                 TargetUniversityId = targetUni.Id
             });
             db.SaveChanges();
         }
     }
 }
Example #9
0
        public void ChangeState(int id, AgreementState state, string reason = null)
        {
            using (var db = new ErasmusDbContext())
            {
                var agreement = db.Agreements.SingleOrDefault(x => x.Id == id);
                if (agreement == null)
                {
                    throw new FormValidationException("Agreement not found");
                }

                agreement.State = state;
                if (reason != null)
                {
                    agreement.DeclineReason = reason;
                }
                db.SaveChanges();
            }
        }
Example #10
0
        public void CreateNewFaculty(NewFacultyViewModel model)
        {
            using (var db = new ErasmusDbContext())
            {
                var fieldsOfStudy = db.FieldsOfStudy.Where(x => model.SelectedFos.Contains(x.Id)).ToList();
                if (fieldsOfStudy.Count != model.SelectedFos.Count)
                {
                    throw new ValidationException("Some fields of study were not found.");
                }

                db.Faculties.Add(new Faculty()
                {
                    Name        = model.Name,
                    StudyFields = fieldsOfStudy
                });

                db.SaveChanges();
            }
        }
Example #11
0
        public void CreateNewFieldOfStudy(NewFieldOfStudyViewModel model)
        {
            using (var db = new ErasmusDbContext())
            {
                var studySubjects = db.StudySubjects.Where(x => model.SelectedStudySubjects.Contains(x.Id)).ToList();
                if (studySubjects.Count != model.SelectedStudySubjects.Count)
                {
                    throw new ValidationException("Some study subjects were not found.");
                }

                db.FieldsOfStudy.Add(new FieldOfStudy()
                {
                    Name          = model.Name,
                    Degree        = model.Degree,
                    StudySubjects = studySubjects
                });

                db.SaveChanges();
            }
        }
Example #12
0
 public void SubmitAgreement(string userId, int id)
 {
     using (var db = new ErasmusDbContext())
     {
         var agreement = db.Agreements.SingleOrDefault(x => x.Id == id);
         if (agreement == null)
         {
             throw new FormValidationException("Agreement not found");
         }
         if (agreement.ErasmusUserId != userId)
         {
             throw new FormValidationException("Not allowed to delete this agreement");
         }
         if (agreement.State != AgreementState.New)
         {
             throw new FormValidationException("Only allowed to submit agreements that are new");
         }
         agreement.State = AgreementState.Submitted;
         db.SaveChanges();
     }
 }
Example #13
0
        public void CreateUniversity(NewUniversityViewModel model)
        {
            using (var db = new ErasmusDbContext())
            {
                var faculties = db.Faculties.Where(x => model.SelectedFaculties.Contains(x.Id)).ToList();
                if (faculties.Count != model.SelectedFaculties.Count)
                {
                    throw new ValidationException("Some faculties were not found.");
                }

                db.Universities.Add(new University()
                {
                    Faculties   = faculties,
                    Name        = model.Name,
                    Address     = model.Address,
                    City        = model.City,
                    Country     = model.Country,
                    ErasmusCode = model.ErasmusCode
                });

                db.SaveChanges();
            }
        }
Example #14
0
        public void SaveNewUniversityAgreement(int sourceId, int targetId)
        {
            var ids = new List <int>
            {
                sourceId,
                targetId
            };

            using (var db = new ErasmusDbContext())
            {
                var universities = db.Universities.Where(x => ids.Contains(x.Id)).ToList();
                if (universities.Count != 2)
                {
                    throw new ValidationException("Invalid university found.");
                }

                db.UniversityAgreements.Add(new UniversityAgreements()
                {
                    SourceUniversity = universities.SingleOrDefault(x => x.Id == sourceId),
                    TargetUniversity = universities.SingleOrDefault(x => x.Id == targetId)
                });
                db.SaveChanges();
            }
        }
Example #15
0
        public void ValidateAndSaveStudentAgreement(ErasmusUser user, AgreementViewModel model)
        {
            using (var db = new ErasmusDbContext())
            {
                #region Validation
                var sourceUniversity = db.Universities.SingleOrDefault(x => x.Id == model.SelectedSourceUniversity);
                var targetUniversity = db.Universities.SingleOrDefault(x => x.Id == model.SelectedTargetUniversity);
                if (sourceUniversity == null)
                {
                    throw new ValidationException("Invalid source university");
                }
                if (targetUniversity == null)
                {
                    throw new ValidationException("Invalid target university");
                }

                var agreement = db.UniversityAgreements.SingleOrDefault(x =>
                                                                        x.SourceUniversityId == sourceUniversity.Id && x.TargetUniversityId == targetUniversity.Id);
                if (agreement == null)
                {
                    throw new ValidationException("Invalid selection, agreement for selected universities not found");
                }

                var sourceFaculty =
                    sourceUniversity.Faculties.SingleOrDefault(x => x.Id == model.SelectedSourceFaculty);
                var targetFaculty =
                    targetUniversity.Faculties.SingleOrDefault(x => x.Id == model.SelectedTargetFaculty);
                if (sourceFaculty == null)
                {
                    throw new ValidationException("Invalid source faculty");
                }
                if (targetFaculty == null)
                {
                    throw new ValidationException("Invalid target faculty");
                }

                var sourceFos =
                    sourceFaculty.StudyFields.SingleOrDefault(x => x.Id == model.SelectedSourceFieldOfStudy);
                var targetFos =
                    targetFaculty.StudyFields.SingleOrDefault(x => x.Id == model.SelectedTargetFieldOfStudy);
                if (sourceFos == null)
                {
                    throw new ValidationException("Invalid source field of study");
                }
                if (targetFos == null)
                {
                    throw new ValidationException("Invalid target field of study");
                }

                var sourceStudySubjects = sourceFos.StudySubjects.Where(x => model.SelectedSourceStudySubjects.Contains(x.Id)).ToList();
                var targetStudySubjects = targetFos.StudySubjects.Where(x => model.SelectedTargetStudySubjects.Contains(x.Id)).ToList();

                var srcSsIds = sourceStudySubjects.Select(x => x.Id).ToList();
                var trgSsIds = targetStudySubjects.Select(x => x.Id).ToList();

                /*if (!srcSsIds.All(model.SelectedSourceStudySubjects.Contains) || srcSsIds.Count != model.SelectedSourceStudySubjects.Count)
                 *   throw new ValidationException("Invalid source study subjects found");
                 * if (!trgSsIds.All(model.SelectedTargetStudySubjects.Contains) || trgSsIds.Count != model.SelectedTargetStudySubjects.Count)
                 *   throw new ValidationException("Invalid target study subjects found");*/

                var sourceCreditCount = sourceStudySubjects.Sum(x => x.Credits);
                var targetCreditCount = targetStudySubjects.Sum(x => x.Credits);
                if (sourceCreditCount != targetCreditCount)
                {
                    throw new ValidationException("Credit count must match");
                }

                if (model.From < DateTime.UtcNow)
                {
                    throw new ValidationException("Date from can't be earlier than today");
                }
                if (model.To < model.From)
                {
                    throw new ValidationException("Date to can't be earlier than date from");
                }

                //TODO add whatever else is needed. Semester, min credit count, language, time range etc.
                #endregion

                var storageModel = new AgreementStorage()
                {
                    Student             = user,
                    LanguageLevel       = model.LanguageLevel,
                    SourceUniversity    = sourceUniversity,
                    TargetUniversity    = targetUniversity,
                    Semester            = model.SelectedSemester,
                    Language            = model.Language,
                    TargetStudySubjects = targetStudySubjects,
                    EndDate             = model.To,
                    FinancingSource     = "",
                    Scholarship         = 0,
                    SourceFaculty       = sourceFaculty,
                    SourceFieldOfStudy  = sourceFos,
                    SourceStudySubjects = sourceStudySubjects,
                    StartDate           = model.From,
                    State              = "NEW",
                    StoragePath        = "",
                    TargetFaculty      = targetFaculty,
                    TargetFieldOfStudy = targetFos
                };
                var path = SaveAgreementToStorage(storageModel);
                db.Agreements.Add(new Agreement()
                {
                    EndDate              = model.To,
                    ErasmusUserId        = user.Id,
                    FinancingSource      = "",
                    Scholarship          = 0,
                    StartDate            = model.From,
                    State                = AgreementState.New,
                    StoragePath          = path,
                    StudyField           = sourceFos.Id,
                    SourceUniversityId   = sourceUniversity.Id,
                    TargetUniversityId   = targetUniversity.Id,
                    Language             = model.Language,
                    LanguageLevel        = model.LanguageLevel,
                    Semester             = model.SelectedSemester,
                    SourceFieldOfStudyId = model.SelectedSourceFieldOfStudy,
                    TargetFieldOfStudyId = model.SelectedTargetFieldOfStudy,
                    SourceFacultyId      = sourceFaculty.Id,
                    TargetFacultyId      = targetFaculty.Id,
                    SourceSubjects       = sourceStudySubjects,
                    TargetSubjects       = targetStudySubjects
                });
                db.SaveChanges();
            }
        }