private void AddSpecialTourClick(object sender, RoutedEventArgs e) { Dispatcher.Invoke(new Action(() => { var r = new Random((int)DateTime.Now.Ticks); var fahrzeug = (Fahrzeug)DataContext; if (fahrzeug == null) return; if (!fahrzeug.Fahrten.Any(p => p.Description.StartsWith("Hof"))) fahrzeug.Fahrten.Add(new Fahrt { Description = "Hof-Scheeßel-Hof", KM = 20 }); int fehlendeFahrten = fahrzeug.TourenTotal - fahrzeug.TourCount; for (int i = 1; i <= fehlendeFahrten; i++) { float preis = 54.0F + (float)Math.Round(r.NextDouble() * 2.0F - 1.0F, 2); if (i == fehlendeFahrten) preis = fahrzeug.Preisdifferenz; preis = (float)Math.Round(preis / 10.0F, 2) * 10.0F; var f = new Fahrt { Description = "Scheeßel-Seedorf", APES = 48.0F - preis, Preis = preis }; fahrzeug.Fahrten.Add(f); } })); }
private void LoadAsync(string txiFile) { var doc = XDocument.Load(txiFile); var shiftCount = doc.Element("Schichten").Descendants().Count(); int verarb = 0; Schichten = new ObservableCollection<Schicht>(); // Parallel.ForEach(doc.Element("Schichten").Elements("Schicht"), ig => foreach (var ig in doc.Element("Schichten").Elements("Schicht")) { var i = ig; var schicht = new Schicht() { Index = i.AttValue<int>("Index"), AbrechnungFertig = i.AttValue<bool>("AbrechnungFertig"), Abgerechnet = i.AttValue<bool>("IstAbgerechnet"), Anfang = i.AttValue<DateTime>("Anfang"), Ende = i.AttValue<DateTime>("Ende"), GeldVorher = i.AttValue<float>("GeldVorher"), GeldNachher = i.AttValue<float>("GeldNachher"), GeliehenesWechselgeld = i.AttValue<float>("GeliehenesWechselgeld") }; foreach (var j in i.Elements("Sonderausgabe")) { schicht.Sonderausgaben.Add(j.AttValue<float>("Wert")); } foreach (var j in i.Elements("Privatausgabe")) { var priv = new Privatausgabe { Index = j.AttValue<int>("Index"), Bemerkung = j.AttValue<string>("Bemerkung") ?? "n/a", Wert = j.AttValue<double>("Wert") }; schicht.Privatausgaben.Add(priv); } foreach (var n in i.Elements("Fahrzeug")) { var fzg = new Fahrzeug { Index = n.AttValue<int>("Index"), Nummer = n.AttValue<int>("Nummer"), TotalAnfang = n.AttValue<Single>("TotalAnfang"), TotalEnde = n.AttValue<Single>("TotalEnde"), BesetztAnfang = n.AttValue<Single>("BesetztAnfang"), BesetztEnde = n.AttValue<Single>("BesetztEnde"), TourenAnfang = n.AttValue<int>("TourenAnfang"), TourenEnde = n.AttValue<int>("TourenEnde"), PreisAnfang = n.AttValue<Single>("EinnahmenAnfang"), PreisEnde = n.AttValue<Single>("EinnahmenEnde"), }; schicht.Fahrzeuge.Add(fzg); foreach (var p in n.Elements("Fahrt")) { var _kmV = p.Attribute("km").Value; var _km = (int?)p.AttValue<int>("km"); var _apesV = p.Attribute("APES").Value; var _apes = (float?)p.AttValue<Single>("APES"); var _priceV = p.Attribute("Preis").Value; var _price = (float?)p.AttValue<Single>("Preis"); var ft = new Fahrt { Index = p.AttValue<int>("Index"), Description = p.AttValue<string>("Bemerkung"), KM = (_kmV == "NULL") ? null : _km, APES = (_apesV == "NULL") ? null : _apes, Preis = (_priceV == "NULL") ? null : _price, Rechnungsfahrt = p.AttValue<bool>("IstRechnungsfahrt") }; this.OnProgress(ref verarb, shiftCount); fzg.Fahrten.Add(ft); } this.OnProgress(ref verarb, shiftCount); } UIDispatcher.Invoke(new Action(() => this.Schichten.Add(schicht))); this.OnProgress(ref verarb, shiftCount); } int uoSIdx = 1; foreach (var item in Schichten.OrderBy(p => p.Anfang)) { if (item.Index == 0) { while (Schichten.Any(p => p.Index != 0 && p.Index == uoSIdx)) uoSIdx++; item.Index = uoSIdx; item.Parent = this; } item.ReindexVehicles(); } }