/// <summary>
        ///     Evento al pulsar Retirar asignación:
        ///     Envia al cliente http el id de la asignatura seleccionada para que se le retire
        ///     la asignación de profesor
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void buttonRemoveTeacher_Click(object sender, EventArgs e)
        {
            if (this.dgvSubjects.SelectedRows[0].Cells[0].Value != null)
            {
                int id = (int)this.dgvSubjects.SelectedRows[0].Cells[0].Value;
                this.selectedSubject = subjects.Find(s => s.Id == id);

                if (this.selectedSubject.Teacher != null)
                {
                    string message = string
                                     .Format("Si retiras la asignación del profesor {0}, todas las " +
                                             "clases de {1} quedarán canceladas.¿Estas seguro " +
                                             "de querer retirar la asignación?",
                                             this.selectedSubject.Teacher.FullName,
                                             this.selectedSubject.Name);

                    //Ventanita de confirmación
                    CustomConfirmDialogForm dialog = new CustomConfirmDialogForm(message);
                    dialog.ShowDialog();

                    if (dialog.Confirmed)
                    {
                        try
                        {
                            await SubjectHttpService
                            .RemoveAssignedTeacher(this.selectedSubject.Id);

                            this.selectedSubject.Teacher = null;
                            //Actualiza la tabla
                            this.dgvSubjects.SelectedRows[0].Cells[2].Value = "Sin asignar";

                            //Ventanita de mensaje de éxito
                            message = string
                                      .Format("La asignatura {0} ya no tiene profesor asignado y las" +
                                              " clases han sido canceladash.",
                                              this.selectedSubject.Name);

                            new CustomSuccesMessageWindow(message).ShowDialog();
                        }
                        catch (ServerErrorException ex)
                        {
                            new CustomErrorMessageWindow(ex.Message).ShowDialog();
                        }
                    }
                }
                else
                {
                    new CustomErrorMessageWindow("La asignatura " + this.selectedSubject.Name + " no tiene profesor asignado.")
                    .ShowDialog();
                }
            }
            else
            {
                new CustomErrorMessageWindow("Debes seleccionar una asignatura antes.")
                .ShowDialog();
            }
        }
예제 #2
0
        /// <summary>
        ///     Evento al pulsar Modificar:
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void ButtonModifyCycle_Click(object sender, EventArgs e)
        {
            string cycleName = this.tbCycleName.Text;

            if (cycleName.Length > 0)
            {
                this.btnModifyCycle.Enabled = false;

                try
                {
                    bool confirmed = true;

                    int shiftId = (int)this.cbShiftes.SelectedValue;
                    //Si se cambia el turno -> mensaje de confirmacion con aviso
                    if (shiftId != this.defaultShiftid)
                    {
                        string message = "Si cambias el turno, se cancelaran todas las clases del ciclo," +
                                         " ¿Estás seguro de querer cambiar el turno?";
                        CustomConfirmDialogForm dialog = new CustomConfirmDialogForm(message);
                        dialog.ShowDialog();

                        if (!dialog.Confirmed)
                        {
                            confirmed = false;
                            this.btnModifyCycle.Enabled = true;
                        }
                    }

                    if (confirmed)
                    {
                        cycle.Name  = cycleName;
                        cycle.Shift = this.shifts.Find(s => s.Id == shiftId);

                        await CycleHttpService.Update(cycle);

                        this.OnCycleUpdatedDelegate(cycle);

                        //Ventanita con mensaje de éxito
                        string message = "Se han guardado los cambios del ciclo formativo.";
                        new CustomSuccesMessageWindow(message).ShowDialog();

                        this.Close();
                    }
                }
                catch (ServerErrorException ex)
                {
                    new CustomErrorMessageWindow(ex.Message).ShowDialog();

                    this.btnModifyCycle.Enabled = true;
                }
            }
        }
        /// <summary>
        ///     Evento al pulsar el botón Retirar asignatura del primer curso:
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void ButtonRemoveSubject1_Click(object sender, EventArgs e)
        {
            if (this.dgvSubjects.Rows.Count > 0 &&
                this.dgvSubjects.SelectedRows[0].Cells[0].Value != null)
            {
                try
                {
                    //Recupera el Id de la asignatura seleccionada
                    int selectedId = int
                                     .Parse(this.dgvSubjects
                                            .SelectedRows[0].Cells[0].Value.ToString());

                    //Recupero la asignatura de la lista de asignaturas del curso
                    Subject subject = selectedCourse.Subjects
                                      .FirstOrDefault(s => s.Id == selectedId);

                    //Abre dialogo de confirmación
                    string message = string.
                                     Format("Si retiras la asignatura {0} de {1}º de {2}, " +
                                            "se cancelarán todas las clases, " +
                                            "¿Estás seguro de querer retirarla? ",
                                            subject.Name,
                                            selectedCourse.Year,
                                            selectedCycle.Name);

                    CustomConfirmDialogForm dialog = new CustomConfirmDialogForm(message);
                    dialog.ShowDialog();

                    //Si se confirma se retira la asignatura
                    if (dialog.Confirmed)
                    {
                        //Envio el curso copiado al servicio http y este retorna
                        //el curso modificado por el servidor
                        await CourseHttpService
                        .RemoveAssignedSubject(selectedCourse.Id, selectedId);

                        //Borro la asignatura del curso
                        selectedCourse.Subjects.Remove(subject);

                        //Refresca la tabla de asignaturas del primer curso
                        this.PopulateSubjectsTable();

                        //Ventanita con mensaje de éxito
                        message = string.Format("La asignatura {0} ha sido " +
                                                "retirada de {1}º de {2}",
                                                subject.Name, selectedCourse.Year, selectedCycle.Name);

                        new CustomSuccesMessageWindow(message).ShowDialog();
                    }
                }
                catch (ServerErrorException ex)
                {
                    //Ventanita de mensaje de error devuelto por el servidor
                    new CustomErrorMessageWindow(ex.Message).ShowDialog();
                }
            }
            else
            {
                new CustomErrorMessageWindow("Debes seleccionar una asignatura antes.")
                .ShowDialog();
            }
        }
예제 #4
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();
        }