public ActionResult GuardarFichero(int pedidoId, int idTipo) { var transfer = new ClientTransfer(); var parameters = new SaveFicheroParameters(); if (Request.Files.Count > 0) { var file = Request.Files[0]; if (file != null && file.ContentLength > 0) { if (file.ContentLength / 1024 > 20480) { transfer.Errors.Add("Este fichero ha excedido el tamaño permitido."); return(Json(transfer)); } var content = ReadFully(file.InputStream); parameters.Content = content; parameters.IdPedido = pedidoId; parameters.IdTipo = idTipo; parameters.Name = file.FileName; parameters.MimeType = file.ContentType; } } var user = User.Identity; if (user == null) { transfer.Errors.Add(CommonControllerStrings.ErrorSinUsuario); return(Json(transfer)); } parameters.IdUsuario = int.Parse(user.Name); var res = _pedidosService.GuardarFichero(parameters); if (res.HasErrors) { transfer.Errors.AddRange(res.Errors); } if (res.HasWarnings) { transfer.Warnings.AddRange(res.Warnings); } if (transfer.HasErrors || transfer.HasWarnings) { return(Json(transfer)); } var fichero = _ficherosService.Get(parameters.IdPedido.Value, parameters.IdTipo.Value); var cambiarEstado = _pedidosService.CambiarEstado(pedidoId, int.Parse(user.Name)); transfer.Data = new { IdFichero = fichero.Id, EstadoModificado = cambiarEstado, Estado = fichero.Pedido.Estado.Nombre }; return(Json(transfer)); }
public BaseResult GuardarFichero(SaveFicheroParameters parameters) { var result = new BaseResult(); var extension = Path.GetExtension(parameters.Name); var pedido = _dbContext.Pedidos.Find(parameters.IdPedido); var mimes = _ficherosService.GetMimes(); var tipoFicheroNuevo = _dbContext.TiposFicheros.Find(parameters.IdTipo); if (!mimes.Any(a => a.Nombre.Contains(parameters.MimeType) && a.Extension.Contains(extension?.ToLower() ?? ""))) { result.Errors.Add(PedidoStrings.ErrorFicheroNoValido); } else if (pedido == null) { result.Errors.Add(PedidoStrings.ErrorNoPedido); } else { if (parameters.IdTipo == (int)TipoFicheroEnum.RecibiConforme) { if (!pedido.Polizas.Any()) { result.Errors.Add(PedidoStrings.ErrorNoRCNoPolizas); return(result); } } var rutaArchivo = FileHelper.GetPath(pedido.Id, parameters.IdTipo.Value, extension); var ficheroActual = _ficherosService.Get(parameters.IdPedido.Value, parameters.IdTipo.Value); if (ficheroActual != null) { var rutaFicheroActual = FileHelper.GetPath(pedido.Id, parameters.IdTipo.Value, Path.GetExtension(ficheroActual.Nombre)); if (FileHelper.Exist(rutaFicheroActual)) { if (!FileHelper.RemoveFile(rutaFicheroActual)) { result.Errors.Add(PedidoStrings.ErrorEliminarFichero); } else { var seguimiento = new Seguimiento { PedidoId = pedido.Id, Fecha = DateTime.Now, Descripcion = string.Format(CommonServiceStrings.TextSegEliminarFichero, ficheroActual.Tipo.Nombre), TipoId = (int)TipoSeguimientoEnum.Documentos, UsuarioId = parameters.IdUsuario.Value }; _dbContext.Seguimientos.Add(seguimiento); } } _dbContext.Ficheros.Remove(ficheroActual); } if (!FileHelper.WriteFile(rutaArchivo, parameters.Content)) { result.Errors.Add(PedidoStrings.ErrorSubirFichero); } if (result.HasErrors) { return(result); } var fichero = new Fichero { PedidoId = pedido.Id, TipoId = parameters.IdTipo.Value, EstadoId = (int)FicheroEstadoEnum.Recibido, Nombre = parameters.Name }; var tiposFicherosConEstados = new List <int> { (int)TipoFicheroEnum.FacturaComercial, (int)TipoFicheroEnum.Sicoin, (int)TipoFicheroEnum.Dam, (int)TipoFicheroEnum.Goc, (int)TipoFicheroEnum.Dav, (int)TipoFicheroEnum.Dui }; var seg = new Seguimiento { PedidoId = pedido.Id, Fecha = DateTime.Now, Descripcion = tiposFicherosConEstados.Any(a => a == tipoFicheroNuevo.Id) ? string.Format(CommonServiceStrings.TextSegCrearFicheroEstado, tipoFicheroNuevo.Nombre) : string.Format(CommonServiceStrings.TextSegCrearFichero, tipoFicheroNuevo.Nombre), TipoId = (int)TipoSeguimientoEnum.Documentos, UsuarioId = parameters.IdUsuario.Value }; _dbContext.Seguimientos.Add(seg); _dbContext.Ficheros.Add(fichero); _dbContext.SaveChanges(); } return(result); }