public ActionResult Crear(Guid? id, Guid? TipoArchivoID) { if (id == null || TipoArchivoID == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); var tipoArchivo = db.TipoArchivos.Find(TipoArchivoID); if (tipoArchivo == null) return HttpNotFound(); var pieza = db.Piezas.Find(id); if (pieza == null) return HttpNotFound(); var archivoPieza = new ArchivoPieza() { PiezaID = pieza.PiezaID, Status = true, TipoArchivoID = tipoArchivo.TipoArchivoID, TipoArchivo = tipoArchivo, Orden = pieza.ArchivosPiezas.Where(a => a.TipoArchivoID == tipoArchivo.TipoArchivoID).Count() + 1 }; archivoPieza.MostrarArchivos = new List<MostrarArchivo>(); foreach (var item in db.TipoMostrarArchivos.Where(a => a.Status).ToList()) { //crear en el archivo objetos temporales var tempMostrarArchivo = new MostrarArchivo() { ArchivoPiezaID = archivoPieza.ArchivoPiezaID, Status = false, TipoMostrarArchivo = item, TipoMostrarArchivoID = item.TipoMostrarArchivoID, }; archivoPieza.MostrarArchivos.Add(tempMostrarArchivo); } if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta)); //ViewBag.nombreArchivo = tipoArchivo.Nombre; //ViewBag.Lista_TipoMostrarArchivos = ; return PartialView("_Crear", archivoPieza); }
public ActionResult Editar(ArchivoPieza archivoPieza, HttpPostedFileBase FileArchivo, string Motivo) { #region inicio de editar var listaMostrarArchivos = new List<MostrarArchivo>(); //comprobar las extensiones validas var tipoArchivo = db.TipoArchivos.Find(archivoPieza.TipoArchivoID); archivoPieza.TipoArchivo = tipoArchivo; bool esImagen = tipoArchivo.Temp == "imagen_clave" ? true : false; ViewBag.esImagen = esImagen; foreach (var item in db.TipoMostrarArchivos.Where(a => a.Status).ToList()) { string keyStatus = Request.Form["mosArc_" + item.TipoMostrarArchivoID + "_Status"]; bool valorStatus = keyStatus == "true,false" ? true : false; var tempMostrarArchivo = db.MostrarArchivos.Find(item.TipoMostrarArchivoID, archivoPieza.ArchivoPiezaID); tempMostrarArchivo.Status = valorStatus; db.Entry(tempMostrarArchivo).State = EntityState.Modified; } #endregion try { #region Validaciones previas bool eliminarArchivo = false; string rutaThumb = ""; string rutaOriginal = ""; if (FileArchivo != null) { eliminarArchivo = true; archivoPieza.Extension = Path.GetExtension(FileArchivo.FileName); if (!tipoArchivo.ExtensionesAceptadas.Replace(" ", "").Split(',').Any(a => "." + a == archivoPieza.Extension)) { ModelState.AddModelError("", "Archivo no compatible."); eliminarArchivo = false; } rutaThumb = "~" + archivoPieza.RutaThumb; rutaOriginal = "~" + archivoPieza.Ruta; } if (string.IsNullOrWhiteSpace(Motivo)) ModelState.AddModelError("Motivo", "Motivo vacio."); #endregion if (ModelState.IsValid) { //Guardar el mostrar archivo db.SaveChanges(); #region preparar la eliminacion if (eliminarArchivo) { if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta)); if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta + "thumb/"))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta + "thumb/")); archivoPieza.NombreArchivo = Guid.NewGuid().ToString(); string rutaGuardar = Server.MapPath(archivoPieza.Ruta); FileArchivo.SaveAs(rutaGuardar); FileArchivo.InputStream.Dispose(); FileArchivo.InputStream.Close(); GC.Collect(); //generar la mini switch (archivoPieza.Extension) { //imagenes case ".jpg": case ".png": case ".tiff": Thumbnail mini = new Thumbnail() { OrigenSrc = rutaGuardar, DestinoSrc = Server.MapPath(archivoPieza.RutaThumb), LimiteAnchoAlto = 220 }; mini.GuardarThumbnail(); break; //videos case ".mp4": case ".avi": break; } //Eliminar los archivos FileInfo infoThumb = new FileInfo(Server.MapPath(rutaThumb)); if (infoThumb.Exists) infoThumb.Delete(); FileInfo infoOriginal = new FileInfo(Server.MapPath(rutaOriginal)); if (infoOriginal.Exists) infoOriginal.Delete(); } #endregion //------ Logica HISTORIAL #region Generar el historial //objeto del formulario var objeto = archivoPieza; //Objeto de la base de datos var objetoDB = db.ArchivoPiezas.Find(archivoPieza.ArchivoPiezaID); //tabla o clase a la que pertenece var tablaNombre = objeto.GetType().Name; //llave primaria del objeto var llavePrimaria = objetoDB.ArchivoPiezaID.ToString(); //generar el historial var historialLog = HistorialLogica.EditarEntidad( objeto, objetoDB, tablaNombre, llavePrimaria, User.UsuarioID, db, Motivo ); #endregion #region Guardar el historial if (historialLog != null) { //Cambiar el estado a la entidad a modificada db.Entry(objetoDB).State = EntityState.Modified; //Guardamos la entidad modificada db.SaveChanges(); //Guardar el historial db.HistorialLogs.Add(historialLog); db.SaveChanges(); } #endregion //------ //Logica para terminar la instruccion #region logica finalizar AlertaInfo(string.Format("Se edito archivo {0} <b>{1}</b>", tipoArchivo.Nombre, archivoPieza.Titulo), true); string url = ""; var tipoMostrarArchivo = db.TipoMostrarArchivos.FirstOrDefault(a => a.Nombre == "Completos"); if (esImagen) url = Url.Action("ContenedorImagen", "ArchivoPieza", new { id = archivoPieza.PiezaID, tipoMostrarArchivoID = tipoMostrarArchivo.TipoMostrarArchivoID, esCompleta = true }); else url = Url.Action("Lista", "ArchivoPieza", new { id = archivoPieza.PiezaID, TipoArchivoID = tipoArchivo.TipoArchivoID, esCompleta = true }); #endregion return Json(new { success = true, url = url, idPieza = archivoPieza.PiezaID, esImagen = esImagen }); } } catch (Exception) { ModelState.AddModelError("", "Error desconocido."); } return PartialView("_Editar", archivoPieza); }
public ActionResult Crear(ArchivoPieza archivoPieza, HttpPostedFileBase FileArchivo) { #region Inicio de crear //mostrar los archivos no se guardara en el historial, por que su implementacion es muy costosa var listaMostrarArchivos = new List<MostrarArchivo>(); foreach (var item in db.TipoMostrarArchivos.Where(a => a.Status).ToList()) { string keyStatus = Request.Form["mosArc_" + item.TipoMostrarArchivoID + "_Status"]; bool valorStatus = keyStatus == "true,false" ? true : false; var tempMostrarArchivo = new MostrarArchivo() { Status = valorStatus, TipoMostrarArchivo = item, TipoMostrarArchivoID = item.TipoMostrarArchivoID }; listaMostrarArchivos.Add(tempMostrarArchivo); } #endregion try { #region Validaciones previas //comprobar las extensiones validas var tipoArchivo = db.TipoArchivos.Find(archivoPieza.TipoArchivoID); archivoPieza.Extension = Path.GetExtension(FileArchivo.FileName); if (!tipoArchivo.ExtensionesAceptadas.Replace(" ", "").Split(',').Any(a => "." + a == archivoPieza.Extension)) ModelState.AddModelError("", "Archivo no compatible."); if (FileArchivo == null) ModelState.AddModelError("", "Seleccione un archivo"); #endregion if (ModelState.IsValid) { //Crear la entidad #region pre-creacion de la entidad //validar que la carpeta del tipo de archivo exista if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta)); if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta + "thumb/"))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta + "thumb/")); //Agregando valores que faltan archivoPieza.ArchivoPiezaID = Guid.NewGuid(); archivoPieza.NombreArchivo = Guid.NewGuid().ToString(); archivoPieza.Orden = db.ArchivoPiezas.Where(a => a.TipoArchivoID == archivoPieza.TipoArchivoID && a.PiezaID == archivoPieza.PiezaID).Count() + 1; archivoPieza.TipoArchivo = tipoArchivo; string rutaGuardar = Server.MapPath(archivoPieza.Ruta); FileArchivo.SaveAs(rutaGuardar); FileArchivo.InputStream.Dispose(); FileArchivo.InputStream.Close(); GC.Collect(); #region Creacion de la miniatura //generar la mini switch (archivoPieza.Extension) { //imagenes case ".jpg": case ".png": case ".tiff": Thumbnail mini = new Thumbnail() { OrigenSrc = rutaGuardar, DestinoSrc = Server.MapPath(archivoPieza.RutaThumb), LimiteAnchoAlto = 220 }; mini.GuardarThumbnail(); break; //videos case ".mp4": case ".avi": break; } #endregion #endregion db.ArchivoPiezas.Add(archivoPieza); db.SaveChanges(); //------ Logica HISTORIAL #region Generar el historial // Generar el historial var historialLog = HistorialLogica.CrearEntidad( archivoPieza, archivoPieza.GetType().Name, archivoPieza.ArchivoPiezaID.ToString(), User.UsuarioID, db); #endregion #region Guardar el historial //Guardar cambios si todo salio correcto if (historialLog != null) { //Guardar la entidad db.SaveChanges(); //Guardar el historial db.HistorialLogs.Add(historialLog); db.SaveChanges(); } else { throw new Exception(); } #endregion //------ foreach (var item in listaMostrarArchivos) { item.ArchivoPiezaID = archivoPieza.ArchivoPiezaID; db.MostrarArchivos.Add(item); db.SaveChanges(); } //Logica para terminar la instruccion #region logica finalizar AlertaSuccess(string.Format("Se guardo archivo {0} <b>{1}</b>", tipoArchivo.Nombre, archivoPieza.Titulo), true); string url = ""; bool esImagen = tipoArchivo.Temp == "imagen_clave" ? true : false; var tipoMostrarArchivo = db.TipoMostrarArchivos.FirstOrDefault(a => a.Nombre == "Completos"); if (esImagen) url = Url.Action("ContenedorImagen", "ArchivoPieza", new { id = archivoPieza.PiezaID, tipoMostrarArchivoID = tipoMostrarArchivo.TipoMostrarArchivoID, esCompleta = true }); else url = Url.Action("Lista", "ArchivoPieza", new { id = archivoPieza.PiezaID, TipoArchivoID = tipoArchivo.TipoArchivoID, esCompleta = true }); #endregion return Json(new { success = true, url = url, idPieza = archivoPieza.PiezaID, esImagen = esImagen }); } } catch (Exception) { ModelState.AddModelError("", "Error desconocido."); } archivoPieza.MostrarArchivos = listaMostrarArchivos; return PartialView("_Crear", archivoPieza); }