public ActionResult Eliminar(int id)
        {
            var pd    = new PerDepartamento();
            var error = "";
            var str   = new StringBuilder();

            str.Append("{");
            str.Append("\"Eliminado\":");

            try
            {
                if (id > 0)
                {
                    // Checar si no hay un área o un documento que haga referencia a éste departamento.
                    if (pd.EnUsoPorArea(id) || pd.EnUsoPorDocumento(id))
                    {
                        str.Append("0");
                        error = "Departamento en uso.";
                        Debug.WriteLine("Departamento en uso");
                    }
                    else
                    {
                        pd.Eliminar(id);
                        str.Append("1");
                        Debug.WriteLine("Eliminado");
                    }
                }
                else
                {
                    str.Append("0");
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                error = ex.Message;
                str.Append("0");
            }

            str.Append(",");
            str.Append("\"Error\":");
            str.Append("\"" + error + "\"");
            str.Append("}");

            return(Json(str.ToString(), JsonRequestBehavior.AllowGet));
        }
        public ActionResult Editar(Departamento depa)
        {
            ActionResult ar  = RedirectToAction("Index");
            var          job = new JObject();

            job["Error"]  = true;
            job["Clase"]  = this.GetType().Name;
            job["Metodo"] = System.Reflection.MethodBase.GetCurrentMethod().Name;
            job["Nombre"] = "";
            job["Clave"]  = "";

            if (depa != null)
            {
                depa.Nombre = depa.Nombre.Trim();
                depa.Clave  = depa.Clave.Trim();

                var error = false;
                var pd    = new PerDepartamento();

                // Checar si ya hay un departamento con este nombre.
                List <Departamento> lst = pd.ObtenerActivos(depa.IdDepartamento, depa.Nombre);

                if (lst.Count() > 0)
                {
                    Debug.WriteLine("lst.Count() > 0");
                    error = true;
                    foreach (var departamento in lst)
                    {
                        if (departamento.Nombre.ToUpper() == depa.Nombre.ToUpper())
                        {
                            job["Nombre"] += "El departamento \"" + depa.Nombre + "\" ya existe. ";
                        }
                    }
                }

                // Checar si ya hay un departamento con esta clave.
                List <Departamento> lstClave = pd.ObtenerActivosClave(depa.IdDepartamento, depa.Clave);

                if (lstClave.Count() > 0)
                {
                    error = true;

                    foreach (var departamento in lstClave)
                    {
                        if (departamento.Clave.ToUpper() == depa.Clave.ToUpper())
                        {
                            job["Clave"] += "La clave \"" + depa.Clave + "\" ya existe. ";
                        }
                    }
                }

                // Checar si hubo cambio de nombre, y si sí, checar si ya está siendo usado por un documento.
                if (pd.CambioNombre(depa))
                {
                    if (pd.EnUsoPorDocumento(depa.IdDepartamento))
                    {
                        error          = true;
                        job["Nombre"] += "No se le puede cambiar el nombre a un departamento que ya está siendo usado por uno o más documentos. ";
                    }
                }

                if (error)
                {
                    ViewBag.validacionDeDatos = job;
                    ar = View(depa);
                }
                else
                {
                    try
                    {
                        pd.Editar(depa);
                        job["Error"] = false;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.ToString());
                        job["Nombre"] += "Error al guardar el registro: " + ex.Message;
                        if (ex.InnerException != null)
                        {
                            job["Nombre"] += " " + ex.InnerException.Message;
                        }

                        ViewBag.validacionDeDatos = job;
                        ar = View(depa);
                    }
                }
            }

            return(ar);
        }