Files
C4IT-F4SD-Client/FasdDesktopUi/Basics/UserControls/Ticket/CloseTicketDialog.xaml.cs
2025-11-11 11:03:42 +01:00

181 lines
6.3 KiB
C#

using FasdDesktopUi.Basics.Helper;
using FasdDesktopUi.Basics.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
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;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls
{
public partial class CloseTicketDialog : UserControl
{
#region Properties
public event EventHandler ErrorTypeValueChanged;
public event EventHandler SolutionValueChanged;
private cSupportCaseDataProvider dataProvider;
public cSupportCaseDataProvider DataProvider
{
get => dataProvider; set
{
dataProvider = value;
UpdateErrorTypeComboBox();
}
}
#region Solution
public string Solution
{
get { return (string)GetValue(SolutionProperty); }
set {
SetValue(SolutionProperty, value);
}
}
public static readonly DependencyProperty SolutionProperty =
DependencyProperty.Register("Solution", typeof(string), typeof(CloseTicketDialog), new PropertyMetadata(string.Empty, OnSolutionPropertyChanged));
private static void OnSolutionPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (CloseTicketDialog)d;
control.SolutionValueChanged?.Invoke(control, EventArgs.Empty);
}
#endregion
public ComboBoxItem SelectedErrorType
{
get { return (ComboBoxItem)GetValue(SelectedErrorTypeProperty); }
set { SetValue(SelectedErrorTypeProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedErrorType. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedErrorTypeProperty =
DependencyProperty.Register("SelectedErrorType", typeof(ComboBoxItem), typeof(CloseTicketDialog), new PropertyMetadata(null, OnSelectedErrorTypeChanged));
private static void OnSelectedErrorTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (CloseTicketDialog)d;
control.ErrorTypeValueChanged?.Invoke(control, EventArgs.Empty);
}
#endregion
public CloseTicketDialog()
{
InitializeComponent();
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
}
private void UpdateErrorTypeComboBox()
{
try
{
if (DataProvider == null) return;
var activityErrorTable = DataProvider.HealthCardDataHelper.HealthCardRawData.GetTableByName("M42Wpm-Pickup-ActivityErrorType", false);
if (activityErrorTable == null) return;
if (!activityErrorTable.Columns.TryGetValue("name", out var namesColumn) ||
!activityErrorTable.Columns.TryGetValue("position", out var positionsColumn) ||
!activityErrorTable.Columns.TryGetValue("hidden", out var hiddensColumn) ||
!activityErrorTable.Columns.TryGetValue("id", out var idsColumn)) return;
var errorTypeListe = new List<Dictionary<string, object>>();
for (int i = 0; i < idsColumn.Values.Count; i++)
{
if (int.TryParse(positionsColumn.Values[i].ToString(), out int positionValue))
{
var eintrag = new Dictionary<string, object>
{
{ "ID", idsColumn.Values[i] },
{ "DisplayName", namesColumn.Values[i] },
{ "Hidden", Convert.ToBoolean(hiddensColumn.Values[i])},
{ "Position", positionValue }
};
errorTypeListe.Add(eintrag);
}
}
// Filtere die Liste, um nur nicht versteckte Elemente zu behalten
errorTypeListe = errorTypeListe.Where(eintrag => !(bool)eintrag["Hidden"]).OrderBy(eintrag => (int)eintrag["Position"]).ToList();
var editComboBox = ErrorTypeComboBox;
editComboBox.Items.Clear();
foreach (var listValue in errorTypeListe)
{
editComboBox.Items.Add(new ComboBoxItem { Content = listValue["DisplayName"], Tag = listValue["ID"] });
}
}
catch (Exception e)
{
LogException(e);
}
}
private void DropDownOpened(object sender, EventArgs e)
{
try
{
if (!(sender is FrameworkElement senderElement))
return;
var parentBorder = cUiElementHelper.GetFirstParentOfType<Border>(senderElement);
cFocusInvoker.InvokeGotFocus(parentBorder, e);
}
catch (Exception E)
{
LogException(E);
}
}
private void DropDownClosed(object sender, EventArgs e)
{
try
{
if (!(sender is FrameworkElement senderElement))
return;
ErrorTypeValueChanged?.Invoke(this, EventArgs.Empty);
var parentBorder = cUiElementHelper.GetFirstParentOfType<Border>(senderElement);
cFocusInvoker.InvokeLostFocus(parentBorder, e);
}
catch (Exception E)
{
LogException(E);
}
}
private void ErrorTypeComboBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Escape) {
DropDownClosed(sender, e);
}
}
}
}