diff --git a/ENI2/DetailViewControls/WasteDetailControl.xaml b/ENI2/DetailViewControls/WasteDetailControl.xaml index 801a9a0b..bd8cbb7a 100644 --- a/ENI2/DetailViewControls/WasteDetailControl.xaml +++ b/ENI2/DetailViewControls/WasteDetailControl.xaml @@ -145,8 +145,8 @@ - - + + diff --git a/ENI2/DetailViewControls/WasteDetailControl.xaml.cs b/ENI2/DetailViewControls/WasteDetailControl.xaml.cs index 7d1e1890..2850e023 100644 --- a/ENI2/DetailViewControls/WasteDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/WasteDetailControl.xaml.cs @@ -170,6 +170,12 @@ namespace ENI2.DetailViewControls this.dataGridWasteReceived.DeleteRequested += DataGridWasteReceived_DeleteRequested; this.dataGridWasteReceived.CreateRequested += DataGridWasteReceived_CreateRequested; + if(this._wasRcptMessage.Elements.Count > 0) + { + this.dataGridWasteReceipt.SelectedItem = this._wasRcptMessage.Elements[0]; + this.dataGridWasteReceipt_SelectionChanged(null, null); + } + #endregion } @@ -181,7 +187,8 @@ namespace ENI2.DetailViewControls EditWasteReceiptDialog epd = new EditWasteReceiptDialog(); epd.WAS_RCPT = new WAS_RCPT(); epd.WAS_RCPT.MessageHeader = _wasRcptMessage; - epd.WAS_RCPT.Identifier = WAS_RCPT.GetNewIdentifier(_wasRcptMessage.Elements); + epd.WAS_RCPT.Identifier = WAS_RCPT.GetNewIdentifier(_wasRcptMessage.Elements); + epd.WAS_RCPT.AddMissingWasteReceived(); epd.AddClicked += () => { @@ -192,6 +199,7 @@ namespace ENI2.DetailViewControls epd.WAS_RCPT = new WAS_RCPT(); epd.WAS_RCPT.MessageHeader = _wasRcptMessage; epd.WAS_RCPT.Identifier = WAS_RCPT.GetNewIdentifier(_wasRcptMessage.Elements); + epd.WAS_RCPT.AddMissingWasteReceived(); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); }; @@ -200,9 +208,10 @@ namespace ENI2.DetailViewControls if (!this._wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) _wasRcptMessage.Elements.Add(epd.WAS_RCPT); this.dataGridWasteReceipt.Items.Refresh(); + this.dataGridWasteReceipt.SelectedItem = epd.WAS_RCPT; this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); - this.dataGridWasteReceived.ItemsSource = null; - this._selectedWAS_RCPT = null; + this.dataGridWasteReceived.ItemsSource = null; + dataGridWasteReceipt_SelectionChanged(this, null); } } @@ -212,6 +221,7 @@ namespace ENI2.DetailViewControls { // are you sure dialog is in base class _wasRcptMessage.Elements.Remove(wasRCPT); + wasRCPT.DeleteElements(); DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(wasRCPT); DatabaseEntity.ResetIdentifiers(new List(_wasRcptMessage.Elements)); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); @@ -235,6 +245,7 @@ namespace ENI2.DetailViewControls epd.WAS_RCPT = new WAS_RCPT(); epd.WAS_RCPT.Identifier = WAS_RCPT.GetNewIdentifier(_wasRcptMessage.Elements); epd.WAS_RCPT.MessageHeader = _wasRcptMessage; + epd.WAS_RCPT.AddMissingWasteReceived(); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); }; @@ -242,9 +253,11 @@ namespace ENI2.DetailViewControls { if (!_wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) _wasRcptMessage.Elements.Add(epd.WAS_RCPT); - this.dataGridWasteReceipt.Items.Refresh(); - this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); } + this.dataGridWasteReceipt.SelectedItem = epd.WAS_RCPT; + this.dataGridWasteReceipt.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); + dataGridWasteReceipt_SelectionChanged(this, null); } private void DataGridWasteReceipt_AddingNewItem(object sender, AddingNewItemEventArgs e) @@ -335,10 +348,10 @@ namespace ENI2.DetailViewControls { if (!_selectedWAS_RCPT.WasteReceived.Any(wr => wr.WasteCode == ewrd.WasteReceived.WasteCode)) { - _selectedWAS_RCPT.WasteReceived.Add(ewrd.WasteReceived); - this.dataGridWasteReceived.Items.Refresh(); - this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); + _selectedWAS_RCPT.WasteReceived.Add(ewrd.WasteReceived); } + this.dataGridWasteReceived.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); } } diff --git a/ENI2/ENI2.csproj b/ENI2/ENI2.csproj index 96e3f7fe..0490e0b8 100644 --- a/ENI2/ENI2.csproj +++ b/ENI2/ENI2.csproj @@ -36,8 +36,8 @@ 5.4.0.0 true publish.html - 0 - 7.0.1.0 + 3 + 7.0.2.3 false true true diff --git a/ENI2/EditControls/EditWasteReceiptDialog.xaml b/ENI2/EditControls/EditWasteReceiptDialog.xaml index c44e7399..9a5e8ec3 100644 --- a/ENI2/EditControls/EditWasteReceiptDialog.xaml +++ b/ENI2/EditControls/EditWasteReceiptDialog.xaml @@ -17,7 +17,9 @@ - + + + @@ -39,5 +41,7 @@ + + diff --git a/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs b/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs index efe1e33c..b0c994ce 100644 --- a/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs +++ b/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs @@ -52,5 +52,10 @@ namespace ENI2.EditControls this.CopyValuesToEntity(); } + + // private void buttonAddEntries_Click(object sender, RoutedEventArgs e) + // { + // this.WAS_RCPT.AddMissingWasteReceived(); + // } } } diff --git a/ENI2/Excel/ExcelReader.cs b/ENI2/Excel/ExcelReader.cs index 5828924b..81d065f0 100644 --- a/ENI2/Excel/ExcelReader.cs +++ b/ENI2/Excel/ExcelReader.cs @@ -77,8 +77,11 @@ namespace ENI2.Excel { val = val.ToUpper(); string portName = LocodeDB.PortNameFromLocode(val); - if(portName.IsNullOrEmpty()) - _log.WarnFormat("unknown Locode {0}", val); + if (portName.IsNullOrEmpty()) + { + _log.WarnFormat("unknown Locode {0}", val); + val = ""; + } } return val; } diff --git a/ENI2/Excel/ExcelWriter.cs b/ENI2/Excel/ExcelWriter.cs index 65756ece..580074c5 100644 --- a/ENI2/Excel/ExcelWriter.cs +++ b/ENI2/Excel/ExcelWriter.cs @@ -1379,7 +1379,7 @@ namespace ENI2.Excel { if(v != null) { - _nameDict[lookupName].RefersToRange.Value = ((DateTime) v).ToOADate(); // Test this I dont believe it + _nameDict[lookupName].RefersToRange.Value = ((DateTime) v).ToLocalTime().ToOADate(); } } diff --git a/ENI2/Report/ReportDocument.cs b/ENI2/Report/ReportDocument.cs index 12500578..9a284392 100644 --- a/ENI2/Report/ReportDocument.cs +++ b/ENI2/Report/ReportDocument.cs @@ -380,7 +380,8 @@ namespace ENI2.Report case Message.NotificationClass.TOWA: case Message.NotificationClass.TOWD: case Message.NotificationClass.HAZA when (message.Elements[0] is HAZ haz) && ((haz.IMDGPositions.Count > 0) || (haz.IBCPositions.Count > 0) || (haz.IGCPositions.Count > 0) || (haz.IMSBCPositions.Count > 0) || (haz.MARPOLPositions.Count > 0)): - { + case Message.NotificationClass.HAZD when (message.Elements[0] is HAZ hazd) && ((hazd.IMDGPositions.Count > 0) || (hazd.IBCPositions.Count > 0) || (hazd.IGCPositions.Count > 0) || (hazd.IMSBCPositions.Count > 0) || (hazd.MARPOLPositions.Count > 0)): + { // Landscape if not set if (_lastOrientation == Orientation.Portrait) { @@ -434,6 +435,9 @@ namespace ENI2.Report case Message.NotificationClass.HAZA when (message.Elements[0] is HAZ haz) && ((haz.IMDGPositions.Count > 0) || (haz.IBCPositions.Count > 0) || (haz.IGCPositions.Count > 0) || (haz.IMSBCPositions.Count > 0) || (haz.MARPOLPositions.Count > 0)): CreateHAZPage(document, haz); return; + case Message.NotificationClass.HAZD when (message.Elements[0] is HAZ haz) && ((haz.IMDGPositions.Count > 0) || (haz.IBCPositions.Count > 0) || (haz.IGCPositions.Count > 0) || (haz.IMSBCPositions.Count > 0) || (haz.MARPOLPositions.Count > 0)): + CreateHAZPage(document, haz); + return; case Message.NotificationClass.WAS: CreateWASTable(document, message); return; @@ -1096,63 +1100,58 @@ namespace ENI2.Report Table table = AddGrayTable(document); - table.AddColumn(290); - table.AddColumn(200); + _ = table.AddColumn(290); + _ = table.AddColumn(200); Row row = table.AddRow(); - row.Cells[0].AddParagraph("Valid exemption?"); - row.Cells[1].AddParagraph("Confirmation of correctness"); - row = table.AddRow(); - row.Cells[0].AddParagraph(was.WasteDisposalValidExemption ?? false ? "Yes" : "No"); - row.Cells[1].AddParagraph(was.ConfirmationOfCorrectness ?? false ? "Yes" : "No"); + _ = row.Cells[0].AddParagraph("Last port where waste or cargo residues were discharged"); + _ = row.Cells[1].AddParagraph(LocodeDB.PortNameFromLocode(was.LastWasteDisposalPort) ?? ""); + + _ = row = table.AddRow(); + _ = row.Cells[0].AddParagraph("Date of last disposal"); + if (was.LastWasteDisposalDate.HasValue) + row.Cells[1].AddParagraph(was.LastWasteDisposalDate?.ToShortDateString()); row = table.AddRow(); - row.Cells[0].AddParagraph("Last port where waste or cargo residues were discharged"); - row.Cells[1].AddParagraph("Date of last disposal"); - row = table.AddRow(); - row.Cells[0].AddParagraph(LocodeDB.PortNameFromLocode(was.LastWasteDisposalPort) ?? ""); - if(was.LastWasteDisposalDate.HasValue) - row.Cells[1].AddParagraph(was.LastWasteDisposalDate?.ToShortDateString()); - row = table.AddRow(); - row.Cells[0].AddParagraph("Name of waste disposal service provider"); - row.Cells[1].AddParagraph("Waste disposal order (all, some, none)"); - row = table.AddRow(); + _ = row.Cells[0].AddParagraph("Name of waste disposal service provider"); for (int i = 0; i < was.WasteDisposalServiceProvider.Count; i++) - row.Cells[0].AddParagraph(((WasteDisposalServiceProvider) was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName); + row.Cells[1].AddParagraph(((WasteDisposalServiceProvider)was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName); + + row = table.AddRow(); + _ = row.Cells[0].AddParagraph("Next waste disposal port"); + _ = row.Cells[1].AddParagraph(LocodeDB.PortNameFromLocode(was.NextWasteDisposalPort) ?? ""); table = document.LastSection.AddTable(); table.Rows.VerticalAlignment = VerticalAlignment.Top; table.Borders.Visible = true; table.Borders.Color = Colors.LightGray; - table.AddColumn(100); - table.AddColumn(65); - table.AddColumn(65); - table.AddColumn(65); - table.AddColumn(65); - table.AddColumn(65); + table.AddColumn(100); + table.AddColumn(65); + table.AddColumn(65); + table.AddColumn(65); + table.AddColumn(65); + table.AddColumn(65); table.AddColumn(65); - row = table.AddRow(); - row.Cells[0].AddParagraph("TYPE"); - row.Cells[1].AddParagraph("Description"); - row.Cells[2].AddParagraph("Amount to be disposed"); - row.Cells[3].AddParagraph("Maximum dedicated storage capacity on board"); - row.Cells[4].AddParagraph("Amount retained on board"); - row.Cells[5].AddParagraph("Port of delivery of remaining waste"); - row.Cells[6].AddParagraph("Estimated waste/cargo residues amount generated between port of call and next port"); + _ = row.Cells[0].AddParagraph("TYPE"); + _ = row.Cells[1].AddParagraph("Description"); + _ = row.Cells[2].AddParagraph("Amount to be disposed"); + _ = row.Cells[3].AddParagraph("Maximum dedicated storage capacity on board"); + _ = row.Cells[4].AddParagraph("Amount retained on board"); + _ = row.Cells[5].AddParagraph("Port of delivery of remaining waste"); + _ = row.Cells[6].AddParagraph("Estimated waste/cargo residues amount generated between port of call and next port"); - for (int i = 0; i < WAS.WasteCodes.Length; i++) { row = table.AddRow(); - row.Cells[0].AddParagraph(string.Format("{0} {1}", WAS.WasteCodes[i], WAS.WasteCodeDescriptions[i])); + _ = row.Cells[0].AddParagraph(string.Format("{0} {1}", WAS.WasteCodes[i], WAS.WasteCodeDescriptions[i])); if(Int32.TryParse(WAS.WasteCodes[i], out int wasteCode)) GetWasteForIndex(wasteCode, was, row); } - + } private static void GetWasteForIndex(int index, WAS was, Row row) @@ -1161,13 +1160,13 @@ namespace ENI2.Report { if (!waste.WasteType.HasValue) continue; // kaputt! if (waste.WasteType.Value == index) - { - row.Cells[1].AddParagraph(waste.WasteDescription ?? ""); - row.Cells[2].AddParagraph(waste.WasteDisposalAmount_MTQ.HasValue ? waste.WasteDisposalAmount_MTQ.Value.ToString("N3") : ""); - row.Cells[3].AddParagraph(waste.WasteCapacity_MTQ.HasValue ? waste.WasteCapacity_MTQ.Value.ToString("N3") : ""); - row.Cells[4].AddParagraph(waste.WasteAmountRetained_MTQ.HasValue ? waste.WasteAmountRetained_MTQ.Value.ToString("N3") : ""); - row.Cells[5].AddParagraph(LocodeDB.PortNameFromLocode(waste.WasteDisposalPort) ?? ""); - row.Cells[6].AddParagraph(waste.WasteAmountGeneratedTillNextPort_MTQ.HasValue ? waste.WasteAmountGeneratedTillNextPort_MTQ.Value.ToString("N3") : ""); + { + _ = row.Cells[1].AddParagraph(waste.WasteDescription ?? ""); + _ = row.Cells[2].AddParagraph(waste.WasteDisposalAmount_MTQ.HasValue ? waste.WasteDisposalAmount_MTQ.Value.ToString("N3") : ""); + _ = row.Cells[3].AddParagraph(waste.WasteCapacity_MTQ.HasValue ? waste.WasteCapacity_MTQ.Value.ToString("N3") : ""); + _ = row.Cells[4].AddParagraph(waste.WasteAmountRetained_MTQ.HasValue ? waste.WasteAmountRetained_MTQ.Value.ToString("N3") : ""); + _ = row.Cells[5].AddParagraph(LocodeDB.PortNameFromLocode(waste.WasteDisposalPort) ?? ""); + _ = row.Cells[6].AddParagraph(waste.WasteAmountGeneratedTillNextPort_MTQ.HasValue ? waste.WasteAmountGeneratedTillNextPort_MTQ.Value.ToString("N3") : ""); } } } @@ -1197,10 +1196,10 @@ namespace ENI2.Report row.Cells[1].AddParagraph(was_rpct.PortReceptionFacilityProviderName); row = table.AddRow(); row.Cells[0].AddParagraph("Waste delivery from"); - row.Cells[1].AddParagraph(was_rpct.WasteDeliveryDateFrom.HasValue ? was_rpct.WasteDeliveryDateFrom.ToString() : ""); + row.Cells[1].AddParagraph(was_rpct.WasteDeliveryDateFrom.HasValue ? was_rpct.WasteDeliveryDateFrom.Value.ToLocalTime().ToString() : ""); row = table.AddRow(); row.Cells[0].AddParagraph("Waste delivery to"); - row.Cells[1].AddParagraph(was_rpct.WasteDeliveryDateTo.HasValue ? was_rpct.WasteDeliveryDateTo.ToString() : ""); + row.Cells[1].AddParagraph(was_rpct.WasteDeliveryDateTo.HasValue ? was_rpct.WasteDeliveryDateTo.Value.ToLocalTime().ToString() : ""); row = table.AddRow(); row.Cells[0].AddParagraph("Treatment facility provider"); row.Cells[1].AddParagraph(was_rpct.TreatmentFacilityProviderText); diff --git a/bsmd.ExcelReadService/LocodeDB.cs b/bsmd.ExcelReadService/LocodeDB.cs index e5b18201..c8f40e7a 100644 --- a/bsmd.ExcelReadService/LocodeDB.cs +++ b/bsmd.ExcelReadService/LocodeDB.cs @@ -186,20 +186,29 @@ namespace ENI2.Locode if (locode.IsNullOrEmpty()) return null; if (locode.Length != 5) return null; - string result = null; - string query = string.Format("SELECT LocationName FROM SSN_LOCODES WHERE LocationCode = '{0}'", locode); - - SQLiteCommand cmd = new SQLiteCommand(query, _con); - IDataReader reader = cmd.ExecuteReader(); - while (reader.Read()) + try { - if (!reader.IsDBNull(0)) - result = reader.GetString(0); - break; + + string result = null; + string query = string.Format("SELECT LocationName FROM SSN_LOCODES WHERE LocationCode = '{0}'", locode); + + SQLiteCommand cmd = new SQLiteCommand(query, _con); + IDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) + { + if (!reader.IsDBNull(0)) + result = reader.GetString(0); + break; + } + reader.Close(); + cmd.Dispose(); + return result; + } + catch (Exception ex) + { + _log.WarnFormat("error reading SSN location from locode: {0}", ex.ToString()); + return null; } - reader.Close(); - cmd.Dispose(); - return result; } @@ -212,21 +221,28 @@ namespace ENI2.Locode { if (locode.IsNullOrEmpty()) return null; if (locode.Length != 5) return null; - - string result = null; - string query = string.Format("SELECT locodes.name_wo_diacritics FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.city_code = '{0}' AND countries.code = '{1}'", - locode.Substring(2), locode.Substring(0, 2)); - SQLiteCommand cmd = new SQLiteCommand(query, _con); - IDataReader reader = cmd.ExecuteReader(); - while (reader.Read()) + try { - if (!reader.IsDBNull(0)) - result = reader.GetString(0); - break; + string result = null; + string query = string.Format("SELECT locodes.name_wo_diacritics FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.city_code = '{0}' AND countries.code = '{1}'", + locode.Substring(2), locode.Substring(0, 2)); + SQLiteCommand cmd = new SQLiteCommand(query, _con); + IDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) + { + if (!reader.IsDBNull(0)) + result = reader.GetString(0); + break; + } + reader.Close(); + cmd.Dispose(); + return result; + } + catch(Exception ex) + { + _log.WarnFormat("error reading location from locode: {0}", ex.ToString()); + return null; } - reader.Close(); - cmd.Dispose(); - return result; } public static void CloseDB() diff --git a/bsmd.LockingService/bsmd.LockingService.csproj.user b/bsmd.LockingService/bsmd.LockingService.csproj.user index afa33dd1..3517ad61 100644 --- a/bsmd.LockingService/bsmd.LockingService.csproj.user +++ b/bsmd.LockingService/bsmd.LockingService.csproj.user @@ -2,7 +2,7 @@ true - Debug|Any CPU + Release|Any CPU diff --git a/bsmd.database/Properties/AssemblyProductInfo.cs b/bsmd.database/Properties/AssemblyProductInfo.cs index 6c462a7b..510fabfd 100644 --- a/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("schick Informatik")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("7.0.1")] +[assembly: AssemblyInformationalVersion("7.0.2")] [assembly: AssemblyCopyright("Copyright © 2014-2022 schick Informatik")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/bsmd.database/Properties/AssemblyProjectInfo.cs b/bsmd.database/Properties/AssemblyProjectInfo.cs index b1f00991..98fdcad6 100644 --- a/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("7.0.1.*")] +[assembly: AssemblyVersion("7.0.2.*")] diff --git a/bsmd.database/Waste.cs b/bsmd.database/Waste.cs index 6452842e..c810f640 100644 --- a/bsmd.database/Waste.cs +++ b/bsmd.database/Waste.cs @@ -84,7 +84,7 @@ namespace bsmd.database [ENI2Validation] public int? WasteType { get; set; } - [ShowReport] + [ShowReport] [MaxLength(99)] [ENI2Validation] public string WasteDescription { get; set; } diff --git a/bsmd.hisnord/Request.cs b/bsmd.hisnord/Request.cs index 38973dc6..1708119a 100644 --- a/bsmd.hisnord/Request.cs +++ b/bsmd.hisnord/Request.cs @@ -1309,7 +1309,7 @@ namespace bsmd.hisnord for (int j = 0; j < was_rcpt.WasteReceived.Count; j++) { hn_was_rcpt.Items[i].WasteReceived[j] = new was_rcptWasteDeliveryReceiptWasteReceived(); - hn_was_rcpt.Items[i].WasteReceived[j].AmountWasteReceived_MTQ = (decimal) (was_rcpt.WasteReceived[j].AmountWasteReceived_MTQ ?? 0); + hn_was_rcpt.Items[i].WasteReceived[j].AmountWasteReceived_MTQ = decimal.Round((decimal) (was_rcpt.WasteReceived[j].AmountWasteReceived_MTQ ?? 0), 3); hn_was_rcpt.Items[i].WasteReceived[j].WasteType = new was_rcptWasteDeliveryReceiptWasteReceivedWasteType(); hn_was_rcpt.Items[i].WasteReceived[j].WasteType.WasteCode = was_rcpt.WasteReceived[j].WasteCode; if(!was_rcpt.WasteReceived[j].WasteDescription.IsNullOrEmpty())