public ActionResult AddCentroDeTrabajo(CentroDeTrabajoViewModel model) { using (SaludOcupacionalEntities db = new SaludOcupacionalEntities()) { List <SelectListItem> regiones = (from d in db.Region orderby d.numeroRegion select new SelectListItem { Value = d.idRegion.ToString(), Text = d.nombreRegion, }).ToList(); model.listaDeRegiones = new SelectList(regiones, "Value", "Text"); } if (!ModelState.IsValid) { return(View(model)); } using (var db = new SaludOcupacionalEntities()) { int idRegion = int.Parse(model.idRegion); var nombreExistente = db.CentroDeTrabajo.Any(x => (x.nombreCentroDeTrabajo == model.nombre) && (x.idRegion == idRegion)); if (nombreExistente) { ModelState.AddModelError("nombre", "Este Centro de Trabajo ya está registrado en esta región"); return(View(model)); } CentroDeTrabajo oCentroDeTrabajo = new CentroDeTrabajo(); oCentroDeTrabajo.nombreCentroDeTrabajo = model.nombre; oCentroDeTrabajo.idRegion = idRegion; db.CentroDeTrabajo.Add(oCentroDeTrabajo); db.SaveChanges(); TempData["Success"] = "Centro de Trabajo creado correctamente"; } return(View(model)); }
public ActionResult AddComisionUser(ComisionViewModel model) { List <SelectListItem> regionesTemp; using (SaludOcupacionalEntities db = new SaludOcupacionalEntities()) { regionesTemp = (from d in db.Region orderby d.numeroRegion select new SelectListItem { Value = d.idRegion.ToString(), Text = d.nombreRegion, }).ToList(); } model.listaDeRegiones = new SelectList(regionesTemp, "Value", "Text"); if (!ModelState.IsValid) { return(View(model)); } using (var db = new SaludOcupacionalEntities()) { // Revisa si el centro de trabajo existe en el sistema CentroDeTrabajo oCentroDeTrabajo = db.CentroDeTrabajo.Find(model.idCentroDeTrabajo); if (oCentroDeTrabajo == null) { ModelState.AddModelError("nombreCentroDeTrabajo", "El Centro de Trabajo no Existe"); return(View(model)); } // Revisa si el centro de trabajo ya tiene una comisión asignada. Sólo puede haber una comisión por centro de trabajo int valido = (from d in db.Comision join ct in db.CentroDeTrabajo on d.idCentroDeTrabajo equals ct.idCentroDeTrabajo where ct.idCentroDeTrabajo == model.idCentroDeTrabajo select d.idCentroDeTrabajo).Count(); if (valido != 0) { ModelState.AddModelError("nombreCentroDeTrabajo", "El Centro de Trabajo ya está asignado a otra comisión"); return(View(model)); } /* Crea el nombre de la comisión de manera predeterminada. Ej: "comisionhatillo" para el centro de trabajo "Hatillo" * Quita los espacios en blanco*/ string nombreComision = String.Concat(oCentroDeTrabajo.nombreCentroDeTrabajo.Where(c => !Char.IsWhiteSpace(c))); nombreComision = "comision" + nombreComision; /* Revisa si el nombre de la comisión ya existe. Esto es para cuentas duplicadas, centros de trabajo que se llamen igual * pero pertenezcan a diferentes regiones, lo cual es válido*/ var usernameExists = db.Cuenta.Any(x => x.nombre == nombreComision); if (usernameExists) { // En caso de repetirse, añade el número de región. Ej "comisionsanrafael2" para San Rafael de Alajuela nombreComision = nombreComision + oCentroDeTrabajo.Region.numeroRegion.ToString(); } // Quita mayúsculas y guiones del nombre nombreComision = nombreComision.ToLower(); nombreComision = Regex.Replace(nombreComision.Normalize(NormalizationForm.FormD), @"[^a-zA-z0-9 ]+", ""); // La contraseña se genera mediante una función de C#, que recibe la cantidad de caracteres y el número de caracteres no alfanuméricos string contrasena = Membership.GeneratePassword(10, 1); ViewBag.nombre = nombreComision; ViewBag.contra = contrasena; // Se encripta la contraseña contrasena = CryptoEngine.Encrypt(contrasena); Cuenta oCuenta = new Cuenta(); oCuenta.nombre = nombreComision; oCuenta.contrasena = contrasena; oCuenta.rol = 1; // Rol 1 significa "usuario" db.Cuenta.Add(oCuenta); Comision oComision = new Comision(); oComision.idCentroDeTrabajo = model.idCentroDeTrabajo; oComision.idCuenta = oCuenta.idCuenta; db.Comision.Add(oComision); db.SaveChanges(); } return(View(model)); }