/// <summary> /// Deelt de tram in op een vrij onderhoudsspoor. /// </summary> /// <param name="tram"></param> /// <param name="dc"></param> public static void DeelTramInOpOnderhoudsSpoor(Tram tram, DatabaseController dc) //ToDo: Rekening houden met verbinding. { OnderhoudController oc = new OnderhoudController(huidigeRemise); Onderhoud onderhoud = oc.GetOnderhoud(tram); Spoor spoor = oc.GetVrijOnderhoudsSpoor(); if (spoor != null) { Sector sector = spoor.GetEersteSector(); sector.PlaatsTram(tram); if (sector.ID == spoor.Sectoren[(spoor.Sectoren.Count - 1)].ID) { spoor.Beschikbaar = false; } dc.UpdateSpoor(spoor); dc.UpdateSector(sector, huidigeRemise); dc.UpdateTram(sector.Tram); } else { DeelTramInVolgensAlgoritme(tram, dc); } }
/// <summary> /// Deelt de tram in op een vrij onderhoudsspoor. /// </summary> /// <param name="tram"></param> /// <param name="dc"></param> public static void DeelTramInOpReservering(Tram tram, DatabaseController dc) //ToDo: Rekening houden met verbinding. { BeheerController bc = new BeheerController(); Reservering reservering = bc.GetReservering(tram); foreach (Spoor spoor in alleSporen) { if (reservering.Spoor.ID == spoor.ID) { Sector sector = spoor.GetEersteSector(); if (sector == null) { DeelTramInVolgensAlgoritme(tram, dc); return; } else { sector.PlaatsTram(tram); if (sector.ID == spoor.Sectoren[(spoor.Sectoren.Count - 1)].ID) { spoor.Beschikbaar = false; } tram.Beschikbaar = true; dc.UpdateSpoor(spoor); dc.UpdateTram(tram); dc.UpdateSector(sector, huidigeRemise); dc.DeleteReservering(reservering.ID); } } } }
/// <summary> /// Deelt de tram in volgens het normaal algrotime. /// </summary> /// <param name="tram"></param> /// <param name="dc"></param> public static void DeelTramInVolgensAlgoritme(Tram tram, DatabaseController dc) //ToDo: Rekening houden met verbinding. { for (int x = 0; x < alleSporen.Count; x++) { if (alleSporen[x].Beschikbaar && alleSporen[x].SpoorType == SpoorType.Normaal) //TODO: spoor op niet beschikbaar zetten wanneer de laatste sector word gewijzigt naar niet beschikbaar of geblokkeerd. { for (int i = 0; i < alleSporen[x].Sectoren.Count; i++) { if (alleSporen[x].Sectoren[i].Beschikbaar && !alleSporen[x].Sectoren[i].Geblokkeerd && alleSporen[x].GenoegVrijeSporen()) { //Kijken of vertrektijd met vorige kan //Kijken of vertrektijd met reservering kan if (i - 1 != -1 && alleSporen[x].Sectoren[i - 1].Tram != null) { if (alleSporen[x].Sectoren[i - 1].Tram.Vertrektijd <= tram.Vertrektijd) { //plaats tram, TODO: Aparte MEthode volgende stuk alleSporen[x].Sectoren[i].PlaatsTram(tram); if (alleSporen[x].Sectoren[i].ID == alleSporen[x].Sectoren[(alleSporen[x].Sectoren.Count - 1)].ID) { alleSporen[x].Beschikbaar = false; } dc.UpdateSpoor(alleSporen[x]); dc.UpdateSector(alleSporen[x].Sectoren[i], huidigeRemise); dc.UpdateTram(alleSporen[x].Sectoren[i].Tram); return; } } else if (i - 1 == -1) { //plaats tram, TODO: Aparte MEthode volgende stuk alleSporen[x].Sectoren[i].PlaatsTram(tram); if (alleSporen[x].Sectoren[i].ID == alleSporen[x].Sectoren[(alleSporen[x].Sectoren.Count - 1)].ID) { alleSporen[x].Beschikbaar = false; } dc.UpdateSpoor(alleSporen[x]); dc.UpdateSector(alleSporen[x].Sectoren[i], huidigeRemise); dc.UpdateTram(alleSporen[x].Sectoren[i].Tram); return; } } } } } }
/// <summary> /// Veranderd de status van de tram /// </summary> /// <param name="tram">De tram die van status moet worden veranderd</param> /// <param name="tramStatus">De status waar de tram naar moet worden veranderd</param> public void TramStatusAanpassen(Tram tram, bool vervuild, bool defect) //TODO: Exception geven wanneer het niet lukt. Dit in het form afhandelen. { tram.Vervuild = vervuild; tram.Defect = defect; DatabaseController dc = new DatabaseController(); if (!dc.UpdateTram(tram)) { throw new TramStatusException("De status van de tram kont niet worden veranderd."); } }