Пример #1
0
 /// <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();
                    }
                }
            }
        }
Пример #3
0
        /// <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();
        }