Korrekturen warnings und Validierung

This commit is contained in:
Daniel Schick 2023-11-08 17:02:08 +01:00
parent fff9d05290
commit 1e0dbb8c8c
6 changed files with 94 additions and 148 deletions

View File

@ -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<string, string> identDict = new Dictionary<string, string>();
foreach (WAS_RCPT was_rcpt in was_rcptMessage.Elements)
foreach (WAS_RCPT was_rcpt in was_rcptMessage.Elements.Cast<WAS_RCPT>())
{
if (!was_rcpt.IdentificationNumber.IsNullOrEmpty())
{

View File

@ -516,8 +516,7 @@ namespace ENI2.DetailViewControls
this.DataGridPassengerListDeparture_CreateRequested();
}
#endregion
#endregion
#region crew grid arrival

View File

@ -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<CREW>())
{
DataRow row = result.NewRow();
row[0] = crew.MessageHeader.Id;

View File

@ -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<DatabaseEntity> cores = aMessageCore.LoadList(reader);
List<MessageCore> result = new List<MessageCore>();
foreach (MessageCore core in cores)
foreach (MessageCore core in cores.Cast<MessageCore>())
{
this.LoadCustomer(core);
result.Add(core);
@ -162,7 +163,7 @@ namespace bsmd.database
SqlDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> cores = aMessageCore.LoadList(reader);
List<MessageCore> result = new List<MessageCore>();
foreach (MessageCore core in cores)
foreach (MessageCore core in cores.Cast<MessageCore>())
{
this.LoadCustomer(core);
result.Add(core);
@ -182,7 +183,7 @@ namespace bsmd.database
SqlDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> cores = aMessageCore.LoadList(reader);
List<MessageCore> result = new List<MessageCore>();
foreach (MessageCore core in cores)
foreach (MessageCore core in cores.Cast<MessageCore>())
{
this.LoadCustomer(core);
@ -204,7 +205,7 @@ namespace bsmd.database
ih.PrepareLoadCommand(cmd, Message.LoadFilter.BY_CORE, messageCoreId);
SqlDataReader reader = this.PerformCommand(cmd);
List<ImportHeader> result = new List<ImportHeader>();
foreach (ImportHeader existingHeader in ih.LoadList(reader))
foreach (ImportHeader existingHeader in ih.LoadList(reader).Cast<ImportHeader>())
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<ImportValue> result = new List<ImportValue>();
foreach (ImportValue existingValue in iv.LoadList(reader))
foreach (ImportValue existingValue in iv.LoadList(reader).Cast<ImportValue>())
result.Add(existingValue);
if (this._closeConnectionAfterUse) this.Disconnect();
@ -239,7 +240,7 @@ namespace bsmd.database
{
List<DatabaseEntity> cores = aMessageCore.LoadList(reader);
foreach (MessageCore core in cores)
foreach (MessageCore core in cores.Cast<MessageCore>())
{
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<MessageCore>())
result.Add(core);
}
return result;
@ -292,7 +293,7 @@ namespace bsmd.database
SqlDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> cores = aMessageCore.LoadList(reader);
List<MessageCore> result = new List<MessageCore>();
foreach (MessageCore core in cores)
foreach (MessageCore core in cores.Cast<MessageCore>())
{
this.LoadCustomer(core);
this.LoadSTATShipName(core);
@ -355,7 +356,7 @@ namespace bsmd.database
List<DatabaseEntity> messages = aMessage.LoadList(reader);
List<Message> messageList = new List<Message>();
foreach (Message message in messages)
foreach (Message message in messages.Cast<Message>())
{
message.MessageCore = core;
messageList.Add(message);
@ -413,7 +414,7 @@ namespace bsmd.database
SqlDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> reportingParties = aRep.LoadList(reader);
DBManager.allReportingParties = new Dictionary<Guid, ReportingParty>();
foreach (ReportingParty rp in reportingParties)
foreach (ReportingParty rp in reportingParties.Cast<ReportingParty>())
DBManager.allReportingParties.Add(rp.Id.Value, rp);
}
return DBManager.allReportingParties;
@ -427,7 +428,7 @@ namespace bsmd.database
SqlDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> allRules = vr.LoadList(reader);
List<ValidationRule> result = new List<ValidationRule>();
foreach (ValidationRule aVR in allRules)
foreach (ValidationRule aVR in allRules.Cast<ValidationRule>())
result.Add(aVR);
return result;
}
@ -443,7 +444,7 @@ namespace bsmd.database
SqlDataReader reader = this.PerformCommand(cmd);
List<DatabaseEntity> portAreas = pa.LoadList(reader);
DBManager.allPortAreas = new Dictionary<string, PortArea>();
foreach (PortArea aPa in portAreas)
foreach (PortArea aPa in portAreas.Cast<PortArea>())
DBManager.allPortAreas[aPa.Code] = aPa; // TODO da gibt es doppelte Einträge
}
return DBManager.allPortAreas;
@ -460,7 +461,7 @@ namespace bsmd.database
List<DatabaseEntity> messages = aMessage.LoadList(reader);
List<Message> messageList = new List<Message>();
foreach (Message message in messages)
foreach (Message message in messages.Cast<Message>())
messageList.Add(message);
if (messageList.Count == 0) return null;
@ -483,7 +484,7 @@ namespace bsmd.database
List<DatabaseEntity> messages = aMessage.LoadList(reader);
List<Message> messageList = new List<Message>();
foreach (Message message in messages)
foreach (Message message in messages.Cast<Message>())
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<DatabaseEntity> a_list = agnt_template.LoadList(reader);
foreach (AGNT_Template aTemplate in a_list)
foreach (AGNT_Template aTemplate in a_list.Cast<AGNT_Template>())
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<DatabaseEntity> pois = poi.LoadList(reader);
foreach (PortOfItinerary aPoi in pois)
foreach (PortOfItinerary aPoi in pois.Cast<PortOfItinerary>())
{
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<DatabaseEntity> imdgs = imdg.LoadList(reader);
foreach (IMDGPosition imdgPosition in imdgs)
foreach (IMDGPosition imdgPosition in imdgs.Cast<IMDGPosition>())
{
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<DatabaseEntity> sRisks = subsidiaryRisks.LoadList(srReader);
foreach (SubsidiaryRisks subsidiaryRisk in sRisks)
foreach (SubsidiaryRisks subsidiaryRisk in sRisks.Cast<SubsidiaryRisks>())
{
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<DatabaseEntity> ibcs = ibc.LoadList(reader);
foreach (IBCPosition ibcPosition in ibcs)
foreach (IBCPosition ibcPosition in ibcs.Cast<IBCPosition>())
{
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<DatabaseEntity> igcs = igc.LoadList(reader);
foreach (IGCPosition igcPosition in igcs)
foreach (IGCPosition igcPosition in igcs.Cast<IGCPosition>())
{
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<DatabaseEntity> imsbcs = imsbc.LoadList(reader);
foreach (IMSBCPosition imsbcPosition in imsbcs)
foreach (IMSBCPosition imsbcPosition in imsbcs.Cast<IMSBCPosition>())
{
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<DatabaseEntity> marpols = marpol.LoadList(reader);
foreach (MARPOL_Annex_I_Position marpolPosition in marpols)
foreach (MARPOL_Annex_I_Position marpolPosition in marpols.Cast<MARPOL_Annex_I_Position>())
{
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<DatabaseEntity> poc30s = poc30.LoadList(reader);
foreach (PortOfCallLast30Days apoc30 in poc30s)
foreach (PortOfCallLast30Days apoc30 in poc30s.Cast<PortOfCallLast30Days>())
{
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<DatabaseEntity> smds = smd.LoadList(reader);
foreach(SanitaryMeasuresDetail aSmd in smds)
foreach(SanitaryMeasuresDetail aSmd in smds.Cast<SanitaryMeasuresDetail>())
{
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<DatabaseEntity> sjls = sjl.LoadList(reader);
foreach(StowawaysJoiningLocation aSjl in sjls)
foreach(StowawaysJoiningLocation aSjl in sjls.Cast<StowawaysJoiningLocation>())
{
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<DatabaseEntity> ias = ia.LoadList(reader);
foreach(InfectedArea aIa in ias)
foreach(InfectedArea aIa in ias.Cast<InfectedArea>())
{
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<DatabaseEntity> poc30Names = poc30s.LoadList(reader);
foreach (PortOfCallLast30DaysCrewJoinedShip poc30Name in poc30Names)
foreach (PortOfCallLast30DaysCrewJoinedShip poc30Name in poc30Names.Cast<PortOfCallLast30DaysCrewJoinedShip>())
{
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<DatabaseEntity> ltps = ltp.LoadList(reader);
foreach (LastTenPortFacilitiesCalled altp in ltps)
foreach (LastTenPortFacilitiesCalled altp in ltps.Cast<LastTenPortFacilitiesCalled>())
{
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<DatabaseEntity> stss = sts.LoadList(reader);
foreach (ShipToShipActivitiesDuringLastTenPortFacilitiesCalled asts in stss)
foreach (ShipToShipActivitiesDuringLastTenPortFacilitiesCalled asts in stss.Cast<ShipToShipActivitiesDuringLastTenPortFacilitiesCalled>())
{
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<DatabaseEntity> wdsps = wdsp.LoadList(reader);
foreach (WasteDisposalServiceProvider awdsp in wdsps)
foreach (WasteDisposalServiceProvider awdsp in wdsps.Cast<WasteDisposalServiceProvider>())
{
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<DatabaseEntity> wastes = waste.LoadList(reader2);
foreach (Waste aWaste in wastes)
foreach (Waste aWaste in wastes.Cast<Waste>())
{
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<DatabaseEntity> tfps = tfp.LoadList(reader);
foreach (TreatmentFacilityProvider aTfp in tfps)
foreach (TreatmentFacilityProvider aTfp in tfps.Cast<TreatmentFacilityProvider>())
{
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<DatabaseEntity> wrs = wasteReceived.LoadList(reader2);
foreach (WasteReceived awrs in wrs)
foreach (WasteReceived awrs in wrs.Cast<WasteReceived>())
{
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<DatabaseEntity> cps = cp.LoadList(reader);
foreach (CallPurpose callPurpose in cps)
foreach (CallPurpose callPurpose in cps.Cast<CallPurpose>())
{
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<DatabaseEntity> errorList = aMessageError.LoadList(reader);
foreach (MessageError error in errorList)
foreach (MessageError error in errorList.Cast<MessageError>())
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<DatabaseEntity> violationList = aMessageViolation.LoadList(reader);
foreach (MessageViolation violation in violationList)
foreach (MessageViolation violation in violationList.Cast<MessageViolation>())
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<DatabaseEntity> systemErrorList = aSystemError.LoadList(reader);
foreach (SystemError sError in systemErrorList)
foreach (SystemError sError in systemErrorList.Cast<SystemError>())
message.SystemErrorList.Add(sError);
}

View File

@ -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<PAS>())
{
DataRow row = result.NewRow();

View File

@ -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 = "")
{