public object CrearSolicitud([FromForm] CrearSolicitudModel payload) { var qb = new QueryBuilder.QueryBuilder((string)Miscelanea.Configuracion.Get.connections.capnet); int id = 0; qb.Transaction(trx => { id = trx.Table("ma.solicitudes") .Insert(new { payload.id_agencia, payload.id_modulo, payload.asunto, payload.descripcion, payload.no_cita, payload.no_orden, payload.no_placas, fecha_registro = trx.Raw("getutcdate()"), fecha_actualizacion = trx.Raw("getutcdate()"), estado = "abierta" }, new string[] { "inserted.id" }) .ExecuteListDynamic()[0].id; if (payload.evidencias != null) { if (!Directory.Exists("wwwroot/img/" + DateTime.UtcNow.ToString("yyyy-MM-dd"))) { Directory.CreateDirectory("wwwroot/img/" + DateTime.UtcNow.ToString("yyyy-MM-dd")); } foreach (var elem in payload.evidencias) { var archivo = DateTime.UtcNow.ToString("yyyy-MM-dd") + "/" + Guid.NewGuid().ToString("N") + "." + HeyRed.Mime.MimeTypesMap.GetExtension(elem.ContentType); using (var fs = new FileStream("wwwroot/img/" + archivo, FileMode.Create)) elem.CopyTo(fs); trx.Table("ma.evidencias") .Insert(new { id_solicitud = id, ruta = archivo }) .Execute(); } } }); EnviarEmail(id, Miscelanea.Configuracion.Get.plantillasCorreo.solicitudRegistrada.asunto, Miscelanea.Configuracion.Get.plantillasCorreo.solicitudRegistrada.cuerpo, true); EnviarEmail(id, Miscelanea.Configuracion.Get.plantillasCorreo.solicitudRegistradaInterno.asunto, Miscelanea.Configuracion.Get.plantillasCorreo.solicitudRegistradaInterno.cuerpo, false); return(null); }
public ActionResult CrearSolicitud(CrearSolicitudModel modelo, HttpPostedFileBase ImageData) { if (ModelState.IsValid) // Verifica si el modelo que entra como parametro es valido para modificar { var requerimientoViejo = baseDatos.Requerimientos.Find(modelo.idReqAnterior); // Se busca el modelo en la base y se cambian sus datos por los var requerimiento = new Requerimiento(); requerimiento.nombre = modelo.nombre; // del modelo que entra como parametro requerimiento.codigo = modelo.codigo; requerimiento.version = requerimientoViejo.version + 1; requerimiento.creadoPor = modelo.creadoPor; requerimiento.descripcion = modelo.descripcion; requerimiento.solicitadoPor = modelo.solicitadoPor; requerimiento.prioridad = Int32.Parse(modelo.prioridad); requerimiento.esfuerzo = Int32.Parse(modelo.esfuerzo); requerimiento.creadoEn = DateTime.ParseExact(modelo.fechaInicial, "MM/dd/yyyy", null); if (modelo.fechaFinal != null) { requerimiento.finalizaEn = DateTime.ParseExact(modelo.fechaFinal, "MM/dd/yyyy", null); } requerimiento.estado = modelo.estado; requerimiento.observaciones = modelo.observaciones; requerimiento.proyecto = modelo.proyecto; requerimiento.Usuarios = new List <Usuario>(); baseDatos.SaveChanges(); if (modelo.equipo != null) { foreach (var desarrollador in modelo.equipo) { requerimiento.Usuarios.Add(baseDatos.Usuarios.Find(desarrollador)); } } if (ImageData != null) { var array = new Byte[ImageData.ContentLength]; ImageData.InputStream.Position = 0; ImageData.InputStream.Read(array, 0, ImageData.ContentLength); requerimiento.imagen = array; } else { if (modelo.file == "") { requerimiento.imagen = null; } else { requerimiento.imagen = Encoding.ASCII.GetBytes(modelo.file); } } //Se hace el split para separar los criterios de aceptación y meterlos en una lista var criterios = modelo.criteriosAceptacion.Split('|').ToList(); //Se crea la lista de criterios de aceptacion que puede ser expandible var criterio_list = new List <Requerimientos_Cri_Acep>(); foreach (var criterio in criterios) { var cri_ac = new Requerimientos_Cri_Acep(); cri_ac.criterio = criterio; criterio_list.Add(cri_ac); } requerimiento.Requerimientos_Cri_Acep = criterio_list; requerimiento.categoria = "Solicitud"; baseDatos.Requerimientos.Add(requerimiento); // Con esta linea se notifica a la base que se hacen los cambios var solicitud = new Solicitud_Cambios(); solicitud.razon = modelo.razon; solicitud.req1 = requerimientoViejo.id; solicitud.req2 = requerimiento.id; solicitud.proyecto = requerimiento.proyecto; solicitud.solicitadoEn = DateTime.Now; solicitud.tipo = "Modificar"; solicitud.estado = "En revisión"; String userID = System.Web.HttpContext.Current.User.Identity.GetUserId(); solicitud.solicitadoPor = baseDatos.Usuarios.Where(m => m.id == userID).First().cedula; baseDatos.Solicitud_Cambios.Add(solicitud); baseDatos.SaveChanges(); // Se guardan los cambios en la base this.AddToastMessage("Solicitud de Cambio Creada", "La solicitud de modificar " + modelo.nombre + " se ha enviado correctamente.", ToastType.Success); // Se muestra un mensaje de confirmacion return(RedirectToAction("index", "Requerimientos", new { proyecto = requerimiento.proyecto })); // Se carga el requerimiento modificado en la pantalla } List <Usuario> listaDesarrolladores = new List <Usuario>(); List <Usuario> listaClientes = new List <Usuario>(); string clienteRol = context.Roles.Where(m => m.Name == "Cliente").First().Id; string desarrolladorRol = context.Roles.Where(m => m.Name == "Desarrollador").First().Id; foreach (var user in context.Users.ToArray()) // En esta seccion se cargan las listas que despliegan los { // desarrolladores y usuarios relacionados con el requerimiento if (user.Roles.First().RoleId.Equals(clienteRol)) // para modificarlos { listaClientes.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First()); } else { if (user.Roles.First().RoleId.Equals(desarrolladorRol)) { listaDesarrolladores.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First()); } } } ViewBag.Desarrolladores = new SelectList(listaDesarrolladores, "cedula", "nombre"); // Se hacen unas validaciones de permisos y se ViewBag.Clientes = new SelectList(listaClientes, "cedula", "nombre"); // cargan los Viewbags necesitados en la vista ViewBag.DesarrolladoresDisp = listaDesarrolladores; ViewBag.Estados = new SelectList(baseDatos.Estado_Proyecto.ToList(), "nombre", "nombre"); return(View(modelo)); // Se retorna la vista al modelo luego de modificar los datos }
// GET: Crear Solicitud_Cambios public ActionResult CrearSolicitud(string id, int?page) { if (!revisarPermisos("Consultar Detalles de Requerimiento")) // Revisa los permisos del usuario accediendo a la pantalla { //Despliega mensaje en caso de no poder modificar un requerimiento this.AddToastMessage("Acceso Denegado", "No tienes permiso para ver detalles de requerimientos!", ToastType.Warning); return(RedirectToAction("Index", "Home")); } if (id == null) // Si no existe el requerimiento, redirecciona a error { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } CrearSolicitudModel modelo = new CrearSolicitudModel(); // Crea un modelo y lo llena con los datos del requerimiento var requerimiento = baseDatos.Requerimientos.Find(Int32.Parse(id)); // que entro como parametro if (requerimiento == null) { return(HttpNotFound()); } modelo.idReqAnterior = requerimiento.id; // Diferentes asignaciones de variables para el modelo creado modelo.codigo = requerimiento.codigo; modelo.nombre = requerimiento.nombre; modelo.creadoPor = requerimiento.creadoPor; modelo.version = requerimiento.version.ToString(); modelo.descripcion = requerimiento.descripcion; modelo.prioridad = requerimiento.prioridad.ToString(); modelo.esfuerzo = requerimiento.esfuerzo.ToString(); modelo.observaciones = requerimiento.observaciones; modelo.fechaInicial = requerimiento.creadoEn.ToString("MM/dd/yyyy"); if (requerimiento.finalizaEn != null) { modelo.fechaFinal = (requerimiento.finalizaEn ?? DateTime.Now).ToString("MM/dd/yyyy"); } modelo.solicitadoPor = requerimiento.solicitadoPor; modelo.estado = requerimiento.estado; modelo.proyecto = requerimiento.proyecto; if (requerimiento.imagen != null) { modelo.file = HttpUtility.UrlEncode(Convert.ToBase64String(requerimiento.imagen)); } else { modelo.file = ""; } modelo.equipo = new List <string>(); // Se llena la variable equipo con el equipo ya asignado a este requerimiento, si ya hay uno foreach (var des in requerimiento.Usuarios.ToList()) { modelo.equipo.Add(des.cedula); } modelo.criteriosAceptacion = requerimiento.Requerimientos_Cri_Acep.Select(c => c.criterio).Aggregate((acc, x) => acc + "|" + x); // Se agrega a la lista de criterios de aceptacion // los que ya estan vinculados con este requerimiento List <Usuario> listaDesarrolladores = new List <Usuario>(); // Se inicializan listas que se usan a traves a continuacion List <Modulo> listaModulos = new List <Modulo>(); List <Estado_Requerimientos> listaEstadoRequerimientos = new List <Estado_Requerimientos>(); List <Usuario> listaClientes = new List <Usuario>(); string clienteRol = context.Roles.Where(m => m.Name == "Cliente").First().Id; //Requerido para formar el equipo de trabajo foreach (var proyEquipo in baseDatos.Proyectos.Find(requerimiento.proyecto).Proyecto_Equipo) { listaDesarrolladores.Add(baseDatos.Usuarios.Find(proyEquipo.usuario)); } foreach (var user in context.Users.ToArray()) { if (user.Roles.First().RoleId.Equals(clienteRol)) { listaClientes.Add(baseDatos.Usuarios.Where(m => m.id == user.Id).First()); } } modelo.eliminarRequerimiento = revisarPermisos("Eliminar Requerimientos"); // Aqui se hacen unas validaciones de permisos modelo.crearSolicitud = revisarPermisos("Modificar Requerimientos"); // y se cargan ciertos Viewbags necesitados por la vista ViewBag.Desarrolladores = new SelectList(listaDesarrolladores, "cedula", "nombre"); ViewBag.Clientes = new SelectList(listaClientes, "cedula", "nombre"); ViewBag.DesarrolladoresDisp = listaDesarrolladores; ViewBag.Estados = new SelectList(baseDatos.Estado_Proyecto.ToList(), "nombre", "nombre"); //Indice de Versiones Anteriores var solicitudes = baseDatos.Solicitud_Cambios.Where(m => m.proyecto == requerimiento.proyecto && m.estado == "Aprobado" && (m.req1 == requerimiento.id || m.req2 == requerimiento.id)).ToList(); solicitudes = getRequerimientos(solicitudes); var reqs = new List <Requerimiento>(); foreach (var sol in solicitudes) { var req = baseDatos.Requerimientos.Find(sol.req1); if (req.categoria == "Historial") { if (!reqs.Contains(req)) { reqs.Add(req); } } var req2 = baseDatos.Requerimientos.Find(sol.req2); if (req2.categoria == "Historial" || req2.categoria == "Actual") { if (!reqs.Contains(req2)) { reqs.Add(req2); } } } int pageSize = 10; int pageNumber = (page ?? 1); int lastElement = (reqs.Count < pageSize * pageNumber) ? reqs.Count : pageSize * pageNumber; modelo.reqs = new List <Requerimiento>(); for (int i = (pageNumber - 1) * pageSize; i < lastElement; i++) { modelo.reqs.Add(reqs.ElementAt(i)); } var reqsAsIPagedList = new StaticPagedList <Requerimiento>(modelo.reqs, pageNumber, pageSize, reqs.Count); ViewBag.OnePageOfReqs = reqsAsIPagedList; return(View(modelo)); // Se retorna la vista al modelo luego de cargar los datos }