/// <summary> /// Particiona el slot de backup utilizado en función del swap ejecutado. /// </summary> /// <param name="s">Swap ejecutado sobre el slot de backup en operación</param> private void DividirSlot(Swap s) { int tiempo_corte_swap; //= s.Tramo_Ini_Emisor.TInicialRst + s.Minutos_Atraso_Reaccionario_Inicial; int tiempo_inicio_uso_swap; // = s.Tramo_Ini_Emisor.TFinProgMasTATramoPrevio; s.EstimarTiemposCorteBackup(out tiempo_corte_swap, out tiempo_inicio_uso_swap); SlotBackup slotUsado = BuscarSlot(s.TramoPreBackup.TInicialProg, s.TramoPostBackup.TFinalRst); if (slotUsado != null) { slotUsado.TipoUso = TipoUsoBackup.Swap; slotUsado.TiempoIniUso = Math.Max(slotUsado.TiempoIniUso, Math.Min(slotUsado.TiempoFinPrg, tiempo_inicio_uso_swap)); slotUsado.TiempoFinRst = Math.Min(Math.Max(tiempo_corte_swap, slotUsado.TiempoIniRst), slotUsado.TiempoFinPrg); tiempo_corte_swap = slotUsado.TiempoFinRst; slotUsado.TiempoFinUso = slotUsado.TiempoFinRst; int tiempoFinNuevo = Math.Min(slotUsado.TiempoFinPrg, s.TiempoFinHolguraEnEmisor); if (tiempoFinNuevo - tiempo_corte_swap > 0) { string matricula = null; if (s.TipoUsoBackup == UsoBackup.FinEmisor) { matricula = s.IdAvionReceptor; } else { matricula = s.IdAvionEmisor; } SlotBackup nuevo_slot = new SlotBackup(this, tiempo_corte_swap, tiempoFinNuevo, Estacion, matricula); _slots.Add(nuevo_slot); } } }
/// <summary> /// Método para estimar el porcentaje de utilización de la matrícula inicial asignada a la unidad de backup, sin considerar útiles los T/A mínimos de los extremos. /// La utilización se estima como el porcentaje de minutos usados en la operación durante el tiempo programado para la unidad. /// </summary> /// <returns></returns> private double EstimarPorcentajeUtilizacionSlotMatriculaSinTA() { SlotBackup slotIni = _slots[0]; string matricula = slotIni.Matricula; return(_estimar_utilizacion_slot(matricula, TiempoIniPrg, TiempoFinPrg, false) + ((slotIni.TipoUso == TipoUsoBackup.AOG) ? (0.0 + slotIni.TiempoFinUso - slotIni.TiempoIniUso) / (TiempoFinPrg - TiempoIniPrg + 0.0) : 0)); }
/// <summary> /// Genera una copia de la unidad de backup /// </summary> /// <returns></returns> public object Clone() { UnidadBackup bu = new UnidadBackup(); bu._tramo_base = this._tramo_base; bu._slots = new List <SlotBackup>(); bu._swaps = new Dictionary <string, Swap>(); bu._t_fin_prg = this._t_fin_prg; bu._t_fin_rst = this._t_fin_prg; bu._t_ini_prg = this._t_ini_prg; bu._t_ini_rst = this._t_ini_prg; foreach (SlotBackup s in this._slots) { SlotBackup clonado = (SlotBackup)s.Clone(); clonado.Contenedor = bu; bu._slots.Add(clonado); } return(bu); }
/// <summary> /// Constructor de una unidad de backup /// </summary> /// <param name="tramoBase">Objeto con la información del itinerario</param> /// <param name="fechaBase">Fecha inicial del itinerario</param> public UnidadBackup(TramoBase tramoBase, DateTime fechaBase) { this._tramo_base = tramoBase; int diasDesfaseSalida = Convert.ToInt32((tramoBase.Fecha_Salida - fechaBase).TotalDays); int diasDesfaseLlegada = Convert.ToInt32((tramoBase.Fecha_Llegada - fechaBase).TotalDays); int horaSalidaNum = Utilidades.ConvertirMinutosDesdeHoraString(tramoBase.Hora_Salida); int horaLlegadaNum = Utilidades.ConvertirMinutosDesdeHoraString(tramoBase.Hora_Llegada); this._t_ini_prg = diasDesfaseSalida * 24 * 60 + horaSalidaNum; this._t_ini_rst = _t_ini_prg; this._t_fin_prg = diasDesfaseLlegada * 24 * 60 + horaLlegadaNum; this._t_fin_rst = _t_fin_prg; this._swaps = new Dictionary <string, Swap>(); this._slots = new List <SlotBackup>(); string matricula = tramoBase.Numero_Ac; string estacion = tramoBase.Origen; //string key = tramoBase.Numero_Ac + "-" + _tiempo_ini_programado; SlotBackup slot_base = new SlotBackup(this, _t_ini_prg, _t_fin_prg, estacion, matricula); _slots.Add(slot_base); }
/// <summary> /// Genera una copia del slot /// </summary> /// <returns></returns> public object Clone() { SlotBackup s = new SlotBackup(null, this._t_ini_prg, this._t_fin_prg, this._estacion, this._matricula); return(s); }