/// <summary> /// Evento al pulsar asignar /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ButtonAssign_Click(object sender, EventArgs e) { if (this.dgvSubjects.SelectedRows[0].Cells[0].Value != null) { //Recupera el id de la asignatura seleccionada int selectedId = (int)this.dgvSubjects .SelectedRows[0].Cells[0].Value; //Recupera la asignatura Subject subject = subjects.FirstOrDefault(s => s.Id == selectedId); try { //Agrega la asignatura al curso await CourseHttpService.AssignSubject(_course.Id, selectedId); string name = (string)this.dgvSubjects .SelectedRows[0].Cells[1].Value; string message = string.Format("Se ha añadidio la asignatura {0} a {1}º de {2}.", name, _course.Year, _cycleName); CustomSuccesMessageWindow dialog = new CustomSuccesMessageWindow(message); dialog.ShowDialog(); this.OnSubjectAddedDelegate(subject);//Callback con la asignatura añadida this.Close(); } catch (ServerErrorException ex) { new CustomErrorMessageWindow(ex.Message).ShowDialog(); } } else { new CustomErrorMessageWindow("Debes seleccionar una asignatura antes.") .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(); }