public Boolean InsertarCita(entCita obj)
 {
     SqlCommand cmd = null;
     Boolean resultado = false;
     try
     {
         SqlConnection cn = Conexion.Instancia.Conectar();
         cmd = new SqlCommand("sp_InsertarCita", cn);
         cmd.CommandType = CommandType.StoredProcedure;
         cmd.Parameters.AddWithValue("@prmIdMedico", obj.idMedico);
         cmd.Parameters.AddWithValue("@prmIdPaciente", obj.idPaciente);
         cmd.Parameters.AddWithValue("@prmDescripcion", obj.descripcion);
         cmd.Parameters.AddWithValue("@prmFecha", obj.fecha);
         cmd.Parameters.AddWithValue("@prmHoraInicio", obj.horaInicio);
         cmd.Parameters.AddWithValue("@prmHoraFin", obj.horaFin);
         cmd.Parameters.AddWithValue("@prmHoraInicioHora", obj.horaInicioHora);
         cmd.Parameters.AddWithValue("@prmHoraInicioMinuto", obj.horaInicioMinuto);
         cmd.Parameters.AddWithValue("@prmHoraFinHora", obj.horaFinHora);
         cmd.Parameters.AddWithValue("@prmHoraFinMinuto", obj.HoraFinMinuto);
         cmd.Parameters.AddWithValue("@prmMotivo", obj.motivo);
         cn.Open();
         //  SqlDataReader dr = cmd.ExecuteReader();
         if (cmd.ExecuteNonQuery() > 0)
         {
             resultado = true;
         };
     }
     catch (Exception e) { throw e; }
     finally { cmd.Connection.Close(); }
     return resultado;
 }
        public int InsertarCita(entCita obj)
        {
            int idDia = 0;
            String dia = obj.fecha.ToString("ddd");
            if (dia.Equals("lu."))
            {
                idDia = 1;
            }
            else if(dia.Equals("ma.")){
                idDia = 2;
            }
            else if (dia.Equals("mie"))
            {
                idDia = 3;
            }
            else if (dia.Equals("ju."))
            {
                idDia = 4;
            }
            else if (dia.Equals("vi."))
            {
                idDia = 5;
            }

            List<entHora> listHora = datHora.Instancia.ListarHorarioByMedicoAndDia(obj.idMedico, idDia);

            List<entCita> listCita = datCita.Instancia.ListarCitaByMedicoAndFecha(obj.idMedico, obj.fecha);

            foreach (var e in listCita)
            {
                if ((obj.horaInicio >= e.horaInicio && obj.horaInicio <= e.horaFin) || (obj.horaFin >= e.horaInicio && obj.horaFin <= e.horaFin))
                {
                    return 3;
                }
            }

            if (listHora[0].hora <= obj.horaInicio && listHora[1].hora >= obj.horaFin) {
                Boolean ret = datCita.Instancia.InsertarCita(obj);
                if(ret){
                    return 1;
                }else{
                    return 0;
                }
            }
            else if (listHora[2].hora <= obj.horaInicio && listHora[3].hora >= obj.horaFin)
            {
                Boolean ret = datCita.Instancia.InsertarCita(obj);
                if(ret){
                    return 1;
                }else{
                    return 0;
                }
            }
            else {
                return 2;
            }
        }
 public Boolean ModificarCita(entCita obj)
 {
     return datCita.Instancia.ModificarCita(obj);
 }
        public ActionResult ModificarEliminarCitas(FormCollection form)
        {
            if (form["btn"].ToString().Equals("modificar"))
            {
                int idMedico = Convert.ToInt32(form["idMedico"]);
                entCita obj = new entCita();
                obj.idCita = Convert.ToInt32(form["idCita"]);
                obj.fecha = Convert.ToDateTime(form["fecha"]);

                obj.horaInicio = TimeSpan.Parse(form["horaInicio"].ToString());
                obj.horaInicioHora = Convert.ToInt32(obj.horaInicio.ToString("%h"));
                obj.horaInicioMinuto = Convert.ToInt32(obj.horaInicio.ToString("%m"));

                obj.horaFin = TimeSpan.Parse(form["horaFin"].ToString());
                obj.horaFinHora = Convert.ToInt32(obj.horaFin.ToString("%h"));
                obj.HoraFinMinuto = Convert.ToInt32(obj.horaFin.ToString("%m"));

                try
                {
                    //Boolean inserto = negUsuario.Instancia.InsertarUsuarioVacio(4);
                    Boolean inserto = negCita.Instancia.ModificarCita(obj);

                    if (inserto)
                    {
                        return RedirectToAction("DetCitasMedico", "Cita", new { mensaje = "Se modificó con éxito", idMedico = idMedico });

                    }
                    else
                    {
                        return RedirectToAction("DetCitasMedico", "Cita", new { error = "No se pudo modificar.", idMedico = idMedico });
                    }
                }
                catch (ApplicationException ae)
                {
                    return RedirectToAction("DetCitasMedico", "Cita", new { error = ae.Message });
                }
                catch (Exception e)
                {
                    return RedirectToAction("Error", "Error", new { error = e.Message });
                }
            }
            else if (form["btn"].ToString().Equals("eliminar"))
            {
                int idCita = Convert.ToInt32(form["idCita"]);
                int idMedico = Convert.ToInt32(form["idMedico"]);

                try
                {
                    //Boolean inserto = negUsuario.Instancia.InsertarUsuarioVacio(4);
                    Boolean inserto = negCita.Instancia.EliminarCita(idCita);

                    if (inserto)
                    {
                        return RedirectToAction("DetCitasMedico", "Cita", new { mensaje = "Se eliminó con éxito", idMedico =  idMedico  });

                    }
                    else
                    {
                        return RedirectToAction("DetCitasMedico", "Cita", new { error = "No se pudo eliminar.", idMedico = idMedico });
                    }
                }
                catch (ApplicationException ae)
                {
                    return RedirectToAction("DetCitasMedico", "Cita", new { error = ae.Message });
                }
                catch (Exception e)
                {
                    return RedirectToAction("Error", "Error", new { error = e.Message });
                }
            }
            else {
                return RedirectToAction("DetCitasMedico", "Cita");
            }
        }
        public ActionResult _PartialCalendarioRegistro(Int32 idMedico, Int32 idPaciente, String descripcion, String motivo, DateTime fecha, TimeSpan horaInicio, TimeSpan horaFin)
        {
            entCita obj = new entCita();
            obj.idMedico = idMedico;
            obj.idPaciente = idPaciente;
            obj.descripcion = descripcion;
            obj.motivo = motivo;
            obj.fecha = fecha;

            obj.horaInicio = horaInicio;
            obj.horaInicioHora = Convert.ToInt32(obj.horaInicio.ToString("%h"));
            obj.horaInicioMinuto = Convert.ToInt32(obj.horaInicio.ToString("%m"));

            obj.horaFin = horaFin;
            obj.horaFinHora = Convert.ToInt32(obj.horaFin.ToString("%h"));
            obj.HoraFinMinuto = Convert.ToInt32(obj.horaFin.ToString("%m"));

            try
            {
                //Boolean inserto = negUsuario.Instancia.InsertarUsuarioVacio(4);
                int inserto = negCita.Instancia.InsertarCita(obj);

                ViewData["ListaCitas"] = negCita.Instancia.ListarCitasByIdMedico(idMedico);
                ViewBag.anio = obj.fecha.ToString("yyyy");
                ViewBag.mes = obj.fecha.ToString("MM");
                ViewBag.dia = obj.fecha.ToString("dd");

                if (inserto==1)
                {

                    ViewBag.mensaje ="Se registró con éxito";

                    return PartialView();

                }
                else if (inserto == 2)
                {
                    ViewBag.mensajeHora = "Cita fuera de horario de trabajo.";

                    return PartialView();
                }
                else if (inserto == 3)
                {
                    ViewBag.mensajeHora = "Cruze de citas.";

                    return PartialView();
                }
                else
                {
                    return RedirectToAction("AgregarCita", "Cita", new { error = "No se pudo insertar." });
                }
            }
            catch (ApplicationException ae)
            {
                return RedirectToAction("AgregarCita", "Cita", new { error = ae.Message });
            }
            catch (Exception e)
            {
                return RedirectToAction("Error", "Error", new { error = e.Message });
            }
        }
        public List<entCita> ListarCitaByMedicoAndFecha(int idMedico, DateTime fecha)
        {
            List<entCita> lista = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            try
            {
                Conexion cn = new Conexion();
                SqlConnection conex = cn.Conectar();
                cmd = new SqlCommand("sp_ListarCitasByIdMedicoAndFecha", conex);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@prmIdMedico", idMedico);
                cmd.Parameters.AddWithValue("@prmFecha", fecha);
                conex.Open();
                dr = cmd.ExecuteReader();
                lista = new List<entCita>();
                while (dr.Read())
                {
                    entCita obj = new entCita();
                    obj.idCita = Convert.ToInt32(dr["idcita"]);
                    obj.horaInicio = TimeSpan.Parse(dr["horainicio"].ToString());
                    obj.horaFin = TimeSpan.Parse(dr["horafin"].ToString());

                    lista.Add(obj);
                }
            }
            catch
            {
                lista = null;
            }
            finally
            {
                cmd.Connection.Close();
            }
            return lista;
        }
        public List<entCita> ListarCitasByIdMedico(int idMedico)
        {
            List<entCita> lista = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            try
            {
                Conexion cn = new Conexion();
                SqlConnection conex = cn.Conectar();
                cmd = new SqlCommand("sp_ListarCitasByIdMedico", conex);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@prmIdMedico", idMedico);
                conex.Open();
                dr = cmd.ExecuteReader();
                lista = new List<entCita>();
                while (dr.Read())
                {
                    entCita obj = new entCita();
                    obj.idCita = Convert.ToInt32(dr["idcita"]);
                    obj.especialidad = dr["especialidad"].ToString();
                    obj.idMedico = Convert.ToInt32(dr["idmedico"]);
                    obj.medico = dr["medico"].ToString();
                    obj.idPaciente = Convert.ToInt32(dr["idpaciente"]);
                    obj.paciente = dr["paciente"].ToString();
                    obj.descripcion = dr["descripcion"].ToString();
                    obj.motivo = dr["motivo"].ToString();
                    obj.fecha = Convert.ToDateTime(dr["fecha"]);
                    obj.horaInicio = TimeSpan.Parse(dr["horainicio"].ToString());
                    obj.horaFin = TimeSpan.Parse(dr["horafin"].ToString());
                    obj.horaInicioHora = Convert.ToInt32(dr["horainiciohora"]);
                    obj.horaInicioMinuto = Convert.ToInt32(dr["horainiciominuto"]);
                    obj.horaFinHora = Convert.ToInt32(dr["horafinhora"]);
                    obj.HoraFinMinuto = Convert.ToInt32(dr["horafinminuto"]);

                    lista.Add(obj);
                }
            }
            catch
            {
                lista = null;
            }
            finally
            {
                cmd.Connection.Close();
            }
            return lista;
        }