public ActionResult Index(BEOrdenInternamiento objOI, FormCollection form)
        {
            try
            {
                bool isOK = true;

                List<BEParametro> lstEntrada = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_Entrada);
                List<BEParametro> lstPausa = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_PausaQuirurgica);
                List<BEParametro> lstSalida = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_Salida);

                ViewBag.ListaProcedimiento = new SelectList(new BLParametro().ObtenerParametros(BEParametro.DOMINIO_Procedimiento), "IdParametro", "Nombre");
                ViewBag.ListaEntrada = new SelectList(lstEntrada, "IdParametro", "Nombre");
                ViewBag.ListaPausaQuirurgica = new SelectList(lstPausa, "IdParametro", "Nombre");
                ViewBag.ListaSalida = new SelectList(lstSalida, "IdParametro", "Nombre");
                ViewBag.Mensaje = "";

                if (string.IsNullOrEmpty(form["Procedimiento"]))
                {
                    isOK = false;
                    ViewBag.Mensaje = "Debe seleccionar el tipo de procedimiento a realizar";
                }
                else
                {
                    foreach (BEParametro objP in lstEntrada)
                    {
                        if (string.IsNullOrEmpty(form["011o" + objP.IdParametro]))
                        {
                            isOK = false;
                            ViewBag.Mensaje = "Debe seleccionar la respuesta para la pregunta";
                            break;
                        }
                        else
                        {
                            if (form["011o" + objP.IdParametro].Equals("NO"))
                            {
                                if (string.IsNullOrEmpty(form["011t" + objP.IdParametro]))
                                {
                                    isOK = false;
                                    ViewBag.Mensaje = "Debe ingresar la descripcion para la respuesta";
                                    break;
                                }
                            }
                        }

                    }
                    foreach (BEParametro objP in lstPausa)
                    {
                        if (string.IsNullOrEmpty(form["011o" + objP.IdParametro]))
                        {
                            isOK = false;
                            ViewBag.Mensaje = "Debe seleccionar la respuesta para la pregunta";
                            break;
                        }
                        else
                        {
                            if (form["011o" + objP.IdParametro].Equals("NO"))
                            {
                                if (string.IsNullOrEmpty(form["011t" + objP.IdParametro]))
                                {
                                    isOK = false;
                                    ViewBag.Mensaje = "Debe ingresar la descripcion para la respuesta";
                                    break;
                                }
                            }
                        }

                    }
                    foreach (BEParametro objP in lstSalida)
                    {
                        if (string.IsNullOrEmpty(form["011o" + objP.IdParametro]))
                        {
                            isOK = false;
                            ViewBag.Mensaje = "Debe seleccionar la respuesta para la pregunta";
                            break;
                        }
                        else
                        {
                            if (form["011o" + objP.IdParametro].Equals("NO"))
                            {
                                if (string.IsNullOrEmpty(form["011t" + objP.IdParametro]))
                                {
                                    isOK = false;
                                    ViewBag.Mensaje = "Debe ingresar la descripcion para la respuesta";
                                    break;
                                }
                            }
                        }
                    }
                }

                if (isOK)
                {
                    BEProcedimiento objBE = new BEProcedimiento();
                    objBE.IdProcedimiento = 0;
                    objBE.TipoProcedimiento = form["Procedimiento"];
                    objBE.IdOrdenInternamiento = objOI.IdOrdenInternamiento;
                    objBE.Estado = "001";

                    foreach (BEParametro objP in lstEntrada)
                    {
                        BEProcedimientoPregunta objPP = new BEProcedimientoPregunta();
                        objPP.IdProcedimientoPregunta = 0;
                        objPP.IdProcedimiento = 0;
                        objPP.Tipo = "011";
                        objPP.Pregunta = objP.IdParametro;
                        objPP.Respuesta = form["011o" + objP.IdParametro];
                        objPP.Descripcion = form["011t" + objP.IdParametro];
                        objPP.Estado = "001";

                        objBE.Preguntas.Add(objPP);
                    }

                    foreach (BEParametro objP in lstPausa)
                    {
                        BEProcedimientoPregunta objPP = new BEProcedimientoPregunta();
                        objPP.IdProcedimientoPregunta = 0;
                        objPP.Tipo = "012";
                        objPP.Pregunta = objP.IdParametro;
                        objPP.Respuesta = form["012o" + objP.IdParametro];
                        objPP.Descripcion = form["012t" + objP.IdParametro];
                        objPP.Estado = "001";

                        objBE.Preguntas.Add(objPP);
                    }

                    foreach (BEParametro objP in lstSalida)
                    {
                        BEProcedimientoPregunta objPP = new BEProcedimientoPregunta();
                        objPP.IdProcedimientoPregunta = 0;
                        objPP.Tipo = "013";
                        objPP.Pregunta = objP.IdParametro;
                        objPP.Respuesta = form["013o" + objP.IdParametro];
                        objPP.Descripcion = form["013t" + objP.IdParametro];
                        objPP.Estado = "001";

                        objBE.Preguntas.Add(objPP);
                    }

                    if (new BLProcedimiento().Crear(objBE))
                    {
                        ViewBag.Mensaje = "Se registro el procedimiento";
                    }
                    else
                    {
                        ViewBag.Mensaje = "No se registro el procedimiento";
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Mensaje = ex.Message;
            }

            return View(objOI);
        }
        public ActionResult Actualizar(BEOrdenInternamiento oi, string operacion = null, string EstadoPaciente = null, string Fecha = null, string Descripcion = null)
        {
            if (oi == null)
                oi = new BEOrdenInternamiento();

            try
            {
                List<BEParametro> lstEP = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_EstadoPaciente);
                ViewBag.ListaEstadoPaciente = new SelectList(lstEP, "IdParametro", "Nombre");

                if (Session["lista"] != null)
                    oi.Bitacora = (List<BEOrdenInternamientoBitacora>)Session["lista"];

                if (operacion == null)
                {
                    if (string.IsNullOrEmpty(EstadoPaciente))
                        throw new ApplicationException("Debe seleccionar el Estado del Paciente");

                    string strEstadoPacienteNombre = (from item in lstEP where item.IdParametro.Equals(EstadoPaciente) select item.Nombre).First();

                    if (string.IsNullOrEmpty(Fecha))
                        throw new ApplicationException("Debe ingresar la Fecha");

                    Fecha = Fecha.Replace("T"," ");

                    DateTime dtFecha;
                    if (!(DateTime.TryParseExact(Fecha, "yyyy-MM-dd hh:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out dtFecha)))
                        throw new ApplicationException("Debe ingresar la Fecha válida");

                    if (string.IsNullOrEmpty(Descripcion))
                        throw new ApplicationException("Debe ingresar la Descripción");

                    BEOrdenInternamientoBitacora beOIB = new BEOrdenInternamientoBitacora();
                    beOIB.IdOrdenInternamientoBitacora = 0;
                    beOIB.IdOrdenInternamiento = oi.IdOrdenInternamiento;
                    beOIB.Fecha = dtFecha;
                    beOIB.EstadoPaciente = EstadoPaciente;
                    beOIB.EstadoPacienteNombre = strEstadoPacienteNombre;
                    beOIB.Descripcion = Descripcion;
                    beOIB.Estado = BEOrdenInternamientoBitacora.ESTADO_Activo;

                    if (new BLBitacora().Crear(beOIB))
                    {
                        oi.Bitacora.Add(beOIB);
                        Session["lista"] = oi.Bitacora;

                        ViewBag.Mensaje = "Se agrego correctamente la bitacora al orden de internamiento";
                    }
                    else
                        ViewBag.Mensaje = "No se puede asignar";
                }
                else if (operacion.StartsWith("eliminar-detalle-"))
                {
                    string indexStr = operacion.Replace("eliminar-detalle-", "");

                    if (new BLBitacora().Eliminar(int.Parse(indexStr)))
                    {
                        BEOrdenInternamientoBitacora objBE = (from item in oi.Bitacora where item.IdOrdenInternamientoBitacora == int.Parse(indexStr) select item).First();

                        oi.Bitacora.Remove(objBE);
                        Session["lista"] = oi.Bitacora;

                        ViewBag.Mensaje = "Se elimino correctamente la bitacora al orden de internamiento";
                    }
                    else
                        ViewBag.Mensaje = "No se puede eliminar";
                }
            }
            catch (ApplicationException ex)
            {
                ViewBag.Mensaje = ex.Message;
            }
            catch (Exception ex)
            {
                ViewBag.Mensaje = ex.Message;
            }

            return View(oi);
        }
        public ActionResult Asignar(BEOrdenInternamiento oi, string operacion = null, string Recurso = null, string Cantidad = null, string IdHabitacion = null, string IdCama = null)
        {
            if (oi == null)
                oi = new BEOrdenInternamiento();

            try
            {
                List<BEParametro> lstRecurso = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_Recurso);
                ViewBag.ListaHabitacion = new SelectList(new BLHabitacion().ObtenerDisponibles(), "IdHabitacion", "Nombre");
                ViewBag.ListaRecurso = new SelectList(lstRecurso, "IdParametro", "Nombre");
                ViewBag.ListaCama = new SelectList(new BLCama().Disponible(), "IdCama", "Nombre");

                if (Session["lista"] != null)
                    oi.Recursos = (List <BEOrdenInternamientoRecurso>) Session["lista"];

                if (operacion == null)
                {
                    if (string.IsNullOrEmpty(IdHabitacion))
                        throw new ApplicationException("Debe seleccionar la habitacion");

                    if (string.IsNullOrEmpty(IdCama))
                        throw new ApplicationException("Debe seleccionar la cama");

                    if (oi.Recursos.Count < 1)
                        throw new ApplicationException("Debe agregar recursos a la habitacion");

                    oi.Estado = BEOrdenInternamiento.ESTADO_Asignado;

                    if (new BLOrdenInternamiento().Asignar(oi))
                    {
                        TempData["Mensaje"] = "Se actualizo correctamente la orden de internamiento";

                        return RedirectToAction("Index");
                    }
                    else
                        ViewBag.Mensaje = "No se puede asignar";
                }
                else if (operacion == "agregar-detalle")
                {
                    if (string.IsNullOrEmpty(Recurso))
                        throw new ApplicationException("Debe seleccionar el recurso");

                    string strRecurso = (from item in lstRecurso where item.IdParametro.Equals(Recurso) select item.Nombre).First();

                    if (string.IsNullOrEmpty(Cantidad))
                        throw new ApplicationException("Debe ingresar la cantidad");

                    int intCantidad = 0;
                    try
                    {
                        intCantidad = int.Parse(Cantidad);
                    }
                    catch (Exception)
                    {
                        throw new ApplicationException("Debe ingresar la cantidad valida");
                    }

                    oi.Recursos.Add(new BEOrdenInternamientoRecurso(oi.IdOrdenInternamiento, intCantidad, Recurso, strRecurso));

                    Session["lista"] = oi.Recursos;
                }
                else if (operacion.StartsWith("eliminar-detalle-"))
                {
                    string indexStr = operacion.Replace("eliminar-detalle-", "");
                    int index = 0;

                    if (int.TryParse(indexStr, out index) && index >= 0 && index < oi.Recursos.Count)
                    {
                        var item = oi.Recursos.ToArray()[index];
                        oi.Recursos.Remove(item);
                        Session["lista"] = oi.Recursos;
                    }
                }
            }
            catch (ApplicationException ex)
            {
                ViewBag.Mensaje = ex.Message;
            }
            catch (Exception ex)
            {
                ViewBag.Mensaje = ex.Message;
            }

            return View(oi);
        }
        public ActionResult Editar(BEOrdenInternamiento oi, string operacion = null, string Recurso = null, string Cantidad = null)
        {
            if (oi == null)
                oi = new BEOrdenInternamiento();

            try
            {
                List<BEParametro> lstRecurso = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_Recurso);
                ViewBag.ListaRecurso = new SelectList(lstRecurso, "IdParametro", "Nombre");

                if (Session["lista"] != null)
                    oi.Recursos = (List<BEOrdenInternamientoRecurso>)Session["lista"];

                if (operacion == null)
                {
                    int intTotal = (from items in oi.Recursos where items.Indicador == 0 select items).Count();

                    if (intTotal < 1)
                        throw new ApplicationException("Debe agregar recursos a la habitacion");

                    if (new BLOrdenInternamiento().Editar(oi))
                    {
                        TempData["Mensaje"] = "Se actualizo correctamente la orden de internamiento";

                        return RedirectToAction("Index");
                    }
                    else
                        ViewBag.Mensaje = "No se pudo editar";
                }
                else if (operacion == "agregar-detalle")
                {
                    if (string.IsNullOrEmpty(Recurso))
                        throw new ApplicationException("Debe seleccionar el recurso");

                    string strRecurso = (from item in lstRecurso where item.IdParametro.Equals(Recurso) select item.Nombre).First();

                    if (string.IsNullOrEmpty(Cantidad))
                        throw new ApplicationException("Debe ingresar la cantidad");

                    int intCantidad = 0;
                    try
                    {
                        intCantidad = int.Parse(Cantidad);

                        if (intCantidad < 1)
                            throw new ApplicationException("La cantidad debe ser mayor o igual a 1");
                    }
                    catch (Exception)
                    {
                        throw new ApplicationException("Debe ingresar la cantidad valida");
                    }

                    bool isExiste = false;
                    foreach (BEOrdenInternamientoRecurso recurso in oi.Recursos)
                    {
                        if (recurso.Recurso.Equals(Recurso) && recurso.Indicador != 1)
                        {
                            recurso.Cantidad += intCantidad;
                            isExiste = true;

                            break;
                        }
                    }
                    if (!isExiste)
                        oi.Recursos.Add(new BEOrdenInternamientoRecurso(oi.IdOrdenInternamiento, intCantidad, Recurso, strRecurso));

                    Session["lista"] = oi.Recursos;
                }
                else if (operacion.StartsWith("eliminar-detalle-"))
                {
                    string indexStr = operacion.Replace("eliminar-detalle-", "");
                    int index = 0;

                    if (int.TryParse(indexStr, out index) && index >= 0 && index < oi.Recursos.Count)
                    {
                        var item = oi.Recursos.ToArray()[index];

                        if (item.IdOrdenInternamientoRecurso == 0)
                            oi.Recursos.Remove(item);
                        else
                            item.Indicador = 1;

                        Session["lista"] = oi.Recursos;
                    }
                }
            }
            catch (ApplicationException ex)
            {
                ViewBag.Mensaje = ex.Message;
            }
            catch (Exception ex)
            {
                ViewBag.Mensaje = ex.Message;
            }

            return View(oi);
        }
        public ActionResult Salida(BEOrdenInternamiento objOI, FormCollection form)
        {
            try
            {
                bool isOK = true;

                List<BEParametro> lstSalida = new BLParametro().ObtenerParametros(BEParametro.DOMINIO_Salida);

                ViewBag.ListaSalida = new SelectList(lstSalida, "IdParametro", "Nombre");
                ViewBag.Mensaje = "";

                foreach (BEParametro objP in lstSalida)
                {
                    if (string.IsNullOrEmpty(form["013o" + objP.IdParametro]))
                    {
                        isOK = false;
                        ViewBag.Mensaje = "Debe seleccionar la respuesta para la pregunta";
                        break;
                    }
                    else
                    {
                        if (form["013o" + objP.IdParametro].Equals("NO"))
                        {
                            if (string.IsNullOrEmpty(form["013t" + objP.IdParametro]))
                            {
                                isOK = false;
                                ViewBag.Mensaje = "Debe ingresar la descripcion para la respuesta";
                                break;
                            }
                        }
                    }
                }

                if (isOK)
                {
                    BEProcedimiento objBE = new BEProcedimiento();
                    objBE.IdProcedimiento = 0;
                    objBE.IdOrdenInternamiento = objOI.IdOrdenInternamiento;
                    objBE.Estado = "013";

                    foreach (BEParametro objP in lstSalida)
                    {
                        BEProcedimientoPregunta objPP = new BEProcedimientoPregunta();
                        objPP.IdProcedimientoPregunta = 0;
                        objPP.IdProcedimiento = 0;
                        objPP.Tipo = "013";
                        objPP.Pregunta = objP.IdParametro;
                        objPP.Respuesta = form["013o" + objP.IdParametro];
                        objPP.Descripcion = form["013t" + objP.IdParametro];
                        objPP.Estado = "001";

                        objBE.Preguntas.Add(objPP);
                    }

                    if (new BLProcedimiento().Actualizar(objBE))
                    {
                        TempData["Mensaje"] = "Se genero....";

                        return RedirectToAction("Index");
                    }
                    else
                    {
                        ViewBag.Mensaje = "No se registro el procedimiento";
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Mensaje = ex.Message;
            }

            return View(objOI);
        }