public Raspisanie AddPara(ParaViewModel model) { SpezialRazdeliDisziplini spezialRazdeliDisziplini = _dataProvider.SpezialRazdeliDisziplini.FirstOrDefault( x => x.IdDisciplini == model.DisciplineId && x.IdSpezMeta == model.IdSpezMeta); DateTime dateOfPara = DateTime.Parse(model.DateOfPara); Raspisanie raspisanie = new Raspisanie() { Data = dateOfPara, IdUchPlanaDisciplini = spezialRazdeliDisziplini.IdUpPlanDisciplini, IdVidaRaboti = model.TypeOfParaId, IdVremyaZanyatia = model.TimeOfParaId, Pot = model.PotokId, IdSpiskaGrupp = model.GroupId != 0 ? model.GroupId : (int?)null, NomerPodGrupp = model.SubgroupId != 0 ? model.SubgroupId : (int?)null, IdPrepodaCafedri = model.PrepodiDisziplineId, NomerZanyatiaVSemestre = 0, Auditoriya = model.Auditory, TipNagruzki = 80 }; bool isParaExist = CheckForParaIdentity(raspisanie); bool isGroupHasNakladki = PrivateCheckForNakladkiForGroup(raspisanie); bool isPrepodHasNakladki = PrivateCheckForNakladkiForPrepod(raspisanie); if (!isParaExist && !isGroupHasNakladki && !isPrepodHasNakladki) { _dataProvider.Raspisanie.Add(raspisanie); _dataProvider.Save(); } else { if (model.GroupId != 0) { throw new ArgumentException("У группы накладки, измените время/или дату пары"); } else { throw new ArgumentException("У потока накладки, измените время/дату пары"); } } return raspisanie; }
public static LessonViewModel ToLessonViewModel(Raspisanie p) { return new LessonViewModel() { Id = p.Id, //предмет Discipline = new DisciplineMetaViewModel() { Id = p.SpezialRazdeliDisziplini.Discipline.Id, FullName = p.SpezialRazdeliDisziplini.Discipline.Name, ShortName = p.SpezialRazdeliDisziplini.Discipline.ShortName, TranslitName = TranslitHelper.RusToEng(p.SpezialRazdeliDisziplini.Discipline.ShortName) }, //учебная информация о занятии FlowId = p.Pot, FlowName = p.PotDictionary.Name, GroupId = p.IdSpiskaGrupp, GroupName = p.IdSpiskaGrupp.HasValue ? p.SpisokGrupp.Gruppa : "", SubGroupId = p.NomerPodGrupp, SubGroupName = p.NomerPodGrupp.HasValue ? p.NomerPodGrupp.Value.ToString() : "", SpecialityId = p.SpezialRazdeliDisziplini.IdSpezMeta, SpecialityName = p.SpezialRazdeliDisziplini.Spezialnost_SpezialnostMeta.Spezialnost.Spez + p.SpezialRazdeliDisziplini.Spezialnost_SpezialnostMeta.GodPostup, FormOfStudyId = p.SpezialRazdeliDisziplini.Spezialnost_SpezialnostMeta.IdFrmObuch, FormOfStudyName = p.SpezialRazdeliDisziplini.Spezialnost_SpezialnostMeta.FormObuchDictionary.Name, ////время занятия LessonTime = p.VremyaZanyatia.StartTime.ToString("H.mm") + "-" + p.VremyaZanyatia.EndTime.ToString("H.mm"), LessonStartTime = p.VremyaZanyatia.StartTime, LessonTypeId = p.VidiRabot.Id, LessonTypeName = p.VidiRabot.VidRabSokr, LessonTypeShortName = p.VidiRabot.VidRabAbbreviatura, Classroom = p.Auditoriya, PropodMeta = new UserMetaViewModel() { UserId = p.Prepod_PrepodiCafedri.Prepod_PrepodMeta.UserId, UserFullName = p.Prepod_PrepodiCafedri.Prepod_PrepodMeta.User.UserMeta.First().LastName + " " + p.Prepod_PrepodiCafedri.Prepod_PrepodMeta.User.UserMeta.First().FirstName + " " + p.Prepod_PrepodiCafedri.Prepod_PrepodMeta.User.UserMeta.First().MiddleName } }; }
public Raspisanie AddParaForPrepod(ParaViewModel model) { Spezialnost_SpezialnostMeta spezialnostSpezialnostMeta = _dataProvider.SpezialnostMeta.FirstOrDefault( x => x.IdSpez == model.SpezialnostId && x.GodPostup == model.Year); SpezialRazdeliDisziplini spezialRazdeliDisziplini = _dataProvider.SpezialRazdeliDisziplini.FirstOrDefault( x => x.IdDisciplini == model.DisciplineId && x.IdSpezMeta == spezialnostSpezialnostMeta.Id); DateTime dateOfPara = DateTime.Parse(model.DateOfPara); Prepod_PrepodMeta prepodPrepodMeta = _dataProvider.PrepodMetadata.FirstOrDefault(x => x.UserId == model.PrepodId); Prepod_PrepodiCafedri prepodPrepodiCafedri = _dataProvider.PrepodiCafedri.FirstOrDefault(x => x.IdSotr == prepodPrepodMeta.Id); Raspisanie raspisanie = new Raspisanie() { Data = dateOfPara, IdUchPlanaDisciplini = spezialRazdeliDisziplini.IdUpPlanDisciplini, IdVidaRaboti = model.TypeOfParaId, IdVremyaZanyatia = model.TimeOfParaId, Pot = model.ПотокИд,//для преподов на русском IdSpiskaGrupp = model.GroupId != 0 ? model.GroupId : (int?)null, NomerPodGrupp = model.SubgroupId != 0 ? model.SubgroupId : (int?)null, IdPrepodaCafedri = prepodPrepodiCafedri.Id, NomerZanyatiaVSemestre = 0, Auditoriya = model.Auditory, TipNagruzki = 80 }; bool isParaExist = CheckForParaIdentity(raspisanie); bool isPrepodHasNakladki = PrivateCheckForNakladkiForPrepod(raspisanie); bool isGroupHasNakladki = PrivateCheckForNakladkiForGroup(raspisanie); if (!isParaExist && !isPrepodHasNakladki && !isGroupHasNakladki) { _dataProvider.Raspisanie.Add(raspisanie); _dataProvider.Save(); } else { throw new ArgumentException("У преподавателя накладки, измените время/дату пары"); } return raspisanie; }
/// <summary> /// проверка на то чтобы в одно и то же время у препода не было другой пары /// </summary> /// <param name="model"></param> /// <returns></returns> private bool PrivateCheckForNakladkiForPrepod(Raspisanie model) { bool isPrepodHasNakladki = _dataProvider.Raspisanie.FilterNoTracking( x => x.Data == model.Data && x.IdPrepodaCafedri == model.IdPrepodaCafedri) .Any(x => x.IdVremyaZanyatia == model.IdVremyaZanyatia); return isPrepodHasNakladki; }
/// <summary> /// Проверка на идентичность пары(дублирование) /// </summary> /// <param name="model"></param> /// <returns></returns> private bool CheckForParaIdentity(Raspisanie model) { bool isParaExist = _dataProvider.Raspisanie.FilterNoTracking(x => x.Data == model.Data) .Any(x => x.Auditoriya == model.Auditoriya && x.IdPrepodaCafedri == model.IdPrepodaCafedri && x.IdVremyaZanyatia == model.IdVremyaZanyatia && x.IdUchPlanaDisciplini == model.IdUchPlanaDisciplini && x.IdVidaRaboti == model.IdVidaRaboti && x.Pot == model.Pot && x.IdSpiskaGrupp == model.IdSpiskaGrupp && x.NomerPodGrupp == model.NomerPodGrupp); return isParaExist; }
/// <summary> /// проверка на то чтобы в одно и то же время у группы не было другой пары /// </summary> /// <param name="model"></param> /// <returns></returns> public bool PrivateCheckForNakladkiForGroup(Raspisanie model) { bool isGroupHasAnotherParaInTheSameTime; List<Raspisanie> raspisanies = _dataProvider.Raspisanie.FilterNoTracking( x => x.Data == model.Data && x.Pot == model.Pot && x.IdVremyaZanyatia == model.IdVremyaZanyatia && x.IdVidaRaboti == 5).ToList(); if (raspisanies.Count > 0) { isGroupHasAnotherParaInTheSameTime = true; } else { isGroupHasAnotherParaInTheSameTime = _dataProvider.Raspisanie.FilterNoTracking( x => x.Data == model.Data && x.Pot == model.Pot && x.IdSpiskaGrupp == model.IdSpiskaGrupp && x.NomerPodGrupp == model.NomerPodGrupp) .Any(x => x.IdVremyaZanyatia == model.IdVremyaZanyatia); } return isGroupHasAnotherParaInTheSameTime; }