Compare commits

...

2 Commits

Author SHA1 Message Date
Meik
86aea836a9 added pflichtfelder, fix zum roten rand ausstehend 2025-11-13 11:42:48 +01:00
Meik
c218dbe139 added pflichtfelder, fix zum roten rand ausstehend 2025-11-13 11:36:47 +01:00
4 changed files with 177 additions and 71 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -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}"

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,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)
{ {

View File

@@ -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>