From 503618a32354fde71e121ead8a5d9ccde4c61b85 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 24 Jan 2022 09:00:51 +0100 Subject: [PATCH] Maske CREWD/PASD getestet und gebugfixt, Validierung angefangen --- ENI2/DetailRootControl.xaml.cs | 8 ++++---- .../BorderPoliceDetailControl.xaml.cs | 13 +++++++++++-- .../DangerousGoodsDetailControl.xaml.cs | 2 ++ ENI2/Excel/ExcelUtil.cs | 2 ++ SQL/Update_6.x_To_7.0.sql | 4 ++++ bsmd.database/DBManager.cs | 6 ++++-- bsmd.database/Message.cs | 2 +- bsmd.database/NOA_NOD.cs | 8 ++++---- bsmd.database/PAS.cs | 2 +- bsmd.database/POBA.cs | 5 +++++ bsmd.database/POBD.cs | 6 ++++++ ...ipActivitiesDuringLastTenPortFacilitiesCalled.cs | 12 ++++++++++++ bsmd.database/ValidationAttribute.cs | 1 + 13 files changed, 57 insertions(+), 14 deletions(-) diff --git a/ENI2/DetailRootControl.xaml.cs b/ENI2/DetailRootControl.xaml.cs index eb06e98d..59be03ad 100644 --- a/ENI2/DetailRootControl.xaml.cs +++ b/ENI2/DetailRootControl.xaml.cs @@ -443,20 +443,20 @@ namespace ENI2 if(App.UserId.HasValue && DBManager.Instance.GetReportingPartyDict().ContainsKey(App.UserId.Value)) { userName = DBManager.Instance.GetReportingPartyDict()[App.UserId.Value].Logon; - } + } message.ChangedBy = string.Format("{0} at {1}", userName, DateTime.Now); message.IsDirty = false; message.UnsentMessageWarningShown = false; message.UnconfirmedMessageWarningShown = false; DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(message); - - message.SaveElements(); + + message.SaveElements(); if(message.MessageNotificationClass == Message.NotificationClass.ATA) { DetailBaseControl currentControl = this.detailView.Children[0] as DetailBaseControl; // ggf. hat sich die Ticketnr geƤndert.. - DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(currentControl.Core); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Save(currentControl.Core); } if(message.MessageNotificationClass == Message.NotificationClass.STAT) diff --git a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs index 38ed2df7..0ae08f4f 100644 --- a/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/BorderPoliceDetailControl.xaml.cs @@ -406,10 +406,11 @@ namespace ENI2.DetailViewControls private void DataGridPassengerListDeparture_CreateRequested() { - EditPASDialog epd = new EditPASDialog + EditPASDialog epd = new EditPASDialog { PAS = new PASD() }; + epd.PAS.IsDeparture = true; epd.PAS.Identifier = PASD.GetNewIdentifier(_pasdMessage.Elements); epd.PAS.MessageHeader = this._pasdMessage; @@ -421,6 +422,7 @@ namespace ENI2.DetailViewControls this.dataGridPassengerList.Items.Refresh(); epd.PAS = new PASD { + IsDeparture = true, MessageHeader = this._pasdMessage, Identifier = PASD.GetNewIdentifier(_pasdMessage.Elements) }; @@ -468,6 +470,7 @@ namespace ENI2.DetailViewControls this.dataGridPassengerList.Items.Refresh(); epd.PAS = new PASD { + IsDeparture = true, Identifier = PASD.GetNewIdentifier(_pasdMessage.Elements), MessageHeader = _pasdMessage }; @@ -586,8 +589,9 @@ namespace ENI2.DetailViewControls { EditCREWDialog ecd = new EditCREWDialog { - CREW = new CREW() + CREW = new CREWD() }; + ecd.CREW.IsDeparture = true; ecd.CREW.Identifier = CREWD.GetNewIdentifier(_crewdMessage.Elements); ecd.CREW.MessageHeader = this._crewdMessage; @@ -599,6 +603,7 @@ namespace ENI2.DetailViewControls this.dataGridCrewListDeparture.Items.Refresh(); ecd.CREW = new CREWD { + IsDeparture = true, MessageHeader = this._crewdMessage, Identifier = CREWD.GetNewIdentifier(_crewdMessage.Elements) }; @@ -646,6 +651,7 @@ namespace ENI2.DetailViewControls this.dataGridCrewListDeparture.Items.Refresh(); ecd.CREW = new CREWD { + IsDeparture = true, Identifier = CREWD.GetNewIdentifier(_crewdMessage.Elements), MessageHeader = _crewdMessage }; @@ -792,6 +798,8 @@ namespace ENI2.DetailViewControls throw new InvalidDataException("Sheet must have at least 10 Columns of data"); } CREWD crew = new CREWD(); + crew.IsDeparture = true; + if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; if (!reader.IsDBNull(0)) crew.CrewMemberLastName = reader.GetString(0); if (!reader.IsDBNull(1)) crew.CrewMemberFirstName = reader.GetString(1); @@ -956,6 +964,7 @@ namespace ENI2.DetailViewControls } PASD pas = new PASD(); + pas.IsDeparture = true; if (reader.IsDBNull(0) && reader.IsDBNull(1)) continue; if (!reader.IsDBNull(0)) pas.PassengerLastName = reader.GetValue(0).ToString(); if (!reader.IsDBNull(1)) pas.PassengerFirstName = reader.GetValue(1).ToString(); diff --git a/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs b/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs index 8fc3e72f..a22d3a9d 100644 --- a/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/DangerousGoodsDetailControl.xaml.cs @@ -70,6 +70,7 @@ namespace ENI2.DetailViewControls this.hazd = new HAZ(); this.hazd.MessageCore = this.Core; this.hazd.MessageHeader = aMessage; + this.hazd.IsDeparture = true; aMessage.Elements.Add(this.hazd); SublistElementChanged(Message.NotificationClass.HAZD); } @@ -96,6 +97,7 @@ namespace ENI2.DetailViewControls haz = new HAZ(); haz.MessageCore = this.Core; haz.MessageHeader = this._hazMessage; + haz.IsDeparture = this.IsDeparture; _hazMessage.Elements.Add(haz); } diff --git a/ENI2/Excel/ExcelUtil.cs b/ENI2/Excel/ExcelUtil.cs index a0bbd2cb..e1ae2ebb 100644 --- a/ENI2/Excel/ExcelUtil.cs +++ b/ENI2/Excel/ExcelUtil.cs @@ -1948,6 +1948,7 @@ namespace ENI2.Excel if (!(crewdMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is CREWD crew)) { crew = new CREWD(); + crew.IsDeparture = true; crew.Identifier = (i + 1).ToString(); crew.MessageHeader = crewdMessage; crewdMessage.Elements.Add(crew); @@ -2054,6 +2055,7 @@ namespace ENI2.Excel if (!(pasMessage.GetSublistElementWithIdentifier((i + 1).ToString()) is PASD pas)) { pas = new PASD(); + pas.IsDeparture = true; pas.Identifier = (i + 1).ToString(); pas.MessageHeader = pasMessage; pasMessage.Elements.Add(pas); diff --git a/SQL/Update_6.x_To_7.0.sql b/SQL/Update_6.x_To_7.0.sql index d639ba61..a9f5e301 100644 --- a/SQL/Update_6.x_To_7.0.sql +++ b/SQL/Update_6.x_To_7.0.sql @@ -109,4 +109,8 @@ ALTER TABLE [dbo].[PAS] ADD [EmergencyCare] NVARCHAR (255) NULL, [EmergencyContactNumber] NVARCHAR (99) NULL; +GO + +INSERT INTO ViolationText(ViolationCode, ViolationText) VALUES (33, 'Value is too large') + GO \ No newline at end of file diff --git a/bsmd.database/DBManager.cs b/bsmd.database/DBManager.cs index 902a5588..9b8ef992 100644 --- a/bsmd.database/DBManager.cs +++ b/bsmd.database/DBManager.cs @@ -859,6 +859,7 @@ namespace bsmd.database { typeof(BRKA), typeof(BRKA).Name }, { typeof(BRKD), typeof(BRKD).Name }, { typeof(CREW), typeof(CREW).Name }, + { typeof(CREWD), typeof(CREWD).Name }, { typeof(HAZ), typeof(HAZ).Name }, { typeof(INFO), typeof(INFO).Name }, { typeof(LADG), typeof(LADG).Name }, @@ -866,6 +867,7 @@ namespace bsmd.database { typeof(NAME), typeof(NAME).Name }, { typeof(NOA_NOD), typeof(NOA_NOD).Name }, { typeof(PAS), typeof(PAS).Name }, + {typeof(PASD), typeof(PASD).Name }, { typeof(POBA), typeof(POBA).Name }, { typeof(POBD), typeof(POBD).Name }, { typeof(PRE72H), typeof(PRE72H).Name }, @@ -922,8 +924,8 @@ namespace bsmd.database case Message.NotificationClass.HAZD: result = new HAZ(); ((HAZ)result).IsDeparture = true; break; case Message.NotificationClass.AGNT: result = new AGNT(); break; case Message.NotificationClass.STO: result = new STO(); break; - case Message.NotificationClass.CREWD: result = new CREWD(); break; - case Message.NotificationClass.PASD: result = new PASD(); break; + case Message.NotificationClass.CREWD: result = new CREWD(); ((CREWD)result).IsDeparture = true; break; + case Message.NotificationClass.PASD: result = new PASD(); ((PASD)result).IsDeparture = true; break; case Message.NotificationClass.WAS_RCPT: result = new WAS_RCPT(); break; default: diff --git a/bsmd.database/Message.cs b/bsmd.database/Message.cs index 34c73de5..a19405e3 100644 --- a/bsmd.database/Message.cs +++ b/bsmd.database/Message.cs @@ -99,7 +99,7 @@ namespace bsmd.database CREWD, PASD, WAS_RCPT - } + } public enum MessageStatus { ACCEPTED, REJECTED } diff --git a/bsmd.database/NOA_NOD.cs b/bsmd.database/NOA_NOD.cs index 5db13314..63adcc6b 100644 --- a/bsmd.database/NOA_NOD.cs +++ b/bsmd.database/NOA_NOD.cs @@ -311,17 +311,17 @@ namespace bsmd.database errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, "ETDFromLastPort missing", null, this.Title, null, this.Tablename)); if((this.LastPort?.Equals("ZZUKN") == true) && this.ETDFromLastPort.HasValue) - errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETDFromLastPort missing", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETDFromLastPort cannot be set if ZZUKN", null, this.Title, null, this.Tablename)); if (this.ETDFromPortOfCall.HasValue && this.ETAToNextPort.HasValue && (this.NextPort?.Equals("ZZUKN") == false) && (this.ETAToNextPort <= ETDFromPortOfCall)) errors.Add(RuleEngine.CreateError(ValidationCode.E122, "ETAToNextPort", null, this.Title, null, this.Tablename)); if ((this.NextPort?.Equals("ZZUKN") == false) && !this.ETAToNextPort.HasValue) - errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, "ETAToNextPort", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, "ETAToNextPort missing", null, this.Title, null, this.Tablename)); if((this.NextPort?.Equals("ZZUKN") == true) && this.ETAToNextPort.HasValue) - errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETAToNextPort", null, this.Title, null, this.Tablename)); + errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETAToNextPort cannot be set if ZZUKN", null, this.Title, null, this.Tablename)); if (this.ETDFromLastPort.HasValue && this.ETAToPortOfCall.HasValue && (this.ETDFromLastPort >= this.ETAToPortOfCall)) errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "ETDFromLastPort", null, this.Title, null, this.Tablename)); @@ -394,5 +394,5 @@ namespace bsmd.database #endregion - } + } } diff --git a/bsmd.database/PAS.cs b/bsmd.database/PAS.cs index 10d515d2..41e3f898 100644 --- a/bsmd.database/PAS.cs +++ b/bsmd.database/PAS.cs @@ -200,7 +200,7 @@ namespace bsmd.database "PassengerPlaceOfBirth, PassengerDateOfBirth, PassengerGender, PassengerNationality, PassengerIdentityDocumentType, " + "PassengerIdentityDocumentId, PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation," + "PassengerInTransit, Identifier, IsDeparture, PassengerIdentityDocumentIssuingState, PassengerIdentityDocumentExpiryDate, " + - "NotificationSchengen, NotificationSchengen, EmergencyCare, EmergencyContactNumber) " + + "NotificationSchengen, NotificationPAX, EmergencyCare, EmergencyContactNumber) " + "VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17, @P18, @P19, @P20, @P21 )", this.Tablename); } diff --git a/bsmd.database/POBA.cs b/bsmd.database/POBA.cs index 4ac9c95d..bf12890b 100644 --- a/bsmd.database/POBA.cs +++ b/bsmd.database/POBA.cs @@ -137,6 +137,11 @@ namespace bsmd.database { if (((TotalCrewMembersOnBoardUponArrival ?? 0) + (TotalPassengersOnBoardUponArrival ?? 0) + (TotalStowawaysOnBoardUponArrival ?? 0)) != (TotalPersonsOnBoardUponArrival ?? 0)) violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "TotalPersonsOnBoardUponArrival", null, this.Title, null, this.Tablename)); + + if((TotalCrewMembersOnBoardUponArrival > 99998) || (TotalPassengersOnBoardUponArrival > 99998) || (TotalStowawaysOnBoardUponArrival > 99998) || (TotalPersonsOnBoardUponArrival > 99998)) + { + violations.Add(RuleEngine.CreateViolation(ValidationCode.VALUE_TOO_LARGE, "POBA", null, this.Title)); + } } #endregion diff --git a/bsmd.database/POBD.cs b/bsmd.database/POBD.cs index f485886f..3ad516ee 100644 --- a/bsmd.database/POBD.cs +++ b/bsmd.database/POBD.cs @@ -135,6 +135,12 @@ namespace bsmd.database { if (((TotalCrewMembersOnBoardUponDeparture ?? 0) + (TotalPassengersOnBoardUponDeparture ?? 0) + (TotalStowawaysOnBoardUponDeparture ?? 0)) != (TotalPersonsOnBoardUponDeparture ?? 0)) violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "TotalPersonsOnBoardUponDeparture", null, this.Title, null, this.Tablename)); + + if ((TotalCrewMembersOnBoardUponDeparture > 99998) || (TotalPassengersOnBoardUponDeparture > 99998) || (TotalStowawaysOnBoardUponDeparture > 99998) || (TotalPersonsOnBoardUponDeparture > 99998)) + { + violations.Add(RuleEngine.CreateViolation(ValidationCode.VALUE_TOO_LARGE, "POBD", null, this.Title)); + } + } #endregion diff --git a/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs b/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs index d37ce255..bfc5faea 100644 --- a/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs +++ b/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs @@ -214,6 +214,18 @@ namespace bsmd.database errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "ShipToShipActivityType", this.ShipToShipActivityTypeCode.ToString(), this.Title, this.Identifier, this.SEC.Tablename)); } + if (this.ShipToShipActivityLocationCoordinatesLatitude.HasValue && + ((this.ShipToShipActivityLocationCoordinatesLatitude.Value > 54600000) || (this.ShipToShipActivityLocationCoordinatesLatitude < -54000000))) + { + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Latitude", null, this.Title, this.Identifier, this.SEC.Tablename)); + } + + if(this.ShipToShipActivityLocationCoordinatesLongitude.HasValue && + ((this.ShipToShipActivityLocationCoordinatesLongitude.Value > 108600000) || (this.ShipToShipActivityLocationCoordinatesLongitude.Value < -108000000))) + { + violations.Add(RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Longitude", null, this.Title, this.Identifier, this.SEC.Tablename)); + } + } #endregion diff --git a/bsmd.database/ValidationAttribute.cs b/bsmd.database/ValidationAttribute.cs index d24c2a1a..0e29ac26 100644 --- a/bsmd.database/ValidationAttribute.cs +++ b/bsmd.database/ValidationAttribute.cs @@ -49,6 +49,7 @@ namespace bsmd.database INVALID_NUMBER_CHARS = 30, OPTIONAL_FLAG_CODE, WORDOVERFLOW, + VALUE_TOO_LARGE, E121 = 121, E122 = 122, E123 = 123,