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();

             }     
         }