added pflichtfelder, fix zum roten rand ausstehend

This commit is contained in:
Meik
2025-11-13 11:36:47 +01:00
parent 069d5919cb
commit c218dbe139
3 changed files with 149 additions and 58 deletions

View File

@@ -180,6 +180,7 @@
Background="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}" Background="{DynamicResource BackgroundColor.DetailsPage.DataHistory.ValueColumn}"
BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}" BorderBrush="{DynamicResource BackgroundColor.Menu.SubCategory.Hover}"
SelectedIndex="0" SelectedIndex="0"
SelectionChanged="QuickTicketSelection_SelectionChanged"
PreviewKeyDown="Combobox_PreviewKeyDown" PreviewKeyDown="Combobox_PreviewKeyDown"
DropDownOpened="DropDownOpened" DropDownOpened="DropDownOpened"
DropDownClosed="DropDownClosed"> DropDownClosed="DropDownClosed">

View File

@@ -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,6 +409,8 @@ namespace FasdDesktopUi.Basics.UserControls
me.UpdateTicketComponentVisibility(); me.UpdateTicketComponentVisibility();
await me.InitializeCategorySelectionAsync(); await me.InitializeCategorySelectionAsync();
await me.UpdateQuickCallsComboBoxAsync(); await me.UpdateQuickCallsComboBoxAsync();
me.ValidateProperty("SelectedCategory");
me.ValidateProperty("QuickTicketSelection");
} }
catch (Exception E) catch (Exception E)
{ {
@@ -423,6 +431,10 @@ namespace FasdDesktopUi.Basics.UserControls
InitializeComponent(); InitializeComponent();
this.Unloaded += CloseCaseDialogWithTicket_Unloaded; this.Unloaded += CloseCaseDialogWithTicket_Unloaded;
this.Loaded += CloseCaseDialogWithTicket_Loaded; this.Loaded += CloseCaseDialogWithTicket_Loaded;
defaultCategoryBorderBrush = CategorySelectionControl?.BorderBrush?.CloneCurrentValue();
defaultQuickTicketBorderBrush = QuickTicketSelection?.BorderBrush?.CloneCurrentValue();
if (validationErrorBrush is Freezable freezableBrush && freezableBrush.CanFreeze)
freezableBrush.Freeze();
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor dpd =
DependencyPropertyDescriptor.FromProperty(TextBlock.TextProperty, typeof(TextBlock)); DependencyPropertyDescriptor.FromProperty(TextBlock.TextProperty, typeof(TextBlock));
@@ -447,6 +459,8 @@ namespace FasdDesktopUi.Basics.UserControls
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)
{ {
@@ -937,6 +951,7 @@ namespace FasdDesktopUi.Basics.UserControls
finally finally
{ {
isCategoryLoading = false; isCategoryLoading = false;
ValidateProperty("SelectedCategory");
} }
} }
@@ -1129,6 +1144,7 @@ namespace FasdDesktopUi.Basics.UserControls
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)
{ {
@@ -2043,6 +2059,41 @@ namespace FasdDesktopUi.Basics.UserControls
ShowAssetWarningTicketAction = false; ShowAssetWarningTicketAction = false;
} }
break;
case "SelectedCategory":
bool categoryIsVisible = CategorySelectionControl?.IsVisible ?? false;
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; break;
} }
@@ -2406,6 +2457,32 @@ namespace FasdDesktopUi.Basics.UserControls
} }
} }
private void UpdateCategoryValidationVisualState(bool hasError)
{
if (CategorySelectionControl == null)
return;
if (defaultCategoryBorderBrush == null)
defaultCategoryBorderBrush = CategorySelectionControl.BorderBrush?.CloneCurrentValue();
CategorySelectionControl.BorderBrush = hasError
? validationErrorBrush
: defaultCategoryBorderBrush;
}
private void UpdateQuickTicketValidationVisualState(bool hasError)
{
if (QuickTicketSelection == null)
return;
if (defaultQuickTicketBorderBrush == null)
defaultQuickTicketBorderBrush = QuickTicketSelection.BorderBrush?.CloneCurrentValue();
QuickTicketSelection.BorderBrush = hasError
? validationErrorBrush
: defaultQuickTicketBorderBrush;
}
#region DropDown #region DropDown
@@ -2458,6 +2535,11 @@ namespace FasdDesktopUi.Basics.UserControls
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)
{ {
try try

View File

@@ -1582,6 +1582,14 @@
<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">
<Language Lang="EN">Select a category</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"> <UIItem Name="Dialog.CloseCase.ValidationErrorSolutionEmpty">
<Language Lang="EN">Fill solution</Language> <Language Lang="EN">Fill solution</Language>