/// <summary> /// Obtiene la lista de clases de un curso del cliente http /// </summary> /// <returns></returns> private async Task GetClasses() { try { this.schoolClasses = await SchoolClassHttpService .GetByCourse(this.selectedCourse.Id); } catch (ServerErrorException ex) { new CustomErrorMessageWindow(ex.Message).ShowDialog(); //Si hay un error se limpia la tabla this.DeleteSchoolClassCells(); } }
/// <summary> /// Evento al pulsar Guardar /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ButtonSave_Click(object sender, EventArgs e) { if (this.cbSubjects.SelectedValue != null) { //Recupera la asignatura seleccionada int subjectId = (int)this.cbSubjects.SelectedValue; Subject subject = _course.Subjects.FirstOrDefault(s => s.Id == subjectId); //Si la asignatura no tiene profesor asignado, no se puede crear una clase if (subject.Teacher is null) { string message = "No puedes crear esta clase porque la asignatura " + subject.Name + " no tiene profesor asignado."; CustomErrorMessageWindow dialog = new CustomErrorMessageWindow(message); dialog.ShowDialog(); } else { try { SchoolClass schoolClass = new SchoolClass() { Course = _course, Day = _day, Schedule = _schedule, Subject = subject }; //El cliente http retorna la misma clase creada schoolClass = await SchoolClassHttpService.Save(schoolClass); this.Close(); this.OnSchoolClassCreatedDelegate(schoolClass); } catch (ServerErrorException ex) { new CustomErrorMessageWindow(ex.Message).ShowDialog(); } } } }
/// <summary> /// Evento al hacer click en cualquer celda, si la celda esta libre /// se abre el formulario para crear una nueva clase, sino /// se propone cancelar la clase de la celda /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void CellButtons_Click(object sender, DataGridViewCellEventArgs e) { // se recupera la celda clickeada int col = this.dgvSchedules.CurrentCell.ColumnIndex; int row = this.dgvSchedules.CurrentCell.RowIndex; //Siempre que no sea la columna de horarios if (col > 0) { //El dia de la semana corresponde al indice de la columna int day = col; //La hora en la que empieza la clase corresponse al horario de la primera columna string start = this.dgvSchedules.Rows[row].Cells[0].Value.ToString().Substring(0, 5); //Recupero la posible clase ya establecida ese dia a esa hora dentro de la lista de clases SchoolClass schoolClass = schoolClasses .FirstOrDefault(sc => sc.Day == (DayOfWeek)day && sc.Schedule.Start == start); //Sino hay clase prevista ese dia en ese horario, //se abre el formulario para crear una nueva clase if (schoolClass is null) { //Horario correspondiente Schedule schedule = this.selectedCycle.Shift.Schedules .FirstOrDefault(sc => sc.Start == start); CreateSchoolClassForm form = new CreateSchoolClassForm( this.selectedCourse, (DayOfWeek)day, schedule); form.OnSchoolClassCreatedDelegate += OnSchoolClassCreatedCallBack; form.ShowDialog(); } //Si ya existe una clase en la celda, se propone que la clase deje de ser vigente else { //Ventanita de confirmación string message = string .Format("Quieres cancelar la clase de {0} prevista a las {2} cada {1}?", schoolClass.Subject.Name, this.dgvSchedules.Columns[col].HeaderText.ToLower(), schoolClass.Schedule.Start); CustomConfirmDialogForm customConfirmDialogForm = new CustomConfirmDialogForm(message); customConfirmDialogForm.ShowDialog(); //Si se confirma if (customConfirmDialogForm.Confirmed) { try { int id = schoolClass.Id; //Envia al cliente http el id de la clase para cancelarla await SchoolClassHttpService.Cancel(id); //Ventanita de exito con aviso message = "La clase ha sido cancelada, recuerda que si " + "esta clase se impartía en varios cursos a la vez y deseas cancelarla " + "también en los demás cursos, tendrás que hacerlo en cada uno de ellos."; CustomSuccesMessageWindow ccdf = new CustomSuccesMessageWindow(message); ccdf.ShowDialog(); //Se borra la clase de la lista schoolClasses.Remove(schoolClass); } catch (ServerErrorException ex) { new CustomErrorMessageWindow(ex.Message).ShowDialog(); } } } this.PopulateSchedulesTable();//Se refresca la tabla en todo caso } this.dgvSchedules.ClearSelection(); }