// Copyright (c) 2025- schick Informatik // Description: Display control of formsheet Tab 13. Waste receipts // using bsmd.database; using ENI2.EditControls; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace ENI2.SheetDisplayControls { /// /// Interaction logic for WasteReceiptsControl.xaml /// public partial class WasteReceiptsControl : DetailBaseControl { #region fields private Message _wasMessage; private WAS _was; private Message _wasRcptMessage; private WAS_RCPT _selectedWAS_RCPT; #endregion #region Construction public WasteReceiptsControl() { InitializeComponent(); Loaded += WasteReceiptsControl_Loaded; } #endregion #region public override public override void Initialize() { base.Initialize(); foreach (Message aMessage in this.Messages) { if (aMessage.MessageNotificationClass == Message.NotificationClass.WAS) { this._wasMessage = aMessage; this.ControlMessages.Add(aMessage); } if (aMessage.MessageNotificationClass == Message.NotificationClass.WAS_RCPT) { this._wasRcptMessage = aMessage; this.ControlMessages.Add(aMessage); } } #region init WAS WAS was = null; if (this._wasMessage.Elements.Count > 0) was = this._wasMessage.Elements[0] as WAS; if (was == null) { was = new WAS(); was.MessageCore = this.Core; was.MessageHeader = this._wasMessage; _wasMessage.Elements.Add(was); } this._was = was; #endregion #region init WAS_RCPT if (this._wasRcptMessage == null) { this._wasRcptMessage = this.Core.CreateMessage(Message.NotificationClass.WAS_RCPT); this.Messages.Add(this._wasRcptMessage); } this.dataGridWasteReceipt.Initialize(); this.dataGridWasteReceipt.ItemsSource = this._wasRcptMessage.Elements; this.dataGridWasteReceipt.AddingNewItem += DataGridWasteReceipt_AddingNewItem; this.dataGridWasteReceipt.EditRequested += DataGridWasteReceipt_EditRequested; this.dataGridWasteReceipt.DeleteRequested += DataGridWasteReceipt_DeleteRequested; this.dataGridWasteReceipt.CreateRequested += DataGridWasteReceipt_CreateRequested; this.dataGridWasteReceived.Initialize(); this.dataGridWasteReceived.AddingNewItem += DataGridWasteReceived_AddingNewItem; this.dataGridWasteReceived.EditRequested += DataGridWasteReceived_EditRequested; 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 } public override void SetEnabled(bool enabled) { base.SetEnabled(enabled); } #endregion #region event handler private void WasteReceiptsControl_Loaded(object sender, RoutedEventArgs e) { this.dataGridWasteReceived.CellEditEnding += (obj, ev) => { this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); }; } private void buttonWasteReceivedAddMissingEntries_Click(object sender, RoutedEventArgs e) { if (this._selectedWAS_RCPT != null) { this._selectedWAS_RCPT.AddMissingWasteReceived(); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); this.dataGridWasteReceived.Items.Refresh(); } } private void buttonCopyFromWAS_Click(object sender, RoutedEventArgs e) { if (_selectedWAS_RCPT == null) return; if (MessageBox.Show(Properties.Resources.textCopyToWASConfirmation, Properties.Resources.textConfirmation, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { foreach (Waste waste in _was.Waste) { if (waste.WasteDisposalAmount_MTQ.HasValue && waste.WasteDisposalAmount_MTQ > 0) { // find matching WAS_RCPT entry foreach (WasteReceived wasteReceived in _selectedWAS_RCPT.WasteReceived) { if (wasteReceived.WasteCode.Equals(waste.WasteType.ToString())) { wasteReceived.AmountWasteReceived_MTQ = waste.WasteDisposalAmount_MTQ; break; } } } } this.dataGridWasteReceived.Items.Refresh(); } } #endregion #region Waste receipt grid event handler private void DataGridWasteReceipt_CreateRequested() { 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.AddMissingWasteReceived(); epd.AddClicked += () => { epd.CopyValuesToEntity(); if (!this._wasRcptMessage.Elements.Contains(epd.WAS_RCPT)) this._wasRcptMessage.Elements.Add(epd.WAS_RCPT); this.dataGridWasteReceipt.Items.Refresh(); 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); }; if (epd.ShowDialog() ?? false) { 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; dataGridWasteReceipt_SelectionChanged(this, null); } // await InitTemplates(); // templates might have changed in the dialog } private void DataGridWasteReceipt_DeleteRequested(DatabaseEntity obj) { if (obj is WAS_RCPT wasRCPT) { // 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); this.dataGridWasteReceipt.Items.Refresh(); this.dataGridWasteReceived.ItemsSource = null; this._selectedWAS_RCPT = null; } } private void DataGridWasteReceipt_EditRequested(DatabaseEntity obj) { 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; epd.WAS_RCPT.AddMissingWasteReceived(); 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.SelectedItem = epd.WAS_RCPT; this.dataGridWasteReceipt.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); dataGridWasteReceipt_SelectionChanged(this, null); // await InitTemplates(); // templates might have changed in the dialog } private void DataGridWasteReceipt_AddingNewItem(object sender, AddingNewItemEventArgs e) { this.DataGridWasteReceipt_CreateRequested(); } private void dataGridWasteReceipt_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (this.dataGridWasteReceipt.SelectedItem is WAS_RCPT was_rcpt) { this.dataGridWasteReceived.ItemsSource = was_rcpt.WasteReceived; this._selectedWAS_RCPT = was_rcpt; } } #endregion #region Waste received grid event handler private void DataGridWasteReceived_DeleteRequested(DatabaseEntity obj) { if (obj is WasteReceived wasteReceived) { this.dataGridWasteReceived.CancelEdit(); this.dataGridWasteReceived.CancelEdit(); // are you sure dialog is in base class _selectedWAS_RCPT.WasteReceived.Remove(wasteReceived); DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).Delete(wasteReceived); DatabaseEntity.ResetIdentifiers(new List(_selectedWAS_RCPT.WasteReceived)); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); this.dataGridWasteReceived.Items.Refresh(); } } private void DataGridWasteReceived_CreateRequested() { if (_selectedWAS_RCPT == null) return; this.dataGridWasteReceived.CancelEdit(); this.dataGridWasteReceived.CancelEdit(); EditWasteReceivedDialog ewrd = new EditWasteReceivedDialog(); ewrd.WasteReceived = new WasteReceived(); ewrd.WasteReceived.WAS_RCPT = _selectedWAS_RCPT; ewrd.WasteReceived.Identifier = WasteReceived.GetNewIdentifier(_selectedWAS_RCPT.WasteReceived); ewrd.AddClicked += () => { ewrd.CopyValuesToEntity(); if ((ewrd.WasteReceived.WasteCode != null) && !this._selectedWAS_RCPT.WasteReceived.Any(wr => wr.WasteCode == ewrd.WasteReceived.WasteCode)) { this._selectedWAS_RCPT.WasteReceived.Add(ewrd.WasteReceived); this.dataGridWasteReceived.Items.Refresh(); ewrd.WasteReceived = new WasteReceived(); ewrd.WasteReceived.WAS_RCPT = _selectedWAS_RCPT; ewrd.WasteReceived.Identifier = WasteReceived.GetNewIdentifier(_selectedWAS_RCPT.WasteReceived); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); } }; if (ewrd.ShowDialog() ?? false) { if ((ewrd.WasteReceived.WasteCode != null) && !this._selectedWAS_RCPT.WasteReceived.Any(wr => wr.WasteCode == ewrd.WasteReceived.WasteCode)) { this._selectedWAS_RCPT.WasteReceived.Add(ewrd.WasteReceived); this.dataGridWasteReceived.Items.Refresh(); this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); } } } private void DataGridWasteReceived_EditRequested(DatabaseEntity obj) { this.dataGridWasteReceived.CancelEdit(); this.dataGridWasteReceived.CancelEdit(); EditWasteReceivedDialog ewrd = new EditWasteReceivedDialog(); ewrd.WasteReceived = obj as WasteReceived; ewrd.AddClicked += () => { ewrd.CopyValuesToEntity(); if ((ewrd.WasteReceived.WasteCode != null) && !this._selectedWAS_RCPT.WasteReceived.Any(wr => wr.WasteCode == ewrd.WasteReceived.WasteCode)) { _selectedWAS_RCPT.WasteReceived.Add(ewrd.WasteReceived); this.dataGridWasteReceived.Items.Refresh(); ewrd.WasteReceived = new WasteReceived(); ewrd.WasteReceived.Identifier = WasteReceived.GetNewIdentifier(_selectedWAS_RCPT.WasteReceived); ewrd.WasteReceived.WAS_RCPT = _selectedWAS_RCPT; this.SublistElementChanged(Message.NotificationClass.WAS_RCPT); } }; if (ewrd.ShowDialog() ?? false) { if ((ewrd.WasteReceived.WasteCode != null) && !_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); } } private void DataGridWasteReceived_AddingNewItem(object sender, AddingNewItemEventArgs e) { DataGridWasteReceived_CreateRequested(); } #endregion } }