Ejemplo n.º 1
0
        /// <summary>
        ///     Inserta una nueva entidad profesor
        /// </summary>
        /// <param name="entity">
        ///     La entidad profesor a guardar
        /// </param>
        /// <exception cref="DniDuplicateEntryException">
        ///     Lanza DniDuplicateEntryException si ya existe
        ///     un profesor con el mismo dni
        /// </exception>
        /// <returns>
        ///     Retorna la entidad profesor guardada
        ///     con su Id generado
        /// </returns>
        public async Task <TeacherEntity> Save(TeacherEntity entity)
        {
            try
            {
                await _dbContext.TeacherEntities.AddAsync(entity);

                await _dbContext.SaveChangesAsync();

                _logger.LogInformation("El profesor se ha guardado correctamente");
            }
            catch (DbUpdateException ex)
            {
                if (ex.InnerException.Message.Contains("UQ_dni"))
                {
                    _logger.LogWarning("El profesor no se ha actualizado " +
                                       "porque su dni ya existe en la base de datos");

                    throw new DniDuplicateEntryException();
                }
                //Por cualquier otra razon lanzo la excepción
                else
                {
                    throw ex;
                }
            }

            return(entity);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Inserta una nueva entidad asignatura
        /// </summary>
        /// <param name="subjectEntity">
        ///     La entidad asignatura a guardar
        /// </param>
        /// <exception cref="SubjectNameDuplicateEntryException">
        ///     Lanza SubjectNameDuplicateEntryException si el nombre de la
        ///     asignatura ya existe
        /// </exception>
        /// <returns>
        ///     Retorna la entidad asignatura guardada
        ///     con el id generado
        /// </returns>
        public async Task <SubjectEntity> Save(SubjectEntity subjectEntity)
        {
            try
            {
                await _dbContext.SubjectEntities.AddAsync(subjectEntity);

                await _dbContext.SaveChangesAsync();

                _logger.LogInformation("Asignatura guardada correctamente");
            }
            catch (DbUpdateException ex)
            {
                if (ex.InnerException.Message.Contains("UQ_subject_name"))
                {
                    _logger.LogWarning("La asignatura no se ha guardado porque " +
                                       "su nombre ya existe");

                    throw new SubjectNameDuplicateEntryException();
                }
                //Cualquier otra razón, lanzo la excepción
                else
                {
                    throw ex;
                }
            }

            return(subjectEntity);
        }
        /// <summary>
        ///     Agrega una nueva asignatura a un curso
        ///     llamando un procedimiento de la base de datos que:
        ///     - inserta la relacion entre la asignatura y el curso
        ///     - inserta las relaciones entre la asignatura y cada alumno
        ///       que cursa el curso
        /// </summary>
        /// <param name="courseId">
        ///     El id del curso
        /// </param>
        /// <param name="subjectId">
        ///     El id de la asignatura
        /// </param>
        /// <exception cref="CourseSubjectDuplicateEntryException">
        ///     Lanza CourseSubjectDuplicateEntryException si se intenta
        ///     insertar una relacion entre el curso y la asignatura que
        ///     ya existe.
        /// </exception>
        /// <returns>
        ///     Retorna true
        /// </returns>
        public async Task <bool> AssignSubject(int courseId, int subjectId)
        {
            var course_id  = new MySqlParameter("@courseId", courseId);
            var subject_id = new MySqlParameter("@subjectId", subjectId);

            try
            {
                _dbContext.Database.ExecuteSqlRaw("call add_subject_to_course(@subjectId,@courseId)", subject_id, course_id);

                await _dbContext.SaveChangesAsync();

                _logger.LogInformation("La asignatura ha sido agregada al curso");
            }
            catch (DbUpdateException ex)
            {
                //Si la base de datos lamza un error Unique Constraint si se asigna a un
                //curso una asignatura que ya tiene asignada
                if (ex.InnerException.Message.Contains("UQ_course_subject"))
                {
                    _logger.LogWarning("Error: se ha intentado agregar a a un curso " +
                                       "una asignatura que ya tiene");

                    throw new CourseSubjectDuplicateEntryException();
                }
                //Por cualquier otra razón, se lanza la excepción
                else
                {
                    throw ex;
                }
            }

            return(true);
        }
        /// <summary>
        ///     Inserta una nueva ebtidad alumno
        /// </summary>
        /// <param name="studentEntity"></param>
        /// <exception cref="DniDuplicateEntryException">
        ///     Lanza DniDuplicateEntryException si el dni del alumno ya existe
        /// </exception>
        /// <returns>
        ///     Retorna la entidad alumno guardada con su id generado
        /// </returns>
        public async Task <StudentEntity> Save(StudentEntity studentEntity)
        {
            try
            {
                await _dbContext.StudentEntities.AddAsync(studentEntity);

                await _dbContext.SaveChangesAsync();

                _logger.LogInformation("Alumno guardado en la base de datos.");
            }
            catch (DbUpdateException ex)
            {
                if (ex.InnerException.Message.Contains("UQ_dni"))
                {
                    _logger.LogWarning("El alumno no se ha guardado " +
                                       "porque su dni ya existe en la base de datos");

                    throw new DniDuplicateEntryException();
                }
                //Por cualquier otra razon lanzo la excepción
                else
                {
                    throw ex;
                }
            }


            return(studentEntity);
        }
        /// <summary>
        ///     Cancela la vigencia de una clase llamando a un
        ///     procedimiento de la base de datos que:
        ///     -cancela la clase estableciendo el valor false al
        ///      campo "isCurrent"
        ///     -Borra todas las relaciones entre los alumnos y la clase
        /// </summary>
        /// <param name="schoolClassEntity">
        ///     El id de la clase
        /// </param>
        /// <returns><
        ///     Retorna true
        /// /returns>
        public async Task <bool> Cancel(int schoolClassId)
        {
            var id = new MySqlParameter("@schoolClassId", schoolClassId);

            _dbContext.Database.ExecuteSqlRaw("call cancel_school_class(@schoolClassId)", id);

            await _dbContext.SaveChangesAsync();

            return(true);
        }
Ejemplo n.º 6
0
        /// <summary>
        ///     Actualiza una entidad ciclo
        /// </summary>
        /// <param name="cycleId">
        ///     El id del ciclo
        /// </param>
        /// <exception cref="CycleNameDuplicateEntryException">
        ///     Lanza GradeNameDuplicateEntryException
        ///     si el nombre del ciclo ya existe en la base de datos
        /// </exception>
        /// <returns>
        ///     Retorna true
        /// </returns>
        public async Task <bool> Update(CycleEntity cycleEntity)
        {
            CycleEntity c = await this.Get(cycleEntity.Id);

            try
            {
                c.Name        = cycleEntity.Name;
                c.ShiftEntity = cycleEntity.ShiftEntity;
                await _dbContext.SaveChangesAsync();

                _logger.LogInformation("El ciclo se ha actualizado correctamente");
            }
            catch (DbUpdateException ex)
            {
                //Si la base de datos lamza un error Unique Constraint por el campo "name"
                if (ex.InnerException.Message.Contains("UQ_cycle_name"))
                {
                    _logger.LogWarning("Error: El ciclo no se ha actualizado " +
                                       "porque su nombre ya existe");

                    throw new CycleNameDuplicateEntryException();
                }
                //Por cualquier otra razón, se lanza la excepción
                else
                {
                    throw ex;
                }
            }

            return(true);
        }
        /// <summary>
        ///     Guarda varias ausencias en la base de datos
        ///     con un bucle que llama un procedimiento que comprueba
        ///     si la ausencia ya existe, en tal caso
        ///     la borra si es cancelada o la modifica si es de otro tipo.
        ///     En el caso de que la ausencia no existe, inserta una nueva.
        ///     El procedimiento tambien dispara un trigger que actualiza las
        ///     ausencias y retrasos totales del alumno.
        /// </summary>
        /// <param name="absenceEntities"></param>
        /// <returns>
        ///     Retorna true
        /// </returns>
        public async Task <bool> Save(List <AbsenceEntity> absenceEntities)
        {
            absenceEntities.ForEach(a =>
            {
                var schoolClassId = new MySqlParameter("@schoolClassId", a.SchoolClassId);
                var studentId     = new MySqlParameter("@studentId", a.StudentId);
                var type          = new MySqlParameter("@type", a.Type);

                _dbContext.Database.ExecuteSqlRaw("call insert_absence(@schoolClassId,@studentId,@type)",
                                                  schoolClassId, studentId, type);
            });

            await _dbContext.SaveChangesAsync();

            _logger.LogInformation("Ausencias guardas en la base de datos");

            return(true);
        }