diff --git a/ENI2/DetailRootControl.xaml.cs b/ENI2/DetailRootControl.xaml.cs index 79bb26f0..640f47a0 100644 --- a/ENI2/DetailRootControl.xaml.cs +++ b/ENI2/DetailRootControl.xaml.cs @@ -15,6 +15,8 @@ using ENI2.Util; using ENI2.EditControls; using System.Windows.Input; +using Microsoft.Office.Interop.Excel; +using System.Linq; namespace ENI2 { @@ -163,7 +165,7 @@ namespace ENI2 _messages.AddRange(missingMessages); BindingOperations.EnableCollectionSynchronization(_messages, this.messageListLock); - Dispatcher.BeginInvoke((Action)(() => this.listBoxMessages.SelectedIndex = 0)); + Dispatcher.BeginInvoke((System.Action)(() => this.listBoxMessages.SelectedIndex = 0)); RoutedCommand saveCmd = new RoutedCommand(); saveCmd.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control)); @@ -190,7 +192,7 @@ namespace ENI2 public void CoreChanged(MessageCore newCore) { this.Core = newCore; - Application.Current.Dispatcher.Invoke(delegate + System.Windows.Application.Current.Dispatcher.Invoke(delegate { if(controlCache.ContainsKey(Properties.Resources.textOverview)) { @@ -429,7 +431,7 @@ namespace ENI2 this.controlCache.Clear(); // return to "new" overview - Dispatcher.BeginInvoke((Action)(() => this.listBoxMessages_SelectionChanged(this, null))); + Dispatcher.BeginInvoke((System.Action)(() => this.listBoxMessages_SelectionChanged(this, null))); } private void DetailControl_ResetControlCache(string messageGroupName) @@ -607,7 +609,7 @@ namespace ENI2 this.controlCache.Clear(); // return to "new" overviewdan - Dispatcher.BeginInvoke((Action)(() => + Dispatcher.BeginInvoke((System.Action)(() => { this.listBoxMessages_SelectionChanged(this, null); shipNameLabel.Text = this.Core.Shipname; @@ -712,12 +714,7 @@ namespace ENI2 RuleEngine ruleEngine = new RuleEngine(); foreach (Message aMessage in _messages) - { - // XXX : TODO wegmachen wenn CREWD/PASD kommt - if ((aMessage.MessageNotificationClass == Message.NotificationClass.PASD) || - (aMessage.MessageNotificationClass == Message.NotificationClass.CREWD)) - continue; - + { if (!aMessage.EvaluateForValidation(this.Core.IsTransit)) continue; List errors = new List(); @@ -739,9 +736,9 @@ namespace ENI2 } #region 12.11.18 / 6.3.21 / 23.5.22: globale Plausi-Prüfungen - Message crewaMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.CREW); + Message crewaMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.CREWA); Message crewdMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.CREWD); - Message pasaMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.PAS); + Message pasaMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.PASA); Message pasdMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.PASD); Message pobaMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.POBA); Message secMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.SEC); @@ -777,29 +774,14 @@ namespace ENI2 // Wir können davon ausgehen, dass bei allen Unterelementen die Flags gleich gesetzt sind. Das wird im Import und BorderPoliceDetailControl sichergestellt. - // XXX : TODO auskommentiert bis CREWD/PASD kommt - /* - if(crewaMessage.Elements.Count > 0) { CREW crewaFirst = crewaMessage.Elements[0] as CREW; bool crewaIsSchengen = crewaFirst.NotificationSchengen ?? false; if (!((crewaFirst.NotificationPAX ?? false) || crewaIsSchengen)) // mindestens eins der beiden { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V181, "Wrong selection", null, "CREWA", null, "CREWA"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - - foreach(CREW crewa in crewaMessage.Elements) - { - if(crewaIsSchengen && !crewa.HasSchengenDetails) - { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V182, "No Schengen details", null, "CREWA", crewa.Identifier, "CREWA"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - } + vErrors.Add(RuleEngine.CreateError(ValidationCode.V181, "Pax / Schengen: one must be set", null, Properties.Resources.textOverview, null, "CREWA")); ; + } } if (crewdMessage != null) @@ -810,20 +792,8 @@ namespace ENI2 bool crewdIsSchengen = crewdFirst.NotificationSchengen ?? false; if (!((crewdFirst.NotificationPAX ?? false) || crewdIsSchengen)) // mindestens eins der beiden { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V181, "Wrong selection", null, "CREWD", null, "CREWD"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - - foreach (CREWD crewd in crewdMessage.Elements) - { - if (crewdIsSchengen && !crewd.HasSchengenDetails) - { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V182, "No Schengen details", null, "CREWD", crewd.Identifier, "CREWD"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - } + vErrors.Add(RuleEngine.CreateError(ValidationCode.V181, "Pax / Schengen: one must be set", null, Properties.Resources.textOverview, null, "CREWD")); ; + } } } @@ -834,26 +804,8 @@ namespace ENI2 bool pasIsPAX = pasFirst.NotificationPAX ?? false; if (!(pasIsPAX || pasIsSchengen)) // mindestens eins der beiden { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V201, "Wrong selection", null, "PASA", null, "PASA"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - - foreach (PAS pasa in pasaMessage.Elements) - { - if (pasIsSchengen && !pasa.HasSchengenDetails) - { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V202, "No Schengen details", null, "PASA", pasa.Identifier, "PASA"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - if(pasIsPAX && !pasa.HasPAXDetails) - { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V203, "No PAX details", null, "PASA", pasa.Identifier, "PASA"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - } + vErrors.Add(RuleEngine.CreateError (ValidationCode.V201, "Pax / Schengen: one must be set", null, Properties.Resources.textOverview, null, "PASA")); + } } if (pasdMessage != null) @@ -865,30 +817,54 @@ namespace ENI2 bool pasdIsPAX = pasdFirst.NotificationPAX ?? false; if (!(pasdIsPAX || pasdIsSchengen)) // mindestens eins der beiden { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V201, "Wrong selection", null, "PASD", null, "PASD"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } + vErrors.Add(RuleEngine.CreateError(ValidationCode.V201, "Pax / Schengen: one must be set", null, Properties.Resources.textOverview, null, "PASD")); + } + } + } - foreach (PASD pasd in pasdMessage.Elements) + #endregion + + #region 7.11.23 > 12 Passagiere in PASA oder PASD -> CREW* und PAS* muss NotificationPAX gesetzt haben + + if ((pasaMessage != null) && (pasaMessage.Elements.Count > 12)) + { + PAS firstPASA = pasaMessage.Elements[0] as PAS; + if(!(firstPASA.NotificationPAX ?? false)) + { + MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.NO_PAX, "No PAX set (PASA > 12)", null, Properties.Resources.textOverview, null, "PASA"); + vViolations.Add(mv); + } + + if((crewaMessage != null) && (crewaMessage.Elements.Count > 0)) + { + CREW firstCREW = crewaMessage.Elements[0] as CREW; + if(!(firstCREW.NotificationPAX ?? false)) { - if (pasdIsSchengen && !pasd.HasSchengenDetails) - { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V202, "No Schengen details", null, "PASD", pasd.Identifier, "PASD"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } - if (pasdIsPAX && !pasd.HasPAXDetails) - { - MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.V203, "No PAX details", null, "PASD", pasd.Identifier, "PASD"); - mv.MessageGroupName = Properties.Resources.textOverview; - vViolations.Add(mv); - } + MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.NO_PAX, "No PAX set (PASA > 12)", null, Properties.Resources.textOverview, null, "CREWA"); + vViolations.Add(mv); } } } - */ + if((pasdMessage != null) && (pasdMessage.Elements.Count > 12)) + { + PASD firstPASD = pasdMessage.Elements[0] as PASD; + if(!(firstPASD.NotificationPAX ?? false)) + { + MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.NO_PAX, "No PAX set (PASD > 12)", null, Properties.Resources.textOverview, null, "PASD"); + vViolations.Add(mv); + } + + if ((crewdMessage != null) && (crewdMessage.Elements.Count > 0)) + { + CREWD firstCREW = crewdMessage.Elements[0] as CREWD; + if(!(firstCREW.NotificationPAX ?? false)) + { + MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.NO_PAX, "No PAX set (PASD > 12)", null, Properties.Resources.textOverview, null, "CREWD"); + vViolations.Add(mv); + } + } + } #endregion @@ -912,7 +888,7 @@ namespace ENI2 Dictionary identDict = new Dictionary(); - foreach (WAS_RCPT was_rcpt in was_rcptMessage.Elements) + foreach (WAS_RCPT was_rcpt in was_rcptMessage.Elements.Cast()) { if (!was_rcpt.IdentificationNumber.IsNullOrEmpty()) { @@ -1243,9 +1219,9 @@ namespace ENI2 case Message.NotificationClass.BKRA: return Properties.Resources.textArrivalNotification; case Message.NotificationClass.BPOL: - case Message.NotificationClass.CREW: + case Message.NotificationClass.CREWA: case Message.NotificationClass.CREWD: - case Message.NotificationClass.PAS: + case Message.NotificationClass.PASA: case Message.NotificationClass.PASD: return Properties.Resources.textBorderPolice; case Message.NotificationClass.HAZA: diff --git a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml index 1c06aaa5..6871be9d 100644 --- a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml +++ b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml @@ -49,7 +49,7 @@ - + @@ -60,13 +60,13 @@