瀏覽代碼

Added some RequiredColumn attributes to EmployeeQualification, since those properties are used by DoPropertyChanged.
New Qualifications and tasks are able to be saved.

Kenric Nugteren 1 周之前
父節點
當前提交
8189eb1688

+ 1 - 0
PRS.Avalonia/PRS.Avalonia/Modules/MyHR/MyHRQualifications/MyHRQualificationsEditViewModel.cs

@@ -116,6 +116,7 @@ internal partial class MyHRQualificationsEditViewModel : ModuleViewModel
         UpdateTitle(Shell?.Description ?? "Edit Qualification");
 
         value?.WhenAnyPropertyChanged().Subscribe(shell => Changed());
+        Changed();
     }
 
     protected override async Task<TimeSpan> OnRefresh()

+ 109 - 106
PRS.Avalonia/PRS.Avalonia/Modules/MyTasks/MyTasksView.axaml

@@ -2,112 +2,115 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-			 xmlns:listView="using:PRS.Avalonia.Components.ListView"
-			 xmlns:local="using:PRS.Avalonia.Modules"
-			 xmlns:classes="using:Comal.Classes"
-			 xmlns:prs="using:PRS.Avalonia"
+             xmlns:listView="using:PRS.Avalonia.Components.ListView"
+             xmlns:local="using:PRS.Avalonia.Modules"
+             xmlns:classes="using:Comal.Classes"
+             xmlns:prs="using:PRS.Avalonia"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
              x:Class="PRS.Avalonia.Modules.MyTasksView"
-			 x:DataType="local:MyTasksViewModel">
-	<Grid>
-		<Grid.RowDefinitions>
-			<RowDefinition Height="*"/>
-			<RowDefinition Height="Auto"/>
-		</Grid.RowDefinitions>
-		<Grid.ColumnDefinitions>
-			<ColumnDefinition Width="*"/>
-			<ColumnDefinition Width="Auto"/>
-		</Grid.ColumnDefinitions>
-		<listView:PrsListView Grid.Row="0" Grid.ColumnSpan="2"
-							  Repository="{Binding Model}"
-							  FilterShell="PrsListView_FilterShell"
-							  FiltersVisible="True">
-			<listView:PrsListView.ItemTemplate>
-				<DataTemplate DataType="prs:IKanbanShell">
-					<Button Classes="Standard" Background="{Binding .,Converter={x:Static local:KanbanBackgroundColorConverter.Instance}}"
-							Command="{Binding $parent[local:MyTasksView].((local:MyTasksViewModel)DataContext).KanbanClickedCommand}"
-							CommandParameter="{Binding .}"
-							Padding="0"
-							HorizontalContentAlignment="Stretch">
-						<Grid>
-							<Grid.RowDefinitions>
-								<RowDefinition Height="Auto"/>
-								<RowDefinition Height="Auto"/>
-								<RowDefinition Height="Auto"/>
-							</Grid.RowDefinitions>
-							<Grid.ColumnDefinitions>
-								<ColumnDefinition Width="Auto"/>
-								<ColumnDefinition Width="Auto"/>
-								<ColumnDefinition Width="*"/>
-								<ColumnDefinition Width="Auto"/>
-								<ColumnDefinition Width="Auto"/>
-							</Grid.ColumnDefinitions>
-							
-							<CheckBox Grid.Row="0" Grid.Column="0"
-									  Height="15"
-									  Classes="small"
-									  MinHeight="0"
-									  Padding="0"
-									  IsChecked="{Binding IsSelected}"/>
-							<Label Grid.Row="0" Grid.Column="1"
-								   Content="{Binding Number}"
-								   FontSize="{StaticResource PrsFontSizeSmall}"
-								   FontWeight="{StaticResource PrsFontWeightBold}"
-								   VerticalAlignment="Stretch"
-								   VerticalContentAlignment="Center"
-								   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
-							<Label Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2"
-								   Content="{Binding Title}"
-								   FontSize="{StaticResource PrsFontSizeSmall}"
-								   FontWeight="{StaticResource PrsFontWeightBold}"
-								   VerticalAlignment="Stretch"
-								   VerticalContentAlignment="Center"
-								   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
-							<Image Grid.Row="0" Grid.Column="4" Width="20" Height="20"
-								   VerticalAlignment="Center"
-								   HorizontalAlignment="Right"
-								   Source="{SvgImage /Images/paperclip.svg}"/>
-							
-							<Label Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="5"
-								   Content="{Binding Summary}"
-								   FontSize="{StaticResource PrsFontSizeExtraSmall}"
-								   VerticalAlignment="Stretch"
-								   VerticalContentAlignment="Center"
-								   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
-							
-							<Label Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3"
-								   Content="{Binding EmployeeName}"
-								   FontSize="{StaticResource PrsFontSizeExtraSmall}"
-								   FontStyle="{StaticResource PrsFontStylItalic}"
-								   VerticalAlignment="Stretch"
-								   VerticalContentAlignment="Center"
-								   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
-							
-							<Label Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="2"
-								   Content="{Binding DueDate,StringFormat='{}{0:dd MMM yy}'}"
-								   FontSize="{StaticResource PrsFontSizeExtraSmall}"
-								   FontStyle="{StaticResource PrsFontStylItalic}"
-								   VerticalAlignment="Stretch"
-								   VerticalContentAlignment="Center"
-								   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
-						</Grid>
-					</Button>
-				</DataTemplate>
-			</listView:PrsListView.ItemTemplate>
-		</listView:PrsListView>
-		<TabStrip Name="_tabList" Classes="Standard"
-				  Grid.Row="1" Grid.Column="0"
-				  SelectionChanged="TabStrip_SelectionChanged"
-				  Margin="{StaticResource PrsControlSpacing}"
-				  SelectedIndex="{Binding SelectedTab}">
-			<TabStripItem Content="New" Tag="{x:Static classes:KanbanStatus.Open}"/>
-			<TabStripItem Content="Current" Tag="{x:Static classes:KanbanStatus.InProgress}"/>
-			<TabStripItem Content="Waiting" Tag="{x:Static classes:KanbanStatus.Waiting}"/>
-			<TabStripItem Content="Done" Tag="{x:Static classes:KanbanStatus.Complete}"/>
-		</TabStrip>
-		<Button Classes="Standard" Name="SelectionMenuButton" Grid.Row="1" Grid.Column="1"
-				Background="Silver"
-				Command="{Binding SelectionMenuCommand}"
-				CommandParameter="{Binding $self}"/>
-	</Grid>
+             x:DataType="local:MyTasksViewModel">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="Auto"/>
+        </Grid.ColumnDefinitions>
+        <listView:PrsListView Grid.Row="0" Grid.ColumnSpan="2"
+                              Repository="{Binding Model}"
+                              FilterShell="PrsListView_FilterShell"
+                              FiltersVisible="True">
+            <listView:PrsListView.ItemTemplate>
+                <DataTemplate DataType="prs:IKanbanShell">
+                    <Button Classes="Standard" Background="{Binding .,Converter={x:Static local:KanbanBackgroundColorConverter.Instance}}"
+                            Command="{Binding $parent[local:MyTasksView].((local:MyTasksViewModel)DataContext).KanbanClickedCommand}"
+                            CommandParameter="{Binding .}"
+                            Padding="0"
+                            HorizontalContentAlignment="Stretch">
+                        <Grid>
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="Auto"/>
+                                <RowDefinition Height="Auto"/>
+                                <RowDefinition Height="Auto"/>
+                            </Grid.RowDefinitions>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="Auto"/>
+                                <ColumnDefinition Width="Auto"/>
+                                <ColumnDefinition Width="*"/>
+                                <ColumnDefinition Width="Auto"/>
+                                <ColumnDefinition Width="Auto"/>
+                            </Grid.ColumnDefinitions>
+                            
+                            <CheckBox Grid.Row="0" Grid.Column="0"
+                                      Height="15"
+                                      Classes="small"
+                                      MinHeight="0"
+                                      Padding="0"
+                                      IsChecked="{Binding IsSelected}"/>
+                            <Label Grid.Row="0" Grid.Column="1"
+                                   Content="{Binding Number}"
+                                   FontSize="{StaticResource PrsFontSizeSmall}"
+                                   FontWeight="{StaticResource PrsFontWeightBold}"
+                                   VerticalAlignment="Stretch"
+                                   VerticalContentAlignment="Center"
+                                   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
+                            <Label Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2"
+                                   Content="{Binding Title}"
+                                   FontSize="{StaticResource PrsFontSizeSmall}"
+                                   FontWeight="{StaticResource PrsFontWeightBold}"
+                                   VerticalAlignment="Stretch"
+                                   VerticalContentAlignment="Center"
+                                   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
+                            <Image Grid.Row="0" Grid.Column="4" Width="20" Height="20"
+                                   VerticalAlignment="Center"
+                                   HorizontalAlignment="Right"
+                                   Source="{SvgImage /Images/paperclip.svg}"/>
+                            
+                            <Label Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="5"
+                                   Content="{Binding Summary}"
+                                   FontSize="{StaticResource PrsFontSizeExtraSmall}"
+                                   VerticalAlignment="Stretch"
+                                   VerticalContentAlignment="Center"
+                                   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
+                            
+                            <Label Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3"
+                                   Content="{Binding EmployeeName}"
+                                   FontSize="{StaticResource PrsFontSizeExtraSmall}"
+                                   FontStyle="{StaticResource PrsFontStylItalic}"
+                                   VerticalAlignment="Stretch"
+                                   VerticalContentAlignment="Center"
+                                   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
+                            
+                            <Label Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="2"
+                                   Content="{Binding DueDate,StringFormat='{}{0:dd MMM yy}'}"
+                                   FontSize="{StaticResource PrsFontSizeExtraSmall}"
+                                   FontStyle="{StaticResource PrsFontStylItalic}"
+                                   VerticalAlignment="Stretch"
+                                   VerticalContentAlignment="Center"
+                                   Foreground="{Binding .,Converter={x:Static local:KanbanForegroundColorConverter.Instance}}"/>
+                        </Grid>
+                    </Button>
+                </DataTemplate>
+            </listView:PrsListView.ItemTemplate>
+        </listView:PrsListView>
+        <TabStrip Name="_tabList" Classes="Standard"
+                  Grid.Row="1" Grid.Column="0"
+                  SelectionChanged="TabStrip_SelectionChanged"
+                  Margin="{StaticResource PrsControlSpacing}"
+                  SelectedIndex="{Binding SelectedTab}">
+            <TabStripItem Content="New" Tag="{x:Static classes:KanbanStatus.Open}"/>
+            <TabStripItem Content="Current" Tag="{x:Static classes:KanbanStatus.InProgress}"/>
+            <TabStripItem Content="Waiting" Tag="{x:Static classes:KanbanStatus.Waiting}"/>
+            <TabStripItem Content="Done" Tag="{x:Static classes:KanbanStatus.Complete}"/>
+        </TabStrip>
+        <Button Classes="Standard" Name="SelectionMenuButton" Grid.Row="1" Grid.Column="1" 
+		        Padding="4"
+                Background="Silver"
+                Command="{Binding SelectionMenuCommand}"
+                CommandParameter="{Binding $self}">
+            <Image Classes="Small" Source="{SvgImage /Images/lines.svg}"/>
+        </Button>
+    </Grid>
 </UserControl>

+ 2 - 1
PRS.Avalonia/PRS.Avalonia/Modules/MyTasks/TaskEditViewModel.cs

@@ -91,6 +91,7 @@ internal partial class TaskEditViewModel : ModuleViewModel
     partial void OnShellChanged(IKanbanShell value)
     {
         value?.WhenAnyPropertyChanged().Subscribe(shell => Changed());
+        Changed();
     }
 
     protected override async Task<TimeSpan> OnRefresh()
@@ -173,7 +174,7 @@ internal partial class TaskEditViewModel : ModuleViewModel
 
     public void Changed()
     {
-        var changed = Shell.IsChanged();
+        var changed = Shell.ID == Guid.Empty || Shell.IsChanged();
         SaveButton.IsVisible = changed;
         AddNoteButton.IsVisible = SelectedTab == 1;
         ImageMenuButton.IsVisible = SelectedTab == 2;

+ 1 - 0
prs.classes/Entities/Qualification/EmployeeQualification.cs

@@ -13,6 +13,7 @@ namespace Comal.Classes
 
         [EditorSequence(1)]
         [EntityRelationship(DeleteAction.Cascade)]
+        [RequiredColumn]
         public QualificationLink Qualification { get; set; }
 
         [EditorSequence(2)]

+ 2 - 0
prs.classes/Entities/Qualification/QualificationLink.cs

@@ -12,9 +12,11 @@ namespace Comal.Classes
         public string Description { get; set; }
 
         [IntegerEditor(Visible = Visible.Hidden, Editable = Editable.Hidden)]
+        [RequiredColumn]
         public int Period { get; set; }
 
         [EnumLookupEditor(typeof(QualificationRenewal), Visible = Visible.Hidden, Editable = Editable.Hidden)]
+        [RequiredColumn]
         public QualificationRenewal Renewal { get; set; }
     }
 }