//XML - Elemente zuweisen auf die jeweiligen Variablen public static Reservation switchReservation(XElement parameter, Reservation res, String[] boolRooms,int index) { //Index ... stelle von boolRooms XElement variable = parameter.Descendants("name").FirstOrDefault(); XElement value = parameter.Descendants("value").FirstOrDefault(); switch (variable.Value) { case "id_channel": res.bu.id_channel = Convert.ToInt32(value.Value); break; case "reservation_code": res.bu.reservationCode = Convert.ToInt32(value.Value); break; case "status": res.bu.idStatus = Convert.ToInt32(value.Value); break; case "amount": if (boolRooms != null) { //überprüfen anzahl men (richtig setzten und nicht alle) res.bu.preisBuchung = Convert.ToDecimal(manager.repZimmerTyp. Get().Where(a => a.idZimmerTyp == Convert.ToInt32(boolRooms.ElementAt(index))).FirstOrDefault().preis, new CultureInfo("en-US")); } else { res.bu.preisBuchung = Convert.ToDecimal(value.Value, new CultureInfo("en-US")); } break; case "orig_amount": if (boolRooms != null) { //überprüfen anzahl men (richtig setzten und nicht alle) res.bu.originalPreisBuchung = Convert.ToDecimal(manager.repZimmerTyp. Get().Where(a => a.idZimmerTyp == Convert.ToInt32(boolRooms.ElementAt(index))).FirstOrDefault().preis, new CultureInfo("en-US")); } else { res.bu.originalPreisBuchung = Convert.ToDecimal(value.Value, new CultureInfo("en-US")); } break; case "was_modified": // ob es geändert wurde (0 ok, 1 not) res.bu.wurdeKorrigiert = Convert.ToInt32(value.Value); break; case "modified_reservations": // wenn geändert wurde dann rcode gesetzt, ansonst null res.bu.welcheBuchung = value.Value != ""?Convert.ToInt32(value.Value):0; break; case "date_arrival": res.bu.vonBuchung = Convert.ToDateTime(value.Value); break; case "date_departure": res.bu.bisBuchung = Convert.ToDateTime(value.Value); break; case "date_received": res.bu.eingegangenBuchung = Convert.ToDateTime(value.Value); break; case "boards": res.bu.board = value.Value; break; case"men": if (boolRooms != null) { //überprüfen anzahl men (richtig setzten und nicht alle) res.bu.erwachseneBuchung = Convert.ToInt32(manager.repZimmerTyp. Get().Where(a=>a.idZimmerTyp == Convert.ToInt32(boolRooms.ElementAt(index))).FirstOrDefault().anzahlErw); } else { res.bu.erwachseneBuchung = Convert.ToInt32(value.Value); } break; case "children": res.bu.kinderBuchung = Convert.ToInt32(value.Value); break; case "customer_notes": res.bu.notizen = value.Value; break; case "rooms": if (boolRooms != null) { res.bu.idZimmerTyp = Convert.ToInt32(boolRooms.ElementAt(index)); } else { res.bu.idZimmerTyp = Convert.ToInt32(value.Value); } break; //Kunden anlegen oder exestierende verwenden ?? case "customer_city": res.kunde.Ort = value.Value; break; case "customer_country": res.kunde.Land = value.Value; break; case "customer_mail": res.kunde.emailBuchung = value.Value; break; case "customer_name": res.kunde.vornameKunde = value.Value; break; case "customer_surname": res.kunde.nachnameKunde = value.Value; break; case "customer_phone": res.kunde.telefonKunde = value.Value; break; case "customer_address": res.kunde.adresseKunde = value.Value; break; case "customer_language": res.kunde.Sprache = value.Value; break; case "customer_zip": //PLZ res.kunde.PLZ =value.Value; break; } return res; }
//führt Status aus (cancelled, save,...) public static bool doStatusTask(Reservation res) { //neuer kunde oder existierenden übernehmen var exists = customerExists(res.kunde); #region untere Abfrage //if (exists == 0) //{ //erstellen von kunde wenn nicht exisitert // res.bu.idKunde = res.kunde.idKunde; // kunde setzten wenn er noch nicht existierte //} //else //{ // res.bu.idKunde = exists; //} #endregion //abkürzung von oben, kunde setzten wenn er noch nicht existierte res.bu.idKunde = (exists == 0) ? res.kunde.idKunde : exists; //wenn notizen über die länge von 255 gehen res.bu.notizen = (res.bu.notizen.Length >= 255) ? "" : res.bu.notizen; switch (res.bu.idStatus) { case 1: DataHrm.Manager.repBuchung.CreateFetch(res.bu); break; case 2: break; case 3: break; case 4: break; case 5: //Buchung suchen mit gleichen Daten die gelöscht werden soll Buchung b = DataHrm.Manager.repBuchung.Get(). Where(a=> a.idKunde == res.bu.idKunde && a.vonBuchung == res.bu.vonBuchung && a.bisBuchung == res.bu.bisBuchung && a.idZimmerTyp == res.bu.idZimmerTyp). FirstOrDefault(); if (b != null) { DataHrm.Manager.repBuchung.DeleteFetch(b); } else { return false; } break; } return true; }
//get parameters per room + speicherung public static bool getParameters(List<XElement> xmlRooms) { #region variablenDeklaration Reservation res = new Reservation(); res.bu = new Buchung(); res.kunde = new Kunde(); String[] boolRooms; //Wenn eine Buchung mehrere Zimmer enthält bool doTasks = true; // ob speichern und löschen erfolgreich war #endregion foreach (XElement xele in xmlRooms) { List<Buchung> saveBookings = new List<Buchung>(); //prüft ob Buchung mit mehreren zimmern ist (rooms: 11,11,11,11) boolRooms = moreRooms(xele); if (boolRooms != null && doTasks) { for (int i = 0; i < boolRooms.Length; i++) { foreach (XElement parameter in xele.Descendants("member")) { res = switchReservation(parameter, res, boolRooms,i); } doTasks = doStatusTask(res); res.bu = new Buchung(); res.kunde = new Kunde(); } } else if(doTasks) { foreach (XElement parameter in xele.Descendants("member")) { res = switchReservation(parameter, res, boolRooms,0); } doTasks = doStatusTask(res); res.bu = new Buchung(); res.kunde = new Kunde(); } } return doTasks; }