From 8296296463888755a1cd80b64c15a715382ea917 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Wed, 31 Jan 2018 14:28:10 +0000 Subject: [PATCH] Version 3.9.10 --- ENI-2/ENI2/ENI2/App.xaml.cs | 1 + .../BorderPoliceDetailControl.xaml.cs | 4 ++-- ENI-2/ENI2/ENI2/ENI2.csproj | 2 +- ENI-2/ENI2/ENI2/LocalizedLookup.cs | 8 +++++++ ENI-2/ENI2/ENI2/Util/GlobalStructures.cs | 2 +- Stundensheet.xlsx | Bin 36019 -> 36105 bytes .../bsmd.ExcelReadService/ExcelReader.cs | 3 +++ nsw/Source/bsmd.database/INFO.cs | 20 +++++++++++++++++- .../LastTenPortFacilitiesCalled.cs | 12 +++++------ nsw/Source/bsmd.database/RuleEngine.cs | 16 +++++++------- nsw/Source/misc/db.sqlite | Bin 13099008 -> 13099008 bytes 11 files changed, 49 insertions(+), 19 deletions(-) diff --git a/ENI-2/ENI2/ENI2/App.xaml.cs b/ENI-2/ENI2/ENI2/App.xaml.cs index d47cc03c..c9289697 100644 --- a/ENI-2/ENI2/ENI2/App.xaml.cs +++ b/ENI-2/ENI2/ENI2/App.xaml.cs @@ -81,6 +81,7 @@ namespace ENI2 // Preload validation fields List vFields = bsmd.database.ValidationRule.ValidationFields; RuleEngine.RegisterLocodeChecker(Util.GlobalStructures.IsValidLocode); + RuleEngine.RegisterPortAreaChecker(LocalizedLookup.PortAreaExists); // Connect to locking service (if enabled) try diff --git a/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs b/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs index 271b1613..eb92f5e0 100644 --- a/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs @@ -425,7 +425,7 @@ namespace ENI2.DetailViewControls if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0); if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1); if (!reader.IsDBNull(2)) crew.CrewMemberGender = GlobalStructures.ParseGender(reader.GetString(2)); - if (!reader.IsDBNull(3)) crew.CrewMemberNationality = reader.GetString(3).Substring(0, 2); + if (!reader.IsDBNull(3)) crew.CrewMemberNationality = reader.GetString(3).Substring(0, 2).ToUpper(); if (!reader.IsDBNull(4)) crew.CrewMemberDuty = reader.GetString(4); if (!reader.IsDBNull(5)) crew.CrewMemberPlaceOfBirth = reader.GetString(5); if (!reader.IsDBNull(6)) @@ -498,7 +498,7 @@ namespace ENI2.DetailViewControls if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetString(0); if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetString(1); if (!reader.IsDBNull(2)) pas.PassengerGender = GlobalStructures.ParseGender(reader.GetString(2)); - if (!reader.IsDBNull(3)) pas.PassengerNationality = reader.GetString(3).Substring(0, 2); + if (!reader.IsDBNull(3)) pas.PassengerNationality = reader.GetString(3).Substring(0, 2).ToUpper(); if (!reader.IsDBNull(4)) pas.PassengerPortOfEmbarkation = reader.GetString(4); if (LocodeDB.PortNameFromLocode(pas.PassengerPortOfEmbarkation) == null) pas.PassengerPortOfEmbarkation = null; diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index f5c75fb4..5f1fb549 100644 --- a/ENI-2/ENI2/ENI2/ENI2.csproj +++ b/ENI-2/ENI2/ENI2/ENI2.csproj @@ -35,7 +35,7 @@ 3.5.1.0 true publish.html - 0 + 1 3.9.10.%2a false true diff --git a/ENI-2/ENI2/ENI2/LocalizedLookup.cs b/ENI-2/ENI2/ENI2/LocalizedLookup.cs index bf031024..69313934 100644 --- a/ENI-2/ENI2/ENI2/LocalizedLookup.cs +++ b/ENI-2/ENI2/ENI2/LocalizedLookup.cs @@ -62,6 +62,14 @@ namespace ENI2 return result; } + public static bool PortAreaExists(string locode, string portArea) + { + string query = string.Format("SELECT COUNT(*) FROM INFO_PortArea WHERE Locode = '{0}' AND Code = '{1}'", locode, portArea); + SQLiteCommand cmd = new SQLiteCommand(query, _con); + long numResults = (long) cmd.ExecuteScalar(); + return (numResults > 0); + } + public static Dictionary getNationalities() { Dictionary result = new Dictionary(); diff --git a/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs b/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs index 04581efb..2ec9438e 100644 --- a/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs +++ b/ENI-2/ENI2/ENI2/Util/GlobalStructures.cs @@ -210,6 +210,6 @@ namespace ENI2.Util return !LocodeDB.PortNameFromLocode(locode).IsNullOrEmpty(); } } - + } } diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 00e0a699c1ac0a9c5ebc8ebc7d1adb4cdec2d05d..ae7317bb9bdee06409251d745d837418fe200add 100644 GIT binary patch delta 24633 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 bN~lsS4atA|=>Hjtg?^2tLF|kASMvV=Js#yr delta 24565 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 Of^Nk#AUi?+v+_Sxj*MXd diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs index b5910c2c..959f44e1 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs @@ -309,7 +309,10 @@ namespace bsmd.ExcelReadService } if (val.Length == 2) + { this.Conf.ConfirmText(lookup, val, ReadState.OK); + val = val.ToUpper(); + } } return val; } diff --git a/nsw/Source/bsmd.database/INFO.cs b/nsw/Source/bsmd.database/INFO.cs index 74c69b62..694e2de7 100644 --- a/nsw/Source/bsmd.database/INFO.cs +++ b/nsw/Source/bsmd.database/INFO.cs @@ -190,7 +190,25 @@ namespace bsmd.database return result; } - #endregion + #endregion + + #region Validation + + public override void Validate(List errors, List violations) + { + if ((PortArea.Length >= 2) && (PortArea.Length <= 4)) + { + if ((RuleEngine.PortAreaChecker != null) && (this.MessageCore != null)) + if (!RuleEngine.PortAreaChecker(this.MessageCore.PoC, this.PortArea)) + errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "PortArea", this.PortArea, "INFO", "", this.Tablename)); + } + else + { + errors.Add(RuleEngine.CreateError(ValidationCode.PORTAREA, "PortArea", this.PortArea, "INFO", "", this.Tablename)); + } + } + + #endregion } } \ No newline at end of file diff --git a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs index 4ff08700..9b46e39a 100644 --- a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs @@ -72,7 +72,7 @@ namespace bsmd.database //[Validation(ValidationCode.LOCODE)] //[ENI2Validation] [MaxLength(5)] - public string PortFacilityGISICodeLocode { get; set; } + public string PortFacilityGISISCodeLocode { get; set; } public string Identifier { get; set; } @@ -96,7 +96,7 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P7", this.PortFacilityShipSecurityLevel); scmd.Parameters.AddWithNullableValue("@P8", this.PortFacilitySecurityMattersToReport); scmd.Parameters.AddWithNullableValue("@P9", this.PortFacilityGISISCode); - scmd.Parameters.AddWithNullableValue("@P10", this.PortFacilityGISICodeLocode); + scmd.Parameters.AddWithNullableValue("@P10", this.PortFacilityGISISCodeLocode); scmd.Parameters.AddWithNullableValue("@P11", this.Identifier); if (this.IsNew) @@ -105,7 +105,7 @@ namespace bsmd.database scmd.Parameters.AddWithValue("@ID", this.Id); scmd.CommandText = string.Format("INSERT INTO {0} (Id, SEC_Id, PortFacilityPortName, PortFacilityPortCountry, " + "PortFacilityPortLoCode, PortFacilityDateOfArrival, PortFacilityDateOfDeparture, PortFacilityShipSecurityLevel, " + - "PortFacilitySecurityMattersToReport, PortFacilityGISISCode, PortFacilityGISICodeLoCode, Identifier) VALUES " + + "PortFacilitySecurityMattersToReport, PortFacilityGISISCode, PortFacilityGISISCodeLoCode, Identifier) VALUES " + "( @ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11)", this.Tablename); } else @@ -114,7 +114,7 @@ namespace bsmd.database scmd.CommandText = string.Format("UPDATE {0} SET PortFacilityPortName = @P2, PortFacilityPortCountry = @P3, " + "PortFacilityPortLoCode = @P4, PortFacilityDateOfArrival = @P5, PortFacilityDateOfDeparture = @P6," + "PortFacilityShipSecurityLevel = @P7, PortFacilitySecurityMattersToReport = @P8, PortFacilityGISISCode = @P9, " + - "PortFacilityGISICodeLoCode = @P10, Identifier = @P11 WHERE Id = @ID", this.Tablename); + "PortFacilityGISISCodeLoCode = @P10, Identifier = @P11 WHERE Id = @ID", this.Tablename); } } @@ -122,7 +122,7 @@ namespace bsmd.database { string query = string.Format("SELECT Id, PortFacilityPortName, PortFacilityPortCountry, PortFacilityPortLoCode, " + "PortFacilityDateOfArrival, PortFacilityDateOfDeparture, PortFacilityShipSecurityLevel, PortFacilitySecurityMattersToReport, " + - "PortFacilityGISISCode, PortFacilityGISICodeLoCode, Identifier FROM {0} ", this.Tablename); + "PortFacilityGISISCode, PortFacilityGISISCodeLoCode, Identifier FROM {0} ", this.Tablename); switch (filter) { @@ -158,7 +158,7 @@ namespace bsmd.database if (!reader.IsDBNull(6)) ltpfc.PortFacilityShipSecurityLevel = reader.GetByte(6); if (!reader.IsDBNull(7)) ltpfc.PortFacilitySecurityMattersToReport = reader.GetString(7); if (!reader.IsDBNull(8)) ltpfc.PortFacilityGISISCode = reader.GetString(8); - if (!reader.IsDBNull(9)) ltpfc.PortFacilityGISICodeLocode = reader.GetString(9); + if (!reader.IsDBNull(9)) ltpfc.PortFacilityGISISCodeLocode = reader.GetString(9); if (!reader.IsDBNull(10)) ltpfc.Identifier = reader.GetString(10); result.Add(ltpfc); } diff --git a/nsw/Source/bsmd.database/RuleEngine.cs b/nsw/Source/bsmd.database/RuleEngine.cs index 703229d9..f1a51966 100644 --- a/nsw/Source/bsmd.database/RuleEngine.cs +++ b/nsw/Source/bsmd.database/RuleEngine.cs @@ -91,7 +91,8 @@ namespace bsmd.database "DEWIS", "DE003", "DEWOL", - "DEWYK" + "DEWYK", + "DEMAG" }; #endregion @@ -104,11 +105,13 @@ namespace bsmd.database }; public delegate bool LocodeValidHandler(string locode, LocodeMode mode); + public delegate bool PortAreaValidHandler(string locode, string portArea); private static ILog log = LogManager.GetLogger(typeof(RuleEngine)); private static Dictionary errorTextList = null; private static Dictionary violationTextList = null; private static LocodeValidHandler _locodeChecker = null; + private static PortAreaValidHandler _portAreaChecker = null; private Dictionary> errorDict = new Dictionary>(); private Dictionary> violationDict = new Dictionary>(); @@ -124,9 +127,12 @@ namespace bsmd.database public Dictionary> ErrorDict { get { return this.errorDict; } } public Dictionary> ViolationDict { get { return this.violationDict; } } + public static PortAreaValidHandler PortAreaChecker { get { return _portAreaChecker; } } + #region public static property validation public static void RegisterLocodeChecker(LocodeValidHandler handler) { _locodeChecker = handler; } + public static void RegisterPortAreaChecker(PortAreaValidHandler handler) { _portAreaChecker = handler; } /// /// Test function checks decorated properties on an entity for errors (only errors, violations cannot @@ -348,13 +354,7 @@ namespace bsmd.database case ValidationCode.NOT_NULL_MAX_LEN: if ((value.Length > maxlen) || (value.Length == 0)) errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename)); - break; - case ValidationCode.PORTAREA: - { - if ((value.Length < 2) || (value.Length > 4)) - errors.Add(RuleEngine.CreateError(validationCode, property.Name, value, entity.Title, identifier, entity.Tablename)); - break; - } + break; case ValidationCode.FRZ: { Regex rgx = new Regex(@"^[A-Z, a-z,0-9]{4,7}$"); diff --git a/nsw/Source/misc/db.sqlite b/nsw/Source/misc/db.sqlite index 4c7511d1ba62150e02208afd1439626c8f2347b7..968ec25814f495f7865116f739db72ea462352a0 100644 GIT binary patch delta 998 zcmWmASx}8(0D$3hPMv={Wh+_g*s?_EE3y|^vXfBO${La_oUE1QJC=~GleJ{Y+Cu(c z*2*%*r5iJuF$`lyZp^qW!|URid9UC6`cfqyMWOcMlVKC=#WfkFQTEn-LJGSS4k`Sk z@R!0Vg(8J2g(ihAg&~DYiU27BrD!8XTPfN}(O!xUQUpm6EJa5tLZs*T7~8APdWCj-mH*r=#C!fiCzdtZ}dT5 z^g{&tV*nyC5Q8unQ4okm42EDRVlfQEF#;no3ZpRwafruQj6(v(V*(~(5)v^PQ!o|N zFdZ{66SFWINtlCV%*8y+M+#E001L4Qi?IYtk%n|+U>TNU1y*7eRwEN@uoml(h4skB z25iJ8Y{nMk;Q!lg*bWbJu>(7?3%jugdy$8H6ks3r;{Xmq!iz&Vj3YRTLL9?!oInvy z;uKEf49=n$K9t}b&f@|u;u0>S6lJ)Aa$LnVT*nP7E2P2`sKwZ9u552*vbQ+NT=$>FG6 z?Tco}NbEUcBTwz9w(PY#aC5FdHF=CBi{kQ&J zuhEP2jruHokRG7@)ZS^gv_o2^mZABHxtxYoUhn=~VB~mn!=f<&0}+Ekh{a$G!B7mtaE!o6jKXM) z!C1sWFb?q;j|rHFNtlcTOu^zGcgOZF$Z%o5A(4A3z3dRSd0uT z!BQ;4a;!imR$>)aBMWP=7VEGc8<35S*o4j4g01-XXdAX;2X-PCyO4+7*n_>;hkO)Z zKMvp^3Q>eZIE*7Wieoqq4~kKOQk=j^oPxrO(PFSFCxmZ3#Xucym|h39yImw1KOc!Rfihjw(}Jv#9LA1zPUr;=}f0nkKa AuK)l5