public IHttpActionResult Put([FromBody] ModuloDTO moduloDTO)
        {
            string message = "Un error ocurrio mientras se actualizaba el modulo: ";
            if (!ModelState.IsValid)
            {
                message += "Modulo ModelState no es valido.";
                return BadRequest(ModelState);
            }

            //string[] moduloDTOToSave = moduloDTO.Cursos.Distinct().ToArray();

            using (var db = new SIGAEntities())
            {
                try
                {
                    Modulo modulo = db.Modulo.First(m => m.ModId == moduloDTO.ModId);
                    modulo.ModNivelId = (int)db.ModuloNivel.Where(mn => mn.ModNivelNombre == moduloDTO.ModNivel).Select(id => id.ModNivelId).FirstOrDefault();
                    modulo.ModCatId = (int)db.ModuloCategoria.Where(mn => mn.ModCatNombre == moduloDTO.ModCategroria).Select(id => id.ModCatId).FirstOrDefault();
                    modulo.ModNombre = moduloDTO.ModNombre;
                    modulo.ModNumHoras = moduloDTO.ModNumHoras;
                    modulo.ModNumMes = moduloDTO.ModNumMes;
                    modulo.ModNumCursos = moduloDTO.ModNumCursos;

                    if (moduloDTO.Cursos.Count() > 0)
                    {

                        DeleteModuloCursoInputParams deleteModuloCursoInputParams = new DeleteModuloCursoInputParams()
                        {
                            ModId = moduloDTO.ModId
                        };

                        ModuloCursoAllSpProcess ModuloCursoAllSPPRocess = new ModuloCursoAllSpProcess();
                        ModuloCursoAllSPPRocess.EliminarModuloCurso(deleteModuloCursoInputParams);

                        foreach (var moduloCursoItem in moduloDTO.Cursos)
                        {
                            if (!String.IsNullOrEmpty(moduloCursoItem.CurName))
                            {
                                var cursoFound = db.Curso.Where(c => c.CurName == moduloCursoItem.CurName).FirstOrDefault();

                                Curso curso = new Curso();
                                if (cursoFound == null)
                                {
                                    curso.CurName = moduloCursoItem.CurName;
                                    curso.CurNumHoras = moduloCursoItem.CurNumHoras;
                                    curso.CurPrecio = moduloCursoItem.CurPrecio;
                                    db.Curso.Add(curso);
                                    db.SaveChanges();
                                }

                                ModuloCurso moduloCurso = new ModuloCurso();
                                moduloCurso.MCFechaRegistro = DateTime.UtcNow;
                                moduloCurso.ModId = modulo.ModId;
                                moduloCurso.CurId = curso.CurId == 0 ? cursoFound.CurId : curso.CurId;

                                db.ModuloCurso.Add(moduloCurso);

                            }
                        }
                    }

                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    if (!ModuloExists(moduloDTO.ModId))
                    {
                        message = "An error ocurred while updating event: No event found with requested event id = " + moduloDTO.ModId.ToString();
                        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, message + " " + ex));
                    }
                    else
                    {
                        message = "Un error ocurrio mientras se actualizaba el modulo " + ex;
                        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message));
                    }
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }
        // POST: api/ModuloCurso
        public IHttpActionResult Post([FromBody] ModuloDTO moduloDTO)
        {
            string message = "Un error ocurrio cuando se estaba creando el modulo: ";
            if (!ModelState.IsValid)
            {
                message += "Modulo ModelState es no valido.";
                return BadRequest(ModelState);
            }

            try
            {
                Modulo modulo = new Modulo();
                modulo.ModNivelId = (int)db.ModuloNivel.Where(mn => mn.ModNivelNombre == moduloDTO.ModNivel).Select(id => id.ModNivelId).FirstOrDefault();
                modulo.ModCatId = (int)db.ModuloCategoria.Where(mn => mn.ModCatNombre == moduloDTO.ModCategroria).Select(id => id.ModCatId).FirstOrDefault();
                modulo.ModNombre = moduloDTO.ModNombre;
                modulo.ModNumHoras = moduloDTO.ModNumHoras;
                modulo.ModNumMes = moduloDTO.ModNumMes;
                modulo.ModNumCursos = moduloDTO.ModNumCursos;

                db.Modulo.Add(modulo);

                if (moduloDTO.Cursos.Count() > 0)
                {
                    List<Curso> cursoList = new List<Curso>();
                    foreach (var moduloCursoItem in moduloDTO.Cursos)
                    {
                        if (!String.IsNullOrEmpty(moduloCursoItem.CurName))
                        {

                            var cursoFound = db.Curso.Where(c => c.CurName == moduloCursoItem.CurName).FirstOrDefault();

                            Curso curso = new Curso();
                            if (cursoFound == null)
                            {
                                curso.CurName = moduloCursoItem.CurName;
                                curso.CurNumHoras = moduloCursoItem.CurNumHoras;
                                curso.CurPrecio = moduloCursoItem.CurPrecio;
                                db.Curso.Add(curso);
                                db.SaveChanges();
                            }

                            cursoList.Add(curso);

                            ModuloCurso moduloCurso = new ModuloCurso();
                            moduloCurso.MCFechaRegistro = DateTime.UtcNow;
                            moduloCurso.ModId = modulo.ModId;
                            moduloCurso.CurId = curso.CurId;

                            db.ModuloCurso.Add(moduloCurso);
                        }
                    }
                }

                db.SaveChanges();
            }
            catch (DbUpdateException ex)
            {
                if (ModuloExists(moduloDTO.ModId))
                {
                    message = "An error ocurred while creating event: Event with EventId = " + moduloDTO.ModId.ToString() + " " + ex;
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Conflict, message));
                }
                else if (moduloDTO.ModNivel == "-- Elegir ModuloNivel --")
                {
                    message = "Elegir el Nivel del Modulo";
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Conflict, message));
                }
                else
                {
                    message = "An error ocurred while creating event: " + ex;
                    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message));
                }
            }

            return CreatedAtRoute("DefaultApi", new { id = moduloDTO.ModId }, moduloDTO);
        }