/// <summary> /// Método para crear programar una operación /// </summary> /// <returns></returns> public OperacionesProgramadas Nuevo() { OperacionesProgramadas nuevo = new OperacionesProgramadas(); nuevo.listaLineas = new Lineas().ListaDrop(); nuevo.listaOperaciones = new Operaciones().ListaDrop(); return nuevo; }
public async Task<ActionResult> Programar([Bind(Include = "selectOperacion,selectLineas")] OperacionesProgramadas programar) { Operaciones operacion = db.Operaciones.First(m=>m.id == programar.selectOperacion); List<string> ids = new Apoyo().ApoyosAnomalia(operacion.anomalia, operacion.grado_anomalia); List<ApoyoLista> listaApoyos = db.ApoyoLista.Where(m => ids.Contains(m.id)).OrderBy(m=>m.nombre).ToList(); if(programar.selectLineas != null && programar.selectLineas.Count >0){ listaApoyos = listaApoyos.Where(m => programar.selectLineas.Contains(m.linea)).ToList(); } List<ApoyoLista> listTemp = new List<ApoyoLista>(); List<ApoyosProgramados> listaApoyosProgramados = new List<ApoyosProgramados>(); //FECHA DE MAÑANA DateTime uFecha = DateTime.Today.AddDays(1); OperacionesProgramadas nuevoOperacionesProgramadas = new OperacionesProgramadas(); nuevoOperacionesProgramadas.idoperacion = programar.selectOperacion; nuevoOperacionesProgramadas.fecha = DateTime.Now; nuevoOperacionesProgramadas.creadopor = User.Identity.GetUserId(); //Si hay apoyos a reparar if (listaApoyos.Count > 0) { //total de días de un equipo en realizar la operación int totalDias = listaApoyos.Count / operacion.rendimiento; //Si total de días es menor o igual a 24 que es el numero de días laborables. if (totalDias <= 24) { if (db.ApoyosProgramados.ToList() != null && db.ApoyosProgramados.ToList().Count > 0) { uFecha = db.ApoyosProgramados.OrderByDescending(m => m.end).Take(1).ToArray()[0].end; uFecha = uFecha.AddDays(1); } List<DateTime> listaFechas = new List<DateTime>(); while (listaFechas.Count < totalDias) { //Compruebo que las fechas no sean fin de semana if (uFecha.DayOfWeek != DayOfWeek.Saturday && uFecha.DayOfWeek != DayOfWeek.Sunday) { listaFechas.Add(uFecha); } //Aumento la fecha uFecha = uFecha.AddDays(1); } int indice = 0; //Recorro Lista de Fechas filtradas foreach (var e in listaFechas) { //Apoyos por fecha foreach (var f in listaApoyos.Skip(indice).Take(operacion.rendimiento)) { ApoyosProgramados nuevoApoyo = new ApoyosProgramados(); nuevoApoyo.start = e; nuevoApoyo.end = e; nuevoApoyo.idoperacionprogramada = nuevoOperacionesProgramadas.id; nuevoApoyo.idapoyo = f.id; listaApoyosProgramados.Add(nuevoApoyo); } indice = indice + operacion.rendimiento; } db.OperacionesProgramadas.Add(nuevoOperacionesProgramadas); await db.SaveChangesAsync(); db.ApoyosProgramados.AddRange(listaApoyosProgramados); await db.SaveChangesAsync(); }/*FIN IF SI ES MENOR DE 24 DIAS*/ else { //24 es la cantidad de días laborables en un mes int dias = operacion.tiempo_programacion * 24; //Total de apoyos por días (divido la cantidad de apoyos a operar entre el numero de dias laborables en el período de tiempo solicitado) decimal totalPDias1 = decimal.Divide(decimal.Parse(listaApoyos.Count.ToString()), decimal.Parse(dias.ToString())); int totalPDias = int.Parse(decimal.Ceiling(totalPDias1).ToString()); if (db.ApoyosProgramados.ToList() != null && db.ApoyosProgramados.ToList().Count > 0) { uFecha = db.ApoyosProgramados.OrderByDescending(m => m.end).Take(1).ToArray()[0].end; uFecha = uFecha.AddDays(1); } List<DateTime> listaFechas = new List<DateTime>(); while (listaFechas.Count < dias) { //Compruebo que las fechas no sean fin de semana if (uFecha.DayOfWeek != DayOfWeek.Saturday && uFecha.DayOfWeek != DayOfWeek.Sunday) { listaFechas.Add(uFecha); } //Aumento la fecha uFecha = uFecha.AddDays(1); } int indice = 0; //Recorro Lista de Fechas filtradas foreach (var e in listaFechas) { //Apoyos por fecha foreach (var f in listaApoyos.Skip(indice).Take(totalPDias)) { ApoyosProgramados nuevoApoyo = new ApoyosProgramados(); nuevoApoyo.start = e; nuevoApoyo.end = e; nuevoApoyo.idoperacionprogramada = nuevoOperacionesProgramadas.id; nuevoApoyo.idapoyo = f.id; listaApoyosProgramados.Add(nuevoApoyo); } indice = indice + totalPDias; } db.OperacionesProgramadas.Add(nuevoOperacionesProgramadas); await db.SaveChangesAsync(); db.ApoyosProgramados.AddRange(listaApoyosProgramados); await db.SaveChangesAsync(); } }/*FIN IF SI HAY APOYOS*/ TempData["Mensaje"] = "Operación Programada correctamente."; return View(new OperacionesProgramadas().Nuevo()); }