diff --git a/ENI2/DetailRootControl.xaml.cs b/ENI2/DetailRootControl.xaml.cs index 53b99a49..5dba0f5e 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; @@ -778,20 +780,8 @@ namespace ENI2 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) @@ -802,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")); ; + } } } @@ -826,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) @@ -857,26 +817,8 @@ 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); - } - - foreach (PASD pasd in pasdMessage.Elements) - { - 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); - } - } + vErrors.Add(RuleEngine.CreateError(ValidationCode.V201, "Pax / Schengen: one must be set", null, Properties.Resources.textOverview, null, "PASD")); + } } } @@ -942,7 +884,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()) { diff --git a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs index d57466b4..18f7f900 100644 --- a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs @@ -516,8 +516,7 @@ namespace ENI2.DetailViewControls this.DataGridPassengerListDeparture_CreateRequested(); } - #endregion - + #endregion #region crew grid arrival diff --git a/bsmd.database/CREW.cs b/bsmd.database/CREW.cs index 6a8e02de..8f890eb8 100644 --- a/bsmd.database/CREW.cs +++ b/bsmd.database/CREW.cs @@ -11,6 +11,7 @@ using System; using System.Data; using System.Data.SqlClient; using System.Collections.Generic; +using System.Linq; namespace bsmd.database { @@ -281,53 +282,52 @@ namespace bsmd.database if (this.CrewMemberIdentityDocumentType.HasValue) { if (this.CrewMemberIdentityDocumentType.Value == 5) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Doc. type set to OTHER_LEGAL_IDENTITY_DOCUMENT", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Doc. type set to OTHER_LEGAL_IDENTITY_DOCUMENT", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); } if (this.CrewMemberIdentityDocumentIssuingState != null) { if (this.CrewMemberIdentityDocumentIssuingState.Equals("XX")) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id. doc issuing state set to XX", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id. doc issuing state set to XX", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); } if (this.CrewMemberNationality != null) { if (this.CrewMemberNationality.Equals("XX")) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Nationality set to XX", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Nationality set to XX", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); } if (this.CrewMemberIdentityDocumentExpiryDate.HasValue) { if (this.CrewMemberIdentityDocumentExpiryDate.Equals(new DateTime(2100, 12, 31))) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id doc expiry date set to 31/12/2100", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id doc expiry date set to 31/12/2100", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); if ((this.CrewMemberIdentityDocumentExpiryDate >= CLAMPMAXDATE) || (this.CrewMemberIdentityDocumentExpiryDate <= CLAMPMINDATE)) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Check id doc expiry date", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Check id doc expiry date", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); } if (this.CrewMemberGender.HasValue) { if (this.CrewMemberGender == 0) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Gender set to unknown", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Gender set to unknown", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); } if (this.CrewMemberDateOfBirth.HasValue && (this.CrewMemberDateOfBirth.Value > DateTime.Today)) - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Date of birth is in the future", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Date of birth is in the future", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); if (this.CrewMemberDateOfBirth.HasValue && (this.CrewMemberDateOfBirth.Value <= CLAMPMINDATE)) - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check date of birth", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check date of birth", null, this.Title, this.Identifier, this.IsDeparture ? "CREWD" : "CREWA")); - // NSW 7.2 rules + // NSW 7.2 rules - if(!((this.NotificationPAX ?? false) || (this.NotificationSchengen ?? false))) + if((this.NotificationSchengen ?? false) && (!this.HasSchengenDetails)) { - violations.Add(RuleEngine.CreateViolation(ValidationCode.V181, "Pax / Schengen", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.V182, "Schengen flag set but no data", null, this.Title, null, this.IsDeparture ? "CREWD" : "CREWA")); } - if(((this.NotificationSchengen ?? false) && (!this.HasSchengenDetails)) || - ((!(this.NotificationSchengen ?? false)) && this.HasSchengenDetails)) + if (!(this.NotificationSchengen ?? false) && (this.HasSchengenDetails)) { - violations.Add(RuleEngine.CreateViolation(ValidationCode.V182, "Schengen", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.V182, "Schengen data given but flag not set", null, this.Title, null, this.IsDeparture ? "CREWD" : "CREWA")); } } @@ -360,7 +360,7 @@ namespace bsmd.database result.Columns.Add(new DataColumn { ColumnName = "CrewMemberCountryOfBirth", DataType = typeof(string), AllowDBNull = true }); result.Columns.Add(new DataColumn { ColumnName = "Effects", DataType = typeof(string), AllowDBNull = true }); - foreach (CREW crew in databaseEntities) + foreach (CREW crew in databaseEntities.Cast()) { DataRow row = result.NewRow(); row[0] = crew.MessageHeader.Id; diff --git a/bsmd.database/DBManager.cs b/bsmd.database/DBManager.cs index 8d5d90dd..37ffa73f 100644 --- a/bsmd.database/DBManager.cs +++ b/bsmd.database/DBManager.cs @@ -17,6 +17,7 @@ using log4net; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Threading; +using System.Linq; namespace bsmd.database { @@ -142,7 +143,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List cores = aMessageCore.LoadList(reader); List result = new List(); - foreach (MessageCore core in cores) + foreach (MessageCore core in cores.Cast()) { this.LoadCustomer(core); result.Add(core); @@ -162,7 +163,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List cores = aMessageCore.LoadList(reader); List result = new List(); - foreach (MessageCore core in cores) + foreach (MessageCore core in cores.Cast()) { this.LoadCustomer(core); result.Add(core); @@ -182,7 +183,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List cores = aMessageCore.LoadList(reader); List result = new List(); - foreach (MessageCore core in cores) + foreach (MessageCore core in cores.Cast()) { this.LoadCustomer(core); @@ -204,7 +205,7 @@ namespace bsmd.database ih.PrepareLoadCommand(cmd, Message.LoadFilter.BY_CORE, messageCoreId); SqlDataReader reader = this.PerformCommand(cmd); List result = new List(); - foreach (ImportHeader existingHeader in ih.LoadList(reader)) + foreach (ImportHeader existingHeader in ih.LoadList(reader).Cast()) result.Add(existingHeader); if (this._closeConnectionAfterUse) this.Disconnect(); @@ -219,7 +220,7 @@ namespace bsmd.database iv.PrepareLoadCommand(cmd, Message.LoadFilter.IMPORTHEADER_ID, importHeader.Id.Value); SqlDataReader reader = this.PerformCommand(cmd); List result = new List(); - foreach (ImportValue existingValue in iv.LoadList(reader)) + foreach (ImportValue existingValue in iv.LoadList(reader).Cast()) result.Add(existingValue); if (this._closeConnectionAfterUse) this.Disconnect(); @@ -239,7 +240,7 @@ namespace bsmd.database { List cores = aMessageCore.LoadList(reader); - foreach (MessageCore core in cores) + foreach (MessageCore core in cores.Cast()) { this.LoadCustomer(core); result.Add(core); @@ -261,7 +262,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); if (reader != null) { - foreach (MessageCore core in aMessageCore.LoadList(reader)) + foreach (MessageCore core in aMessageCore.LoadList(reader).Cast()) result.Add(core); } return result; @@ -292,7 +293,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List cores = aMessageCore.LoadList(reader); List result = new List(); - foreach (MessageCore core in cores) + foreach (MessageCore core in cores.Cast()) { this.LoadCustomer(core); this.LoadSTATShipName(core); @@ -355,7 +356,7 @@ namespace bsmd.database List messages = aMessage.LoadList(reader); List messageList = new List(); - foreach (Message message in messages) + foreach (Message message in messages.Cast()) { message.MessageCore = core; messageList.Add(message); @@ -413,7 +414,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List reportingParties = aRep.LoadList(reader); DBManager.allReportingParties = new Dictionary(); - foreach (ReportingParty rp in reportingParties) + foreach (ReportingParty rp in reportingParties.Cast()) DBManager.allReportingParties.Add(rp.Id.Value, rp); } return DBManager.allReportingParties; @@ -427,7 +428,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List allRules = vr.LoadList(reader); List result = new List(); - foreach (ValidationRule aVR in allRules) + foreach (ValidationRule aVR in allRules.Cast()) result.Add(aVR); return result; } @@ -443,7 +444,7 @@ namespace bsmd.database SqlDataReader reader = this.PerformCommand(cmd); List portAreas = pa.LoadList(reader); DBManager.allPortAreas = new Dictionary(); - foreach (PortArea aPa in portAreas) + foreach (PortArea aPa in portAreas.Cast()) DBManager.allPortAreas[aPa.Code] = aPa; // TODO da gibt es doppelte Einträge } return DBManager.allPortAreas; @@ -460,7 +461,7 @@ namespace bsmd.database List messages = aMessage.LoadList(reader); List messageList = new List(); - foreach (Message message in messages) + foreach (Message message in messages.Cast()) messageList.Add(message); if (messageList.Count == 0) return null; @@ -483,7 +484,7 @@ namespace bsmd.database List messages = aMessage.LoadList(reader); List messageList = new List(); - foreach (Message message in messages) + foreach (Message message in messages.Cast()) messageList.Add(message); if (messageList.Count == 0) return null; @@ -756,7 +757,7 @@ namespace bsmd.database agnt_template.PrepareLoadCommand(cmd, Message.LoadFilter.ALL); IDataReader reader = this.PerformCommand(cmd); List a_list = agnt_template.LoadList(reader); - foreach (AGNT_Template aTemplate in a_list) + foreach (AGNT_Template aTemplate in a_list.Cast()) result.Add(aTemplate); reader.Close(); } @@ -1041,7 +1042,7 @@ namespace bsmd.database poi.PrepareLoadCommand(cmd, Message.LoadFilter.BPOL_ID, bpol.Id); SqlDataReader reader = this.PerformCommand(cmd); List pois = poi.LoadList(reader); - foreach (PortOfItinerary aPoi in pois) + foreach (PortOfItinerary aPoi in pois.Cast()) { bpol.PortOfItineraries.Add(aPoi); aPoi.BPOL = bpol; @@ -1061,7 +1062,7 @@ namespace bsmd.database imdg.PrepareLoadCommand(cmd, Message.LoadFilter.HAZ_ID, haz.Id); SqlDataReader reader = this.PerformCommand(cmd); List imdgs = imdg.LoadList(reader); - foreach (IMDGPosition imdgPosition in imdgs) + foreach (IMDGPosition imdgPosition in imdgs.Cast()) { haz.IMDGPositions.Add(imdgPosition); imdgPosition.HAZ = haz; @@ -1072,7 +1073,7 @@ namespace bsmd.database subsidiaryRisks.PrepareLoadCommand(srCmd, Message.LoadFilter.IMDG_ID, imdgPosition.Id); SqlDataReader srReader = this.PerformCommand(srCmd); List sRisks = subsidiaryRisks.LoadList(srReader); - foreach (SubsidiaryRisks subsidiaryRisk in sRisks) + foreach (SubsidiaryRisks subsidiaryRisk in sRisks.Cast()) { imdgPosition.SubsidiaryRiskList.Add(subsidiaryRisk); subsidiaryRisk.IMDGPosition = imdgPosition; @@ -1085,7 +1086,7 @@ namespace bsmd.database ibc.PrepareLoadCommand(cmd, Message.LoadFilter.HAZ_ID, haz.Id); reader = this.PerformCommand(cmd); List ibcs = ibc.LoadList(reader); - foreach (IBCPosition ibcPosition in ibcs) + foreach (IBCPosition ibcPosition in ibcs.Cast()) { haz.IBCPositions.Add(ibcPosition); ibcPosition.HAZ = haz; @@ -1097,7 +1098,7 @@ namespace bsmd.database igc.PrepareLoadCommand(cmd, Message.LoadFilter.HAZ_ID, haz.Id); reader = this.PerformCommand(cmd); List igcs = igc.LoadList(reader); - foreach (IGCPosition igcPosition in igcs) + foreach (IGCPosition igcPosition in igcs.Cast()) { haz.IGCPositions.Add(igcPosition); igcPosition.HAZ = haz; @@ -1109,7 +1110,7 @@ namespace bsmd.database imsbc.PrepareLoadCommand(cmd, Message.LoadFilter.HAZ_ID, haz.Id); reader = this.PerformCommand(cmd); List imsbcs = imsbc.LoadList(reader); - foreach (IMSBCPosition imsbcPosition in imsbcs) + foreach (IMSBCPosition imsbcPosition in imsbcs.Cast()) { haz.IMSBCPositions.Add(imsbcPosition); imsbcPosition.HAZ = haz; @@ -1120,7 +1121,7 @@ namespace bsmd.database marpol.PrepareLoadCommand(cmd, Message.LoadFilter.HAZ_ID, haz.Id); reader = this.PerformCommand(cmd); List marpols = marpol.LoadList(reader); - foreach (MARPOL_Annex_I_Position marpolPosition in marpols) + foreach (MARPOL_Annex_I_Position marpolPosition in marpols.Cast()) { haz.MARPOLPositions.Add(marpolPosition); marpolPosition.HAZ = haz; @@ -1140,7 +1141,7 @@ namespace bsmd.database poc30.PrepareLoadCommand(cmd, Message.LoadFilter.MDH_ID, mdh.Id); SqlDataReader reader = this.PerformCommand(cmd); List poc30s = poc30.LoadList(reader); - foreach (PortOfCallLast30Days apoc30 in poc30s) + foreach (PortOfCallLast30Days apoc30 in poc30s.Cast()) { mdh.PortOfCallLast30Days.Add(apoc30); apoc30.MDH = mdh; @@ -1151,7 +1152,7 @@ namespace bsmd.database smd.PrepareLoadCommand(cmd, Message.LoadFilter.MDH_ID, mdh.Id); reader = this.PerformCommand(cmd); List smds = smd.LoadList(reader); - foreach(SanitaryMeasuresDetail aSmd in smds) + foreach(SanitaryMeasuresDetail aSmd in smds.Cast()) { mdh.SanitaryMeasuresDetails.Add(aSmd); aSmd.MDH = mdh; @@ -1161,7 +1162,7 @@ namespace bsmd.database sjl.PrepareLoadCommand(cmd, Message.LoadFilter.MDH_ID, mdh.Id); reader = this.PerformCommand(cmd); List sjls = sjl.LoadList(reader); - foreach(StowawaysJoiningLocation aSjl in sjls) + foreach(StowawaysJoiningLocation aSjl in sjls.Cast()) { mdh.StowawaysJoiningLocations.Add(aSjl); aSjl.MDH = mdh; @@ -1171,7 +1172,7 @@ namespace bsmd.database ia.PrepareLoadCommand(cmd, Message.LoadFilter.MDH_ID, mdh.Id); reader = this.PerformCommand(cmd); List ias = ia.LoadList(reader); - foreach(InfectedArea aIa in ias) + foreach(InfectedArea aIa in ias.Cast()) { mdh.InfectedAreas.Add(aIa); aIa.MDH = mdh; @@ -1190,7 +1191,7 @@ namespace bsmd.database poc30s.PrepareLoadCommand(cmd, Message.LoadFilter.POC30_ID, poc30.Id); SqlDataReader reader = this.PerformCommand(cmd); List poc30Names = poc30s.LoadList(reader); - foreach (PortOfCallLast30DaysCrewJoinedShip poc30Name in poc30Names) + foreach (PortOfCallLast30DaysCrewJoinedShip poc30Name in poc30Names.Cast()) { poc30.CrewJoinedShip.Add(poc30Name); poc30Name.PortOfCallLast30Days = poc30; @@ -1208,7 +1209,7 @@ namespace bsmd.database ltp.PrepareLoadCommand(cmd, Message.LoadFilter.SEC_ID, sec.Id); SqlDataReader reader = this.PerformCommand(cmd); List ltps = ltp.LoadList(reader); - foreach (LastTenPortFacilitiesCalled altp in ltps) + foreach (LastTenPortFacilitiesCalled altp in ltps.Cast()) { sec.LastTenPortFacilitesCalled.Add(altp); altp.SEC = sec; @@ -1219,7 +1220,7 @@ namespace bsmd.database sts.PrepareLoadCommand(cmd, Message.LoadFilter.SEC_ID, sec.Id); reader = this.PerformCommand(cmd); List stss = sts.LoadList(reader); - foreach (ShipToShipActivitiesDuringLastTenPortFacilitiesCalled asts in stss) + foreach (ShipToShipActivitiesDuringLastTenPortFacilitiesCalled asts in stss.Cast()) { sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Add(asts); asts.SEC = sec; @@ -1238,7 +1239,7 @@ namespace bsmd.database wdsp.PrepareLoadCommand(cmd, Message.LoadFilter.WAS_ID, was.Id); SqlDataReader reader = this.PerformCommand(cmd); List wdsps = wdsp.LoadList(reader); - foreach (WasteDisposalServiceProvider awdsp in wdsps) + foreach (WasteDisposalServiceProvider awdsp in wdsps.Cast()) { was.WasteDisposalServiceProvider.Add(awdsp); awdsp.WAS = was; @@ -1249,7 +1250,7 @@ namespace bsmd.database waste.PrepareLoadCommand(cmd, Message.LoadFilter.WAS_ID, was.Id); SqlDataReader reader2 = this.PerformCommand(cmd); List wastes = waste.LoadList(reader2); - foreach (Waste aWaste in wastes) + foreach (Waste aWaste in wastes.Cast()) { was.Waste.Add(aWaste); aWaste.WAS = was; @@ -1268,7 +1269,7 @@ namespace bsmd.database tfp.PrepareLoadCommand(cmd, Message.LoadFilter.WASRCPT_ID, was_rcpt.Id); SqlDataReader reader = this.PerformCommand(cmd); List tfps = tfp.LoadList(reader); - foreach (TreatmentFacilityProvider aTfp in tfps) + foreach (TreatmentFacilityProvider aTfp in tfps.Cast()) { was_rcpt.TreatmentFacilityProvider.Add(aTfp); aTfp.WAS_RCPT = was_rcpt; @@ -1279,7 +1280,7 @@ namespace bsmd.database wasteReceived.PrepareLoadCommand(cmd, Message.LoadFilter.WASRCPT_ID, was_rcpt.Id); SqlDataReader reader2 = this.PerformCommand(cmd); List wrs = wasteReceived.LoadList(reader2); - foreach (WasteReceived awrs in wrs) + foreach (WasteReceived awrs in wrs.Cast()) { was_rcpt.WasteReceived.Add(awrs); awrs.WAS_RCPT = was_rcpt; @@ -1298,7 +1299,7 @@ namespace bsmd.database cp.PrepareLoadCommand(cmd, Message.LoadFilter.NOA_NODID, noa_nod.Id); SqlDataReader reader = this.PerformCommand(cmd); List cps = cp.LoadList(reader); - foreach (CallPurpose callPurpose in cps) + foreach (CallPurpose callPurpose in cps.Cast()) { noa_nod.CallPurposes.Add(callPurpose); callPurpose.NOA_NOD = noa_nod; @@ -1334,7 +1335,7 @@ namespace bsmd.database aMessageError.PrepareLoadCommand(cmd, Message.LoadFilter.MESSAGEHEADER, message.Id); SqlDataReader reader = this.PerformCommand(cmd); List errorList = aMessageError.LoadList(reader); - foreach (MessageError error in errorList) + foreach (MessageError error in errorList.Cast()) message.ErrorList.Add(error); } @@ -1345,7 +1346,7 @@ namespace bsmd.database aMessageViolation.PrepareLoadCommand(cmd, Message.LoadFilter.MESSAGEHEADER, message.Id); SqlDataReader reader = this.PerformCommand(cmd); List violationList = aMessageViolation.LoadList(reader); - foreach (MessageViolation violation in violationList) + foreach (MessageViolation violation in violationList.Cast()) message.ViolationList.Add(violation); } @@ -1356,7 +1357,7 @@ namespace bsmd.database aSystemError.PrepareLoadCommand(cmd, Message.LoadFilter.MESSAGEHEADER, message.Id); SqlDataReader reader = this.PerformCommand(cmd); List systemErrorList = aSystemError.LoadList(reader); - foreach (SystemError sError in systemErrorList) + foreach (SystemError sError in systemErrorList.Cast()) message.SystemErrorList.Add(sError); } diff --git a/bsmd.database/PAS.cs b/bsmd.database/PAS.cs index e4b18e5e..044b926e 100644 --- a/bsmd.database/PAS.cs +++ b/bsmd.database/PAS.cs @@ -11,6 +11,7 @@ using System; using System.Data; using System.Data.SqlClient; using System.Collections.Generic; +using System.Linq; namespace bsmd.database { @@ -323,74 +324,77 @@ namespace bsmd.database if (this.PassengerPortOfDisembarkation != null) { if (this.PassengerPortOfDisembarkation.Equals("ZZUKN")) - violations.Add(RuleEngine.CreateViolation(ValidationCode.NOT_NULL, "Port of disembarkation set to ZZUKN", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.NOT_NULL, "Port of disembarkation set to ZZUKN", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if (this.PassengerPortOfEmbarkation != null) { if (this.PassengerPortOfEmbarkation.Equals("ZZUKN")) - violations.Add(RuleEngine.CreateViolation(ValidationCode.NOT_NULL, "Port of embarkation set to ZZUKN", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.NOT_NULL, "Port of embarkation set to ZZUKN", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if(this.PassengerIdentityDocumentType.HasValue) { if(this.PassengerIdentityDocumentType.Value == 5) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Doc. type set to OTHER_LEGAL_IDENTITY_DOCUMENT", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Doc. type set to OTHER_LEGAL_IDENTITY_DOCUMENT", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if(this.PassengerNationality != null) { if (this.PassengerNationality.Equals("XX")) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Nationality set to XX", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Nationality set to XX", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if (this.PassengerIdentityDocumentIssuingState != null) { if (this.PassengerIdentityDocumentIssuingState.Equals("XX")) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id. doc issuing state set to XX", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id. doc issuing state set to XX", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if (this.PassengerIdentityDocumentExpiryDate.HasValue) { if(this.PassengerIdentityDocumentExpiryDate.Equals(new DateTime(2100, 12, 31))) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id doc expiry date set to 31/12/2100", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Id doc expiry date set to 31/12/2100", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); if ((this.PassengerIdentityDocumentExpiryDate >= CREW.CLAMPMAXDATE) || (this.PassengerIdentityDocumentExpiryDate <= CREW.CLAMPMINDATE)) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Check identity document expiry date", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Check identity document expiry date", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if(this.PassengerGender.HasValue) { if(this.PassengerGender == 0) - violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Gender set to unknown", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Gender set to unknown", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } if (this.PassengerDateOfBirth.HasValue) { if (this.PassengerDateOfBirth.Value > DateTime.Today) - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Date of birth is in the future", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Date of birth is in the future", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); if(this.PassengerDateOfBirth <= CREW.CLAMPMINDATE) - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check date of birth", null, this.Title, this.Identifier, this.Tablename)); + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check date of birth", null, this.Title, this.Identifier, this.IsDeparture ? "PASD" : "PASA")); } - // NSW 7.2 rules + // NSW 7.2 rules - if (!((this.NotificationPAX ?? false) || (this.NotificationSchengen ?? false))) + if ((this.NotificationSchengen ?? false) && (!this.HasSchengenDetails)) { - violations.Add(RuleEngine.CreateViolation(ValidationCode.V201, "Pax / Schengen", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.V202, "Schengen flag set but no data", null, this.Title, null, this.IsDeparture ? "PASD" : "PASA")); } - if (((this.NotificationSchengen ?? false) && (!this.HasSchengenDetails)) || - ((!(this.NotificationSchengen ?? false)) && this.HasSchengenDetails)) + if (!(this.NotificationSchengen ?? false) && (this.HasSchengenDetails)) { - violations.Add(RuleEngine.CreateViolation(ValidationCode.V202, "Schengen", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.V202, "Schengen data given but flag not set", null, this.Title, null, this.IsDeparture ? "PASD" : "PASA")); } - if (((this.NotificationPAX ?? false) && (!this.HasPAXDetails)) || - ((!(this.NotificationPAX ?? false)) && this.HasPAXDetails)) + if ((this.NotificationPAX ?? false) && (!this.HasPAXDetails)) { - violations.Add(RuleEngine.CreateViolation(ValidationCode.V203, "PAX", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.V203, "PAX flag set but no data", null, this.Title, null, this.IsDeparture ? "PASD" : "PASA")); + } + + if (!(this.NotificationPAX ?? false) && (this.HasPAXDetails)) + { + errors.Add(RuleEngine.CreateError(ValidationCode.V203, "PAX data given but flag not set", null, this.Title, null, this.IsDeparture ? "PASD" : "PASA")); } } @@ -426,7 +430,7 @@ namespace bsmd.database result.Columns.Add(new DataColumn { ColumnName = "EmergencyContactNumber", DataType = typeof(string), AllowDBNull = true }); result.Columns.Add(new DataColumn { ColumnName = "PassengerCountryOfBirth", DataType = typeof(string), AllowDBNull = true }); - foreach (PAS pas in databaseEntities) + foreach (PAS pas in databaseEntities.Cast()) { DataRow row = result.NewRow(); diff --git a/bsmd.database/RuleEngine.cs b/bsmd.database/RuleEngine.cs index 9d7f8f10..3d10764b 100644 --- a/bsmd.database/RuleEngine.cs +++ b/bsmd.database/RuleEngine.cs @@ -505,7 +505,7 @@ namespace bsmd.database #region private helper - internal static MessageError CreateError(ValidationCode validationCode, string p, string value, string entityName, + public static MessageError CreateError(ValidationCode validationCode, string p, string value, string entityName, string identifier = "", string notificationClass = "") {