Explorar o código

avalonia: Added Qualifications list

Kenric Nugteren hai 2 meses
pai
achega
ac9284d704

+ 8 - 1
PRS.Avalonia/PRS.Avalonia/Modules/MyHR/MyHRLeaveRequests/MyHRLeaveRequestsViewModel.cs

@@ -1,6 +1,13 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using InABox.Avalonia.Components;
+using InABox.Avalonia.Dialogs;
+using System;
+using System.Threading.Tasks;
+
 namespace PRS.Avalonia.Modules.MyHR;
 
-public class MyHRLeaveRequestsViewModel : ModuleViewModel
+public partial class MyHRLeaveRequestsViewModel : ModuleViewModel
 {
     public override string Title => "Leave Requests";
 }

+ 51 - 0
PRS.Avalonia/PRS.Avalonia/Modules/MyHR/MyHRQualifications/MyHRQualificationsView.axaml

@@ -0,0 +1,51 @@
+<UserControl xmlns="https://github.com/avaloniaui"
+             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:modules="using:PRS.Avalonia.Modules.MyHR"
+             xmlns:avalonia="using:PRS.Avalonia"
+             xmlns:components="using:InABox.Avalonia.Components"
+             xmlns:converters="using:InABox.Avalonia.Converters"
+             xmlns:listView="using:PRS.Avalonia.Components.ListView"
+             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+             x:Class="PRS.Avalonia.Modules.MyHR.MyHRQualificationsView"
+             x:DataType="modules:MyHRQualificationsViewModel">
+    <listView:PrsListView Repository="{Binding Qualifications}">
+        <listView:PrsListView.ItemTemplate>
+            <DataTemplate DataType="avalonia:EmployeeQualificationShell">
+                <Button Classes="Standard"
+                        Background="{Binding ., Converter={x:Static modules:QualificationColorConverter.Instance}}"
+                        Foreground="Black"
+                        Padding="5"
+                        HorizontalContentAlignment="Stretch"
+                        VerticalContentAlignment="Stretch"
+                        Command="{Binding $parent[listView:PrsListView].((modules:MyHRQualificationsViewModel)DataContext).QualificationClickedCommand}"
+                        CommandParameter="{Binding .}">
+                    <Grid RowDefinitions="*,Auto"
+                          ColumnDefinitions="Auto,*,Auto">
+                        <Image Classes="Large" HorizontalAlignment="Center"
+                               VerticalAlignment="Center"
+                               Source="{Binding Image, Converter={x:Static converters:ByteArrayToImageSourceConverter.Instance}}"
+                               Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"/>
+                        <Label Grid.Row="0"
+                               Grid.Column="1" Grid.ColumnSpan="2"
+                               VerticalAlignment="Stretch"
+                               VerticalContentAlignment="Center"
+                               FontSize="{StaticResource PrsFontSizeSmall}"
+                               FontWeight="{StaticResource PrsFontWeightBold}"
+                               Content="{Binding Description}" />
+                        <TextBlock Grid.Row="1" Grid.Column="1"
+                                   FontSize="{StaticResource PrsFontSizeExtraSmall}" FontStyle="{StaticResource PrsFontStylItalic}"
+                                   TextWrapping="WrapWithOverflow"
+                                   VerticalAlignment="Stretch"
+                                   Text="{Binding ., Converter={x:Static modules:QualificationNumberConverter.Instance}}"/>
+                        <TextBlock Grid.Row="1" Grid.Column="2"
+                                   FontSize="{StaticResource PrsFontSizeExtraSmall}" FontStyle="{StaticResource PrsFontStylItalic}"
+                                   VerticalAlignment="Stretch"
+                                   Text="{Binding ., Converter={x:Static modules:QualificationExpiryConverter.Instance}}"/>
+                    </Grid>
+                </Button>
+            </DataTemplate>
+        </listView:PrsListView.ItemTemplate>
+    </listView:PrsListView>
+</UserControl>

+ 59 - 0
PRS.Avalonia/PRS.Avalonia/Modules/MyHR/MyHRQualifications/MyHRQualificationsView.axaml.cs

@@ -0,0 +1,59 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Media;
+using InABox.Avalonia.Converters;
+using InABox.Core;
+using System;
+
+namespace PRS.Avalonia.Modules.MyHR;
+
+public class QualificationExpiryConverter : AbstractConverter<EmployeeQualificationShell, string>
+{
+    public static QualificationExpiryConverter Instance = new();
+
+    protected override string Convert(EmployeeQualificationShell? value, object? parameter = null)
+    {
+        return value is null || value.Qualified.IsEmpty() == true
+            ? ""
+            : value.Expiry.IsEmpty()
+                ? "Permanent"
+                : $"Expires {value.Expiry:dd MMM yy}";
+    }
+}
+
+public class QualificationNumberConverter : AbstractConverter<EmployeeQualificationShell, string>
+{
+    public static QualificationNumberConverter Instance = new();
+
+    protected override string Convert(EmployeeQualificationShell? value, object? parameter = null)
+    {
+        return (value?.Number).IsNullOrWhiteSpace()
+            ? "Not Provided"
+            : $"ID: {value.Number}";
+    }
+}
+
+public class QualificationColorConverter : AbstractConverter<EmployeeQualificationShell, IBrush?>
+{
+    public static QualificationColorConverter Instance = new();
+
+    protected override IBrush? Convert(EmployeeQualificationShell? value, object? parameter = null)
+    {
+        if (value is null) return null;
+
+        return new SolidColorBrush(value.Verified.IsEmpty() == true
+            ? Colors.LightYellow
+            : !value.Expiry.IsEmpty() && value.Expiry <= DateTime.Today
+                ? Colors.LightSalmon
+                : Colors.LightGreen);
+    }
+}
+
+public partial class MyHRQualificationsView : UserControl
+{
+    public MyHRQualificationsView()
+    {
+        InitializeComponent();
+    }
+}

+ 36 - 1
PRS.Avalonia/PRS.Avalonia/Modules/MyHR/MyHRQualifications/MyHRQualificationsViewModel.cs

@@ -1,6 +1,41 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using InABox.Avalonia.Components;
+using InABox.Avalonia.Dialogs;
+using System;
+using System.Threading.Tasks;
+
 namespace PRS.Avalonia.Modules.MyHR;
 
-public class MyHRQualificationsViewModel : ModuleViewModel
+public partial class MyHRQualificationsViewModel : ModuleViewModel
 {
     public override string Title => "Qualifications";
+
+    [ObservableProperty]
+    private EmployeeQualificationModel _qualifications;
+
+    public MyHRQualificationsViewModel()
+    {
+        PrimaryMenu.Add(new AvaloniaMenuItem(Images.plus, AddClick));
+
+        _qualifications = Repositories.MyQualifications;
+    }
+
+    protected override async Task<TimeSpan> OnRefresh()
+    {
+        await Qualifications.RefreshAsync(true);
+        return TimeSpan.Zero;
+    }
+
+    private async Task<bool> AddClick()
+    {
+        await MessageDialog.ShowMessage("Unimplemented");
+        return true;
+    }
+
+    [RelayCommand]
+    private async Task QualificationClicked(EmployeeQualificationShell shell)
+    {
+        await MessageDialog.ShowMessage("Unimplemented");
+    }
 }

+ 4 - 4
PRS.Avalonia/PRS.Avalonia/Modules/MyHR/MyHRViewModel.cs

@@ -32,10 +32,10 @@ public partial class MyHRViewModel : ModuleViewModel
             "Complete and Lodge Digital Forms", 
             Images.digitalform);
         
-        // Modules.Add<MyHRLeaveRequestsViewModel>(
-        //     "Leave Requests", 
-        //     "Manage Leave Requests", 
-        //     Images.holiday);
+        Modules.Add<MyHRLeaveRequestsViewModel>(
+            "Leave Requests", 
+            "Manage Leave Requests", 
+            Images.holiday);
         
         // Modules.Add<MyHRTimesheetsViewModel>(
         //     "Timesheets", 

+ 0 - 40
PRS.Avalonia/PRS.Avalonia/Modules/Site/SiteItps/SiteItpsView.axaml

@@ -24,46 +24,6 @@
 									   Title="{Binding Code}"
 									   Description="{Binding Description}"
 									   Alert="{Binding .,Converter={StaticResource OpenFormsTextConverter}}"/>
-			<!--Grid>
-				<Grid.ColumnDefinitions>
-					<ColumnDefinition Width="Auto"/>
-					<ColumnDefinition Width="*"/>
-				</Grid.ColumnDefinitions>
-				<Button Background="{Binding .,Converter={StaticResource FormColorConverter}}"
-						Command="{Binding $parent[listView:PrsListView].((modules:SiteItpsViewModel)DataContext).SelectITPCommand}"
-						CommandParameter="{Binding .}"
-						HorizontalContentAlignment="Stretch"
-						Margin="0,0,0,0"
-						Padding="0,0,0,0">
-					<Grid>
-						<Grid.RowDefinitions>
-							<RowDefinition Height="30"/>
-							<RowDefinition Height="50"/>
-						</Grid.RowDefinitions>
-						<Grid.ColumnDefinitions>
-							<ColumnDefinition Width="80"/>
-							<ColumnDefinition Width="*"/>
-						</Grid.ColumnDefinitions>
-
-                        <Image Classes="Large"
-							   Grid.Row="0"
-							   Grid.Column="0"
-							   Grid.RowSpan="2"
-							   Source="{SvgImage /Images/badge.svg}"/>
-						<Label Grid.Row="0" Grid.Column="1"
-							   Content="{Binding Code}"
-                               FontSize="{StaticResource PrsFontSizeSmall}"
-                               HorizontalContentAlignment="Center"
-                               VerticalContentAlignment="Bottom"/>
-						<TextBlock Grid.Row="1" Grid.Column="1"
-								   Text="{Binding Description}"
-								   FontSize="{StaticResource PrsFontSizeNormal}"
-								   TextAlignment="Center"
-								   VerticalAlignment="Top"
-								   TextWrapping="Wrap"/>
-					</Grid>
-				</Button>
-			</Grid-->
 		</DataTemplate>
 	</UserControl.Resources>
     <listView:PrsListView ItemTemplate="{StaticResource ITPShellTemplate}"