Bearbeitung Version 5.1.0
(Erweiterungen Validierung, Eingabeoptionen Enums in excel)
This commit is contained in:
parent
e3888e1105
commit
88592d90c1
@ -610,6 +610,33 @@ namespace ENI2
|
|||||||
vViolations.AddRange(violations);
|
vViolations.AddRange(violations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region 12.11.18: ein paar neue komische globale Plausi-Prüfungen
|
||||||
|
Message crewMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.CREW);
|
||||||
|
Message pasMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.PAS);
|
||||||
|
Message pobaMessage = _messages.Find(message => message.MessageNotificationClass == Message.NotificationClass.POBA);
|
||||||
|
|
||||||
|
if (pobaMessage.Elements.Count == 1)
|
||||||
|
{
|
||||||
|
POBA poba = pobaMessage.Elements[0] as POBA;
|
||||||
|
|
||||||
|
if (crewMessage.Elements.Count != poba.TotalCrewMembersOnBoardUponArrival)
|
||||||
|
{
|
||||||
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "POBA crew member count different from CREW count!", null, "Crew count mismatch", null, "CREW");
|
||||||
|
mv.MessageGroupName = Properties.Resources.textOverview;
|
||||||
|
vViolations.Add(mv);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pasMessage.Elements.Count != poba.TotalPassengersOnBoardUponArrival)
|
||||||
|
{
|
||||||
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "POBA passenger count different from PAS count!", null, "Passenger count mismatch", null, "PAS");
|
||||||
|
mv.MessageGroupName = Properties.Resources.textOverview;
|
||||||
|
vViolations.Add(mv);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
foreach (MessageError me in vErrors)
|
foreach (MessageError me in vErrors)
|
||||||
{
|
{
|
||||||
this.highlightService.HighlightError(me, this.GetContainerForMessageGroupName(me.MessageGroupName));
|
this.highlightService.HighlightError(me, this.GetContainerForMessageGroupName(me.MessageGroupName));
|
||||||
|
|||||||
@ -56,7 +56,11 @@
|
|||||||
<RowDefinition Height="28" />
|
<RowDefinition Height="28" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Button Name="buttonImportExcelCrew" Grid.Row="0" Grid.Column="0" Content="{x:Static p:Resources.textImportFromExcel}" Margin="2" Width="120" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" Click="buttonImportExcelCrew_Click" />
|
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal">
|
||||||
|
<Button Name="buttonImportExcelCrew" Content="{x:Static p:Resources.textImportFromExcel}" Margin="2" Width="120" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" Click="buttonImportExcelCrew_Click" />
|
||||||
|
<TextBlock Margin="20, 0, 0, 0" Name="textBlockNumCrewEntries" FontWeight="Bold" Text="{Binding Elements.Count}" VerticalAlignment="Center"/>
|
||||||
|
<Label Name="labelCrewEntryCount" Content="{x:Static p:Resources.textEntries}" />
|
||||||
|
</StackPanel>
|
||||||
<enictrl:ENIDataGrid Grid.Row="1" Grid.Column="0" x:Name="dataGridCrewList" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
<enictrl:ENIDataGrid Grid.Row="1" Grid.Column="0" x:Name="dataGridCrewList" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
||||||
AutoGenerateColumns="False" Margin="0,5,0,0">
|
AutoGenerateColumns="False" Margin="0,5,0,0">
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
@ -83,7 +87,11 @@
|
|||||||
<RowDefinition Height="28" />
|
<RowDefinition Height="28" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Button Name="buttonImportExcelPassenger" Grid.Row="0" Grid.Column="0" Content="{x:Static p:Resources.textImportFromExcel}" Margin="2" Width="120" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" Click="buttonImportExcelPassenger_Click" />
|
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal">
|
||||||
|
<Button Name="buttonImportExcelPassenger" Grid.Row="0" Grid.Column="0" Content="{x:Static p:Resources.textImportFromExcel}" Margin="2" Width="120" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" Click="buttonImportExcelPassenger_Click" />
|
||||||
|
<TextBlock Margin="20, 0, 0, 0" Name="textBlockNumPasEntries" FontWeight="Bold" Text="{Binding Elements.Count}" VerticalAlignment="Center"/>
|
||||||
|
<Label Name="labelPasEntryCount" Content="{x:Static p:Resources.textEntries}" />
|
||||||
|
</StackPanel>
|
||||||
<enictrl:ENIDataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="dataGridPassengerList" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
<enictrl:ENIDataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="dataGridPassengerList" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
||||||
AutoGenerateColumns="False" Margin="0,5,0,0">
|
AutoGenerateColumns="False" Margin="0,5,0,0">
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
|
|||||||
@ -105,6 +105,8 @@ namespace ENI2.DetailViewControls
|
|||||||
this.Messages.Add(this._crewMessage);
|
this.Messages.Add(this._crewMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.groupBoxCrewList.DataContext = this._crewMessage;
|
||||||
|
|
||||||
this.dataGridCrewList.Initialize();
|
this.dataGridCrewList.Initialize();
|
||||||
this.dataGridCrewList.ItemsSource = this._crewMessage.Elements;
|
this.dataGridCrewList.ItemsSource = this._crewMessage.Elements;
|
||||||
this.dataGridCrewList.AddingNewItem += DataGridCrewList_AddingNewItem;
|
this.dataGridCrewList.AddingNewItem += DataGridCrewList_AddingNewItem;
|
||||||
@ -123,6 +125,8 @@ namespace ENI2.DetailViewControls
|
|||||||
this.Messages.Add(this._pasMessage);
|
this.Messages.Add(this._pasMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.groupBoxPassengerList.DataContext = this._pasMessage;
|
||||||
|
|
||||||
this.dataGridPassengerList.Initialize();
|
this.dataGridPassengerList.Initialize();
|
||||||
this.dataGridPassengerList.ItemsSource = this._pasMessage.Elements;
|
this.dataGridPassengerList.ItemsSource = this._pasMessage.Elements;
|
||||||
this.dataGridPassengerList.AddingNewItem += DataGridPassengerList_AddingNewItem;
|
this.dataGridPassengerList.AddingNewItem += DataGridPassengerList_AddingNewItem;
|
||||||
|
|||||||
@ -35,8 +35,8 @@
|
|||||||
<MinimumRequiredVersion>3.5.1.0</MinimumRequiredVersion>
|
<MinimumRequiredVersion>3.5.1.0</MinimumRequiredVersion>
|
||||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||||
<WebPage>publish.html</WebPage>
|
<WebPage>publish.html</WebPage>
|
||||||
<ApplicationRevision>1</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>5.0.19.%2a</ApplicationVersion>
|
<ApplicationVersion>5.1.0.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
|
|||||||
9
ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs
generated
9
ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs
generated
@ -1889,6 +1889,15 @@ namespace ENI2.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to entries.
|
||||||
|
/// </summary>
|
||||||
|
public static string textEntries {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("textEntries", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Error code.
|
/// Looks up a localized string similar to Error code.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -1657,4 +1657,7 @@
|
|||||||
<data name="textMessageHisNotMatching" xml:space="preserve">
|
<data name="textMessageHisNotMatching" xml:space="preserve">
|
||||||
<value>HIS {0} of message {1} and current target {2} do not match: Reset aborted</value>
|
<value>HIS {0} of message {1} and current target {2} do not match: Reset aborted</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="textEntries" xml:space="preserve">
|
||||||
|
<value>entries</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
Binary file not shown.
@ -218,12 +218,12 @@ namespace bsmd.ExcelReadService
|
|||||||
string val = this.ReadText(lookup);
|
string val = this.ReadText(lookup);
|
||||||
if (val != null)
|
if (val != null)
|
||||||
{
|
{
|
||||||
if (val.Equals("identity_card", StringComparison.CurrentCultureIgnoreCase)) result = 0;
|
if (val.Equals("identity_card", StringComparison.CurrentCultureIgnoreCase) || val.Equals("1")) result = 0;
|
||||||
if (val.Equals("passport", StringComparison.CurrentCultureIgnoreCase)) result = 1;
|
if (val.Equals("passport", StringComparison.CurrentCultureIgnoreCase) || val.Equals("2")) result = 1;
|
||||||
if (val.Equals("muster_book", StringComparison.CurrentCultureIgnoreCase)) result = 2;
|
if (val.Equals("muster_book", StringComparison.CurrentCultureIgnoreCase) || val.Equals("3")) result = 2;
|
||||||
if (val.Equals("picture_id", StringComparison.CurrentCultureIgnoreCase)) result = 3;
|
if (val.Equals("picture_id", StringComparison.CurrentCultureIgnoreCase) || val.Equals("4")) result = 3;
|
||||||
if (val.Equals("residental_permit", StringComparison.CurrentCultureIgnoreCase)) result = 4;
|
if (val.Equals("residental_permit", StringComparison.CurrentCultureIgnoreCase) || val.Equals("5")) result = 4;
|
||||||
if (val.Equals("other_legal_identity_document", StringComparison.CurrentCultureIgnoreCase)) result = 5;
|
if (val.Equals("other_legal_identity_document", StringComparison.CurrentCultureIgnoreCase) || val.Equals("6")) result = 5;
|
||||||
if (val.Equals("ic", StringComparison.CurrentCultureIgnoreCase)) result = 0;
|
if (val.Equals("ic", StringComparison.CurrentCultureIgnoreCase)) result = 0;
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
@ -260,6 +260,31 @@ namespace bsmd.ExcelReadService
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal byte? ReadGeneralDescriptionOfCargo(string lookup)
|
||||||
|
{
|
||||||
|
string val = this.ReadText(lookup);
|
||||||
|
byte? result = null;
|
||||||
|
if(val != null)
|
||||||
|
{
|
||||||
|
if (val.Contains("container", StringComparison.OrdinalIgnoreCase) || val.Equals("1")) result = 0;
|
||||||
|
if (val.Contains("vehicles", StringComparison.OrdinalIgnoreCase) || val.Equals("2")) result = 1;
|
||||||
|
if (val.Contains("convent", StringComparison.OrdinalIgnoreCase) || val.Equals("3")) result = 2;
|
||||||
|
if (val.Contains("dry", StringComparison.OrdinalIgnoreCase) || val.Equals("4")) result = 3;
|
||||||
|
if (val.Contains("liquid", StringComparison.OrdinalIgnoreCase) || val.Equals("5")) result = 4;
|
||||||
|
if (val.Contains("empty", StringComparison.OrdinalIgnoreCase) || val.Equals("6")) result = 5;
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
this.Conf.ConfirmText(lookup, val, ReadState.WARN);
|
||||||
|
else
|
||||||
|
this.Conf.ConfirmText(lookup, val, ReadState.OK);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.Conf.ConfirmText(lookup, null, ReadState.FAIL);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
internal byte? ReadCargoHandlingType(string lookup)
|
internal byte? ReadCargoHandlingType(string lookup)
|
||||||
{
|
{
|
||||||
string val = this.ReadText(lookup);
|
string val = this.ReadText(lookup);
|
||||||
|
|||||||
@ -1759,19 +1759,7 @@ namespace bsmd.ExcelReadService
|
|||||||
}
|
}
|
||||||
|
|
||||||
reader.Conf.ConfirmText("SEC.ISSCIssuerType", isscIssuerType, sec.ISSCIssuerType.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL);
|
reader.Conf.ConfirmText("SEC.ISSCIssuerType", isscIssuerType, sec.ISSCIssuerType.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL);
|
||||||
|
sec.GeneralDescriptionOfCargo = reader.ReadGeneralDescriptionOfCargo("SEC.GeneralDescriptionOfCargo");
|
||||||
string genDescCargo = reader.ReadText("SEC.GeneralDescriptionOfCargo");
|
|
||||||
if(genDescCargo != null)
|
|
||||||
{
|
|
||||||
if (genDescCargo.Contains("container", StringComparison.OrdinalIgnoreCase)) sec.GeneralDescriptionOfCargo = 0;
|
|
||||||
if (genDescCargo.Contains("vehicles", StringComparison.OrdinalIgnoreCase)) sec.GeneralDescriptionOfCargo = 1;
|
|
||||||
if (genDescCargo.Contains("convent", StringComparison.OrdinalIgnoreCase)) sec.GeneralDescriptionOfCargo = 2;
|
|
||||||
if (genDescCargo.Contains("dry", StringComparison.OrdinalIgnoreCase)) sec.GeneralDescriptionOfCargo = 3;
|
|
||||||
if (genDescCargo.Contains("liquid", StringComparison.OrdinalIgnoreCase)) sec.GeneralDescriptionOfCargo = 4;
|
|
||||||
if (genDescCargo.Contains("empty", StringComparison.OrdinalIgnoreCase)) sec.GeneralDescriptionOfCargo = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.Conf.ConfirmText("SEC.GeneralDescriptionOfCargo", genDescCargo, sec.GeneralDescriptionOfCargo.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL);
|
|
||||||
|
|
||||||
bool? secKielArrival = reader.ReadBoolean("SEC.KielCanalPassagePlanned_Arrival");
|
bool? secKielArrival = reader.ReadBoolean("SEC.KielCanalPassagePlanned_Arrival");
|
||||||
bool? secKielDeparture = reader.ReadBoolean("SEC.KielCanalPassagePlanned_Departure");
|
bool? secKielDeparture = reader.ReadBoolean("SEC.KielCanalPassagePlanned_Departure");
|
||||||
|
|||||||
@ -1073,7 +1073,7 @@ namespace bsmd.database
|
|||||||
{
|
{
|
||||||
if (core == null) return;
|
if (core == null) return;
|
||||||
SqlCommand cmd = new SqlCommand();
|
SqlCommand cmd = new SqlCommand();
|
||||||
cmd.CommandText = "SELECT STAT.ShipName FROM STAT JOIN MessageHeader ON STAT.MessageHeaderId = MessageHeader.Id WHERE MessageHeader.MessageCoreId = @ID";
|
cmd.CommandText = "SELECT STAT.ShipName, STAT.GrossTonnage FROM STAT JOIN MessageHeader ON STAT.MessageHeaderId = MessageHeader.Id WHERE MessageHeader.MessageCoreId = @ID";
|
||||||
cmd.Parameters.AddWithValue("@ID", core.Id);
|
cmd.Parameters.AddWithValue("@ID", core.Id);
|
||||||
SqlDataReader reader = this.PerformCommand(cmd);
|
SqlDataReader reader = this.PerformCommand(cmd);
|
||||||
if(reader.Read())
|
if(reader.Read())
|
||||||
@ -1082,6 +1082,11 @@ namespace bsmd.database
|
|||||||
core.Shipname = "";
|
core.Shipname = "";
|
||||||
else
|
else
|
||||||
core.Shipname = reader.GetString(0);
|
core.Shipname = reader.GetString(0);
|
||||||
|
if(!reader.IsDBNull(1))
|
||||||
|
{
|
||||||
|
int grossTonnage = reader.GetInt32(1);
|
||||||
|
core.IsSmallShip = grossTonnage < 500;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
reader.Close();
|
reader.Close();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -116,6 +116,7 @@ namespace bsmd.database
|
|||||||
[MaxLength(100)]
|
[MaxLength(100)]
|
||||||
[ENI2Validation]
|
[ENI2Validation]
|
||||||
public string SanitaryMeasuresLocation { get; set; }
|
public string SanitaryMeasuresLocation { get; set; }
|
||||||
|
|
||||||
[ShowReport]
|
[ShowReport]
|
||||||
[LookupName("MDH.SanitaryMeasuresDate_1")]
|
[LookupName("MDH.SanitaryMeasuresDate_1")]
|
||||||
[ENI2Validation]
|
[ENI2Validation]
|
||||||
@ -549,6 +550,9 @@ namespace bsmd.database
|
|||||||
if ((this.InfectedAreaVisited ?? false) && this.InfectedAreas.IsNullOrEmpty())
|
if ((this.InfectedAreaVisited ?? false) && this.InfectedAreas.IsNullOrEmpty())
|
||||||
violations.Add(RuleEngine.CreateViolation(ValidationCode.V766, "Infected area date or port missing", null, this.Title, null, this.Tablename));
|
violations.Add(RuleEngine.CreateViolation(ValidationCode.V766, "Infected area date or port missing", null, this.Title, null, this.Tablename));
|
||||||
|
|
||||||
|
if ((this.DateOfIssue.HasValue) && (this.DateOfIssue.Value < DateTime.Today.AddMonths(-6)))
|
||||||
|
violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Date of issue might be too old", null, this.Title, null, this.Tablename));
|
||||||
|
|
||||||
if (this.portOfCallLast30Days.Count == 0)
|
if (this.portOfCallLast30Days.Count == 0)
|
||||||
{
|
{
|
||||||
errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, "Port of Call last 30 day list is EMPTY", null, this.Title, null, this.Tablename));
|
errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, "Port of Call last 30 day list is EMPTY", null, this.Title, null, this.Tablename));
|
||||||
|
|||||||
@ -19,10 +19,8 @@ namespace bsmd.database
|
|||||||
private Guid? next;
|
private Guid? next;
|
||||||
private DateTime? created;
|
private DateTime? created;
|
||||||
private DateTime? changed;
|
private DateTime? changed;
|
||||||
|
|
||||||
private Guid? customerId;
|
|
||||||
private int? wetris_zz_56_datensatz_id;
|
private int? wetris_zz_56_datensatz_id;
|
||||||
private static ILog _log = LogManager.GetLogger("MessageCore");
|
private static readonly ILog _log = LogManager.GetLogger("MessageCore");
|
||||||
|
|
||||||
private string _visitId;
|
private string _visitId;
|
||||||
private string _transitId;
|
private string _transitId;
|
||||||
@ -215,7 +213,7 @@ namespace bsmd.database
|
|||||||
|
|
||||||
public Customer Customer { get; set; }
|
public Customer Customer { get; set; }
|
||||||
|
|
||||||
public Guid? CustomerId { get { return this.customerId; } set { this.customerId = value; } }
|
public Guid? CustomerId { get; set; }
|
||||||
|
|
||||||
public ReportStatusEnum ReportStatus { get; set; }
|
public ReportStatusEnum ReportStatus { get; set; }
|
||||||
|
|
||||||
@ -242,23 +240,32 @@ namespace bsmd.database
|
|||||||
/// ENI-2 display prop
|
/// ENI-2 display prop
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Shipname { get; set; }
|
public string Shipname { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ENI-2 display prop
|
/// ENI-2 display prop
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? ETA_NOA_NOD { get; set; }
|
public DateTime? ETA_NOA_NOD { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ENI-2 display prop
|
/// ENI-2 display prop
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? ETD_NOA_NOD { get; set; }
|
public DateTime? ETD_NOA_NOD { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ENI-2 display prop
|
/// ENI-2 display prop
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? ATA { get; set; }
|
public DateTime? ATA { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ENI-2 display prop
|
/// ENI-2 display prop
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? ATD { get; set; }
|
public DateTime? ATD { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Validation flag (set from STAT, GrossTonnage < 500)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsSmallShip { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Flag zeigt an ob ein Excelsheet erzeugt werden soll
|
/// Flag zeigt an ob ein Excelsheet erzeugt werden soll
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -325,7 +332,7 @@ namespace bsmd.database
|
|||||||
else scmd.Parameters.AddWithValue("@P6", DBNull.Value);
|
else scmd.Parameters.AddWithValue("@P6", DBNull.Value);
|
||||||
if (this.ETA.HasValue) scmd.Parameters.AddWithValue("@P7", this.ETA);
|
if (this.ETA.HasValue) scmd.Parameters.AddWithValue("@P7", this.ETA);
|
||||||
else scmd.Parameters.AddWithValue("@P7", DBNull.Value);
|
else scmd.Parameters.AddWithValue("@P7", DBNull.Value);
|
||||||
if (this.customerId.HasValue) scmd.Parameters.AddWithValue("@P8", this.customerId);
|
if (this.CustomerId.HasValue) scmd.Parameters.AddWithValue("@P8", this.CustomerId);
|
||||||
else scmd.Parameters.AddWithValue("@P8", DBNull.Value);
|
else scmd.Parameters.AddWithValue("@P8", DBNull.Value);
|
||||||
if (this.previous.HasValue) scmd.Parameters.AddWithValue("@P9", this.previous);
|
if (this.previous.HasValue) scmd.Parameters.AddWithValue("@P9", this.previous);
|
||||||
else scmd.Parameters.AddWithValue("@P9", DBNull.Value);
|
else scmd.Parameters.AddWithValue("@P9", DBNull.Value);
|
||||||
@ -396,7 +403,7 @@ namespace bsmd.database
|
|||||||
StringBuilder sb = new StringBuilder("SELECT ");
|
StringBuilder sb = new StringBuilder("SELECT ");
|
||||||
if (this.ResultLimit.HasValue && this.ResultLimit.Value > 0)
|
if (this.ResultLimit.HasValue && this.ResultLimit.Value > 0)
|
||||||
{
|
{
|
||||||
sb.Append(string.Format("TOP {0} ", this.ResultLimit));
|
sb.AppendFormat("TOP {0} ", this.ResultLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.AppendFormat("[{0}].[Id], [{0}].[VisitId], [{0}].[TransitId], [{0}].[IMO], [{0}].[ENI], [{0}].[PoC], [{0}].[Portname], " +
|
sb.AppendFormat("[{0}].[Id], [{0}].[VisitId], [{0}].[TransitId], [{0}].[IMO], [{0}].[ENI], [{0}].[PoC], [{0}].[Portname], " +
|
||||||
@ -411,8 +418,7 @@ namespace bsmd.database
|
|||||||
|
|
||||||
if(filter == Message.LoadFilter.SEARCH_CORE_FILTERS)
|
if(filter == Message.LoadFilter.SEARCH_CORE_FILTERS)
|
||||||
{
|
{
|
||||||
Dictionary<SearchFilterType, string> searchDict = criteria[0] as Dictionary<SearchFilterType, string>;
|
if (criteria[0] is Dictionary<SearchFilterType, string> searchDict && (searchDict.Count > 0))
|
||||||
if (searchDict != null && (searchDict.Count > 0))
|
|
||||||
{
|
{
|
||||||
if (searchDict.ContainsKey(SearchFilterType.FILTER_ETA))
|
if (searchDict.ContainsKey(SearchFilterType.FILTER_ETA))
|
||||||
sb.Append(", NOA_NOD.ETAToPortOfCall, NOA_NOD.ETAToKielCanal");
|
sb.Append(", NOA_NOD.ETAToPortOfCall, NOA_NOD.ETAToKielCanal");
|
||||||
@ -508,8 +514,7 @@ namespace bsmd.database
|
|||||||
// object ist jetzt ein dict aus filtertyp und filterparameter
|
// object ist jetzt ein dict aus filtertyp und filterparameter
|
||||||
bool moreThanOne = false;
|
bool moreThanOne = false;
|
||||||
|
|
||||||
Dictionary<SearchFilterType, string> searchDict = criteria[0] as Dictionary<SearchFilterType, string>;
|
if (criteria[0] is Dictionary<SearchFilterType, string> searchDict && (searchDict.Count > 0))
|
||||||
if (searchDict != null && (searchDict.Count > 0))
|
|
||||||
{
|
{
|
||||||
if (searchDict.ContainsKey(SearchFilterType.FILTER_SHIPNAME))
|
if (searchDict.ContainsKey(SearchFilterType.FILTER_SHIPNAME))
|
||||||
{
|
{
|
||||||
@ -517,7 +522,7 @@ namespace bsmd.database
|
|||||||
sb.Append(" JOIN MessageHeader mh ON MessageCore.Id = mh.MessageCoreId JOIN STAT ON mh.Id = STAT.MessageHeaderId");
|
sb.Append(" JOIN MessageHeader mh ON MessageCore.Id = mh.MessageCoreId JOIN STAT ON mh.Id = STAT.MessageHeaderId");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(searchDict.ContainsKey(SearchFilterType.FILTER_ETA))
|
if (searchDict.ContainsKey(SearchFilterType.FILTER_ETA))
|
||||||
{
|
{
|
||||||
// perform NOA_NOD join
|
// perform NOA_NOD join
|
||||||
sb.Append(" LEFT JOIN MessageHeader mh2 ON mh2.MessageCoreId = MessageCore.Id AND mh2.NotificationClass = 2 LEFT JOIN NOA_NOD ON NOA_NOD.MessageHeaderId = mh2.Id");
|
sb.Append(" LEFT JOIN MessageHeader mh2 ON mh2.MessageCoreId = MessageCore.Id AND mh2.NotificationClass = 2 LEFT JOIN NOA_NOD ON NOA_NOD.MessageHeaderId = mh2.Id");
|
||||||
@ -590,14 +595,14 @@ namespace bsmd.database
|
|||||||
break;
|
break;
|
||||||
case SearchFilterType.FILTER_TICKETNO:
|
case SearchFilterType.FILTER_TICKETNO:
|
||||||
{
|
{
|
||||||
sb.Append(" TicketNo like @TICKETNO ");
|
sb.Append(" TicketNo like @TICKETNO ");
|
||||||
((SqlCommand)cmd).Parameters.AddWithValue("@TICKETNO", searchDict[key]);
|
((SqlCommand)cmd).Parameters.AddWithValue("@TICKETNO", searchDict[key]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!moreThanOne) moreThanOne = true;
|
if (!moreThanOne) moreThanOne = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Message.LoadFilter.ALL:
|
case Message.LoadFilter.ALL:
|
||||||
@ -621,7 +626,7 @@ namespace bsmd.database
|
|||||||
if (!reader.IsDBNull(5)) core.PoC = reader.GetString(5);
|
if (!reader.IsDBNull(5)) core.PoC = reader.GetString(5);
|
||||||
if (!reader.IsDBNull(6)) core.Portname = reader.GetString(6);
|
if (!reader.IsDBNull(6)) core.Portname = reader.GetString(6);
|
||||||
if (!reader.IsDBNull(7)) core.ETA = reader.GetDateTime(7);
|
if (!reader.IsDBNull(7)) core.ETA = reader.GetDateTime(7);
|
||||||
if (!reader.IsDBNull(8)) core.customerId = reader.GetGuid(8);
|
if (!reader.IsDBNull(8)) core.CustomerId = reader.GetGuid(8);
|
||||||
if (!reader.IsDBNull(9)) core.previous = reader.GetGuid(9);
|
if (!reader.IsDBNull(9)) core.previous = reader.GetGuid(9);
|
||||||
if (!reader.IsDBNull(10)) core.next = reader.GetGuid(10);
|
if (!reader.IsDBNull(10)) core.next = reader.GetGuid(10);
|
||||||
core.IsTransit = reader.GetBoolean(11);
|
core.IsTransit = reader.GetBoolean(11);
|
||||||
@ -706,9 +711,9 @@ namespace bsmd.database
|
|||||||
|
|
||||||
public int CompareTo(object obj)
|
public int CompareTo(object obj)
|
||||||
{
|
{
|
||||||
if(obj is MessageCore)
|
if(obj is MessageCore messageCore)
|
||||||
{
|
{
|
||||||
return Nullable.Compare(((MessageCore)obj).ETA_NOA_NOD, this.ETA_NOA_NOD);
|
return Nullable.Compare((messageCore).ETA_NOA_NOD, this.ETA_NOA_NOD);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -719,7 +724,7 @@ namespace bsmd.database
|
|||||||
|
|
||||||
public bool Equals(MessageCore other)
|
public bool Equals(MessageCore other)
|
||||||
{
|
{
|
||||||
return null != other && Id == other.Id;
|
return other != null && Id == other.Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
[assembly: AssemblyCompany("schick Informatik")]
|
[assembly: AssemblyCompany("schick Informatik")]
|
||||||
[assembly: AssemblyProduct("BSMD NSW interface")]
|
[assembly: AssemblyProduct("BSMD NSW interface")]
|
||||||
[assembly: AssemblyInformationalVersion("5.0.20")]
|
[assembly: AssemblyInformationalVersion("5.1.0")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2014-2018 schick Informatik")]
|
[assembly: AssemblyCopyright("Copyright © 2014-2018 schick Informatik")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
@ -1,4 +1,4 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("5.0.20.*")]
|
[assembly: AssemblyVersion("5.1.0.*")]
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,7 @@ namespace bsmd.database
|
|||||||
|
|
||||||
#region german LOCODE's static definition
|
#region german LOCODE's static definition
|
||||||
|
|
||||||
private static List<string> gerLocodeList = new List<string>() {
|
private static readonly List<string> gerLocodeList = new List<string>() {
|
||||||
"DE001",
|
"DE001",
|
||||||
"DEAND",
|
"DEAND",
|
||||||
"DEBDF",
|
"DEBDF",
|
||||||
@ -107,15 +107,12 @@ namespace bsmd.database
|
|||||||
public delegate bool LocodeValidHandler(string locode, LocodeMode mode);
|
public delegate bool LocodeValidHandler(string locode, LocodeMode mode);
|
||||||
public delegate bool PortAreaValidHandler(string locode, string portArea);
|
public delegate bool PortAreaValidHandler(string locode, string portArea);
|
||||||
|
|
||||||
private static ILog log = LogManager.GetLogger(typeof(RuleEngine));
|
private static readonly ILog log = LogManager.GetLogger(typeof(RuleEngine));
|
||||||
private static Dictionary<int, string> errorTextList = null;
|
private static Dictionary<int, string> errorTextList = null;
|
||||||
private static Dictionary<int, string> violationTextList = null;
|
private static Dictionary<int, string> violationTextList = null;
|
||||||
private static LocodeValidHandler _locodeChecker = null;
|
private static LocodeValidHandler _locodeChecker = null;
|
||||||
private static PortAreaValidHandler _portAreaChecker = null;
|
private static PortAreaValidHandler _portAreaChecker = null;
|
||||||
|
|
||||||
private Dictionary<DatabaseEntity, List<MessageError>> errorDict = new Dictionary<DatabaseEntity, List<MessageError>>();
|
|
||||||
private Dictionary<DatabaseEntity, List<MessageViolation>> violationDict = new Dictionary<DatabaseEntity, List<MessageViolation>>();
|
|
||||||
|
|
||||||
public RuleEngine()
|
public RuleEngine()
|
||||||
{
|
{
|
||||||
if (RuleEngine.errorTextList == null)
|
if (RuleEngine.errorTextList == null)
|
||||||
@ -124,8 +121,8 @@ namespace bsmd.database
|
|||||||
RuleEngine.violationTextList = DBManager.Instance.LoadViolationTexts();
|
RuleEngine.violationTextList = DBManager.Instance.LoadViolationTexts();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<DatabaseEntity, List<MessageError>> ErrorDict { get { return this.errorDict; } }
|
public Dictionary<DatabaseEntity, List<MessageError>> ErrorDict { get; } = new Dictionary<DatabaseEntity, List<MessageError>>();
|
||||||
public Dictionary<DatabaseEntity, List<MessageViolation>> ViolationDict { get { return this.violationDict; } }
|
public Dictionary<DatabaseEntity, List<MessageViolation>> ViolationDict { get; } = new Dictionary<DatabaseEntity, List<MessageViolation>>();
|
||||||
|
|
||||||
public static PortAreaValidHandler PortAreaChecker { get { return _portAreaChecker; } }
|
public static PortAreaValidHandler PortAreaChecker { get { return _portAreaChecker; } }
|
||||||
|
|
||||||
@ -143,8 +140,8 @@ namespace bsmd.database
|
|||||||
public static void ValidateProperties(DatabaseEntity entity, List<MessageError> errors, List<MessageViolation> violations)
|
public static void ValidateProperties(DatabaseEntity entity, List<MessageError> errors, List<MessageViolation> violations)
|
||||||
{
|
{
|
||||||
string identifier = null;
|
string identifier = null;
|
||||||
if (entity is ISublistElement)
|
if (entity is ISublistElement sublistElement)
|
||||||
identifier = ((ISublistElement)entity).Identifier;
|
identifier = (sublistElement).Identifier;
|
||||||
|
|
||||||
Type objType = entity.GetType();
|
Type objType = entity.GetType();
|
||||||
|
|
||||||
@ -257,15 +254,13 @@ namespace bsmd.database
|
|||||||
break;
|
break;
|
||||||
case ValidationCode.INT_GT_ZERO:
|
case ValidationCode.INT_GT_ZERO:
|
||||||
{
|
{
|
||||||
int intVal = 0;
|
if (!Int32.TryParse(value, out int intVal) || intVal <= 0)
|
||||||
if (!Int32.TryParse(value, out intVal) || intVal <= 0)
|
|
||||||
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ValidationCode.DOUBLE_GT_ZERO:
|
case ValidationCode.DOUBLE_GT_ZERO:
|
||||||
{
|
{
|
||||||
double dVal = 0;
|
if (!Double.TryParse(value, out double dVal) || dVal <= 0)
|
||||||
if (!Double.TryParse(value, out dVal) || dVal <= 0)
|
|
||||||
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -316,19 +311,17 @@ namespace bsmd.database
|
|||||||
break;
|
break;
|
||||||
case ValidationCode.DRAUGHT_IMPLAUSIBLE:
|
case ValidationCode.DRAUGHT_IMPLAUSIBLE:
|
||||||
{
|
{
|
||||||
double dVal = 0;
|
if (!Double.TryParse(value, out double dVal) || dVal <= 0)
|
||||||
if (!Double.TryParse(value, out dVal) || dVal <= 0)
|
|
||||||
errors.Add(RuleEngine.CreateError(ValidationCode.DOUBLE_GT_ZERO, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(ValidationCode.DOUBLE_GT_ZERO, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
else
|
else
|
||||||
if ((dVal < 20) || (dVal > 150))
|
if ((dVal < 20) || (dVal > 150))
|
||||||
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ValidationCode.TIME_IMPLAUSIBLE:
|
case ValidationCode.TIME_IMPLAUSIBLE:
|
||||||
{
|
{
|
||||||
DateTime aTime;
|
|
||||||
if (value.Length == 0) errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, property.Name, value, entity.Title, identifier, entity.Tablename));
|
if (value.Length == 0) errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
if (DateTime.TryParse(value, out aTime))
|
if (DateTime.TryParse(value, out DateTime aTime))
|
||||||
{
|
{
|
||||||
if ((aTime - DateTime.UtcNow).Minutes > 15)
|
if ((aTime - DateTime.UtcNow).Minutes > 15)
|
||||||
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
@ -341,7 +334,7 @@ namespace bsmd.database
|
|||||||
{
|
{
|
||||||
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
}
|
}
|
||||||
if(!value.IsNullOrEmpty() && !(value.Trim().Any(char.IsDigit))) // falls "-" oder keine Zahl enthalten, Fehler!
|
if(!value.IsNullOrEmpty() && !value.Trim().Any(char.IsDigit)) // falls "-" oder keine Zahl enthalten, Fehler!
|
||||||
{
|
{
|
||||||
errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
}
|
}
|
||||||
@ -349,7 +342,7 @@ namespace bsmd.database
|
|||||||
}
|
}
|
||||||
case ValidationCode.VESSEL_TYPE:
|
case ValidationCode.VESSEL_TYPE:
|
||||||
{
|
{
|
||||||
if((value.Length == 0) || ((STAT.VesselTypeDict != null) && !STAT.VesselTypeDict.ContainsKey(value)))
|
if((value.Length == 0) || (STAT.VesselTypeDict?.ContainsKey(value) == false))
|
||||||
{
|
{
|
||||||
errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, property.Name, value, entity.Title, identifier, entity.Tablename));
|
errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
}
|
}
|
||||||
@ -361,14 +354,14 @@ namespace bsmd.database
|
|||||||
break;
|
break;
|
||||||
case ValidationCode.FRZ:
|
case ValidationCode.FRZ:
|
||||||
{
|
{
|
||||||
Regex rgx = new Regex(@"^[A-Z,a-z,0-9]{4,7}$");
|
Regex rgx = new Regex("^[A-Z,a-z,0-9]{4,7}$");
|
||||||
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ValidationCode.MMSI:
|
case ValidationCode.MMSI:
|
||||||
{
|
{
|
||||||
Regex rgx = new Regex(@"^[0-9]{9}$");
|
Regex rgx = new Regex("^[0-9]{9}$");
|
||||||
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
if (!rgx.IsMatch(value)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -408,6 +401,7 @@ namespace bsmd.database
|
|||||||
// individuelle Fehler nach Nachrichtenklasse prüfen
|
// individuelle Fehler nach Nachrichtenklasse prüfen
|
||||||
derivedEntity.MessageCore = aMessage.MessageCore; // some instance we need info from core (NOA / Transit)
|
derivedEntity.MessageCore = aMessage.MessageCore; // some instance we need info from core (NOA / Transit)
|
||||||
if ((derivedEntity is LADG) && aMessage.MessageCore.IsTransit) continue; // kein error reporting für LADG bei Transit (CH, 1.2.16)
|
if ((derivedEntity is LADG) && aMessage.MessageCore.IsTransit) continue; // kein error reporting für LADG bei Transit (CH, 1.2.16)
|
||||||
|
if ((derivedEntity is SEC) && aMessage.MessageCore.IsSmallShip) continue; // keine STAT Validierung für kleine Schiffe (CH, 1.11.18)
|
||||||
RuleEngine.ValidateProperties(derivedEntity, errors, violations);
|
RuleEngine.ValidateProperties(derivedEntity, errors, violations);
|
||||||
derivedEntity.Validate(errors, violations);
|
derivedEntity.Validate(errors, violations);
|
||||||
}
|
}
|
||||||
@ -425,14 +419,15 @@ namespace bsmd.database
|
|||||||
|
|
||||||
List<MessageError> errors = new List<MessageError>();
|
List<MessageError> errors = new List<MessageError>();
|
||||||
List<MessageViolation> violations = new List<MessageViolation>();
|
List<MessageViolation> violations = new List<MessageViolation>();
|
||||||
this.errorDict[entity] = errors;
|
this.ErrorDict[entity] = errors;
|
||||||
this.violationDict[entity] = violations;
|
this.ViolationDict[entity] = violations;
|
||||||
|
|
||||||
foreach (DatabaseEntity derivedEntity in ((Message)entity).Elements)
|
foreach (DatabaseEntity derivedEntity in ((Message)entity).Elements)
|
||||||
{
|
{
|
||||||
// individuelle Fehler nach Nachrichtenklasse prüfen
|
// individuelle Fehler nach Nachrichtenklasse prüfen
|
||||||
derivedEntity.MessageCore = entity.MessageCore; // some instance we need info from core (NOA / Transit)
|
derivedEntity.MessageCore = entity.MessageCore; // some instance we need info from core (NOA / Transit)
|
||||||
if ((derivedEntity is LADG) && entity.MessageCore.IsTransit) continue; // kein error reporting für LADG bei Transit (CH, 1.2.16)
|
if ((derivedEntity is LADG) && entity.MessageCore.IsTransit) continue; // kein error reporting für LADG bei Transit (CH, 1.2.16)
|
||||||
|
if ((derivedEntity is SEC) && entity.MessageCore.IsSmallShip) continue; // keine STAT Validierung für kleine Schiffe (CH, 1.11.18)
|
||||||
RuleEngine.ValidateProperties(derivedEntity, errors, violations);
|
RuleEngine.ValidateProperties(derivedEntity, errors, violations);
|
||||||
derivedEntity.Validate(errors, violations);
|
derivedEntity.Validate(errors, violations);
|
||||||
|
|
||||||
@ -468,7 +463,7 @@ namespace bsmd.database
|
|||||||
|
|
||||||
public static bool IsGermanLocode(string val)
|
public static bool IsGermanLocode(string val)
|
||||||
{
|
{
|
||||||
return (gerLocodeList.Contains(val.ToUpper()));
|
return gerLocodeList.Contains(val.ToUpper());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LocodeValidHandler LocodeChecker { get { return _locodeChecker; } }
|
public static LocodeValidHandler LocodeChecker { get { return _locodeChecker; } }
|
||||||
@ -511,7 +506,7 @@ namespace bsmd.database
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static MessageViolation CreateViolation(ValidationCode validationCode, string p,
|
public static MessageViolation CreateViolation(ValidationCode validationCode, string p,
|
||||||
string value, string entityName, string identifier = "", string notificationClass = "")
|
string value, string entityName, string identifier = "", string notificationClass = "")
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -363,6 +363,9 @@ namespace bsmd.database
|
|||||||
if ((!this.ValidISSCOnBoard ?? true) && this.ReasonsForNoValidISSC.IsNullOrEmpty())
|
if ((!this.ValidISSCOnBoard ?? true) && this.ReasonsForNoValidISSC.IsNullOrEmpty())
|
||||||
violations.Add(RuleEngine.CreateViolation(ValidationCode.V702, "ReasonsForNoValidISSC", null, this.Title, null, this.Tablename));
|
violations.Add(RuleEngine.CreateViolation(ValidationCode.V702, "ReasonsForNoValidISSC", null, this.Title, null, this.Tablename));
|
||||||
|
|
||||||
|
if (this.ISSCDateOfExpiration.HasValue && (this.ISSCDateOfExpiration < DateTime.Now))
|
||||||
|
violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "ISSC Expiration date is in the past", null, this.Title, null, this.Tablename));
|
||||||
|
|
||||||
if ((this.LastTenPortFacilitesCalled.Count == 0) || (this.LastTenPortFacilitesCalled.Count > 10))
|
if ((this.LastTenPortFacilitesCalled.Count == 0) || (this.LastTenPortFacilitesCalled.Count > 10))
|
||||||
errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "LastTenPortFacilitiesCalled", null, this.Title, null, this.Tablename));
|
errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "LastTenPortFacilitiesCalled", null, this.Title, null, this.Tablename));
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user