public async Task <bool> SavePreference(DtoSchedule schedule)
 {
     try
     {
         using (var data = Context)
         {
             var s = await(from item in data.Preferences where schedule.Id == item.id select item).FirstOrDefaultAsync();
             // Updating Course
             if (s != null)
             {
                 s.userId     = schedule.User.Id;
                 s.courseId   = schedule.Course.Id;
                 s.scheduleId = schedule.Id;
             }
             // Adding new Course
             else
             {
                 data.Preferences.Add(ScheduleConverter.DtoToDataAccess(schedule));
             }
             await data.SaveChangesAsync();
         }
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
        public async Task <IActionResult> GetScheduleForTeacher(int teacherId)
        {
            var periodTimeslots = await ScheduleRepository.GetScheduleForTeacherAsync(teacherId);

            var weeks = ScheduleConverter.Convert(periodTimeslots);

            return(new OkObjectResult(weeks));
        }
 public async Task <DtoSchedule> GetPreference(int id)
 {
     try
     {
         using (var data = Context)
             return(ScheduleConverter.DataAccsessToDto(await(from item in data.Preferences where item.id == id select item).FirstOrDefaultAsync()));
     }
     catch (Exception)
     {
         return(null);
     }
 }
 public async Task <bool> SaveSchedule(IList <DtoSchedule> schedules)
 {
     try
     {
         using (var data = Context)
         {
             foreach (var item in schedules)
             {
                 data.Preferences.Add(ScheduleConverter.DtoToDataAccess(item));
             }
             await data.SaveChangesAsync();
         }
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
        public async Task <ObservableCollection <DtoSchedule> > GetSchedules(int filter = -1)
        {
            var ret = new ObservableCollection <DtoSchedule>();

            using (var data = Context)
            {
                if (filter != -1)
                {
                    foreach (var item in await(from item in data.Preferences where item.userId == filter select item).OrderBy(item => item.scheduleId).ToListAsync())
                    {
                        ret.Add(ScheduleConverter.DataAccsessToDto(item));
                    }
                }
                else
                {
                    foreach (var item in await(from item in data.Preferences select item).OrderBy(item => item.scheduleId).ToListAsync())
                    {
                        ret.Add(ScheduleConverter.DataAccsessToDto(item));
                    }
                }
                return(ret);
            }
        }
        public async Task <List <DtoSchedule> > GetAllSchedules()
        {
            var ret = new List <DtoSchedule>();

            using (var data = Context)
            {
                ret.AddRange(from item in await(from item in data.Preferences select item).OrderBy(item => item.scheduleId).ToListAsync() select ScheduleConverter.DataAccsessToDto(item));
                return(ret);
            }
        }
        private async Task <GridResponse> GetScheduleGridPrivate()
        {
            var periodTimeslots = await PeriodTimeslotRepository.GetEntityListAsync();

            var weeks = ScheduleConverter.Convert(periodTimeslots);

            var classrooms = await ClassroomRepository.GetEntityListAsync();

            var buildings = ScheduleConverter.Convert(classrooms);

            var schedule = await ScheduleRepository.GetEntityListAsync();

            var cells = new List <List <ScheduleCellResponse> >();

            foreach (var building in buildings)
            {
                foreach (var room in building.ClassroomsResponse)
                {
                    var row = new List <ScheduleCellResponse>();

                    foreach (var week in weeks)
                    {
                        foreach (var day in week.DaysResponse)
                        {
                            foreach (var dayTimeslot in day.DayTimeslotsResponse)
                            {
                                var cell = new ScheduleCellResponse();

                                var isBlocked = classrooms
                                                .FirstOrDefault(c => c.Id == room.Id)
                                                ?.BanClassroomPeriodTimeslots
                                                .Any(b => b.PeriodTimeslotId == dayTimeslot.Id) ?? false;

                                if (isBlocked)
                                {
                                    cell.CellType = CellType.Blocked;
                                }


                                var teachingUnit = schedule
                                                   .FirstOrDefault(s => s.ClassroomId == room.Id && s.PeriodTimeslotId == dayTimeslot.Id)
                                                   ?.TeachingUnit;

                                if (teachingUnit != null)
                                {
                                    cell.GroupName      = $"{teachingUnit.Group.Name} ({teachingUnit.Group.StudentsCount} чел.)";
                                    cell.CourseName     = teachingUnit.Course.Name;
                                    cell.LessonTypeName = $"{teachingUnit.LessonType.Name}";
                                    cell.TeacherName    = $"{teachingUnit.Teacher.SecondName} {teachingUnit.Teacher.FirstName.Substring(0, 1)}. {teachingUnit.Teacher.MiddleName?.Substring(0, 1)}.";
                                    cell.TeacherPost    = $"({teachingUnit.Teacher.Post.Description})";

                                    cell.CellType =
                                        teachingUnit.LessonTypeId == 1 ? CellType.Lecture :
                                        teachingUnit.LessonTypeId == 2 ? CellType.Practice :
                                        teachingUnit.LessonTypeId == 3 ? CellType.LaboratoryWork :
                                        CellType.Empty;
                                }

                                row.Add(cell);
                            }
                        }
                    }

                    cells.Add(row);
                }
            }

            return(new GridResponse()
            {
                Weeks = weeks,
                Buildings = buildings,
                Cells = cells
            });
        }