public Carga_Estado_Fuerza NuevaCargaEstadoFuerza() { Carga_Estado_Fuerza carga = new Carga_Estado_Fuerza(); carga.fecha_creacion = DateTime.Now; carga.id_usuario_creacion = Cache.DiccionarioUsuariosLogueados[User.Identity.Name].usuario.id_usuario; return(carga); }
public ActionResult Leer_Archivo(HttpPostedFileBase file, int id) { var filepath = Server.MapPath("~/Archivos/Temp/" + file.FileName); if (System.IO.File.Exists(filepath)) { System.IO.File.Delete(filepath); } file.SaveAs(filepath); Estado_Fuerza estado_fuerza = db.Estado_Fuerza.SingleOrDefault(e => e.activo && !e.eliminado && e.id_estado_fuerza == id); if (estado_fuerza == null) { return(HttpNotFound()); } var excel = new ExcelQueryFactory(filepath); var worksheetNames = excel.GetWorksheetNames(); using (DbContextTransaction tran = db.Database.BeginTransaction()) { Carga_Estado_Fuerza carga_encabezado = NuevaCargaEstadoFuerza(); carga_encabezado.id_estado_fuerza = id; carga_encabezado.nombre_archivo = file.FileName; try { db.Carga_Estado_Fuerza.Add(carga_encabezado); db.SaveChanges(); } catch { ContextMessage msg = new ContextMessage(ContextMessage.Error, "Error durante la conexión con el servidor. Carga de archivo no efectuada."); msg.ReturnUrl = Url.Action(""); TempData[User.Identity.Name] = msg; return(RedirectToAction("Mensaje")); } var hoja = from a in excel.Worksheet(worksheetNames.First()) select a; List <ResultadoCargaEF> resultado = new List <ResultadoCargaEF>(); foreach (var a in hoja) { bool correcto = true; string error = ""; try { string empleado = a["id_empleado"]; string ubicacion = a["id_ubicacion"]; string tipo_servicio = a["id_tipo_ubicacion"]; //Tipo Servicio string situacion = a["id_estado"]; //Situacion string observacion = a["comentario"]; //Observacion int id_empleado, id_ubicacion, id_tipo_servicio, id_situacion; //Código de Empleado if (int.TryParse(empleado, out id_empleado)) { var Empleado = db.Contratacion.SingleOrDefault(e => e.id_empleado == id_empleado && e.activo && !e.eliminado); if (Empleado != null) { if (Empleado.id_estado_empleado != (int)Catalogos.Estado_Empleado.Alta) { error = "El empleado no está de Alta."; correcto = false; } } else { error = "El empleado no existe.\n"; correcto = false; } } else { error = "El formato del código de empleado es incorrecto.\n"; correcto = false; } //Situacion if (int.TryParse(situacion, out id_situacion)) { if (db.Situacion.SingleOrDefault(s => s.activo && !s.eliminado && s.id_situacion == id_situacion) == null) { error += "Estado ingresado no reconocido.\n"; correcto = false; } } else { error += "El formato del estado es incorrecto.\n"; correcto = false; } //Ubicacion if (int.TryParse(ubicacion, out id_ubicacion)) { if (db.Ubicaciones.SingleOrDefault(u => u.activo && !u.eliminado && u.id_ubicacion == id_ubicacion) == null) { error += "Ubicación ingresada no reconocida.\n"; correcto = false; } } else { error += "El formato del código de ubicación es incorrecto.\n"; correcto = false; } //Tipo de Servicio if (int.TryParse(tipo_servicio, out id_tipo_servicio)) { if (db.Cat_Tipos_Agente.SingleOrDefault(t => t.activo && !t.eliminado && t.id_cat_tipo_agente == id_tipo_servicio) == null) { error += "Tipo de ubicación no reconocido.\n"; correcto = false; } } else { error += "El formato del tipo de ubicación es incorrecto.\n"; correcto = false; } var detalle_ef = estado_fuerza.Estado_Fuerza_Detalle.SingleOrDefault(e => e.activo && !e.eliminado && e.id_empleado == id_empleado); if (detalle_ef != null) { error += "El empleado ya esta registrado en el estado de fuerza.\n"; correcto = false; } //Validar que no se ingrese dos veces en el mismo archivo var semejantes = resultado.Where(r => r.id_empleado == empleado); if (semejantes.Count() > 0) { error += "Registro duplicado en la carga del archivo.\n"; correcto = false; } if (!String.IsNullOrEmpty(error)) { error = error.Substring(0, error.LastIndexOf('.')); } Carga_Estado_Fuerza_Detalle carga_detalle = new Carga_Estado_Fuerza_Detalle(); carga_detalle.id_empleado = empleado; carga_detalle.id_ubicacion = ubicacion; carga_detalle.id_cat_tipo_agente = tipo_servicio; carga_detalle.observacion = observacion; carga_detalle.id_situacion = situacion; carga_detalle.id_carga_estado_fuerza = carga_encabezado.id_carga_estado_fuerza; db.Carga_Estado_Fuerza_Detalle.Add(carga_detalle); //Resultados de la lectura del archivo ResultadoCargaEF nuevo_resultado = new ResultadoCargaEF(); nuevo_resultado.correcto = correcto; nuevo_resultado.error = error; nuevo_resultado.id_empleado = empleado; nuevo_resultado.id_cat_tipo_agente = tipo_servicio; nuevo_resultado.id_situacion = situacion; nuevo_resultado.observacion = observacion; nuevo_resultado.id_ubicacion = ubicacion; resultado.Add(nuevo_resultado); } catch { error += "Ocurrio un error innesperado en la lectura de este registro."; correcto = false; } } db.SaveChanges(); tran.Commit(); ViewBag.id_estado_fuerza = estado_fuerza.id_estado_fuerza; return(View("ResultadoCargaMasiva", resultado.OrderBy(x => x.correcto).ToList())); } }