public static Paciente getPaciente(int Id)
 {
     using (var db = new ClinicaEntities())
     {
         return db.Paciente.Find(Id);
     }
 }
 public static Funcionario getFuncionario(int id)
 {
     using (var db = new ClinicaEntities())
     {
         return db.Funcionario.Find(id);
     }
 }
 //
 // GET: /PlanoSaude/Delete/5
 public ActionResult Delete(int id)
 {
     ViewBag.Title = tituloCadastro;
     using (var db = new ClinicaEntities())
     {
         return View(db.PlanoSaude.Find(id));
     }
 }
 //
 // GET: /Telefone/
 public ActionResult Index()
 {
     ViewBag.Title = tituloCadastro;
     using (var db = new ClinicaEntities())
     {
         return View(db.Telefone.ToList());
     }
 }
        //
        // GET: /Paciente/Create
        public ActionResult Create()
        {
            ViewBag.Title = tituloCadastro;
            ViewBag.Method = "Insert";

            using (var db = new ClinicaEntities())
            {
                SelectListTelefones(db);
                return View();
            }
        }
 public static List<SelectListItem> SelectListTelefones(ClinicaEntities db)
 {
     List<SelectListItem> selectList = new List<SelectListItem>();
     foreach (var telefone in db.Telefone.ToList())
     {
         selectList.Add(new SelectListItem()
         {
             Value = telefone.TelefoneId.ToString(),
             Text = telefone.Numero,
             Selected = false
         });
     }
     return selectList;
 }
        public static List<SelectListItem> getPacientes()
        {
            List<SelectListItem> list = new List<SelectListItem>();
            using (var db = new ClinicaEntities())
            {
                foreach (var item in db.Paciente.ToList())
                {
                    SelectListItem li = new SelectListItem();
                    li.Value = item.PacienteId.ToString();
                    li.Text = item.Nome;
                    list.Add(li);
                }
            }

            return list;
        }
        public static List<SelectListItem> getMedicos()
        {
            List<SelectListItem> list = new List<SelectListItem>();
            using (var db = new ClinicaEntities())
            {
                var Medicos = db.Funcionario.Where(p => p.funcao == ((int)funcao.Medico) );
                foreach (var item in Medicos.ToList())
                {
                    SelectListItem li = new SelectListItem();
                    li.Value = item.FuncionarioId.ToString();
                    li.Text = item.Nome;
                    list.Add(li);
                }
            }

            return list;
        }
 public ActionResult Delete(int id, PlanoSaude planosaude)
 {
     ViewBag.Title = tituloCadastro;
     try
     {
         using (var db = new ClinicaEntities())
         {
             db.Entry(planosaude).State = System.Data.EntityState.Deleted;
             db.SaveChanges();
         }
         return RedirectToAction("Index");
     }
     catch (Exception e)
     {
         ViewBag.Error = e;
         return View("Error");
     }
 }
        public ActionResult Create(PlanoSaude planosaude)
        {
            ViewBag.Title = tituloCadastro;
            try
            {
                using (var db = new ClinicaEntities())
                {
                    db.PlanoSaude.Add(planosaude);
                    db.SaveChanges();
                }

                return RedirectToAction("Index");
            }
            catch (Exception e)
            {
                ViewBag.Error = e;
                return View("Error");
            }
        }
        public ActionResult Create(Consulta consulta)
        {
            ViewBag.Title = tituloCadastro;
            try
            {
                using (var db = new ClinicaEntities())
                {

                    var Consultas = db.Consulta.Where(i => i.Data == consulta.Data)
                                               .Where(i => i.MedicoId == consulta.MedicoId)
                                               .Where(i => i.Status == (int)Status.Agendada)
                                               .OrderBy(i => i.Hora);
                    foreach (var item in Consultas.ToList())
                    {

                        TimeSpan hora30MinDepois = item.Hora.Add(new TimeSpan(0, 30, 0));

                        /* Se for menor que a (hora+30min) e maior que a hora */
                        if ((consulta.Hora.CompareTo(hora30MinDepois)<=0)&&
                            (consulta.Hora.CompareTo(item.Hora)>=0))
                        {
                            ModelState.AddModelError("Hora", "Médico com consulta agendada as " + item.Hora.ToString() + " horas, é necessario dar intervalo de 30 minutos.");
                            return View(consulta);
                        }
                    }
                    consulta.Status = (int)Status.Agendada;
                    db.Consulta.Add(consulta);
                    db.SaveChanges();
                }

                return RedirectToAction("Index");
            }
            catch (Exception e)
            {
                ViewBag.Error = e;
                return View("Error");
            }
        }
        public ActionResult Edit(int id, Funcionario funcionario)
        {
            ViewBag.Title = tituloCadastro;
            try
            {
                ClinicaEntities db = new ClinicaEntities();
                try
                {
                    db.Entry(funcionario).State = System.Data.EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                finally
                {
                    db.Dispose();
                }

            }
            catch (Exception e)
            {
                ViewBag.Error = e;
                return View("Error");
            }
        }
        //
        // GET: /Funcionario/Edit/5
        public ActionResult Edit(int id)
        {
            ViewBag.Title = tituloCadastro;
            ViewBag.Method = "Edit";
            ClinicaEntities db = new ClinicaEntities();
            try
            {
                SelectListEspecialidades(db);
                SelectListTelefones(db);

                Funcionario func = db.Funcionario.Find(id);

                CarregarAssociacoes(db, func);
                return View("Create", func);

            }
            finally
            {
                db.Dispose();
            }
        }
        public ActionResult Delete(int id, Funcionario funcionario)
        {
            ViewBag.Title = tituloCadastro;
            try
            {
                using (var db = new ClinicaEntities())
                {
                    Funcionario funcionarioDeleted = db.Funcionario.Find(id);
                    db.Funcionario.Remove(funcionarioDeleted);

                    db.SaveChanges();

                    if (funcionarioDeleted.UserId != null)
                    {
                        MembershipUser msuAux = Membership.GetUser(((object)funcionarioDeleted.UserId));
                        if (msuAux != null)
                        {
                            Membership.DeleteUser(msuAux.UserName);
                        }

                    }
                }
                return RedirectToAction("Index");
            }
            catch (Exception e)
            {
                ViewBag.Error = e;
                return View("Error");
            }
        }
 public ActionResult RealizarConsulta(int id, Consulta consulta)
 {
     ViewBag.Title = tituloCadastro;
     try
     {
         using (var db = new ClinicaEntities())
         {
             consulta.Status = (int)Status.Realizada;
             db.Entry(consulta).State = System.Data.EntityState.Modified;
             db.SaveChanges();
             return RedirectToAction("Index");
         }
     }
     catch (Exception e)
     {
         ViewBag.Error = e;
         return View("Error");
     }
 }
 private static void CarregarAssociacoes(ClinicaEntities db, Paciente paciente)
 {
     db.Entry(paciente).Collection("PacienteTelefone").Load();
 }
 //Aux
 private void SelectListTelefones(ClinicaEntities db)
 {
     ViewBag.Telefones = ClinicaMVC3.Controllers.TelefoneController.SelectListTelefones(db);
 }
 public ActionResult Delete(int id, Paciente paciente)
 {
     ViewBag.Title = tituloCadastro;
     try
     {
         using (var db = new ClinicaEntities())
         {
             db.Entry(paciente).State = System.Data.EntityState.Deleted;
             db.SaveChanges();
         }
         return RedirectToAction("Index");
     }
     catch (Exception e)
     {
         /*ViewBag.Error = e;*/
         TempData["Error"] = e;
         return RedirectToAction("Error", "Error");
         /*return View("Error");*/
     }
 }
 //
 // GET: /Paciente/Edit/5
 public ActionResult Edit(int id)
 {
     ViewBag.Title = tituloCadastro;
     ViewBag.Method = "Edit";
     ClinicaEntities db = new ClinicaEntities();
     try
     {
         SelectListTelefones(db);
         Paciente paciente = db.Paciente.Find(id);
         CarregarAssociacoes(db, paciente);
         return View("Create", paciente);
     }
     finally
     {
         db.Dispose();
     }
 }
        public JsonResult Create(Paciente paciente)
        {
            try
            {
                if (ModelState.IsValid)
                {

                    if (paciente.PacienteTelefone.Count == 0)
                    {
                        return Json(new { Success = 0, ex = "O paciente deve possuir ao menos um telefone cadastrado!" });
                    }

                    using (var db = new ClinicaEntities())
                    {
                        // Se o código do paciente é maior que zero, entendemos que existe registro para tal.
                        // Então nós "atualizaremos" ele.
                        if (paciente.PacienteId > 0)
                        {

                            var selPacienteTelefone = db.PacienteTelefone.Where(p => p.PacienteId == paciente.PacienteId);

                            foreach (PacienteTelefone pt in selPacienteTelefone)
                            {
                                db.PacienteTelefone.Remove(pt);
                            }

                            foreach (PacienteTelefone pt in paciente.PacienteTelefone)
                            {
                                db.PacienteTelefone.Add(pt);
                            }

                            db.Entry(paciente).State = EntityState.Modified;

                        }
                        //Perform Save
                        else
                        {
                            db.Paciente.Add(paciente);
                        }

                        db.SaveChanges();

                    }

                    return Json(new { Success = 1, SalesID = paciente.PacienteId, ex = "" });
                }
                else
                {
                    ValidateModel(paciente);
                }
            }
            catch (Exception ex)
            {

                if (ex.InnerException != null)
                {
                    return Json(new { Success = 0, ex = ex.InnerException.ToString() });
                }
                else
                {
                    return Json(new { Success = 0, ex = ex.Message.ToString() });
                }
            }

            return Json(new { Success = 0, ex = new Exception("Unable to save").Message.ToString() });
        }
        public ActionResult PacienteDialog()
        {
            ViewBag.Title = tituloCadastro;
            ViewBag.Method = "Insert";

            using (var db = new ClinicaEntities())
            {
                SelectListTelefones(db);
                ViewBag.isDialog = true;
                return PartialView("PacientePartial");
            }
        }
 private static void CarregarAssociacoes(ClinicaEntities db, Funcionario func)
 {
     db.Entry(func).Collection("FuncionarioTelefone").Load();
     db.Entry(func).Collection("FuncionarioEspecialidade").Load();
     db.Entry(func).Reference("aspnet_Users").Load();
     db.Entry(func.aspnet_Users).Reference("aspnet_Membership").Load();
 }
 private void SelectListEspecialidades(ClinicaEntities db)
 {
     var selectList = new List<SelectListItem>();
     foreach (var especialidade in db.Especialidade.ToList())
     {
         selectList.Add(new SelectListItem()
         {
             Value = especialidade.EspecialidadeId.ToString(),
             Text = especialidade.Descricao,
             Selected = false
         });
     }
     ViewBag.Especialidades = selectList;
 }
        //
        // GET: /Consulta/
        public ActionResult Index()
        {
            ViewBag.Title = tituloCadastro;
            using (var db = new ClinicaEntities())
            {
                int auxId = 0;
                var listConsultas = db.Consulta.ToList();
                for (int i = 0; i < listConsultas.Count; i++)
                {
                    auxId = listConsultas.ElementAt(i).PacienteId;
                    listConsultas.ElementAt(i).Paciente = PacienteController.getPaciente(auxId);

                    auxId = listConsultas.ElementAt(i).MedicoId;
                    listConsultas.ElementAt(i).Funcionario = FuncionarioController.getFuncionario(auxId);

                }

                return View(listConsultas);
            }
        }
 public ActionResult RealizarConsulta(int id)
 {
     ViewBag.Title = tituloCadastro;
     using (var db = new ClinicaEntities())
     {
         return View(db.Consulta.Find(id));
     }
 }
        // Aux
        public JsonResult SelectListPacientes()
        {
            using (var db = new ClinicaEntities())
            {
                List<SelectListItem> list = new List<SelectListItem>();

                foreach (Paciente item in db.Paciente.ToList())
                {
                    list.Add(
                        new SelectListItem()
                        {
                            Value = item.PacienteId.ToString(),
                            Text = item.Nome,
                            Selected = false
                        });
                }

                return this.Json(list);
            }
        }
        public JsonResult Create(Funcionario funcionario, String UserName, String Password, String email)
        {
            try
            {
                ModelState.Remove("UserId");
                if (ModelState.IsValid)
                {

                    // Tentativa de registrar o usuário
                    if (UserName != null)
                    {
                        /* Criamos a Roles para a função do usuario( caso ela já não exista) */

                        String strRole = Enum.GetValues(typeof(funcao)).GetValue(funcionario.funcao - 1).ToString();
                        if (!Roles.RoleExists(strRole))
                        {
                            Roles.CreateRole(strRole);
                        }

                        MembershipUser User = Membership.GetUser(UserName);
                        /* Se o usuario não existe, eu crio ele e vinculo a role. */
                        if (User == null)
                        {
                            MembershipCreateStatus createStatus;
                            MembershipUser membershipUserCreated = Membership.CreateUser(UserName, Password, email, null, null, true, null, out createStatus);

                            if (createStatus == MembershipCreateStatus.Success)
                            {
                                if (!Roles.IsUserInRole(UserName, strRole))
                                {
                                    Roles.AddUserToRole(UserName, strRole);
                                }
                                /*FormsAuthentication.SetAuthCookie(UserName, false );*/
                                funcionario.UserId = Guid.Parse(membershipUserCreated.ProviderUserKey.ToString());
                            }
                            else
                            {
                                return Json(new { Success = 0, ex = new Exception(AccountController.ErrorCodeToString(createStatus)).Message.ToString() });
                            }
                        }
                        else
                        {
                            MembershipUser currentUser = Membership.GetUser(UserName);

                            Array funcoes = Enum.GetValues(typeof(funcao));

                            for (int i = 0; i < funcoes.Length; i++)
                            {
                                if (Roles.IsUserInRole(UserName, funcoes.GetValue(i).ToString()))
                                {
                                    Roles.RemoveUserFromRole(UserName, funcoes.GetValue(i).ToString());
                                }
                            }

                            if (!Roles.IsUserInRole(UserName, strRole))
                            {
                                Roles.AddUserToRole(UserName, strRole);
                            }

                        }
                    }

                    using (var db = new ClinicaEntities())
                    {

                        // Se o código do Funcionario é maior que zero, entendemos que existe registro para tal.
                        // Então nós "atualizaremos" ele.
                        if (funcionario.FuncionarioId > 0)
                        {
                            #region Tratamento dos Telefones
                            var selFuncionarioTelefone = db.FuncionarioTelefone.Where(p => p.FuncionarioId == funcionario.FuncionarioId);

                            foreach (FuncionarioTelefone pt in selFuncionarioTelefone)
                            {
                                db.FuncionarioTelefone.Remove(pt);
                            }

                            foreach (FuncionarioTelefone pt in funcionario.FuncionarioTelefone)
                            {
                                db.FuncionarioTelefone.Add(pt);
                            }
                            #endregion

                            /* O funcionario somente possuirá funcionalidades quando for "Médico". */

                            var selFuncionarioEspecialidade = db.FuncionarioEspecialidade.Where(p => p.FuncionarioId == funcionario.FuncionarioId);

                            foreach (FuncionarioEspecialidade pt in selFuncionarioEspecialidade)
                            {
                                db.FuncionarioEspecialidade.Remove(pt);
                            }

                            if (funcionario.funcao == 3)
                            {
                                #region Tratamento das Especialidades
                                foreach (FuncionarioEspecialidade pt in funcionario.FuncionarioEspecialidade)
                                {

                                    db.FuncionarioEspecialidade.Add(pt);
                                }

                                #endregion
                            }
                            else
                            {
                                funcionario.FuncionarioEspecialidade = null;
                            }
                            db.Entry(funcionario).State = EntityState.Modified;

                        }
                        //Perform Save
                        else
                        {
                            db.Funcionario.Add(funcionario);
                        }

                        db.SaveChanges();

                    }

                    return Json(new { Success = 1, SalesID = funcionario.FuncionarioId, ex = "" });
                }
                else
                {
                    ValidateModel(funcionario);
                }
            }
            catch (Exception ex)
            {

                if (ex.InnerException != null)
                {
                    return Json(new { Success = 0, ex = ex.InnerException.ToString() });
                }
                else
                {
                    return Json(new { Success = 0, ex = ex.Message.ToString() });
                }
            }
            return Json(new { Success = 0, ex = new Exception("Unable to save").Message.ToString() });
        }
        public ActionResult DesmarcarConsulta(int id, Consulta consulta)
        {
            ViewBag.Title = tituloCadastro;
            try
            {
                using (var db = new ClinicaEntities())
                {

                    /* Se for desmarcada antes da Data prevista a Consulta será excluída. */
                    if (consulta.Data >= DateTime.Now)
                    {
                        return View("Delete", db.Consulta.Find(consulta.ConsultaId));

                    }
                    /* Caso contrario será marcada como não comparecimento */
                    else
                    {
                        consulta.Status = (int)Status.Nao_Comparecido;
                        db.Entry(consulta).State = System.Data.EntityState.Modified;
                        db.SaveChanges();
                    }

                    return RedirectToAction("Index");
                }
            }
            catch (Exception e)
            {
                ViewBag.Error = e;
                return View("Error");
            }
        }