public async Task<ActionResult> Medios_Propios([Bind(Include = "id,lista_personal,lista_maquinaria,lista_material,c_personal,c_maquinaria,c_material,tiempo_ejecucion")] Operaciones_Medios_Propios operaciones) { try { if (ModelState.IsValid) { Operaciones_Medios_Propios modificar = new Operaciones_Medios_Propios(); await modificar.Actualizar(operaciones, User.Identity.GetUserId(), Request.UserHostAddress); TempData["Mensaje"] = "Medios modificados correctamente."; return RedirectToAction("Editar", "Operaciones", new { id = operaciones.id }); } TempData["Mensaje"] = "Error al modificar los Medios."; return RedirectToAction("Editar", "Operaciones", new { id = operaciones.id }); } catch { TempData["Mensaje"] = "Error al modificar los Medios."; return RedirectToAction("Editar", "Operaciones", new { id = operaciones.id }); } }
/// <summary> /// Método para actializar los medios de la Operación /// </summary> /// <param name="op_nuevo"></param> /// <param name="id"></param> /// <param name="ip"></param> /// <returns></returns> public async Task Actualizar(Operaciones_Medios_Propios op_nuevo, string id, string ip) { using(var db = new Conexion()){ decimal coste_total = 0; //Eliminar las Subcontratas de esta Operación List<Operaciones_Subcontratas> op_sub = db.Operaciones_Subcontratas.Where(m => m.operacion_id == op_nuevo.id).ToList(); db.Operaciones_Subcontratas.RemoveRange(op_sub); await db.SaveChangesAsync(); List<Operaciones_TipoPersonal> intro_opp = new List<Operaciones_TipoPersonal>(); intro_opp = db.Operaciones_TipoPersonal.Where(m=>m.operacion == op_nuevo.id).ToList(); db.Operaciones_TipoPersonal.RemoveRange(intro_opp); db.SaveChanges(); intro_opp.Clear(); int posicion = 0; foreach (int i in op_nuevo.c_personal) { if (i != 0) { Operaciones_TipoPersonal n_opp = new Operaciones_TipoPersonal(); n_opp.operacion = op_nuevo.id; n_opp.tipo_personal = op_nuevo.lista_personal[posicion]; n_opp.cantidad = i; intro_opp.Add(n_opp); //Sumar el coste total de la operación var t_p = db.Tipo_Personal.SingleOrDefault(m => m.id == n_opp.tipo_personal); coste_total = coste_total + (t_p.coste * i) * op_nuevo.tiempo_ejecucion; } posicion++; }; db.Operaciones_TipoPersonal.AddRange(intro_opp); await db.SaveChangesAsync(); Historial nuevo = new Historial("Modificó Tipos de Personal", id, "usuario", ip); List<Operaciones_TipoMaterial> intro_opm = new List<Operaciones_TipoMaterial>(); intro_opm = db.Operaciones_TipoMaterial.Where(m => m.operacion == op_nuevo.id).ToList(); db.Operaciones_TipoMaterial.RemoveRange(intro_opm); await db.SaveChangesAsync(); intro_opm.Clear(); posicion = 0; foreach (int i in op_nuevo.c_material) { if (i != 0) { Operaciones_TipoMaterial n_opp = new Operaciones_TipoMaterial(); n_opp.operacion = op_nuevo.id; n_opp.tipo_material = op_nuevo.lista_material[posicion]; n_opp.cantidad = i; intro_opm.Add(n_opp); //Sumar el coste total de la operación var t_p = db.Tipo_Material.SingleOrDefault(m => m.id == n_opp.tipo_material); coste_total = coste_total + t_p.coste * i; } posicion++; }; db.Operaciones_TipoMaterial.AddRange(intro_opm); await db.SaveChangesAsync(); Historial nuevo_material = new Historial("Modificó Tipos de Material", id, "usuario", ip); List<Operaciones_TipoMaquinaria> intro_opma = new List<Operaciones_TipoMaquinaria>(); intro_opma = db.Operaciones_TipoMaquinaria.Where(m => m.operacion == op_nuevo.id).ToList(); db.Operaciones_TipoMaquinaria.RemoveRange(intro_opma); await db.SaveChangesAsync(); intro_opma.Clear(); posicion = 0; foreach (int i in op_nuevo.c_maquinaria) { if (i != 0) { Operaciones_TipoMaquinaria n_opp = new Operaciones_TipoMaquinaria(); n_opp.operacion = op_nuevo.id; n_opp.tipo_maquinaria = op_nuevo.lista_maquinaria[posicion]; n_opp.cantidad = i; intro_opma.Add(n_opp); //Sumar el coste total de la operación var t_p = db.Tipo_Maquinaria.SingleOrDefault(m => m.id == n_opp.tipo_maquinaria); coste_total = coste_total + (t_p.coste * i)*op_nuevo.tiempo_ejecucion; } posicion++; }; db.Operaciones_TipoMaquinaria.AddRange(intro_opma); await db.SaveChangesAsync(); Historial nuevo_maquinarias = new Historial("Modificó Tipos de Maquinarias", id, "usuario", ip); Operaciones operaciones = await db.Operaciones.FindAsync(op_nuevo.id); operaciones.coste_total = coste_total; operaciones.medios = "propios"; db.Entry(operaciones).State = EntityState.Modified; await db.SaveChangesAsync(); } }