public IHttpActionResult Post(ProgramacionViewModel programacionViewModel)
        {
            using (var db = new SIGAEntities())
            {
                try
                {
                    Programa programa = new Programa();
                    programa.ProgNombre = programacionViewModel.ProgramacionItem.ProgNombre;
                    programa.ProgDescripcion = programacionViewModel.ProgramacionItem.ProgDescripcion;
                    programa.ProgFechaRegistro = DateTime.UtcNow;
                    programa.ProgFechaInicio = DateTime.UtcNow; //Convert.ToDateTime(programacionViewModel.ProgramacionItem.ProgFechaInicio);
                    programa.ProgFechaFin = DateTime.UtcNow; // Convert.ToDateTime(programacionViewModel.ProgramacionItem.ProgFechaFin);
                    programa.ModId = programacionViewModel.ProgramacionItem.ModId;
                    programa.AulId = programacionViewModel.ProgramacionItem.AulId;
                    programa.HorId = programacionViewModel.ProgramacionItem.HorId;
                    programa.EsVigente = programacionViewModel.ProgramacionItem.EsVigente;

                    db.Programa.Add(programa);

                    db.SaveChanges();

                }
                catch (Exception e)
                {
                    throw;
                }

                return CreatedAtRoute("DefaultApi", new { id = programacionViewModel.ProgramacionItem.Prog_Id }, programacionViewModel);
            }
        }
        public ActionResult CursoPorModuloList([System.Web.Http.FromUri] string modNombre)
        {
            ProgramacionViewModel programacionViewModel = new ProgramacionViewModel();

            using (var db = new SIGAEntities())
            {
                try
                {
                    programacionViewModel.ProgramacionItem.ModuloCursoList = (from mc in db.ModuloCurso
                             join c in db.Curso on mc.CurId equals c.CurId
                             where mc.Modulo.ModNombre == modNombre
                             select new ModuloCursoItem
                             {

                                 CurId = c.CurId,
                                 CurNombre = c.CurName,
                                 CurNumHoras = c.CurNumHoras,
                                 CurPrecio = c.CurPrecio

                             }).ToList();

                    if (programacionViewModel.ProgramacionItem.ModuloCursoList.Count() == 0)
                    {
                        ViewBag.ModuleCursoItemCount = 0;
                        return PartialView("ProgramacionCursoListPartialView", programacionViewModel);
                    }
                }
                catch (Exception e)
                {
                    throw;
                }
            }

            return PartialView("ProgramacionCursoListPartialView", programacionViewModel);
        }
        public List<Modulo> GetCursoModuloNombres()
        {
            List<Modulo> modulos = new List<Modulo>();

            using (var db = new SIGAEntities())
            {
                try
                {
                    modulos = db.Modulo.ToList();
                }
                catch (Exception e)
                {

                    throw;
                }

                return modulos;
            }
        }
        // GET: api/CursoInfo
        public List<CursoDTO> Get(string search)
        {
            List<CursoDTO> cursoList = new List<CursoDTO>();

            if (search == null) search = "";

            try
            {
                using(SIGAEntities db = new SIGAEntities())
                {
                   cursoList = db.Curso.Where(c => c.CurName.Contains(search) || c.CurName == "")
                                .Select(c => new CursoDTO
                                {
                                    CurId = c.CurId,
                                    CurName = c.CurName,
                                    CurNumHoras = (int)c.CurNumHoras,
                                    CurPrecio = c.CurPrecio
                                }).ToList();
                }

                if (cursoList.Count() == 0)
                {
                    List<CursoDTO> notFound = new List<CursoDTO>();
                    var cl = new CursoDTO { CurId = 0, CurName = "", CurNumHoras = 0, CurPrecio = (decimal)0.00 };
                    notFound.Add(cl);
                    return notFound;
                }

                return cursoList;

            }
            catch (Exception ex)
            {
                string message = "An error ocurred while getting employee list: " + ex;
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message));
            }
        }
        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);
        }
        public IHttpActionResult Post(UsuarioViewModel usuarioViewModel)
        {
            using (var db = new SIGAEntities())
            {

                try
                {
                    Persona persona = new Persona();
                    persona.Per_Dni = usuarioViewModel.UsuarioItem.Per_Dni;
                    persona.Per_Nombre = usuarioViewModel.UsuarioItem.Per_Nombre;
                    persona.Per_ApePaterno = usuarioViewModel.UsuarioItem.Per_ApePaterno;
                    persona.Per_ApeMaterno = usuarioViewModel.UsuarioItem.Per_ApeMaterno;
                    persona.Per_Sexo = usuarioViewModel.UsuarioItem.Per_Sexo;
                    persona.Per_Dir = usuarioViewModel.UsuarioItem.Per_Dir;
                    persona.Per_Cel = usuarioViewModel.UsuarioItem.Per_Cel;
                    persona.Per_Tel = usuarioViewModel.UsuarioItem.Per_Tel;
                    persona.Per_Email = usuarioViewModel.UsuarioItem.Per_Email;

                    db.Persona.Add(persona);

                    TipoUsuario tipoUsuario = new TipoUsuario();
                    string tipoUserValue = usuarioViewModel.UsuarioItem.TipoUser_Descrip;
                    var tipoUserId = db.TipoUsuario.Where(t => t.TipoUser_Descrip == tipoUserValue).FirstOrDefault();

                    Usuario usuario = new Usuario();
                    usuario.Per_Id = persona.Per_Id;
                    usuario.TipoUser_Id = Convert.ToInt16(tipoUserId.TipoUser_Id);
                    usuario.User_Nombre = usuarioViewModel.UsuarioItem.User_Nombre;
                    //usuario.User_Pass = "";

                    db.Usuario.Add(usuario);

                    if (tipoUserValue == "Alumno")
                    {

                        Alumno alumno = new Alumno();
                        alumno.User_Id = usuario.User_Id;
                        alumno.Alu_Apoderado = usuarioViewModel.UsuarioItem.AlumnoItem.Alu_Apoderado;
                        alumno.Alu_FechaIngreso = (DateTime)usuarioViewModel.UsuarioItem.AlumnoItem.Alu_FechaIngreso;
                        alumno.Alu_FechaRegistro = DateTime.UtcNow;
                        alumno.Alu_Estado = true;

                        db.Alumno.Add(alumno);
                    }

                    if (tipoUserValue == "Profesor")
                    {
                        Profesor profesor = new Profesor();
                        profesor.User_Id = usuario.User_Id;
                        profesor.Cur_Id = usuarioViewModel.UsuarioItem.ProfesorItem.Cur_Id;
                        profesor.Prof_Especialidad = usuarioViewModel.UsuarioItem.ProfesorItem.Prof_Especialidad;
                        profesor.Prof_Procedencia = usuarioViewModel.UsuarioItem.ProfesorItem.Prof_Procedencia;
                        profesor.Prof_LugarEstudio = usuarioViewModel.UsuarioItem.ProfesorItem.Prof_LugarEstudio;

                        db.Profesor.Add(profesor);
                    }

                    if (tipoUserValue == "Administrador")
                    {
                        Administrador administrador = new Administrador();
                        // add code

                        db.Administrador.Add(administrador);
                    }

                    db.SaveChanges();

                }
                catch (Exception e)
                {
                    throw;
                }

                return CreatedAtRoute("DefaultApi", new { id = usuarioViewModel.UsuarioItem.User_Id }, usuarioViewModel);
            }
        }
        public IHttpActionResult Put(UsuarioViewModel usuarioViewModel)
        {
            using (var db = new SIGAEntities())
            {
                try
                {
                    TipoUsuario tipoUsuario = new TipoUsuario();
                    string tipoUserValue = usuarioViewModel.UsuarioItem.TipoUser_Descrip; // collection["UsuarioItem.TipoUser_Descrip"];
                    var tipoUserId = db.TipoUsuario.Where(t => t.TipoUser_Descrip == tipoUserValue).FirstOrDefault();

                    Usuario usuario = db.Usuario.First(u => u.User_Id == usuarioViewModel.UsuarioItem.User_Id);
                    usuario.TipoUser_Id = Convert.ToInt16(tipoUserId.TipoUser_Id);
                    usuario.User_Nombre = "usename"; // persona.Per_Nombre.Substring(0, persona.Per_Nombre.Length) + " " + persona.Per_ApeMaterno.Substring(0, 0);
                    usuario.User_Pass = "";

                    Persona persona = db.Persona.First(p => p.Per_Id == usuario.Per_Id);
                    persona.Per_Dni = usuarioViewModel.UsuarioItem.Per_Dni; // Convert.ToInt32(collection["UsuarioItem.Per_Dni"]);
                    persona.Per_Nombre = usuarioViewModel.UsuarioItem.Per_Nombre; // collection["UsuarioItem.Per_Nombre"];
                    persona.Per_ApePaterno = usuarioViewModel.UsuarioItem.Per_ApePaterno; // collection["UsuarioItem.Per_ApePaterno"];
                    persona.Per_ApeMaterno = usuarioViewModel.UsuarioItem.Per_ApeMaterno; // collection["UsuarioItem.Per_ApeMaterno"];
                    persona.Per_Sexo = usuarioViewModel.UsuarioItem.Per_Sexo; // collection["UsuarioItem.Per_Sexo"];
                    persona.Per_Dir = usuarioViewModel.UsuarioItem.Per_Dir; // collection["UsuarioItem.Per_Dir"];
                    persona.Per_Cel = usuarioViewModel.UsuarioItem.Per_Cel; // collection["UsuarioItem.Per_Cel"];
                    persona.Per_Tel = usuarioViewModel.UsuarioItem.Per_Tel; // collection["UsuarioItem.Per_Tel"];
                    persona.Per_Email = usuarioViewModel.UsuarioItem.Per_Email; // collection["UsuarioItem.Per_Email"];

                    if (tipoUserValue == "Alumno")
                    {
                        Alumno alumno = db.Alumno.First(a => a.User_Id == usuarioViewModel.UsuarioItem.User_Id);
                        alumno.Alu_Apoderado = usuarioViewModel.UsuarioItem.AlumnoItem.Alu_Apoderado; // collection["UsuarioItem.AlumnoItem.Alu_Apoderado"];
                        alumno.Alu_FechaIngreso = Convert.ToDateTime(usuarioViewModel.UsuarioItem.AlumnoItem.Alu_FechaIngreso); // Convert.ToDateTime(collection["UsuarioItem.AlumnoItem.Alu_FechaIngreso"]);
                        alumno.Alu_FechaRegistro = Convert.ToDateTime(usuarioViewModel.UsuarioItem.AlumnoItem.Alu_FechaRegistro); // Convert.ToDateTime(collection["UsuarioItem.AlumnoItem.Alu_FechaRegistro"]);  //DateTime.UtcNow;
                        alumno.Alu_Estado = true;
                    }

                    if (tipoUserValue == "Profesor")
                    {
                        Profesor profesor = db.Profesor.First(a => a.User_Id == usuarioViewModel.UsuarioItem.User_Id);
                        profesor.Cur_Id = usuarioViewModel.UsuarioItem.ProfesorItem.Cur_Id;
                        profesor.Prof_Especialidad = usuarioViewModel.UsuarioItem.ProfesorItem.Prof_Especialidad;
                        profesor.Prof_Procedencia = usuarioViewModel.UsuarioItem.ProfesorItem.Prof_Procedencia;
                        profesor.Prof_LugarEstudio = usuarioViewModel.UsuarioItem.ProfesorItem.Prof_LugarEstudio;
                    }

                    if (tipoUserValue == "Administrador")
                    {
                        Administrador administrador = new Administrador();
                        // add code

                        db.Administrador.Add(administrador);
                    }

                    db.SaveChanges();

                }
                catch (Exception e)
                {
                    throw;
                }

                return StatusCode(HttpStatusCode.NoContent);
            }
        }