Compare commits
2 Commits
069d5919cb
...
86aea836a9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
86aea836a9 | ||
|
|
c218dbe139 |
BIN
2025-11-13 11_35_00-Clipboard.png
Normal file
BIN
2025-11-13 11_35_00-Clipboard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
@@ -160,31 +160,47 @@
|
|||||||
Margin="0 10 0 0"
|
Margin="0 10 0 0"
|
||||||
Foreground="{DynamicResource FontColor.Menu.Categories}" />
|
Foreground="{DynamicResource FontColor.Menu.Categories}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<local:HierarchicalSelectionControl x:Name="CategorySelectionControl"
|
<Border x:Name="CategoryValidationBorder"
|
||||||
Margin="0 5 0 0"
|
Margin="0 5 0 0"
|
||||||
SelectedItem="{Binding SelectedCategory, ElementName=CloseCaseDialogUc, Mode=TwoWay}"
|
Padding="1"
|
||||||
ComboBoxBackground="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
|
BorderThickness="1"
|
||||||
BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}"
|
CornerRadius="7.5"
|
||||||
SearchPlaceholderText="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Searchbar.Placeholder}"
|
Background="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
|
||||||
DropDownOpened="DropDownOpened"
|
BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}">
|
||||||
DropDownClosed="DropDownClosed"
|
<local:HierarchicalSelectionControl x:Name="CategorySelectionControl"
|
||||||
PreviewKeyDown="Combobox_PreviewKeyDown" />
|
SelectedItem="{Binding SelectedCategory, ElementName=CloseCaseDialogUc, Mode=TwoWay}"
|
||||||
<StackPanel>
|
ComboBoxBackground="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
|
||||||
<TextBlock Text="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Dialog.CloseCase.Template}"
|
BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}"
|
||||||
FontWeight="Bold"
|
SearchPlaceholderText="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Searchbar.Placeholder}"
|
||||||
|
DropDownOpened="DropDownOpened"
|
||||||
|
DropDownClosed="DropDownClosed"
|
||||||
|
PreviewKeyDown="Combobox_PreviewKeyDown" />
|
||||||
|
</Border>
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Dialog.CloseCase.Template}"
|
||||||
|
FontWeight="Bold"
|
||||||
Margin="0 10 0 0"
|
Margin="0 10 0 0"
|
||||||
Foreground="{DynamicResource FontColor.Menu.Categories}" />
|
Foreground="{DynamicResource FontColor.Menu.Categories}" />
|
||||||
|
|
||||||
<ComboBox x:Name="QuickTicketSelection"
|
<Border x:Name="QuickTicketValidationBorder"
|
||||||
Margin="0 5 0 0"
|
Margin="0 5 0 0"
|
||||||
Background="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
|
Padding="1"
|
||||||
BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}"
|
BorderThickness="1"
|
||||||
SelectedIndex="0"
|
CornerRadius="7.5"
|
||||||
PreviewKeyDown="Combobox_PreviewKeyDown"
|
Background="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
|
||||||
DropDownOpened="DropDownOpened"
|
BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}">
|
||||||
DropDownClosed="DropDownClosed">
|
<ComboBox x:Name="QuickTicketSelection"
|
||||||
</ComboBox>
|
Background="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
|
||||||
</StackPanel>
|
BorderBrush="Transparent"
|
||||||
|
BorderThickness="0"
|
||||||
|
SelectedIndex="0"
|
||||||
|
SelectionChanged="QuickTicketSelection_SelectionChanged"
|
||||||
|
PreviewKeyDown="Combobox_PreviewKeyDown"
|
||||||
|
DropDownOpened="DropDownOpened"
|
||||||
|
DropDownClosed="DropDownClosed">
|
||||||
|
</ComboBox>
|
||||||
|
</Border>
|
||||||
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock x:Name="SetOrUpdateComputerInTicketLabel"
|
<TextBlock x:Name="SetOrUpdateComputerInTicketLabel"
|
||||||
Text="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Dialog.CloseCase.SetAffectedAssetLabel}"
|
Text="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Dialog.CloseCase.SetAffectedAssetLabel}"
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
private ObservableCollection<HierarchicalSelectionItem> categoryHierarchy = new ObservableCollection<HierarchicalSelectionItem>();
|
private ObservableCollection<HierarchicalSelectionItem> categoryHierarchy = new ObservableCollection<HierarchicalSelectionItem>();
|
||||||
private readonly Dictionary<string, HierarchicalSelectionItem> categoryLookup = new Dictionary<string, HierarchicalSelectionItem>(StringComparer.OrdinalIgnoreCase);
|
private readonly Dictionary<string, HierarchicalSelectionItem> categoryLookup = new Dictionary<string, HierarchicalSelectionItem>(StringComparer.OrdinalIgnoreCase);
|
||||||
private bool isCategoryLoading;
|
private bool isCategoryLoading;
|
||||||
|
private Brush defaultCategoryBorderBrush;
|
||||||
|
private Brush defaultQuickTicketBorderBrush;
|
||||||
|
private readonly Brush validationErrorBrush = new SolidColorBrush(Colors.Red);
|
||||||
|
|
||||||
public bool IsTicket
|
public bool IsTicket
|
||||||
{
|
{
|
||||||
@@ -230,7 +233,10 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
private static void OnSelectedCategoryChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
private static void OnSelectedCategoryChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (d is CloseCaseDialogWithTicket instance)
|
if (d is CloseCaseDialogWithTicket instance)
|
||||||
|
{
|
||||||
instance.LogSelectedCategoryChanged(e.NewValue as HierarchicalSelectionItem);
|
instance.LogSelectedCategoryChanged(e.NewValue as HierarchicalSelectionItem);
|
||||||
|
instance.ValidateProperty("SelectedCategory");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -403,9 +409,11 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
me.UpdateTicketComponentVisibility();
|
me.UpdateTicketComponentVisibility();
|
||||||
await me.InitializeCategorySelectionAsync();
|
await me.InitializeCategorySelectionAsync();
|
||||||
await me.UpdateQuickCallsComboBoxAsync();
|
await me.UpdateQuickCallsComboBoxAsync();
|
||||||
}
|
me.ValidateProperty("SelectedCategory");
|
||||||
catch (Exception E)
|
me.ValidateProperty("QuickTicketSelection");
|
||||||
{
|
}
|
||||||
|
catch (Exception E)
|
||||||
|
{
|
||||||
LogException(E);
|
LogException(E);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,14 +426,18 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
|
|
||||||
private TicketCompletion parentWindow;
|
private TicketCompletion parentWindow;
|
||||||
|
|
||||||
public CloseCaseDialogWithTicket()
|
public CloseCaseDialogWithTicket()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.Unloaded += CloseCaseDialogWithTicket_Unloaded;
|
this.Unloaded += CloseCaseDialogWithTicket_Unloaded;
|
||||||
this.Loaded += CloseCaseDialogWithTicket_Loaded;
|
this.Loaded += CloseCaseDialogWithTicket_Loaded;
|
||||||
|
defaultCategoryBorderBrush = CategoryValidationBorder?.BorderBrush?.CloneCurrentValue();
|
||||||
DependencyPropertyDescriptor dpd =
|
defaultQuickTicketBorderBrush = QuickTicketValidationBorder?.BorderBrush?.CloneCurrentValue();
|
||||||
DependencyPropertyDescriptor.FromProperty(TextBlock.TextProperty, typeof(TextBlock));
|
if (validationErrorBrush is Freezable freezableBrush && freezableBrush.CanFreeze)
|
||||||
|
freezableBrush.Freeze();
|
||||||
|
|
||||||
|
DependencyPropertyDescriptor dpd =
|
||||||
|
DependencyPropertyDescriptor.FromProperty(TextBlock.TextProperty, typeof(TextBlock));
|
||||||
|
|
||||||
dpd?.AddValueChanged(CaseNotesPreview, TicketCaseNotesTextBlock_TextChanged);
|
dpd?.AddValueChanged(CaseNotesPreview, TicketCaseNotesTextBlock_TextChanged);
|
||||||
|
|
||||||
@@ -444,10 +456,12 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
parentWindow.SetButtonStateYes(false, "Initial gesperrt.");
|
parentWindow.SetButtonStateYes(false, "Initial gesperrt.");
|
||||||
parentWindow.SetButtonStateNo(true, cMultiLanguageSupport.GetItem("Dialog.CloseCase.Cancel"));
|
parentWindow.SetButtonStateNo(true, cMultiLanguageSupport.GetItem("Dialog.CloseCase.Cancel"));
|
||||||
|
|
||||||
ValidateProperty("TicketSummaryTextBox");
|
ValidateProperty("TicketSummaryTextBox");
|
||||||
ValidateProperty("TicketStatusCombobox");
|
ValidateProperty("TicketStatusCombobox");
|
||||||
ValidateProperty("CaseNotesPreview");
|
ValidateProperty("CaseNotesPreview");
|
||||||
}
|
ValidateProperty("SelectedCategory");
|
||||||
|
ValidateProperty("QuickTicketSelection");
|
||||||
|
}
|
||||||
private void CloseCaseDialogWithTicket_Unloaded(object sender, RoutedEventArgs e)
|
private void CloseCaseDialogWithTicket_Unloaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Window parentWindow = Window.GetWindow(this);
|
Window parentWindow = Window.GetWindow(this);
|
||||||
@@ -937,6 +951,7 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
isCategoryLoading = false;
|
isCategoryLoading = false;
|
||||||
|
ValidateProperty("SelectedCategory");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1125,13 +1140,14 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QuickTicketSelection.ItemsSource = quickCallListe;
|
QuickTicketSelection.ItemsSource = quickCallListe;
|
||||||
|
|
||||||
QuickTicketSelection.SelectedItem = quickCallListe
|
QuickTicketSelection.SelectedItem = quickCallListe
|
||||||
.FirstOrDefault(x => x.ID == "7bbe64e2-94d0-ee11-4285-00155d010a04");
|
.FirstOrDefault(x => x.ID == "7bbe64e2-94d0-ee11-4285-00155d010a04");
|
||||||
}
|
ValidateProperty("QuickTicketSelection");
|
||||||
catch (Exception e)
|
}
|
||||||
{
|
catch (Exception e)
|
||||||
|
{
|
||||||
LogException(e);
|
LogException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1980,10 +1996,10 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "TicketStatusCombobox":
|
case "TicketStatusCombobox":
|
||||||
validateComboboxNotEmpty(TicketStatusCombobox);
|
validateComboboxNotEmpty(TicketStatusCombobox);
|
||||||
if (!(TicketStatusCombobox.SelectedItem is ComboBoxItem a))
|
if (!(TicketStatusCombobox.SelectedItem is ComboBoxItem a))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
enumTicketStatus currenTicketStatus = enumTicketStatus.Unknown;
|
enumTicketStatus currenTicketStatus = enumTicketStatus.Unknown;
|
||||||
var currentTicketActivityType = SelectedTicket?.Infos.FirstOrDefault(x => x.Key == "ActivityType").Value;
|
var currentTicketActivityType = SelectedTicket?.Infos.FirstOrDefault(x => x.Key == "ActivityType").Value;
|
||||||
@@ -2041,12 +2057,47 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ShowAssetWarningTicketAction = false;
|
ShowAssetWarningTicketAction = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
case "SelectedCategory":
|
||||||
|
bool categoryIsVisible = CategorySelectionControl?.IsVisible ?? false;
|
||||||
return new List<string>(_errors.Values);
|
bool categoryHasError = categoryIsVisible && SelectedCategory == null;
|
||||||
|
UpdateCategoryValidationVisualState(categoryHasError);
|
||||||
|
|
||||||
|
if (categoryHasError)
|
||||||
|
{
|
||||||
|
if (!_errors.ContainsKey(propertyName))
|
||||||
|
_errors.Add(propertyName, cMultiLanguageSupport.GetItem("Dialog.CloseCase.ValidationErrorCategoryEmpty"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_errors.ContainsKey(propertyName))
|
||||||
|
_errors.Remove(propertyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "QuickTicketSelection":
|
||||||
|
bool quickCallIsVisible = QuickTicketSelection?.IsVisible ?? false;
|
||||||
|
bool quickCallSelected = QuickTicketSelection?.SelectedItem is QuickCallEntry selectedQuickCall && !string.IsNullOrWhiteSpace(selectedQuickCall.ID);
|
||||||
|
bool quickCallHasError = quickCallIsVisible && !quickCallSelected;
|
||||||
|
UpdateQuickTicketValidationVisualState(quickCallHasError);
|
||||||
|
|
||||||
|
if (quickCallHasError)
|
||||||
|
{
|
||||||
|
if (!_errors.ContainsKey(propertyName))
|
||||||
|
_errors.Add(propertyName, cMultiLanguageSupport.GetItem("Dialog.CloseCase.ValidationErrorQuickCallEmpty"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_errors.ContainsKey(propertyName))
|
||||||
|
_errors.Remove(propertyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new List<string>(_errors.Values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2388,9 +2439,9 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void setTextboxErrorState(object sender, bool hasError)
|
private static void setTextboxErrorState(object sender, bool hasError)
|
||||||
{
|
{
|
||||||
if (sender is TextBox textBox)
|
if (sender is TextBox textBox)
|
||||||
{
|
{
|
||||||
// Überprüfe den Inhalt und setze die Hintergrundfarbe entsprechend
|
// Überprüfe den Inhalt und setze die Hintergrundfarbe entsprechend
|
||||||
if (hasError)
|
if (hasError)
|
||||||
@@ -2403,9 +2454,35 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
// Setze die ursprüngliche Hintergrundfarbe zurück, wenn die Validierung erfolgreich ist
|
// Setze die ursprüngliche Hintergrundfarbe zurück, wenn die Validierung erfolgreich ist
|
||||||
textBox.BorderBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("#DEE2E6");
|
textBox.BorderBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("#DEE2E6");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateCategoryValidationVisualState(bool hasError)
|
||||||
|
{
|
||||||
|
if (CategoryValidationBorder == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (defaultCategoryBorderBrush == null)
|
||||||
|
defaultCategoryBorderBrush = CategoryValidationBorder.BorderBrush?.CloneCurrentValue();
|
||||||
|
|
||||||
|
CategoryValidationBorder.BorderBrush = hasError
|
||||||
|
? validationErrorBrush
|
||||||
|
: defaultCategoryBorderBrush;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateQuickTicketValidationVisualState(bool hasError)
|
||||||
|
{
|
||||||
|
if (QuickTicketValidationBorder == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (defaultQuickTicketBorderBrush == null)
|
||||||
|
defaultQuickTicketBorderBrush = QuickTicketValidationBorder.BorderBrush?.CloneCurrentValue();
|
||||||
|
|
||||||
|
QuickTicketValidationBorder.BorderBrush = hasError
|
||||||
|
? validationErrorBrush
|
||||||
|
: defaultQuickTicketBorderBrush;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region DropDown
|
#region DropDown
|
||||||
@@ -2453,10 +2530,15 @@ namespace FasdDesktopUi.Basics.UserControls
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
private void ComputerSelection_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void ComputerSelection_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
SelectedComputer = (cF4sdApiSearchResultRelation)ComputerSelection.SelectedItem;
|
SelectedComputer = (cF4sdApiSearchResultRelation)ComputerSelection.SelectedItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void QuickTicketSelection_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
ValidateProperty("QuickTicketSelection");
|
||||||
|
}
|
||||||
|
|
||||||
private void TransferCaseNotesCheck_Unchecked(object sender, RoutedEventArgs e)
|
private void TransferCaseNotesCheck_Unchecked(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1578,13 +1578,21 @@
|
|||||||
<Language Lang="DE">Fehler: </Language>
|
<Language Lang="DE">Fehler: </Language>
|
||||||
</UIItem>
|
</UIItem>
|
||||||
|
|
||||||
<UIItem Name="Dialog.CloseCase.ValidationErrorSummaryEmpty">
|
<UIItem Name="Dialog.CloseCase.ValidationErrorSummaryEmpty">
|
||||||
<Language Lang="EN">Fill summary</Language>
|
<Language Lang="EN">Fill summary</Language>
|
||||||
<Language Lang="DE">Zusammenfassung angeben</Language>
|
<Language Lang="DE">Zusammenfassung angeben</Language>
|
||||||
</UIItem>
|
</UIItem>
|
||||||
|
<UIItem Name="Dialog.CloseCase.ValidationErrorCategoryEmpty">
|
||||||
<UIItem Name="Dialog.CloseCase.ValidationErrorSolutionEmpty">
|
<Language Lang="EN">Select a category</Language>
|
||||||
<Language Lang="EN">Fill solution</Language>
|
<Language Lang="DE">Kategorie auswählen</Language>
|
||||||
|
</UIItem>
|
||||||
|
<UIItem Name="Dialog.CloseCase.ValidationErrorQuickCallEmpty">
|
||||||
|
<Language Lang="EN">Select a quickcall template</Language>
|
||||||
|
<Language Lang="DE">Quickcall auswählen</Language>
|
||||||
|
</UIItem>
|
||||||
|
|
||||||
|
<UIItem Name="Dialog.CloseCase.ValidationErrorSolutionEmpty">
|
||||||
|
<Language Lang="EN">Fill solution</Language>
|
||||||
<Language Lang="DE">Lösung angeben</Language>
|
<Language Lang="DE">Lösung angeben</Language>
|
||||||
</UIItem>
|
</UIItem>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user