From 3fb2c519fc1160a9089aa5866878a9bf23e9b886 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 18 Jan 2022 08:46:55 +0100 Subject: [PATCH] Arbeit an ENI2, WAS_RCPT Dialog, Laden, Speichern korrigiert, WIP --- .../WasteDetailControl.xaml | 4 +- .../WasteDetailControl.xaml.cs | 39 ++++++++-- ENI2/EditControls/EditWasteReceiptDialog.xaml | 9 ++- .../EditWasteReceiptDialog.xaml.cs | 41 ++++------- ENI2/Properties/Resources.Designer.cs | 9 +++ ENI2/Properties/Resources.resx | 3 + bsmd.database/DBManager.cs | 34 ++++++++- bsmd.database/TreatmentFacilityProvider.cs | 2 +- bsmd.database/WAS_RCPT.cs | 71 ++++++++++++++++++- bsmd.database/WasteReceived.cs | 5 ++ bsmd.database/XtraSendLogic.cs | 3 +- 11 files changed, 175 insertions(+), 45 deletions(-) diff --git a/ENI2/DetailViewControls/WasteDetailControl.xaml b/ENI2/DetailViewControls/WasteDetailControl.xaml index 35c6fbb9..33ea8a1a 100644 --- a/ENI2/DetailViewControls/WasteDetailControl.xaml +++ b/ENI2/DetailViewControls/WasteDetailControl.xaml @@ -145,7 +145,7 @@ - + - + diff --git a/ENI2/DetailViewControls/WasteDetailControl.xaml.cs b/ENI2/DetailViewControls/WasteDetailControl.xaml.cs index 02050ddc..dccc78c1 100644 --- a/ENI2/DetailViewControls/WasteDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/WasteDetailControl.xaml.cs @@ -162,7 +162,7 @@ namespace ENI2.DetailViewControls epd.CopyValuesToEntity(); if (!this._wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) this._wasRcptMessage.Elements.Add(epd.WAS_RCPT); - this.dataGridWaste.Items.Refresh(); + this.dataGridWasteReceipt.Items.Refresh(); epd.WAS_RCPT = new WAS_RCPT(); epd.WAS_RCPT.MessageHeader = _wasRcptMessage; epd.WAS_RCPT.Identifier = WAS_RCPT.GetNewIdentifier(_wasRcptMessage.Elements); @@ -173,24 +173,53 @@ namespace ENI2.DetailViewControls { if (!this._wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) _wasRcptMessage.Elements.Add(epd.WAS_RCPT); - this.dataGridWaste.Items.Refresh(); + this.dataGridWasteReceipt.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); } } private void DataGridWasteReceipt_DeleteRequested(DatabaseEntity obj) { - throw new NotImplementedException(); + if (obj is WAS_RCPT wasRCPT) + { + // are you sure dialog is in base class + _wasRcptMessage.Elements.Remove(wasRCPT); + DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(wasRCPT); + DatabaseEntity.ResetIdentifiers(new List(_wasRcptMessage.Elements)); + this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); + this.dataGridWasteReceipt.Items.Refresh(); + } } private void DataGridWasteReceipt_EditRequested(DatabaseEntity obj) { - throw new NotImplementedException(); + EditWasteReceiptDialog epd = new EditWasteReceiptDialog(); + epd.WAS_RCPT = obj as WAS_RCPT; + + epd.AddClicked += () => + { + epd.CopyValuesToEntity(); + if (!_wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) + _wasRcptMessage.Elements.Add(epd.WAS_RCPT); + this.dataGridWasteReceipt.Items.Refresh(); + epd.WAS_RCPT = new WAS_RCPT(); + epd.WAS_RCPT.Identifier = WAS_RCPT.GetNewIdentifier(_wasRcptMessage.Elements); + epd.WAS_RCPT.MessageHeader = _wasRcptMessage; + this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); + }; + + if (epd.ShowDialog() ?? false) + { + if (!_wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) + _wasRcptMessage.Elements.Add(epd.WAS_RCPT); + this.dataGridWasteReceipt.Items.Refresh(); + this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); + } } private void DataGridWasteReceipt_AddingNewItem(object sender, AddingNewItemEventArgs e) { - throw new NotImplementedException(); + this.DataGridWasteReceipt_CreateRequested(); } #endregion diff --git a/ENI2/EditControls/EditWasteReceiptDialog.xaml b/ENI2/EditControls/EditWasteReceiptDialog.xaml index 307c5a4d..2581dae9 100644 --- a/ENI2/EditControls/EditWasteReceiptDialog.xaml +++ b/ENI2/EditControls/EditWasteReceiptDialog.xaml @@ -22,19 +22,22 @@ + diff --git a/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs b/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs index 5417176d..efe1e33c 100644 --- a/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs +++ b/ENI2/EditControls/EditWasteReceiptDialog.xaml.cs @@ -26,22 +26,12 @@ namespace ENI2.EditControls private void EditWasteReceiptDialog_Loaded(object sender, RoutedEventArgs e) { - /* - Dictionary codeDict = new Dictionary(); - for (int i = 0; i < WAS.RequiredCodes.Length; i++) - { - codeDict[WAS.RequiredCodes[i]] = string.Format("{0} - {1}", WAS.RequiredCodes[i], WAS.RequiredTypes[i]); - } - this.comboBoxWasteCode.ItemsSource = codeDict; - this.comboBoxWasteCode.SelectedValue = this.Waste.WasteType; - this.textBoxDescription.Text = this.Waste.WasteDescription; - this.doubleUpDownAmountWasteDischargedLastPort.Value = this.Waste.WasteDisposedAtLastPort_MTQ; - this.doubleUpDownAmountDisposed.Value = this.Waste.WasteDisposalAmount_MTQ; - this.doubleUpDownAmountGeneratedTilNextPort.Value = this.Waste.WasteAmountGeneratedTillNextPort_MTQ; - this.doubleUpDownAmountRetained.Value = this.Waste.WasteAmountRetained_MTQ; - this.doubleUpDownMaxCapacity.Value = this.Waste.WasteCapacity_MTQ; - this.locodePortOfDeliveryRemainingWaste.LocodeValue = this.Waste.WasteDisposalPort; - */ + this.textIdentificationNumber.Text = this.WAS_RCPT.IdentificationNumber; + this.textBoxPortReceptionFacilityName.Text = this.WAS_RCPT.PortReceptionFacilityName; + this.textBoxPortReceptionFacilityProviderName.Text = this.WAS_RCPT.PortReceptionFacilityProviderName; + this.textBoxTreatmentFacilityProvider.Text = this.WAS_RCPT.TreatmentFacilityProviderText; + this.dateTimePickerWasteDeliveryDateFrom.Value = this.WAS_RCPT.WasteDeliveryDateFrom?.ToLocalTime(); + this.dateTimePickerWasteDeliveryDateTo.Value = this.WAS_RCPT.WasteDeliveryDateTo?.ToLocalTime(); OKClicked += EditWasteReceiptDialog_OKClicked; this.AddVisible = true; @@ -49,19 +39,12 @@ namespace ENI2.EditControls public void CopyValuesToEntity() { // copy back - /* - if (this.comboBoxWasteCode.SelectedValue != null) - this.Waste.WasteType = (int)this.comboBoxWasteCode.SelectedValue; - else - this.Waste.WasteType = null; - this.Waste.WasteDescription = this.textBoxDescription.Text?.Trim(); - this.Waste.WasteDisposedAtLastPort_MTQ = this.doubleUpDownAmountWasteDischargedLastPort.Value; - this.Waste.WasteDisposalAmount_MTQ = this.doubleUpDownAmountDisposed.Value; - this.Waste.WasteAmountGeneratedTillNextPort_MTQ = this.doubleUpDownAmountGeneratedTilNextPort.Value; - this.Waste.WasteAmountRetained_MTQ = this.doubleUpDownAmountRetained.Value; - this.Waste.WasteCapacity_MTQ = this.doubleUpDownMaxCapacity.Value; - this.Waste.WasteDisposalPort = this.locodePortOfDeliveryRemainingWaste.LocodeValue; - */ + this.WAS_RCPT.IdentificationNumber = this.textIdentificationNumber.Text?.Trim(); + this.WAS_RCPT.PortReceptionFacilityName = this.textBoxPortReceptionFacilityName.Text?.Trim(); + this.WAS_RCPT.PortReceptionFacilityProviderName = this.textBoxPortReceptionFacilityProviderName.Text?.Trim(); + this.WAS_RCPT.TreatmentFacilityProviderText = this.textBoxTreatmentFacilityProvider.Text?.Trim(); + this.WAS_RCPT.WasteDeliveryDateFrom = this.dateTimePickerWasteDeliveryDateFrom.Value?.ToUniversalTime(); + this.WAS_RCPT.WasteDeliveryDateTo = this.dateTimePickerWasteDeliveryDateTo.Value?.ToUniversalTime(); } private void EditWasteReceiptDialog_OKClicked() diff --git a/ENI2/Properties/Resources.Designer.cs b/ENI2/Properties/Resources.Designer.cs index 5da4564b..55ab50bb 100644 --- a/ENI2/Properties/Resources.Designer.cs +++ b/ENI2/Properties/Resources.Designer.cs @@ -4666,6 +4666,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Treatment facility provider (comma separated). + /// + public static string textTreatmentFacilityProviderDisplay { + get { + return ResourceManager.GetString("textTreatmentFacilityProviderDisplay", resourceCulture); + } + } + /// /// Looks up a localized string similar to Treatment facility provider name. /// diff --git a/ENI2/Properties/Resources.resx b/ENI2/Properties/Resources.resx index 96162c7e..d45f83ed 100644 --- a/ENI2/Properties/Resources.resx +++ b/ENI2/Properties/Resources.resx @@ -1783,4 +1783,7 @@ Waste receipt + + Treatment facility provider (comma separated) + \ No newline at end of file diff --git a/bsmd.database/DBManager.cs b/bsmd.database/DBManager.cs index e56f337e..902a5588 100644 --- a/bsmd.database/DBManager.cs +++ b/bsmd.database/DBManager.cs @@ -878,7 +878,8 @@ namespace bsmd.database { typeof(TOWA), typeof(TOWA).Name }, { typeof(TOWD), typeof(TOWD).Name }, { typeof(WAS), typeof(WAS).Name }, - { typeof(BPOL), typeof(BPOL).Name } + { typeof(BPOL), typeof(BPOL).Name }, + { typeof(WAS_RCPT), typeof(WAS_RCPT).Name } }; } @@ -923,6 +924,7 @@ namespace bsmd.database 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.WAS_RCPT: result = new WAS_RCPT(); break; default: break; // VISIT, TRANSIT @@ -1167,6 +1169,36 @@ namespace bsmd.database #endregion + #region WAS_RCPT + + if (databaseEntity.GetType().IsAssignableFrom(typeof(WAS_RCPT))) + { + WAS_RCPT was_rcpt = databaseEntity as WAS_RCPT; + + TreatmentFacilityProvider tfp = new TreatmentFacilityProvider(); + tfp.PrepareLoadCommand(cmd, Message.LoadFilter.WASRCPT_ID, was_rcpt.Id); + SqlDataReader reader = this.PerformCommand(cmd); + List tfps = tfp.LoadList(reader); + foreach (TreatmentFacilityProvider aTfp in tfps) + { + was_rcpt.TreatmentFacilityProvider.Add(aTfp); + aTfp.WAS_RCPT = was_rcpt; + this.LoadDependingLists(aTfp); + } + + WasteReceived wasteReceived = new WasteReceived(); + wasteReceived.PrepareLoadCommand(cmd, Message.LoadFilter.WASRCPT_ID, was_rcpt.Id); + SqlDataReader reader2 = this.PerformCommand(cmd); + List wrs = wasteReceived.LoadList(reader2); + foreach (WasteReceived awrs in wrs) + { + was_rcpt.WasteReceived.Add(awrs); + awrs.WAS_RCPT = was_rcpt; + } + } + + #endregion + #region NOA_NOD if (databaseEntity.GetType().IsAssignableFrom(typeof(NOA_NOD))) diff --git a/bsmd.database/TreatmentFacilityProvider.cs b/bsmd.database/TreatmentFacilityProvider.cs index 97a9d5b1..6ac9661d 100644 --- a/bsmd.database/TreatmentFacilityProvider.cs +++ b/bsmd.database/TreatmentFacilityProvider.cs @@ -50,7 +50,7 @@ namespace bsmd.database { this.CreateId(); scmd.Parameters.AddWithValue("@ID", this.Id); - scmd.CommandText = string.Format("INSERT INTO {0} (Id, WASId, TreatmentFacilityProviderName, Identifier) " + + scmd.CommandText = string.Format("INSERT INTO {0} (Id, WAS_RCPTId, TreatmentFacilityProviderName, Identifier) " + "VALUES ( @ID, @P1, @P2, @P3 )", this.Tablename); } else diff --git a/bsmd.database/WAS_RCPT.cs b/bsmd.database/WAS_RCPT.cs index bf6f8ef1..eb8a75f0 100644 --- a/bsmd.database/WAS_RCPT.cs +++ b/bsmd.database/WAS_RCPT.cs @@ -13,8 +13,8 @@ using System.Data; namespace bsmd.database { - [TypeConverter(typeof(MessageClassConverter))] - [JsonConverter(typeof(NoTypeConverterJsonConverter))] + [TypeConverter(typeof(MessageClassConverter))] + [JsonConverter(typeof(NoTypeConverterJsonConverter))] public class WAS_RCPT : DatabaseEntity, ISublistContainer, ISublistElement { public WAS_RCPT() @@ -44,6 +44,73 @@ namespace bsmd.database [Browsable(false)] public ObservableCollection TreatmentFacilityProvider { get; private set; } = new ObservableCollection(); + [ENI2Validation] + public string TreatmentFacilityProviderText + { + get + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < this.TreatmentFacilityProvider.Count; i++) + { + if (i > 0) + sb.Append(", "); + sb.Append(((TreatmentFacilityProvider)this.TreatmentFacilityProvider[i]).TreatmentFacilityProviderName); + } + return sb.ToString(); + } + set + { + if (value.IsNullOrEmpty()) + { + foreach (TreatmentFacilityProvider wdsp in this.TreatmentFacilityProvider) + DBManager.Instance.Delete(wdsp); + this.TreatmentFacilityProvider.Clear(); + } + else + { + string[] tProviders = value.Split(','); + List foundList = new List(); + + for (int i = 0; i < tProviders.Length; i++) + { + string tProvider = tProviders[i].Trim(); + if (tProvider.Length > 0) + { + TreatmentFacilityProvider matchingProvider = null; + foreach (TreatmentFacilityProvider wdsp in this.TreatmentFacilityProvider) + { + if (wdsp.TreatmentFacilityProviderName.Equals(tProvider, StringComparison.OrdinalIgnoreCase)) + { + matchingProvider = wdsp; + break; + } + } + if (matchingProvider != null) + { + foundList.Add(matchingProvider); + this.TreatmentFacilityProvider.Remove(matchingProvider); + } + else + { + TreatmentFacilityProvider newProvider = new TreatmentFacilityProvider(); + newProvider.WAS_RCPT = this; + newProvider.TreatmentFacilityProviderName = tProvider; + foundList.Add(newProvider); + } + } + } + + // remove remaining provider (no longer valid) + foreach (TreatmentFacilityProvider remainingProvider in this.TreatmentFacilityProvider) + DBManager.Instance.Delete(remainingProvider); + this.TreatmentFacilityProvider.Clear(); + // add existing and new provider + foreach (TreatmentFacilityProvider sjl in foundList) + this.TreatmentFacilityProvider.Add(sjl); + } + } + } + #endregion #region ISublistContainer implementation diff --git a/bsmd.database/WasteReceived.cs b/bsmd.database/WasteReceived.cs index fa01724d..04306840 100644 --- a/bsmd.database/WasteReceived.cs +++ b/bsmd.database/WasteReceived.cs @@ -16,6 +16,11 @@ namespace bsmd.database public class WasteReceived : DatabaseEntity, ISublistElement { + public WasteReceived() + { + this.tablename = "[dbo].[WasteReceived]"; + } + #region ISublistElement implementation [JsonIgnore] diff --git a/bsmd.database/XtraSendLogic.cs b/bsmd.database/XtraSendLogic.cs index 7e7916c9..1c015f21 100644 --- a/bsmd.database/XtraSendLogic.cs +++ b/bsmd.database/XtraSendLogic.cs @@ -55,8 +55,7 @@ namespace bsmd.database { if (message.Elements.Count > 0) { - HAZ haz = message.Elements[0] as HAZ; - if (haz != null) + if (message.Elements[0] is HAZ haz) { if (!haz.HasPositions) // 15.11.17: "Im Grunde müsste nicht das Feld NoDPG der Auslöser für Suspend sein, sondern wenn keine Position in einer der Tabellen enthalten ist." {