瀏覽代碼

PRS DESKTOP - Job Requisition Screen improvements

Nick-PRSDigital@bitbucket.org 2 年之前
父節點
當前提交
8a7f3aefe4

+ 0 - 73
prs.desktop/JobRequisitionHoldingsReview.xaml

@@ -1,73 +0,0 @@
-<UserControl x:Class="PRSDesktop.JobRequisitionHoldingsReview"
-             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             xmlns:local="clr-namespace:PRSDesktop"
-             mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800">
-    <Grid>
-        <Grid.RowDefinitions>
-            <RowDefinition Height="auto"/>
-            <RowDefinition Height="*"/>
-        </Grid.RowDefinitions>
-
-        <Grid Grid.Row="0">
-            <Grid.ColumnDefinitions>
-                <ColumnDefinition Width="*"/>
-                <ColumnDefinition Width="*"/>
-                <ColumnDefinition Width="*"/>
-                <ColumnDefinition Width="*"/>
-            </Grid.ColumnDefinitions>
-            <TextBlock Grid.Column="0" Text="Job" HorizontalAlignment="Center"/>
-            <TextBlock Grid.Column="1" x:Name="CurrentStyleText" HorizontalAlignment="Center" TextWrapping="Wrap"/>
-            <TextBlock Grid.Column="2" Text="No Style" HorizontalAlignment="Center"/>
-            <TextBlock Grid.Column="3" Text="Other Styles" HorizontalAlignment="Center"/>
-        </Grid>
-
-        <ListView x:Name="listView" Grid.Row="1" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
-            <ListView.ItemTemplate>
-                <DataTemplate>
-                    <Grid HorizontalAlignment="Stretch" Background="{Binding Background}">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="*"/>
-                            <ColumnDefinition Width="*"/>
-                            <ColumnDefinition Width="*"/>
-                            <ColumnDefinition Width="*"/>
-                        </Grid.ColumnDefinitions>
-                        
-                        <TextBlock Grid.Column="0" HorizontalAlignment="Center" Text="{Binding JobName}" TextWrapping="Wrap"/>
-                        
-                        <Grid Grid.Column="1">
-                            <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="*"/>
-                                <ColumnDefinition Width="*"/>
-                            </Grid.ColumnDefinitions>
-                            <TextBlock Grid.Column="0" Text="{Binding StockOfCurrentStyle}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 5, 0"/>
-                            <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left" VerticalAlignment="Center"/>
-                        </Grid>
-
-                        <Grid Grid.Column="2">
-                            <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="*"/>
-                                <ColumnDefinition Width="*"/>
-                            </Grid.ColumnDefinitions>
-                            <TextBlock Grid.Column="0" Text="{Binding StockOfNoStyle}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 5, 0"/>
-                            <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left" VerticalAlignment="Center"/>
-                        </Grid>
-
-                        <Grid Grid.Column="3">
-                            <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="*"/>
-                                <ColumnDefinition Width="*"/>
-                            </Grid.ColumnDefinitions>
-                            <TextBlock Grid.Column="0" Text="{Binding StockOfOtherStyles}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 5, 0"/>
-                            <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left" VerticalAlignment="Center"/>
-                        </Grid>
-                        
-                    </Grid>
-                </DataTemplate>
-            </ListView.ItemTemplate>
-        </ListView>
-    </Grid>
-</UserControl>

+ 0 - 207
prs.desktop/JobRequisitionHoldingsReview.xaml.cs

@@ -1,207 +0,0 @@
-using Comal.Classes;
-using InABox.Clients;
-using InABox.Core;
-using java.awt.@event;
-using net.sf.mpxj;
-using Syncfusion.UI.Xaml.Diagram.Theming;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-
-namespace PRSDesktop
-{
-    /// <summary>
-    /// Interaction logic for JobRequisitionHoldingsReview.xaml
-    /// </summary>
-    public partial class JobRequisitionHoldingsReview : UserControl
-    {
-        List<Job> jobs = new List<Job>();
-
-        private JobRequisitionItem item;
-        public JobRequisitionItem Item
-        {
-            get
-            {
-                return item;
-            }
-            set
-            {
-                item = value;
-                SetHoldings();
-                SetStyle();
-            }
-        }
-
-        private void SetStyle()
-        {
-            if (Item.Style.ID != Guid.Empty)
-                CurrentStyleText.Text = Item.Style.Description + " (" + Item.Style.Code + ")";
-            else
-                CurrentStyleText.Text = "";
-        }
-
-        public JobRequisitionHoldingsReview()
-        {
-            InitializeComponent();
-            CoreTable table = new Client<Job>().Query(null, new Columns<Job>(x => x.ID, x => x.JobNumber));
-            foreach (var row in table.Rows)
-            {
-                jobs.Add(row.ToObject<Job>());
-            }
-        }
-
-        private void Button_Click(object sender, RoutedEventArgs e)
-        {
-
-        }
-
-        private void SetHoldings()
-        {
-            CoreTable table = new Client<StockMovement>().Query(new Filter<StockMovement>(x => x.Product.ID).IsEqualTo(item.Product.ID),
-                new Columns<StockMovement>(
-                    x => x.Style.ID,
-                    x => x.Received,
-                    x => x.Issued,
-                    x => x.Location.ID,
-                    x => x.Job.ID,
-                    x => x.JobRequisitionItem.ID
-                    ));
-            List<StockMovement> stockMovements = new List<StockMovement>();
-
-            foreach (CoreRow row in table.Rows)
-                stockMovements.Add(row.ToObject<StockMovement>());
-
-            List<JobRequiHoldingsReviewModel> list = new List<JobRequiHoldingsReviewModel>();
-            list.Add(SetHoldingsForJob(stockMovements));
-            list.Add(SetHoldingsForFreeStock(stockMovements));
-            list.AddRange(GetNonRequiHoldingsForOtherJobs(stockMovements));
-            listView.ItemsSource = list;
-        } 
-
-        private JobRequiHoldingsReviewModel SetHoldingsForJob(List<StockMovement> mvts)
-        {
-            var currentJobHoldings = new JobRequiHoldingsReviewModel(item.Job.JobNumber + " (Not previously requi-ed)");
-            currentJobHoldings.GetStock(item.Job.ID, item.Style.ID, item.Product.ID, mvts);
-            currentJobHoldings.Background = new SolidColorBrush(Colors.LightGreen);
-            return currentJobHoldings;
-        }
-
-        private JobRequiHoldingsReviewModel SetHoldingsForFreeStock(List<StockMovement> mvts)
-        {
-            var freeStock = new JobRequiHoldingsReviewModel("Free Stock (no job)");
-            freeStock.GetStock(Guid.Empty, item.Style.ID, item.Product.ID, mvts);
-            freeStock.Background = new SolidColorBrush(Colors.LightGreen);
-            return freeStock;
-        }
-
-        private IEnumerable<JobRequiHoldingsReviewModel> GetNonRequiHoldingsForOtherJobs(List<StockMovement> mvts)
-        {
-            var list = new List<JobRequiHoldingsReviewModel>();
-            foreach (var job in jobs)
-            {
-                if (job.ID == item.Job.ID)
-                    continue;
-
-                var holdings = new JobRequiHoldingsReviewModel(job.JobNumber);
-                holdings.GetStock(job.ID, item.Style.ID, item.Product.ID, mvts);
-
-                if (holdings.StockOfCurrentStyle == 0 && holdings.StockOfNoStyle == 0 && holdings.StockOfOtherStyles == 0)
-                    continue;
-
-                holdings.Background = new SolidColorBrush(Colors.Cornsilk);
-                list.Add(holdings);
-            }
-            return list;
-        }
-    }
-
-    public class JobRequiHoldingsReviewModel
-    {
-        public string JobName { get; set; }
-        public double StockOfCurrentStyle { get; set; }
-        public double StockOfNoStyle { get; set; }
-        public double StockOfOtherStyles { get; set; }
-
-        public Brush Background { get; set; }
-
-        Columns<StockMovement> columns = new Columns<StockMovement>(x => x.Received, x => x.Issued);
-
-        public JobRequiHoldingsReviewModel(string jobname)
-        {
-            JobName = jobname;
-        }
-
-        public void GetStock(Guid jobid, Guid styleid, Guid productid, List<StockMovement> movements, bool bIncludeRequied = false)
-        {
-            GetStockOfCurrentStyle(jobid, styleid, movements, bIncludeRequied);
-            GetStockOfNoStyle(jobid, movements, bIncludeRequied);
-            GetStockOfOtherStyles(jobid, styleid, movements, bIncludeRequied);
-        }
-
-        private void GetStockOfOtherStyles(Guid jobid, Guid styleid, List<StockMovement> movements, bool bIncludeRequied)
-        {
-            var mvts = movements
-                .Where(x => x.Job.ID == jobid)
-                .Where(x => x.Style.ID != Guid.Empty)
-                .Where(x => x.Style.ID != styleid)
-                .Where(x => x.JobRequisitionItem.ID == Guid.Empty);
-
-            StockOfOtherStyles = CalculateTotal(mvts);
-        }
-
-        private void GetStockOfNoStyle(Guid jobid, List<StockMovement> movements, bool bIncludeRequied)
-        {
-            var mvts = movements
-                .Where(x => x.Job.ID == jobid)
-                .Where(x => x.Style.ID == Guid.Empty)
-                .Where(x => x.JobRequisitionItem.ID == Guid.Empty);
-
-            StockOfNoStyle = CalculateTotal(mvts);
-        }
-
-        private void GetStockOfCurrentStyle(Guid jobid, Guid styleid, List<StockMovement> movements, bool bIncludeRequied)
-        {
-            if (styleid == Guid.Empty)
-                return;
-
-            var mvts = movements
-                .Where(x => x.Job.ID == jobid)
-                .Where(x => x.Style.ID == styleid)
-                .Where(x => x.JobRequisitionItem.ID == Guid.Empty);
-
-            StockOfCurrentStyle = CalculateTotal(mvts);
-        }
-
-        private double CalculateTotal(IEnumerable<StockMovement> mvts)
-        {
-            double total = 0;
-
-            double rec = 0;
-            double issued = 0;
-
-            foreach (var sm in mvts)
-            {
-                if (sm.Received != 0)
-                    rec = rec + sm.Received;
-                else if (sm.Issued != 0)
-                    issued = issued + sm.Issued;
-            }
-
-            if (rec >= issued)
-                total = rec - issued;
-
-            return total;
-        }
-    }
-}

+ 91 - 0
prs.desktop/JobRequisitionStockSelectionPage.xaml

@@ -0,0 +1,91 @@
+<wpf:ThemableWindow x:Class="PRSDesktop.JobRequisitionStockSelectionPage"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        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:local="clr-namespace:PRSDesktop"
+        xmlns:wpf="clr-namespace:InABox.Wpf;assembly=InABox.Wpf"
+        mc:Ignorable="d" Title="Requisition Stock for Line"
+        Height="500" Width="1400">
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="auto"/>
+            <RowDefinition Height="auto"/>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="auto"/>
+        </Grid.RowDefinitions>
+
+        <Border Grid.Column="0" BorderThickness="2" BorderBrush="Gray" Background="WhiteSmoke" Margin="5" Padding="15">
+            <TextBlock x:Name="jobLbl"  Text="Job" HorizontalAlignment="Center" FontSize="14" VerticalAlignment="Center" FontWeight="DemiBold"/>
+        </Border>
+
+        <Grid Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="0.4*"/>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="0.1*"/>
+                <ColumnDefinition Width="60"/>
+                <ColumnDefinition Width="60"/>
+                <ColumnDefinition Width="60"/>
+                <ColumnDefinition Width="60"/>
+                <ColumnDefinition Width="8"/>
+            </Grid.ColumnDefinitions>
+            <TextBlock Grid.Column="0" Text="Location" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="DemiBold" FontSize="14"/>
+            <TextBlock Grid.Column="1" Text="Style" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="DemiBold" FontSize="14"/>
+            <TextBlock Grid.Column="2" x:Name="availableUnitsLbl" Text="Available Units" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center"
+                       FontWeight="DemiBold" FontSize="14" Margin="0,0,0,0"/>
+            <TextBlock Grid.Column="3" Grid.ColumnSpan="3" Text="Amount to Requisition" HorizontalAlignment="Center" TextAlignment="Center"
+                       VerticalAlignment="Center" FontWeight="DemiBold" FontSize="14" TextWrapping="Wrap"/>
+        </Grid>
+
+        <ListView Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="listView" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" Margin="0">
+            <ListView.ItemTemplate>
+                <DataTemplate>
+                    <Grid>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="0.4*"/>
+                            <ColumnDefinition Width="*"/>
+                            <ColumnDefinition Width="0.1*"/>
+                            <ColumnDefinition Width="60"/>
+                            <ColumnDefinition Width="60"/>
+                            <ColumnDefinition Width="60"/>
+                            <ColumnDefinition Width="60"/>
+                        </Grid.ColumnDefinitions>
+                        <Border Grid.Column="0" BorderThickness="0.75" BorderBrush="Gray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
+                            <TextBlock Grid.Column="0" Text="{Binding Location}" HorizontalAlignment="Center" TextAlignment="Center"
+                                           VerticalAlignment="Center" TextWrapping="Wrap"/>
+                        </Border>
+                        <Border Grid.Column="1" BorderThickness="0.75" BorderBrush="Gray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
+                            <TextBlock Grid.Column="1" Text="{Binding Style}" HorizontalAlignment="Center" TextAlignment="Center"
+                                           VerticalAlignment="Center" TextWrapping="Wrap"/>
+                        </Border>
+                        <Border Grid.Column="2" BorderThickness="0.75" BorderBrush="Gray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
+                            <TextBlock  Text="{Binding Units}" HorizontalAlignment="Center" TextAlignment="Center"
+                                           VerticalAlignment="Center" TextWrapping="Wrap"/>
+                        </Border>
+
+
+                        <Button Grid.Column="3" Content="-" Width="60"  Height="25" Click="Minus_Click" FontWeight="Bold"/>
+                        <TextBox Grid.Column="4" Width="60"  Height="25" TextChanged="TextBox_TextChanged" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
+                                 HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ChosenUnits}"/>
+                        <Button Grid.Column="5" Content="+"  Width="60"  Height="25" Click="Plus_Click" FontWeight="Bold"/>
+                        <Button Grid.Column="6" Content="All" Width="60"  Height="25" Click="All_Clicked"/>
+
+                    </Grid>
+                </DataTemplate>
+            </ListView.ItemTemplate>
+        </ListView>
+
+        <!-- Accept or Cancel -->
+        <StackPanel Grid.Row="3"  Orientation="Horizontal" HorizontalAlignment="Right">
+
+            <Button Name="okButton" Click="SaveButton_Click" Margin="5" FontSize="13" Width="90" Height="30"
+                    IsDefault="True" Content="Save"/>
+
+            <Button Name="cancelButton" IsCancel="True" Margin="5" FontSize="13" Width="90" Height="30"
+                    Click="Cancel_Click" Content="Cancel"/>
+
+        </StackPanel>
+    </Grid>
+</wpf:ThemableWindow>

+ 187 - 0
prs.desktop/JobRequisitionStockSelectionPage.xaml.cs

@@ -0,0 +1,187 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using com.sun.tools.javac.util;
+using Comal.Classes;
+using InABox.Clients;
+using InABox.Core;
+using InABox.Wpf;
+using javax.swing;
+
+namespace PRSDesktop
+{
+    /// <summary>
+    /// Interaction logic for JobRequisitionStockSelectionPage.xaml
+    /// </summary>
+    public partial class JobRequisitionStockSelectionPage : ThemableWindow
+    {
+        ObservableCollection<JobRequistionStockSelectionViewModel> ViewModels = new ObservableCollection<JobRequistionStockSelectionViewModel>();
+        JobRequisitionItem Item = new JobRequisitionItem();
+        public Guid EmpID { get; set; }
+        public Guid IssuingJobID { get; set; }
+        public bool Requisitioned = false;
+        public JobRequisitionStockSelectionPage(IEnumerable<StockHolding> holdings, JobRequisitionItem item, Job issuingJob, bool requisitioned = false)
+        {
+            InitializeComponent();
+
+            Item = item;
+            IssuingJobID = issuingJob.ID;
+            jobLbl.Text = "Taking stock from Job: " +  issuingJob.Name + " (" + issuingJob.JobNumber + ")";
+            foreach (var holding in holdings)
+            {
+                ViewModels.Add(new JobRequistionStockSelectionViewModel
+                {
+                    Location = holding.Location.Description,
+                    Units = holding.Units,
+                    Style = holding.Style.Description,
+                    Holding = holding,
+                });
+            }
+            listView.ItemsSource = ViewModels;
+
+            Task.Run(() =>
+            {
+                EmpID = new Client<Employee>().Query(new Filter<Employee>(x => x.UserLink.ID).IsEqualTo(ClientFactory.UserGuid), new Columns<Employee>(x => x.ID)).Rows.FirstOrDefault().Get<Employee, Guid>(x => x.ID);
+            });
+
+            if(requisitioned) 
+            {
+                availableUnitsLbl.Text = "Requisitioned";
+                listView.IsEnabled = false;
+                okButton.IsEnabled = false;
+            }
+        }
+
+        private void SaveButton_Click(object sender, RoutedEventArgs e)
+        {
+            var models = ViewModels.Where(x => x.ChosenUnits > 0);
+
+            foreach (var model in models)
+                CreateStockMovements(model);
+
+            DialogResult = true;
+        }
+
+        private void CreateStockMovements(JobRequistionStockSelectionViewModel model)
+        {
+            StockMovementBatch batch = new StockMovementBatch();
+            batch.TimeStamp = DateTime.Now;
+            batch.Type = StockMovementBatchType.Transfer;
+            batch.Notes = "Requisitioned for Job " + Item.Job.JobNumber;
+            new Client<StockMovementBatch>().Save(batch, "Created for requisitioning stock");
+
+            var issuing = CreateBaseMovement(model, batch.ID);
+            issuing.Job.ID = IssuingJobID;
+            issuing.Issued = model.ChosenUnits;
+
+            var receiving = CreateBaseMovement(model, batch.ID);
+            receiving.Job.ID = Item.Job.ID;
+            receiving.Received = model.ChosenUnits;
+            receiving.JobRequisitionItem.ID = Item.ID;
+
+            new Client<StockMovement>().Save(new StockMovement[] { issuing, receiving }, "Created from Job Requisition Stock Reserve Screen");
+        }
+
+        private StockMovement CreateBaseMovement(JobRequistionStockSelectionViewModel model, Guid batchid)
+        {
+            StockMovement mvt = new StockMovement();
+            mvt.Style.ID = model.Holding.Style.ID;
+            mvt.Location.ID = model.Holding.Location.ID;
+            mvt.Dimensions.CopyFrom(model.Holding.Dimensions);
+            mvt.Batch.ID = batchid;
+            mvt.Employee.ID = EmpID;
+            mvt.IsTransfer = true;
+            mvt.Date = DateTime.Now;
+            mvt.Product.ID = Item.Product.ID;
+
+            return mvt;
+        }
+
+        private void Cancel_Click(object sender, RoutedEventArgs e)
+        {
+            DialogResult = false;
+        }
+
+        private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
+        {
+            var box = sender as TextBox;
+            if (!string.IsNullOrWhiteSpace(box.Text))
+            {
+                if (double.TryParse(box.Text, out double value) == false)
+                    box.Text = "0";
+
+                else
+                {
+                    var holdingUnits = (box.DataContext as JobRequistionStockSelectionViewModel).Holding.Units;
+
+                    if (holdingUnits >= value && value >= 0)
+                        (box.DataContext as JobRequistionStockSelectionViewModel).ChosenUnits = value;
+                    else
+                        (box.DataContext as JobRequistionStockSelectionViewModel).ChosenUnits = holdingUnits;
+
+                }
+
+            }
+        }
+
+        private void All_Clicked(object sender, RoutedEventArgs e)
+        {
+            var holdingUnits = ((sender as Button).DataContext as JobRequistionStockSelectionViewModel).Holding.Units;
+            ((sender as Button).DataContext as JobRequistionStockSelectionViewModel).ChosenUnits = holdingUnits;
+        }
+
+        private void Minus_Click(object sender, RoutedEventArgs e)
+        {
+            var model = (sender as Button).DataContext as JobRequistionStockSelectionViewModel;
+
+            if (model.ChosenUnits > 0)
+                model.ChosenUnits--;
+        }
+
+        private void Plus_Click(object sender, RoutedEventArgs e)
+        {
+            var holdingUnits = ((sender as Button).DataContext as JobRequistionStockSelectionViewModel).Holding.Units;
+            var model = (sender as Button).DataContext as JobRequistionStockSelectionViewModel;
+            if (model.ChosenUnits < holdingUnits)
+                model.ChosenUnits++;
+        }
+    }
+
+    public class JobRequistionStockSelectionViewModel : INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler? PropertyChanged;
+        public string Location { get; set; }
+        public string Style { get; set; }
+        public double Units { get; set; }
+
+        private double chosenUnits;
+        public double ChosenUnits
+        {
+            get => chosenUnits;
+            set
+            {
+                chosenUnits = value;
+                OnPropertyChanged("ChosenUnits");
+            }
+        }
+        public StockHolding Holding { get; set; }
+
+        public JobRequistionStockSelectionViewModel()
+        {
+            Location = "";
+            Style = "";
+            Units = 0;
+            ChosenUnits = 0;
+        }
+
+        protected virtual void OnPropertyChanged(string propertyName)
+        {
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+        }
+    }
+}

+ 0 - 17
prs.desktop/JobRequisitionTakeStockUserControl.xaml

@@ -1,17 +0,0 @@
-<UserControl x:Class="PRSDesktop.JobRequisitionTakeStockUserControl"
-             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             xmlns:local="clr-namespace:PRSDesktop"
-             mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800">
-    <Grid>
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="*"/>
-            <ColumnDefinition Width="*"/>
-        </Grid.ColumnDefinitions>
-        <TextBlock Grid.Column="0" x:Name="stockCountLbl" Text="{Binding Value}" HorizontalAlignment="Right"/>
-        <Button Grid.Column="1" Content="Take" Click="Button_Click" HorizontalAlignment="Left"/>
-    </Grid>
-</UserControl>

+ 0 - 34
prs.desktop/JobRequisitionTakeStockUserControl.xaml.cs

@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-
-namespace PRSDesktop
-{
-    /// <summary>
-    /// Interaction logic for JobRequisitionTakeStockUserControl.xaml
-    /// </summary>
-    public partial class JobRequisitionTakeStockUserControl : UserControl
-    {
-        public double Value { get; set; }
-        public JobRequisitionTakeStockUserControl()
-        {
-            InitializeComponent();           
-        }
-
-        private void Button_Click(object sender, RoutedEventArgs e)
-        {
-
-        }
-    }
-}

+ 877 - 0
prs.desktop/PRSDesktop_vz3xmkpr_wpftmp.csproj

@@ -0,0 +1,877 @@
+<Project>
+  <PropertyGroup>
+    <AssemblyName>PRSDesktop</AssemblyName>
+    <IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>
+    <BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
+    <MSBuildProjectExtensionsPath>C:\Development\PRS\PRS.Desktop\obj\</MSBuildProjectExtensionsPath>
+    <_TargetAssemblyProjectName>PRSDesktop</_TargetAssemblyProjectName>
+  </PropertyGroup>
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net6.0-windows</TargetFramework>
+    <Nullable>disable</Nullable>
+    <UseWPF>true</UseWPF>
+    <ApplicationIcon>solid.ico</ApplicationIcon>
+    <LangVersion>default</LangVersion>
+    <AssemblyVersion>1.0</AssemblyVersion>
+    <FileVersion>1.0</FileVersion>
+    <IsPackable>false</IsPackable>
+    <Nullable>enable</Nullable>
+    <Configurations>Debug;Release;Debug - DB</Configurations>
+    <PreserveCompilationContext>true</PreserveCompilationContext>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <NoWarn />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <NoWarn />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug - DB|AnyCPU'">
+    <NoWarn />
+  </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Resources\001-box.png" />
+    <None Remove="Resources\add.png" />
+    <None Remove="Resources\add.wav" />
+    <None Remove="Resources\anonymous.png" />
+    <None Remove="Resources\appicon.png" />
+    <None Remove="Resources\archive.png" />
+    <None Remove="Resources\assignments.png" />
+    <None Remove="Resources\attachment.png" />
+    <None Remove="Resources\attendance.png" />
+    <None Remove="Resources\audiorecording.png" />
+    <None Remove="Resources\autoupdate.png" />
+    <None Remove="Resources\back.png" />
+    <None Remove="Resources\barcode.png" />
+    <None Remove="Resources\beach.png" />
+    <None Remove="Resources\bill.png" />
+    <None Remove="Resources\bookmark.png" />
+    <None Remove="Resources\box.png" />
+    <None Remove="Resources\box-sml.png" />
+    <None Remove="Resources\certificate.png" />
+    <None Remove="Resources\change.wav" />
+    <None Remove="Resources\checklist.png" />
+    <None Remove="Resources\circle.png" />
+    <None Remove="Resources\clock.png" />
+    <None Remove="Resources\clock-sml.png" />
+    <None Remove="Resources\clone.png" />
+    <None Remove="Resources\consignment.png" />
+    <None Remove="Resources\consignmenttype.png" />
+    <None Remove="Resources\contacttype.png" />
+    <None Remove="Resources\contract.png" />
+    <None Remove="Resources\copy.png" />
+    <None Remove="Resources\costcentre.png" />
+    <None Remove="Resources\costsheet.png" />
+    <None Remove="Resources\costsheetbrand.png" />
+    <None Remove="Resources\costsheetsection.png" />
+    <None Remove="Resources\costsheettype.png" />
+    <None Remove="Resources\customer.png" />
+    <None Remove="Resources\delete.png" />
+    <None Remove="Resources\delete-sml.png" />
+    <None Remove="Resources\design.png" />
+    <None Remove="Resources\disabled.png" />
+    <None Remove="Resources\disk.png" />
+    <None Remove="Resources\disk-sml.png" />
+    <None Remove="Resources\doc-bmp.png" />
+    <None Remove="Resources\doc-jpg.png" />
+    <None Remove="Resources\doc-misc.png" />
+    <None Remove="Resources\doc-pdf.png" />
+    <None Remove="Resources\doc-png.png" />
+    <None Remove="Resources\doc-rtf.png" />
+    <None Remove="Resources\doc-txt.png" />
+    <None Remove="Resources\doc-xls.png" />
+    <None Remove="Resources\downarrow.png" />
+    <None Remove="Resources\download.png" />
+    <None Remove="Resources\draw.png" />
+    <None Remove="Resources\edit.png" />
+    <None Remove="Resources\email.png" />
+    <None Remove="Resources\employee.png" />
+    <None Remove="Resources\employeerole.png" />
+    <None Remove="Resources\employees.png" />
+    <None Remove="Resources\error.wav" />
+    <None Remove="Resources\everyone.png" />
+    <None Remove="Resources\factory.png" />
+    <None Remove="Resources\factorysetup.png" />
+    <None Remove="Resources\finger.png" />
+    <None Remove="Resources\fireworks.png" />
+    <None Remove="Resources\first.png" />
+    <None Remove="Resources\fontsize.png" />
+    <None Remove="Resources\forklift.png" />
+    <None Remove="Resources\forward.png" />
+    <None Remove="Resources\fullpage.png" />
+    <None Remove="Resources\glcode.png" />
+    <None Remove="Resources\go.png" />
+    <None Remove="Resources\grouped.png" />
+    <None Remove="Resources\hand.png" />
+    <None Remove="Resources\help.png" />
+    <None Remove="Resources\ink.png" />
+    <None Remove="Resources\invoice.png" />
+    <None Remove="Resources\kanban.png" />
+    <None Remove="Resources\kanbantype.png" />
+    <None Remove="Resources\key.png" />
+    <None Remove="Resources\kit.png" />
+    <None Remove="Resources\kitcondition.png" />
+    <None Remove="Resources\kitformula.png" />
+    <None Remove="Resources\kitgroup.png" />
+    <None Remove="Resources\kpi.png" />
+    <None Remove="Resources\last.png" />
+    <None Remove="Resources\leave.png" />
+    <None Remove="Resources\leftarrow.png" />
+    <None Remove="Resources\lifter.png" />
+    <None Remove="Resources\lightbulb.png" />
+    <None Remove="Resources\line.png" />
+    <None Remove="Resources\link.png" />
+    <None Remove="Resources\localfile.png" />
+    <None Remove="Resources\lock.png" />
+    <None Remove="Resources\lock-sml.png" />
+    <None Remove="Resources\manufacturing.png" />
+    <None Remove="Resources\map.png" />
+    <None Remove="Resources\mapmarker.png" />
+    <None Remove="Resources\milestone.png" />
+    <None Remove="Resources\minus.png" />
+    <None Remove="Resources\next.png" />
+    <None Remove="Resources\next1.png" />
+    <None Remove="Resources\orgchart.png" />
+    <None Remove="Resources\overtime.png" />
+    <None Remove="Resources\pagewidth.png" />
+    <None Remove="Resources\palette.png" />
+    <None Remove="Resources\parcel.png" />
+    <None Remove="Resources\password.png" />
+    <None Remove="Resources\payment.png" />
+    <None Remove="Resources\pencil.png" />
+    <None Remove="Resources\pin.png" />
+    <None Remove="Resources\plus.png" />
+    <None Remove="Resources\position.png" />
+    <None Remove="Resources\prev.png" />
+    <None Remove="Resources\print.png" />
+    <None Remove="Resources\printer.png" />
+    <None Remove="Resources\product.png" />
+    <None Remove="Resources\productgroup.png" />
+    <None Remove="Resources\project.png" />
+    <None Remove="Resources\purchase.png" />
+    <None Remove="Resources\quality.png" />
+    <None Remove="Resources\quotation.png" />
+    <None Remove="Resources\quotestatus.png" />
+    <None Remove="Resources\rack.png" />
+    <None Remove="Resources\receipt.png" />
+    <None Remove="Resources\refresh.png" />
+    <None Remove="Resources\remotefile.png" />
+    <None Remove="Resources\remove.wav" />
+    <None Remove="Resources\reply.png" />
+    <None Remove="Resources\report.png" />
+    <None Remove="Resources\requisition.png" />
+    <None Remove="Resources\rightarrow.png" />
+    <None Remove="Resources\ruler.png" />
+    <None Remove="Resources\schedule - disabled.png" />
+    <None Remove="Resources\schedule - enabled.png" />
+    <None Remove="Resources\script.png" />
+    <None Remove="Resources\securitygroup.png" />
+    <None Remove="Resources\service.png" />
+    <None Remove="Resources\shared.png" />
+    <None Remove="Resources\sick.png" />
+    <None Remove="Resources\small_add.png" />
+    <None Remove="Resources\small_delete.png" />
+    <None Remove="Resources\small_edit.png" />
+    <None Remove="Resources\smiley.png" />
+    <None Remove="Resources\spanner.png" />
+    <None Remove="Resources\specifications.png" />
+    <None Remove="Resources\speechbubble.png" />
+    <None Remove="Resources\splash-small.png" />
+    <None Remove="Resources\split.png" />
+    <None Remove="Resources\square.png" />
+    <None Remove="Resources\star.png" />
+    <None Remove="Resources\stop.png" />
+    <None Remove="Resources\supplier.png" />
+    <None Remove="Resources\target.png" />
+    <None Remove="Resources\taxcode.png" />
+    <None Remove="Resources\team.png" />
+    <None Remove="Resources\template.png" />
+    <None Remove="Resources\text.png" />
+    <None Remove="Resources\tick.png" />
+    <None Remove="Resources\tick-sml.png" />
+    <None Remove="Resources\time.png" />
+    <None Remove="Resources\trolley.png" />
+    <None Remove="Resources\truck.png" />
+    <None Remove="Resources\unitofmeasure.png" />
+    <None Remove="Resources\uparrow.png" />
+    <None Remove="Resources\upload.png" />
+    <None Remove="Resources\user.png" />
+    <None Remove="Resources\videorecording.png" />
+    <None Remove="Resources\view.png" />
+    <None Remove="Resources\viewpage.png" />
+    <None Remove="Resources\warehouse.png" />
+    <None Remove="Resources\warning.png" />
+    <None Remove="Resources\wrench.png" />
+    <None Remove="Resources\zoomin.png" />
+    <None Remove="Resources\zoomout.png" />
+    <None Remove="Panels\Schedule\**" />
+    <None Remove=".gitignore" />
+    <None Remove="prsdesktop.iss" />
+    <None Remove="Resources\revision.png" />
+    <None Remove="Resources\caelndar.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Update="Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Remove="Panels\Schedule\**" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Update="Properties\Settings.Designer.cs">
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Update="Resources.Designer.cs">
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Remove="Panels\Schedule\**" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Update="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\InABox\InABox.Client.IPC\InABox.Client.IPC.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Client.Local\InABox.Client.Local.csproj" />
+    <ProjectReference Include="..\..\inabox\inabox.client.rest\InABox.Client.Rest\InABox.Client.Rest.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Configuration\InABox.Configuration.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Core\InABox.Core.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Database.SQLite\InABox.Database.SQLite.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.DatabaseProxy\InABox.DatabaseProxy.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Database\InABox.Database.csproj" />
+    <ProjectReference Include="..\..\InABox\inabox.dxf\InABox.Dxf.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Logging\InABox.Logging.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Mailer.Exchange\InABox.Mailer.Exchange.csproj" />
+    <ProjectReference Include="..\..\InABox\inabox.mailer.imap\InABox.Mailer.IMAP.csproj" />
+    <ProjectReference Include="..\..\InABox\InABox.Scripting\InABox.Scripting.csproj" />
+    <ProjectReference Include="..\..\InABox\inabox.wpf\InABox.Wpf.csproj" />
+    <ProjectReference Include="..\PRS.Classes\PRSClasses.csproj" />
+    <ProjectReference Include="..\PRS.Shared\PRS.Shared.csproj" />
+  </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="DeviceId.Windows.Wmi" Version="6.2.0" />
+    <PackageReference Include="Dirkster.AvalonDock" Version="4.70.3" />
+    <PackageReference Include="Dirkster.AvalonDock.Themes.Metro" Version="4.70.3" />
+    <PackageReference Include="Fluent.Ribbon" Version="9.0.4" />
+    <PackageReference Include="Geocoding.Core" Version="4.0.1" />
+    <PackageReference Include="Geocoding.Google" Version="4.0.1" />
+    <PackageReference Include="gmaps-api-net" Version="0.33.0" />
+    <PackageReference Include="Microsoft.Office.Interop.Outlook" Version="15.0.4797.1004" />
+    <PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
+    <PackageReference Include="MotorolaCoreScannerNetStandard" Version="1.1.5" />
+    <PackageReference Include="NAudio" Version="2.1.0" />
+    <PackageReference Include="NDesk.Options.Core" Version="1.2.5" />
+    <PackageReference Include="net.sf.mpxj" Version="10.9.0" />
+    <PackageReference Include="Scriban" Version="5.5.0" />
+    <PackageReference Include="SharpAvi" Version="3.0.1" />
+    <PackageReference Include="Syncfusion.DataGridExcelExport.Wpf" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Gantt.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Licensing" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfBarcode.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfChart.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfDiagram.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfKanban.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfMaps.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfSchedule.WPF" Version="18.3.0.53" />
+    <PackageReference Include="Syncfusion.SfScheduler.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.SfSpreadsheet.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Themes.FluentLight.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Themes.MaterialLight.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Themes.Office2019White.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Themes.SystemTheme.WPF" Version="20.2.0.46" />
+    <PackageReference Include="Syncfusion.Tools.WPF" Version="20.2.0.46" />
+    <PackageReference Include="System.IO.Ports" Version="6.0.0" />
+    <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" />
+  </ItemGroup>
+  <ItemGroup>
+  </ItemGroup>
+  <ItemGroup>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Dashboards\Projects\Planner" />
+    <Folder Include="Grids\Meeting" />
+  </ItemGroup>
+  <Import Project="..\PRS.Stores\PRSStores.projitems" Label="Shared" />
+  <Import Project="..\PRS.Scheduler\Comal.TaskScheduler.Shared.projitems" Label="Shared" />
+  <Import Project="..\..\InABox\InABox.DeviceIdentifier\InABox.DeviceIdentifier.projitems" Label="Shared" />
+  <ItemGroup>
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\Accessibility.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\dirkster.avalondock\4.70.3\lib\net5.0-windows7.0\AvalonDock.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\dirkster.avalondock.themes.metro\4.70.3\lib\net5.0-windows7.0\AvalonDock.Themes.Metro.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\portable.bouncycastle\1.9.0\lib\netstandard2.0\BouncyCastle.Crypto.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\ceras\4.1.7\lib\netstandard2.0\Ceras.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\colorhelper\1.8.0\lib\netstandard2.0\ColorHelper.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\commons-collections4-4.4.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\commons-io-2.11.0.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\commons-lang3-3.10.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\commons-logging-1.2.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\commons-math3-3.6.1.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\controlzex\5.0.2\lib\net5.0-windows7.0\ControlzEx.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\deviceid\6.2.0\lib\net6.0\DeviceId.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\deviceid.windows\6.2.0\lib\net6.0\DeviceId.Windows.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\deviceid.windows.wmi\6.2.0\lib\net6.0\DeviceId.Windows.Wmi.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\expressiveparser\2.5.0\lib\netstandard2.0\Expressive.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fastreport.net.pro\2023.1.13\lib\net5.0-windows7.0\FastReport.Bars.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fastreport.compat\2023.1.8\lib\net5.0-windows7.0\FastReport.Compat.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fastreport.datavisualization\2023.1.0\lib\net5.0-windows7.0\FastReport.DataVisualization.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fastreport.net.pro\2023.1.13\lib\net5.0-windows7.0\FastReport.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fastreport.net.pro\2023.1.13\lib\net5.0-windows7.0\FastReport.Editor.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fastreport.net.pro\2023.1.13\lib\net5.0-windows7.0\FastReport.VSDesign.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\fluent.ribbon\9.0.4\lib\net5.0-windows7.0\Fluent.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\geocoding.core\4.0.1\lib\netstandard1.3\Geocoding.Core.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\geocoding.google\4.0.1\lib\netstandard1.3\Geocoding.Google.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\ghostscript.netcore\1.0.1\lib\netcoreapp3.1\GhostScript.Net.Core.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\gmaps-api-net\0.33.0\lib\netstandard1.3\Google.Maps.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\h.formatters.binaryformatter\2.0.42\lib\netstandard2.0\H.Formatters.BinaryFormatter.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\h.formatters.ceras\2.0.42\lib\netstandard2.0\H.Formatters.Ceras.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\h.formatters\2.0.42\lib\netstandard2.0\H.Formatters.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\h.pipes\2.0.42\lib\net6.0\H.Pipes.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\avalonedit\6.1.2.30\lib\net5.0-windows7.0\ICSharpCode.AvalonEdit.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\sharpziplib\1.3.3\lib\netstandard2.1\ICSharpCode.SharpZipLib.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.AWT.WinForms.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Beans.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Charsets.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Cldrdata.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Corba.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Core.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Jdbc.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Localedata.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Management.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Media.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Misc.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Naming.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Nashorn.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Remoting.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Security.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.SwingAWT.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Text.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Tools.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.Util.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.API.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.Bind.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.Crypto.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.Parse.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.Transform.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.WebServices.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.OpenJDK.XML.XPath.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.Reflection.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.Runtime.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-ikvm\10.9.0\lib\netcoreapp3.1\IKVM.Runtime.JNI.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.client.ipc\bin\Debug\net6.0\InABox.Client.IPC.dll" />
+    <ReferencePath Include="C:\Development\InABox\InABox.Client.Local\bin\Debug\net6.0\InABox.Client.Local.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.client.rest\InABox.Client.Rest\bin\Debug\netstandard2.1\InABox.Client.Rest.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.client.websocket\bin\Debug\netstandard2.1\InABox.Client.WebSocket.dll" />
+    <ReferencePath Include="C:\Development\inabox\InABox.Configuration\bin\Debug\netstandard2.1\InABox.Configuration.dll" />
+    <ReferencePath Include="C:\Development\inabox\InABox.Core\bin\Debug\netstandard2.1\InABox.Core.dll" />
+    <ReferencePath Include="C:\Development\InABox\InABox.Database\bin\Debug\net6.0\InABox.Database.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.database.sqlite\bin\Debug\net6.0\InABox.Database.SQLite.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.databaseproxy\bin\Debug\net6.0\InABox.DatabaseProxy.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.dxf\bin\Debug\net6.0\InABox.Dxf.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.ipc.shared\bin\Debug\net6.0\InABox.IPC.Shared.dll" />
+    <ReferencePath Include="C:\Development\inabox\InABox.Logging\bin\Debug\net6.0\InABox.Logging.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.logging.shared\bin\Debug\netstandard2.1\InABox.Logging.Shared.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.mailer.exchange\bin\Debug\net6.0\InABox.Mailer.Exchange.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.mailer.imap\bin\Debug\net6.0\InABox.Mailer.IMAP.dll" />
+    <ReferencePath Include="C:\Development\InABox\InABox.Scripting\bin\Debug\net6.0\InABox.Scripting.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.websocket.shared\bin\Debug\netstandard2.1\InABox.WebSocket.Shared.dll" />
+    <ReferencePath Include="C:\Development\inabox\inabox.wpf\bin\Debug\net6.0-windows\InABox.Wpf.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\inflector.netstandard\1.2.2\lib\netstandard2.0\Inflector.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\motorolacorescannernetstandard\1.1.5\lib\netstandard2.0\Interop.CoreScanner.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\jackcess-4.0.1.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\jsoup-1.15.1.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\log4j-api-2.17.2.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\mailkit\3.3.0\lib\net6.0\MailKit.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.bcl.asyncinterfaces\5.0.0\lib\netstandard2.1\Microsoft.Bcl.AsyncInterfaces.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.analyzerutilities\3.3.0\lib\netstandard2.0\Microsoft.CodeAnalysis.AnalyzerUtilities.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.csharp\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.csharp.features\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.Features.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.csharp.scripting\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.Scripting.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.csharp.workspaces\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.Workspaces.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.common\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.features\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.Features.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.scripting.common\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.Scripting.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.visualbasic\3.3.1\lib\netstandard2.0\Microsoft.CodeAnalysis.VisualBasic.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.workspaces.common\4.0.1\lib\netcoreapp3.1\Microsoft.CodeAnalysis.Workspaces.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\Microsoft.CSharp.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.diasymreader\1.3.0\lib\netstandard1.1\Microsoft.DiaSymReader.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.exchange.webservices.netstandard\1.1.3\lib\netstandard2.0\Microsoft.Exchange.WebServices.NETStandard.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.office.interop.outlook\15.0.4797.1004\lib\netstandard2.0\Microsoft.Office.Interop.Outlook.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\Microsoft.VisualBasic.Core.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\Microsoft.VisualBasic.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\Microsoft.VisualBasic.Forms.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\Microsoft.Win32.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\Microsoft.Win32.Registry.AccessControl.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\Microsoft.Win32.Registry.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\Microsoft.Win32.SystemEvents.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.xaml.behaviors.wpf\1.1.39\lib\net5.0-windows7.0\Microsoft.Xaml.Behaviors.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\mimekit\3.3.0\lib\net6.0\MimeKit.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\motorolacorescannernetstandard\1.1.5\lib\netstandard2.0\Motorola.Snapi.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj\10.9.0\lib\netcoreapp3.1\mpxj.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\MpxjUtilities.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\mscorlib.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio.asio\2.1.0\lib\netstandard2.0\NAudio.Asio.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio.core\2.1.0\lib\netstandard2.0\NAudio.Core.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio\2.1.0\lib\net6.0-windows7.0\NAudio.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio.midi\2.1.0\lib\netstandard2.0\NAudio.Midi.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio.wasapi\2.1.0\lib\netstandard2.0\NAudio.Wasapi.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio.winforms\2.1.0\lib\netcoreapp3.1\NAudio.WinForms.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\naudio.winmm\2.1.0\lib\netstandard2.0\NAudio.WinMM.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\ndesk.options.core\1.2.5\lib\netcoreapp3.0\NDesk.Options.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\netdxf.netstandard\2.4.0\lib\netcoreapp3.1\netDxf.netstandard.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\netstandard.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\newtonsoft.json\13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\npoi\2.5.6\lib\netstandard2.1\NPOI.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\npoi\2.5.6\lib\netstandard2.1\NPOI.OOXML.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\npoi\2.5.6\lib\netstandard2.1\NPOI.OpenXml4Net.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\npoi\2.5.6\lib\netstandard2.1\NPOI.OpenXmlFormats.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\poi-5.2.2.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationCore.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.Aero.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.Aero2.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.AeroLite.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.Classic.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.Luna.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationFramework.Royale.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\PresentationUI.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\propertychanged.fody\3.4.1\lib\netstandard2.1\PropertyChanged.dll" />
+    <ReferencePath Include="C:\Development\PRS\PRS.Shared\bin\Debug\net6.0-windows\PRS.Shared.dll" />
+    <ReferencePath Include="C:\Development\PRS\prs.classes\bin\Debug\netstandard2.1\PRSClasses.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\ReachFramework.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\restsharp\110.2.0\lib\net6.0\RestSharp.dll" />
+    <ReferencePath Include="C:\Development\3rdpartylibs\roslynpad\src\RoslynPad.Editor.Windows\bin\Debug\net6.0-windows\RoslynPad.Editor.Windows.dll" />
+    <ReferencePath Include="C:\Development\3rdpartylibs\roslynpad\src\RoslynPad.Roslyn\bin\Debug\netstandard2.0\RoslynPad.Roslyn.dll" />
+    <ReferencePath Include="C:\Development\3rdPartyLibs\RoslynPad\src\RoslynPad.Roslyn.Windows\bin\Debug\net6.0-windows\RoslynPad.Roslyn.Windows.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\rtfparserkit-1.16.0.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\scriban\5.5.0\lib\net6.0\Scriban.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\sharpavi\3.0.1\lib\net5.0-windows7.0\SharpAvi.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\net.sf.mpxj-common\10.9.0\lib\netcoreapp3.1\sqlite-jdbc-3.36.0.3.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.compression.base\20.2.0.46\lib\net5.0\Syncfusion.Compression.Base.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.data.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Data.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.docio.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.DocIO.Base.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.gantt.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Gantt.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.grid.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Grid.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.gridcommon.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.GridCommon.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.licensing\20.2.0.46\lib\net6.0\Syncfusion.Licensing.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.linq.base\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Linq.Base.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.officechart.base\20.2.0.46\lib\net5.0\Syncfusion.OfficeChart.Base.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.pdf.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Pdf.Base.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.pdfviewer.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.PdfViewer.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.projio.base\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.ProjIO.Base.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfbarcode.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfBarcode.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfbusyindicator.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfBusyIndicator.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfcellgrid.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfCellGrid.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfchart.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfChart.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfdiagram.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfDiagram.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfgrid.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfGrid.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfgridcommon.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfGridCommon.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.datagridexcelexport.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfGridConverter.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfimageeditor.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfImageEditor.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfinput.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfInput.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfkanban.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfKanban.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfmaps.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfMaps.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfradialmenu.wpf\18.3.0.53\lib\netcoreapp5.0\Syncfusion.SfRadialMenu.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfrichtextboxadv.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfRichTextBoxAdv.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfschedule.wpf\18.3.0.53\lib\netcoreapp5.0\Syncfusion.SfSchedule.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfscheduler.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfScheduler.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfshared.wpf\18.3.0.53\lib\netcoreapp5.0\Syncfusion.SfShared.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfskinmanager.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfSkinManager.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.sfspreadsheet.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.SfSpreadsheet.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.shared.wpf.classic\19.4.0.56\lib\net5.0-windows7.0\Syncfusion.Shared.WPF.Classic.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.shared.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Shared.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.themes.fluentlight.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Themes.FluentLight.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.themes.materiallight.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Themes.MaterialLight.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.themes.office2019white.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Themes.Office2019White.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.themes.systemtheme.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Themes.SystemTheme.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.tools.wpf.classic\19.4.0.56\lib\net5.0-windows7.0\Syncfusion.Tools.WPF.Classic.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.tools.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.Tools.WPF.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\syncfusion.xlsio.wpf\20.2.0.46\lib\net5.0-windows7.0\Syncfusion.XlsIO.Base.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.AppContext.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Buffers.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.CodeDom.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Collections.Concurrent.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Collections.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Collections.Immutable.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Collections.NonGeneric.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Collections.Specialized.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ComponentModel.Annotations.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ComponentModel.DataAnnotations.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ComponentModel.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ComponentModel.EventBasedAsync.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ComponentModel.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ComponentModel.TypeConverter.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.composition.attributedmodel\6.0.0\lib\net6.0\System.Composition.AttributedModel.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.composition.convention\6.0.0\lib\net6.0\System.Composition.Convention.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.composition.hosting\6.0.0\lib\net6.0\System.Composition.Hosting.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.composition.runtime\6.0.0\lib\net6.0\System.Composition.Runtime.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.composition.typedparts\6.0.0\lib\net6.0\System.Composition.TypedParts.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Configuration.ConfigurationManager.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Configuration.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Console.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Core.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Data.Common.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Data.DataSetExtensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Data.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.data.odbc\4.7.0\ref\netstandard2.0\System.Data.Odbc.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.data.oledb\4.7.0\ref\netstandard2.0\System.Data.OleDb.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.data.sqlclient\4.8.0\ref\netcoreapp2.1\System.Data.SqlClient.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\stub.system.data.sqlite.core.netstandard\1.0.117\lib\netstandard2.1\System.Data.SQLite.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Design.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.Contracts.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.Debug.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.DiagnosticSource.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.EventLog.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.FileVersionInfo.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.PerformanceCounter.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.Process.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.StackTrace.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.TextWriterTraceListener.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.Tools.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.TraceSource.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Diagnostics.Tracing.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.DirectoryServices.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Drawing.Common.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Drawing.Design.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Drawing.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Drawing.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Dynamic.Runtime.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Formats.Asn1.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Globalization.Calendars.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Globalization.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Globalization.Extensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.Compression.Brotli.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.Compression.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.Compression.FileSystem.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.Compression.ZipFile.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.FileSystem.AccessControl.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.FileSystem.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.FileSystem.DriveInfo.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.FileSystem.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.FileSystem.Watcher.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.IsolatedStorage.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.MemoryMappedFiles.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.IO.Packaging.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.io.pipelines\5.0.1\ref\netcoreapp2.0\System.IO.Pipelines.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.Pipes.AccessControl.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.Pipes.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.io.ports\6.0.0\lib\net6.0\System.IO.Ports.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.IO.UnmanagedMemoryStream.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Linq.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Linq.Expressions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Linq.Parallel.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Linq.Queryable.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.management\6.0.0\lib\net6.0\System.Management.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Memory.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Http.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Http.Json.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.HttpListener.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Mail.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.NameResolution.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.NetworkInformation.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Ping.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Requests.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Security.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.ServicePoint.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.Sockets.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.WebClient.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.WebHeaderCollection.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.WebProxy.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.WebSockets.Client.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Net.WebSockets.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Numerics.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Numerics.Vectors.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ObjectModel.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Printing.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.reactive\5.0.0\lib\net5.0\System.Reactive.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.reactive.linq\5.0.0\lib\netstandard2.0\System.Reactive.Linq.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.DispatchProxy.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.Emit.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.Emit.ILGeneration.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.Emit.Lightweight.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.Extensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.Metadata.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Reflection.TypeExtensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Resources.Extensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Resources.Reader.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Resources.ResourceManager.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Resources.Writer.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.CompilerServices.Unsafe.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.CompilerServices.VisualC.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Extensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Handles.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.InteropServices.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.InteropServices.RuntimeInformation.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Intrinsics.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Loader.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Numerics.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Serialization.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Serialization.Formatters.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Serialization.Json.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Serialization.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Runtime.Serialization.Xml.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.AccessControl.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Claims.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Algorithms.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Cng.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Csp.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Encoding.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.OpenSsl.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Pkcs.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.ProtectedData.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.X509Certificates.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Security.Cryptography.Xml.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Security.Permissions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Principal.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.Principal.Windows.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Security.SecureString.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ServiceModel.Web.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ServiceProcess.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Text.Encoding.CodePages.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Text.Encoding.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Text.Encoding.Extensions.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.text.encodings.web\7.0.0\lib\net6.0\System.Text.Encodings.Web.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\system.text.json\7.0.2\lib\net6.0\System.Text.Json.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Text.RegularExpressions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Threading.AccessControl.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Channels.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Overlapped.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Tasks.Dataflow.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Tasks.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Tasks.Extensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Tasks.Parallel.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Thread.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.ThreadPool.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Threading.Timer.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Transactions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Transactions.Local.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.ValueTuple.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Web.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Web.HttpUtility.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Controls.Ribbon.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Windows.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Extensions.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Forms.Design.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Forms.Design.Editors.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Forms.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Forms.Primitives.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Input.Manipulations.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Windows.Presentation.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\System.Xaml.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.Linq.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.ReaderWriter.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.Serialization.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.XDocument.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.XmlDocument.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.XmlSerializer.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.XPath.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.16\ref\net6.0\System.Xml.XPath.XDocument.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\textfieldparserstandard\1.0.0\lib\netstandard2.0\TextFieldParserStandard.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\UIAutomationClient.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\UIAutomationClientSideProviders.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\UIAutomationProvider.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\UIAutomationTypes.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\websocketsharp.core\1.0.0\lib\netstandard2.0\websocket-sharp-core.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\WindowsBase.dll" />
+    <ReferencePath Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\ref\net6.0\WindowsFormsIntegration.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\windowsshortcutfactory\1.1.0\lib\net6.0-windows7.0\WindowsShortcutFactory.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\extended.wpf.toolkit\4.4.0\lib\net5.0\Xceed.Wpf.AvalonDock.NET5.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\extended.wpf.toolkit\4.4.0\lib\net5.0\Xceed.Wpf.AvalonDock.Themes.Aero.NET5.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\extended.wpf.toolkit\4.4.0\lib\net5.0\Xceed.Wpf.AvalonDock.Themes.Metro.NET5.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\extended.wpf.toolkit\4.4.0\lib\net5.0\Xceed.Wpf.AvalonDock.Themes.VS2010.NET5.dll" />
+    <ReferencePath Include="C:\Users\Nicholas.Tan\.nuget\packages\extended.wpf.toolkit\4.4.0\lib\net5.0\Xceed.Wpf.Toolkit.NET5.dll" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\Calendar\Calendar.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\Calendar\CalendarBlock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\EmployeeSelector\EmployeeSelector.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\JobSelector\JobSelector.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\ProductGroupSelector\ProductGroupSelector.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\Spreadsheet\SpreadsheetWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Components\TeamSelector\TeamSelector.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Configuration\CustomModuleManager.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Configuration\DataBaseConfiguration.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Common\DigitalFormsDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Common\IncompleteTasksDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Common\QADashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Common\TaskWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\DashboardContainer.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Equipment\EquipmentSchedulesDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\HumanResources\EmployeeQualificationDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\HumanResources\TimeSheetExceptionDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\HumanResources\TimesheetWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Logistics\ConsignmentsWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Logistics\DeliveredToSiteWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Logistics\RackListWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Logistics\ReadyToGoWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Manufacturing\FactoryAllocationWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Manufacturing\FactoryFloorAnalysis.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Manufacturing\FactoryProductivity.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Manufacturing\JobManufacturingSummary.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Manufacturing\ManufacturingStatusWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Manufacturing\ManufacturingTemplateAnalysis.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Projects\JobDocumentStatusChart.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\System\DatabaseActivityDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\System\UserActivity.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\UtilityDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\Warehousing\RequisitionsWidget.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Dashboards\WidgetDashboard.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\ConsignmentDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\ContactDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\DeletedFormWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\DeliveryDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\DigitalFormsDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\JobDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\DockPanels\ProductLookupDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\ChangePassword.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\Console.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\DataModelTemplateForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\DeliveryBuilder.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\DigitalKeyForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\DispatchConfirmation.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\EmailForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\EntitySelectionWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\Export\ExportForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\GenerateStickers.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\ImportBillWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\LocationForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\LoginScreen.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\MapForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\PinLogin.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Forms\RecordSelectionDialog.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\JobRequisitionHoldingsReview.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\JobRequisitionTakeStockUserControl.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\MainWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\ModuleConfigurationWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Attendance\AttendancePanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Consignments\ConsignmentsPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Customers\CustomerDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Customers\CustomerPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DailyReports\DailyReport.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DailyReports\DailyReportFavouriteWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DailyReports\QuickTask.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DailyReports\WindowTrackerSetup.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DailyReports\WindowTrackerSummary.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DataEntry\DataEntryPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DataEntry\DocumentManipulationWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DataEntry\DocumentPage.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DataEntry\ScanPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DeliveredOnSite\DeliveredOnSitePanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\DeliveryItems\ReadyToGoPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Delivery\DeliveryPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\EmployeePlanner\EmployeeResourcePlanner.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Employees\EmployeeDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Employees\EmployeePanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Equipment\EquipmentPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Factory\FactoryLostTimeChooser.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Factory\FactoryPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Factory\ManufacturingTreatmentWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\GPSTrackers\GPSTrackerDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\GPSTrackers\GPSTrackers.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Invoices\InvoiceCalculationSelector.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Invoices\InvoicePanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\JobPlanner\JobResourcePlanner.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\DocumentSets\JobDocumentSetPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\DocumentSets\JobDocumentSetTree.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\EmailInterfaceForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobAssignmentPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobBillOfMaterialsPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobDesignImportWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobDesignList.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobDesignSetDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobDocuments.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobEmployeePanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobRequisitionPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobStagesPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobStockPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Jobs\JobSummaryPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\LeaveRequests\LeaveCalendar.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\LeaveRequests\LeaveRequestPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Manufacturing\ManufacturingAllocationPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Manufacturing\ManufacturingPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Manufacturing\ManufacturingPanelColumn.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Manufacturing\ManufacturingPanelJobColumn.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Maps\MapsPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Meeting\MeetingPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Notifications\NotificationForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Notifications\NotificationPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Notifications\NotificationsDock.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\OrgChart\OrgChartPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Cost Sheets\CostSheetPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Job Requisitions\JobRequisitionsPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\JobRequisitionReviewPage.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Kits\KitPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Locations\StockLocationPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Locations\StockTakeWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Locations\StockTreatmentWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Master List\ProductPricingForm.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Master List\ProductsPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\Movements\StockMovementPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Products\ProductPricing.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\CostSheetPricingSelection.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteContracts.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteCostSheets.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteDesigns.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteDiagramControl.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteDiagrams.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuotePanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteProposalDetails.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\QuoteProposals.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Quotes\StencilDesigner.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Requisitions\RequisitionItemHoldingSelector.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Requisitions\RequisitionPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Security\Global\GlobalTokenWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Security\Groups\GroupTokenPage.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Security\User\UserSecurityTokenPage.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Shipments\EditShipment.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Shipments\ShippingPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\StockSummary\StockSummaryControl.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Suppliers\SupplierBillPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Suppliers\SupplierPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Suppliers\SupplierPurchaseOrderPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Tasks\KanbanNotes.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Tasks\TaskPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Tasks\TaskPlannerControl.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Tasks\TasksByStatusControl.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Tasks\TasksByUserControl.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Timesheets\TimeSheetLeaveProcessor.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Timesheets\TimesheetPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Users\QR2FAWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Panels\Users\UserPanel.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\PreviewWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\SecondaryWindow.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\Utils\SelectDatabase.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\App.g.cs" />
+    <Compile Include="C:\Development\PRS\PRS.Desktop\obj\Debug\net6.0-windows\GeneratedInternalTypeHelper.g.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Analyzer Include="C:\Program Files\dotnet\sdk\7.0.203\Sdks\Microsoft.NET.Sdk\targets\..\analyzers\Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll" />
+    <Analyzer Include="C:\Program Files\dotnet\sdk\7.0.203\Sdks\Microsoft.NET.Sdk\targets\..\analyzers\Microsoft.CodeAnalysis.NetAnalyzers.dll" />
+    <Analyzer Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.2\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
+    <Analyzer Include="C:\Users\Nicholas.Tan\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.2\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
+    <Analyzer Include="C:\Users\Nicholas.Tan\.nuget\packages\system.text.json\7.0.2\analyzers\dotnet\roslyn4.4\cs\System.Text.Json.SourceGeneration.dll" />
+    <Analyzer Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\analyzers/dotnet/System.Windows.Forms.Analyzers.dll" />
+    <Analyzer Include="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.16\analyzers/dotnet/cs/System.Windows.Forms.Analyzers.CSharp.dll" />
+  </ItemGroup>
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
+</Project>

+ 0 - 138
prs.desktop/Panels/Products/Job Requisitions/JobRequiItemAvailableStockGrid.cs

@@ -1,138 +0,0 @@
-using Comal.Classes;
-using InABox.Clients;
-using InABox.Core;
-using InABox.DynamicGrid;
-using InABox.WPF;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace PRSDesktop
-{
-    public delegate void StockReserved();
-    public class JobRequiItemAvailableStockGrid : DynamicDataGrid<StockHolding>
-    {
-        public event StockReserved OnStockReserved;
-        public Guid ProductID = Guid.Empty;
-        public JobRequisitionItem Item = new JobRequisitionItem();
-        public Guid empID = new Guid();
-
-        public JobRequiItemAvailableStockGrid()
-        {
-            Options.AddRange(
-                 DynamicGridOption.SelectColumns,
-                 DynamicGridOption.FilterRows,
-                 DynamicGridOption.RecordCount,
-                 DynamicGridOption.EditRows
-             );
-            HiddenColumns.Add(x => x.Qty);
-            AddButton("Reserve For Job", null, ReserveStock);
-        }
-
-        private bool ReserveStock(Button btn, CoreRow[] rows)
-        {
-            if (!rows.Any())
-            {
-                MessageBox.Show("Please select at least one holding to reserve");
-                return false;
-            }
-
-            var holding = rows[0].ToObject<StockHolding>();
-            int units = 0;
-
-            if (Item.Qty <= holding.Units)
-                units = Convert.ToInt32(Item.Qty);
-            else
-                units = Convert.ToInt32(holding.Units);
-
-            if (NumberEdit.Execute("Enter amount to reserve", 1, units, ref units))
-            {
-                StockMovementBatch batch = new StockMovementBatch();
-                batch.Type = StockMovementBatchType.Transfer;
-                batch.Notes = "Reserving Stock for Requi: " + Item.Requisition.Number;
-
-                new Client<StockMovementBatch>().Save(batch, "Created from Job Requi Item Reserve Stock Function");
-                List<StockMovement> movements = new List<StockMovement>
-                {
-                    CreateMovement(StockMovementType.Issue, units, holding, batch),
-                    CreateMovement(StockMovementType.Receive, units, holding, batch)
-                };
-
-                new Client<StockMovement>().Save(movements, "Created from Job Requi Item Reserve Stock Function");
-
-                Item.Status = JobRequisitionItemStatus.Reserved;
-
-                new Client<JobRequisitionItem>().Save(Item, "Updated from Job Requi Item Reserve Stock Function");
-               
-                MessageBox.Show("Success - " + Item.Product.Name + " stock reserved for Requisition " + Item.Requisition.Number);
-
-                OnStockReserved?.Invoke();
-            }
-
-            return true;
-        }
-
-        enum StockMovementType 
-        {
-            Issue,
-            Receive
-        }
-
-        private StockMovement CreateMovement(StockMovementType type, double units, StockHolding holding, StockMovementBatch batch)
-        {
-            StockMovement mvt = new StockMovement();
-            mvt.System = true;
-            mvt.Batch.ID = batch.ID;
-            mvt.Batch.Type = StockMovementBatchType.Transfer;         
-            mvt.Dimensions.CopyFrom(holding.Dimensions);
-            mvt.Style.ID = holding.Style.ID;
-            mvt.Location.ID = holding.Location.ID;
-            mvt.Product.ID = holding.Product.ID;
-            mvt.Date = DateTime.Now;
-            mvt.IsTransfer = true;
-            mvt.Notes = "Reserving Stock for Requi: " + Item.Requisition.Number;
-            mvt.JobRequisitionItem.ID = Item.ID;
-            mvt.Employee.ID = empID;
-
-            if (type == StockMovementType.Issue)
-            {
-                mvt.Issued = units;
-                mvt.Job.ID = holding.Job.ID;
-            }
-            else
-            {
-                mvt.Received = units;
-                mvt.Job.ID = Item.Job.ID;
-            }
-                
-            return mvt;
-        }
-
-        
-
-        protected override void Reload(Filters<StockHolding> criteria, Columns<StockHolding> columns, ref SortOrder<StockHolding> sort, Action<CoreTable, Exception> action)
-        {
-            if (ProductID != Guid.Empty)
-                criteria.Add(new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(ProductID));
-            else
-                criteria.Add(new Filter<StockHolding>().None());
-
-            base.Reload(criteria, columns, ref sort, action);
-        }
-
-        protected override bool FilterRecord(CoreRow row)
-        {
-            var result = base.FilterRecord(row);
-            if (result)
-            {
-                var qty = row.Get<StockHolding, double>(x => x.Qty);
-                var iszero = CoreUtils.IsEffectivelyEqual(qty, 0.0F);
-                result = !iszero;
-            }
-
-            return result;
-        }
-    }
-}

+ 0 - 44
prs.desktop/Panels/Products/Job Requisitions/JobRequiItemMovementsGrid.cs

@@ -1,44 +0,0 @@
-using Comal.Classes;
-using InABox.Core;
-using InABox.DynamicGrid;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-
-namespace PRSDesktop
-{
-    public class JobRequiItemMovementsGrid : DynamicDataGrid<StockMovement>
-    {
-        public Guid JobRequiItemID = Guid.Empty;
-        public JobRequiItemMovementsGrid()
-        {
-            Options.AddRange(
-                     DynamicGridOption.SelectColumns,
-                     DynamicGridOption.FilterRows,
-                     DynamicGridOption.RecordCount,
-                     DynamicGridOption.EditRows
-                 );
-            HiddenColumns.Add(x => x.Qty);
-
-            Options.Remove(DynamicGridOption.AddRows);
-            Options.Remove(DynamicGridOption.DeleteRows);
-            Options.Remove(DynamicGridOption.ImportData);
-            Options.Remove(DynamicGridOption.ExportData);
-
-        }
-
-        protected override void Reload(Filters<StockMovement> criteria, Columns<StockMovement> columns, ref SortOrder<StockMovement>? sort, Action<CoreTable?, Exception?> action)
-        {
-            if (JobRequiItemID != Guid.Empty)
-                criteria.Add(new Filter<StockMovement>(x => x.JobRequisitionItem.ID).IsEqualTo(JobRequiItemID));
-            else
-                criteria.Add(new Filter<StockMovement>().None());
-
-            base.Reload(criteria, columns, ref sort, action);
-        }
-    }
-}

+ 182 - 0
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionHoldingsReview.xaml

@@ -0,0 +1,182 @@
+<UserControl x:Class="PRSDesktop.JobRequisitionHoldingsReview"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:PRSDesktop"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <DataTemplate x:Key="template" x:Name="template">
+            <Border BorderThickness="0.75" BorderBrush="Gray" Margin="0" Padding="3">
+                <Grid Background="{Binding Background}" Margin="0" HorizontalAlignment="Stretch">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="0.5*"/>
+                        <ColumnDefinition Width="1.4*"/>
+                        <ColumnDefinition Width="0.26*"/>
+                        <ColumnDefinition Width="0.26*"/>
+                        <ColumnDefinition Width="0.26*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <TextBlock Grid.Column="0" HorizontalAlignment="Center" Text="{Binding JobNumber}" VerticalAlignment="Center"
+                                   TextWrapping="Wrap" FontSize="15" TextAlignment="Center" Width="100" Margin="0"/>
+
+                    <TextBlock Grid.Column="1" HorizontalAlignment="Center" Text="{Binding JobName}" VerticalAlignment="Center"
+                                   TextWrapping="Wrap" FontSize="12" TextAlignment="Left" Width="300" Margin="0"/>
+
+                    <Button Grid.Column="2" x:Name="currentStyle" Content="{Binding StockOfCurrentStyle}" Padding="5, 2, 5, 2" BorderThickness="1" Margin="3, 0, 3, 0"
+                                Background="WhiteSmoke"
+                                Click="Take_Click" HorizontalAlignment="Stretch" VerticalAlignment="Center" FontSize="15"/>
+
+                    <Button Grid.Column="3" x:Name="noStyle" Content="{Binding StockOfNoStyle}"  Padding="5, 2, 5, 2" BorderThickness="1"  Margin="3, 0, 3, 0"
+                                Background="WhiteSmoke"
+                                Click="Take_Click" HorizontalAlignment="Stretch" VerticalAlignment="Center" FontSize="15"/>
+
+                    <Button Grid.Column="4" x:Name="otherStyle" Content="{Binding StockOfOtherStyles}"  Padding="5, 2, 5, 2" BorderThickness="1" Margin="3, 0, 3, 0"
+                                Background="WhiteSmoke"
+                                Click="Take_Click" HorizontalAlignment="Stretch" VerticalAlignment="Center" FontSize="15"/>
+
+                </Grid>
+            </Border>
+        </DataTemplate>
+
+    </UserControl.Resources>
+    <ScrollViewer HorizontalAlignment="Stretch">
+        <Grid>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="auto"/>
+                <RowDefinition Height="auto"/>
+            </Grid.RowDefinitions>
+
+            <Border Grid.Row="0" BorderThickness="1.25" BorderBrush="Gray" Background="WhiteSmoke" Margin="0, 0, 0, 4">
+                <StackPanel>
+                    <TextBlock  x:Name="productLbl" HorizontalAlignment="Center" FontSize="16" Text="Select a Requisition Line to Reserve Stock"
+                            VerticalAlignment="Center" FontWeight="DemiBold" Margin="3"  TextAlignment="Center"/>
+                    <TextBlock  x:Name="styleLbl" HorizontalAlignment="Center" FontSize="16"  TextWrapping="Wrap" TextAlignment="Center"
+                            VerticalAlignment="Center"  Margin="3"/>
+                </StackPanel>
+            </Border>
+
+            <Border Grid.Row="1" BorderThickness="1" BorderBrush="Gray" Background="WhiteSmoke" Margin="0, 0, 0, 5">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="auto"/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0" Margin="0,0,0,0">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="28"/>
+                            <ColumnDefinition Width="1.9*"/>
+                            <ColumnDefinition Width="0.26*"/>
+                            <ColumnDefinition Width="0.26*"/>
+                            <ColumnDefinition Width="0.26*"/>
+                            <ColumnDefinition Width="7"/>
+                        </Grid.ColumnDefinitions>
+
+                        <Border Grid.Column="0" BorderThickness="0.5" BorderBrush="Gray" Background="WhiteSmoke" Margin="0">
+                            <TextBlock HorizontalAlignment="Center" Text="Status"
+                       FontSize="14" VerticalAlignment="Center"  TextAlignment="Center" FontWeight="DemiBold">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                        </Border>
+
+                        <Border Grid.Column="1" BorderThickness="0.5" BorderBrush="Gray" Background="WhiteSmoke" Margin="0">
+                            <TextBlock  Text="Job" HorizontalAlignment="Center" FontSize="14" VerticalAlignment="Center" FontWeight="DemiBold"/>
+                        </Border>
+
+                        <Border Grid.Column="2" BorderThickness="0.5"  BorderBrush="Gray" Background="WhiteSmoke" Margin="0">
+                            <TextBlock x:Name="CurrentStyleText" HorizontalAlignment="Center" MaxWidth="150" Text="Selected Style"
+                       TextWrapping="Wrap" FontSize="14" VerticalAlignment="Center"  TextAlignment="Center" FontWeight="DemiBold">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                        </Border>
+
+                        <Border Grid.Column="3" BorderThickness="0.5"  BorderBrush="Gray" Background="WhiteSmoke" Margin="0">
+                            <TextBlock x:Name="DefaultOrNoStyleText" Text="No Style" MaxWidth="150" TextAlignment="Center"
+                       HorizontalAlignment="Center" FontSize="14" VerticalAlignment="Center"  TextWrapping="Wrap" FontWeight="DemiBold">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                        </Border>
+
+                        <Border Grid.Column="4" BorderThickness="0.5"  BorderBrush="Gray" Background="WhiteSmoke" Margin="0">
+                            <TextBlock Text="Other Styles" HorizontalAlignment="Center" TextWrapping="NoWrap"
+                               FontSize="14" VerticalAlignment="Center" FontWeight="DemiBold">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                        </Border>
+
+                        <Border Grid.Column="5" BorderThickness="0.5" BorderBrush="Gray" Background="WhiteSmoke" Margin="0">
+                        </Border>
+                    </Grid>
+
+                    <Border Grid.Row="1" x:Name="availableTab" BorderThickness="1"  BorderBrush="LightGray" Background="LightGreen" Margin="0" Padding="0" Visibility="Collapsed">
+                        <Grid Margin="0">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="auto"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0" Text="Available" HorizontalAlignment="Center" FontSize="15" Margin="1, 5, 1, 5"
+                               VerticalAlignment="Center">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                            <ListView Grid.Column="1" x:Name="listViewGreen" HorizontalAlignment="Stretch" Margin="0" Background="LightGreen"
+                              VerticalAlignment="Center" BorderThickness="0"
+                              HorizontalContentAlignment="Stretch" Padding="0" />
+
+                        </Grid>
+                    </Border>
+
+                    <Border Grid.Row="2" x:Name="reservedTab" BorderThickness="0.75"  BorderBrush="LightGray" Background="Cornsilk" Margin="0" Padding="0"  Visibility="Collapsed">
+                        <Grid>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="auto"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0" Text="Reserved" HorizontalAlignment="Center" FontSize="15"
+                               VerticalAlignment="Center" Margin="1, 5, 1, 5">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                            <ListView Grid.Column="1" x:Name="listViewYellow" BorderThickness="0" Margin="0" Background="Cornsilk" VerticalAlignment="Center"
+                              HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Padding="0"/>
+                        </Grid>
+                    </Border>
+
+                    <Border Grid.Row="3" x:Name="requisitionedTab" BorderThickness="0.75" BorderBrush="LightGray" Background="LightSalmon" Margin="0" Padding="0"  Visibility="Collapsed">
+                        <Grid>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="auto"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0" Text="Requisitioned" HorizontalAlignment="Center" FontSize="15"  
+                               VerticalAlignment="Center" Margin="1, 5, 1, 5">
+                                <TextBlock.LayoutTransform>
+                                    <RotateTransform Angle="270"/>
+                                </TextBlock.LayoutTransform>
+                            </TextBlock>
+                            <ListView Grid.Column="1" x:Name="listViewRed" Grid.Row="4" BorderThickness="0" Margin="0" Background="LightSalmon" VerticalAlignment="Center"
+                              HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Padding="0"/>
+                        </Grid>
+                    </Border>
+
+                </Grid>
+            </Border>
+        </Grid>
+
+
+    </ScrollViewer>
+</UserControl>

+ 406 - 0
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionHoldingsReview.xaml.cs

@@ -0,0 +1,406 @@
+using Comal.Classes;
+using InABox.Clients;
+using InABox.Core;
+using NPOI.OpenXmlFormats.Dml;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+
+namespace PRSDesktop
+{
+    public delegate void HoldingsReviewRefresh();
+    /// <summary>
+    /// Interaction logic for JobRequisitionHoldingsReview.xaml
+    /// </summary>
+    public partial class JobRequisitionHoldingsReview : UserControl
+    {
+        private ProductStyleLink companyDefaultStyle = new ProductStyleLink();
+        public ProductStyleLink CompanyDefaultStyle
+        {
+            get => companyDefaultStyle;
+            set
+            {
+                companyDefaultStyle = value;
+                DefaultOrNoStyleText.Text = companyDefaultStyle.Description + @" /None";
+            }
+        }
+
+        public event HoldingsReviewRefresh OnHoldingsReviewRefresh;
+        List<Job> jobs = new List<Job>();
+
+        private JobRequisitionItem item;
+        public JobRequisitionItem Item
+        {
+            get
+            {
+                return item;
+            }
+            set
+            {
+                item = value;
+                CalculateHoldings();
+                SetStyle();
+                SetProductName();
+            }
+        }
+
+        private void SetProductName()
+        {
+            productLbl.Text = Item.Product.Name + " (" + Item.Product.Code + ")";
+        }
+
+        private void SetStyle()
+        {
+            if (Item.Style.ID != Guid.Empty)
+                styleLbl.Text = Item.Style.Description + " (" + Item.Style.Code + ")";
+            else
+                styleLbl.Text = "No Style Selected";
+        }
+
+        public JobRequisitionHoldingsReview()
+        {
+            InitializeComponent();
+            CoreTable table = new Client<Job>().Query(null, new Columns<Job>(x => x.ID, x => x.JobNumber, x => x.Name));
+            foreach (var row in table.Rows)
+            {
+                jobs.Add(row.ToObject<Job>());
+            }
+            listViewGreen.ItemTemplate = (DataTemplate)Resources["template"];
+            listViewYellow.ItemTemplate = (DataTemplate)Resources["template"];
+            listViewRed.ItemTemplate = (DataTemplate)Resources["template"];
+            greenList.CollectionChanged += (s, e) =>
+            {
+                if (greenList.Count == 0)
+                    availableTab.Visibility = Visibility.Collapsed;
+                else
+                    availableTab.Visibility = Visibility.Visible;
+            };
+            yellowList.CollectionChanged += (s, e) =>
+            {
+                if (yellowList.Count == 0)
+                    reservedTab.Visibility = Visibility.Collapsed;
+                else
+                    reservedTab.Visibility = Visibility.Visible;
+            };
+            redList.CollectionChanged += (s, e) =>
+            {
+                if (redList.Count == 0)
+                    requisitionedTab.Visibility = Visibility.Collapsed;
+                else
+                    requisitionedTab.Visibility = Visibility.Visible;
+            };
+        }
+
+        private ObservableCollection<JobRequiHoldingsReviewModel> greenList = new ObservableCollection<JobRequiHoldingsReviewModel>();
+        private ObservableCollection<JobRequiHoldingsReviewModel> yellowList = new ObservableCollection<JobRequiHoldingsReviewModel>();
+        private ObservableCollection<JobRequiHoldingsReviewModel> redList = new ObservableCollection<JobRequiHoldingsReviewModel>();
+
+        private void CalculateHoldings()
+        {
+            CoreTable table = new Client<StockMovement>().Query(
+                new Filter<StockMovement>(x => x.Product.ID).IsEqualTo(item.Product.ID)
+                .And(x => x.Location.ID).IsNotEqualTo(Guid.Empty),
+                new Columns<StockMovement>(
+                    x => x.Style.ID,
+                    x => x.Style.Description,
+                    x => x.Style.Code,
+                    x => x.Received,
+                    x => x.Issued,
+                    x => x.Location.ID,
+                    x => x.Location.Code,
+                    x => x.Location.Description,
+                    x => x.Job.ID,
+                    x => x.Job.JobNumber,
+                    x => x.JobRequisitionItem.ID,
+                    x => x.Dimensions.Unit.ID,
+                    x => x.Dimensions.Unit.Formula,
+                    x => x.Dimensions.Unit.Format,
+                    x => x.Dimensions.Unit.HasHeight,
+                    x => x.Dimensions.Unit.HasWeight,
+                    x => x.Dimensions.Unit.HasLength,
+                    x => x.Dimensions.Unit.HasWidth,
+                    x => x.Dimensions.Unit.HasQuantity,
+                    x => x.Dimensions.Quantity,
+                    x => x.Dimensions.Height,
+                    x => x.Dimensions.Weight,
+                    x => x.Dimensions.Width,
+                    x => x.Dimensions.Length,
+                    x => x.Dimensions.UnitSize
+                    ));
+
+            List<StockMovement> stockMovements = new List<StockMovement>();
+
+            foreach (CoreRow row in table.Rows)
+                stockMovements.Add(row.ToObject<StockMovement>());
+
+            CalculateHoldingsForJob(stockMovements);
+            CalculateHoldingsForFreeStock(stockMovements);
+            listViewGreen.ItemsSource = greenList;
+
+            CalculateNonRequiHoldingsForOtherJobs(stockMovements);
+            listViewYellow.ItemsSource = yellowList;
+
+            CalculateAlreadyRequiedHoldings(stockMovements);
+            listViewRed.ItemsSource = redList;
+        }
+
+        private void CalculateHoldingsForJob(List<StockMovement> mvts)
+        {
+            greenList.Clear();
+            var currentJobHoldings = new JobRequiHoldingsReviewModel(item.Job.ID, item.Job.JobNumber, item.Job.Name, mvts, CompanyDefaultStyle);
+            currentJobHoldings.GetStock(item.Job.ID, item.Style.ID);
+            currentJobHoldings.Background = new SolidColorBrush(Colors.LightGreen);
+            greenList.Add(currentJobHoldings);
+        }
+
+        private void CalculateHoldingsForFreeStock(List<StockMovement> mvts)
+        {
+            var freeStock = new JobRequiHoldingsReviewModel(Guid.Empty, "Free Stock", "Free Stock", mvts, CompanyDefaultStyle);
+            freeStock.GetStock(Guid.Empty, item.Style.ID);
+            freeStock.Background = new SolidColorBrush(Colors.LightGreen);
+            greenList.Add(freeStock);
+        }
+
+        private void CalculateNonRequiHoldingsForOtherJobs(List<StockMovement> mvts)
+        {
+            yellowList.Clear();
+            foreach (var job in jobs)
+            {
+                if (job.ID == item.Job.ID)
+                    continue;
+
+                var holdings = new JobRequiHoldingsReviewModel(job.ID, job.JobNumber, job.Name, mvts, CompanyDefaultStyle);
+                holdings.GetStock(job.ID, item.Style.ID);
+
+                if (holdings.StockOfCurrentStyle == 0 && holdings.StockOfNoStyle == 0 && holdings.StockOfOtherStyles == 0)
+                    continue;
+
+                holdings.Background = new SolidColorBrush(Colors.Cornsilk);
+                yellowList.Add(holdings);
+            }
+
+        }
+
+        private void CalculateAlreadyRequiedHoldings(List<StockMovement> mvts)
+        {
+            redList.Clear();
+            foreach (var job in jobs)
+            {
+                var holdings = new JobRequiHoldingsReviewModel(job.ID, job.JobNumber, job.Name, mvts, CompanyDefaultStyle);
+                holdings.AlreadyRequisitioned = true;
+                holdings.GetStock(job.ID, item.Style.ID);
+
+                if (holdings.StockOfCurrentStyle == 0 && holdings.StockOfNoStyle == 0 && holdings.StockOfOtherStyles == 0)
+                    continue;
+
+                holdings.Background = new SolidColorBrush(Colors.LightSalmon);
+                redList.Add(holdings);
+            }
+
+        }
+
+        private void Take_Click(object sender, RoutedEventArgs e)
+        {
+            LaunchStockSelectionPage((sender as Button).Name, (sender as Button).DataContext as JobRequiHoldingsReviewModel);
+        }
+
+        private void LaunchStockSelectionPage(string buttonName, JobRequiHoldingsReviewModel model)
+        {
+            var mvts = model.Movements.Where(x => x.Job.ID == model.JobID);
+
+            switch (buttonName)
+            {
+                case "currentStyle":
+                    if (model.StockOfCurrentStyle == 0)
+                        return;
+                    mvts = mvts
+                        .Where(x => x.Style.ID == Item.Style.ID);
+                    break;
+                case "noStyle":
+                    if (model.StockOfNoStyle == 0)
+                        return;
+                    mvts = mvts
+                        .Where(x => x.Style.ID == Guid.Empty || x.Style.ID == CompanyDefaultStyle.ID);
+                    break;
+                case "otherStyle":
+                    if (model.StockOfOtherStyles == 0)
+                        return;
+                    mvts = mvts
+                        .Where(x => x.Style.ID != Guid.Empty && x.Style.ID != Item.Style.ID && x.Style.ID != CompanyDefaultStyle.ID);
+                    break;
+            }
+
+            List<Guid> locationIDs = new List<Guid>();
+            List<StockHolding> holdings = new List<StockHolding>();
+            List<StockMovement> movements = new List<StockMovement>();
+            foreach (var mvt in mvts)
+                movements.Add(mvt);
+
+            foreach (var mvt in movements)
+            {
+                if (!locationIDs.Contains(mvt.Location.ID))
+                {
+                    var holding = new StockHolding();
+                    holding.Location.ID = mvt.Location.ID;
+                    holding.Location.Description = mvt.Location.Description;
+                    holding.Style.ID = mvt.Style.ID;
+                    holding.Style.Description = mvt.Style.Description;
+                    holding.Style.Code = mvt.Style.Code;
+                    holding.Dimensions.CopyFrom(mvt.Dimensions);
+                    if (mvt.JobRequisitionItem.ID != Guid.Empty && model.AlreadyRequisitioned)
+                    {
+                        holding.Units = mvt.Received - mvt.Issued;
+                        holdings.Add(holding);
+                        locationIDs.Add(mvt.Location.ID);
+                    }
+                    else if (mvt.JobRequisitionItem.ID == Guid.Empty && !model.AlreadyRequisitioned)
+                    {
+                        holding.Units = mvt.Received - mvt.Issued;
+                        holdings.Add(holding);
+                        locationIDs.Add(mvt.Location.ID);
+                    }
+                }
+                else
+                {
+                    if (mvt.JobRequisitionItem.ID != Guid.Empty && model.AlreadyRequisitioned)
+                    {
+                        var holding = holdings.First(x => x.Location.ID == mvt.Location.ID);
+                        holding.Units = holding.Units + mvt.Received - mvt.Issued;
+                    }
+                    else if (mvt.JobRequisitionItem.ID == Guid.Empty && !model.AlreadyRequisitioned)
+                    {
+                        var holding = holdings.First(x => x.Location.ID == mvt.Location.ID);
+                        holding.Units = holding.Units + mvt.Received - mvt.Issued;
+                    }
+
+                }
+            }
+            var filteredHoldings = holdings.Where(x => x.Units > 0);
+
+            var page = new JobRequisitionStockSelectionPage(
+                filteredHoldings,
+                Item,
+                new Job { ID = model.JobID, Name = model.JobName, JobNumber = model.JobNumber },
+                model.AlreadyRequisitioned);
+
+            if (page.ShowDialog() == true)
+                OnHoldingsReviewRefresh?.Invoke();
+        }
+    }
+
+
+    public class JobRequiHoldingsReviewModel
+    {
+        public string JobNumber { get; set; }
+        public string JobName { get; set; }
+        public double StockOfCurrentStyle { get; set; }
+        public double StockOfNoStyle { get; set; }
+        public double StockOfOtherStyles { get; set; }
+        public List<StockMovement> Movements { get; set; }
+        public Brush Background { get; set; }
+        public bool AlreadyRequisitioned { get; set; }
+        public Guid JobID { get; set; }
+        public ProductStyleLink DefaultStyle { get; set; }
+
+        public JobRequiHoldingsReviewModel(Guid jobid, string jobnumber, string jobname, List<StockMovement> movements, ProductStyleLink style)
+        {
+            JobNumber = jobnumber;
+            JobID = jobid;
+            Movements = movements;
+            DefaultStyle = style;
+            JobName = jobname;
+        }
+
+        public void GetStock(Guid jobid, Guid styleid)
+        {
+            GetStockOfCurrentStyle(jobid, styleid);
+            GetStockOfNoStyle(jobid);
+            GetStockOfOtherStyles(jobid, styleid);
+        }
+        private void GetStockOfCurrentStyle(Guid jobid, Guid styleid)
+        {
+            if (styleid == Guid.Empty)
+                return;
+
+            if (!AlreadyRequisitioned)
+            {
+                StockOfCurrentStyle = CalculateTotal(Movements
+                    .Where(x => x.Job.ID == jobid)
+                    .Where(x => x.Style.ID == styleid)
+                    )
+                    -
+                    CalculateTotal(Movements
+                    .Where(x => x.Job.ID == jobid)
+                    .Where(x => x.Style.ID == styleid)
+                    .Where(x => x.JobRequisitionItem.ID != Guid.Empty));
+            }
+
+            else
+                StockOfCurrentStyle = CalculateTotal(Movements
+                    .Where(x => x.Job.ID == jobid)
+                    .Where(x => x.Style.ID == styleid)
+                    .Where(x => x.JobRequisitionItem.ID != Guid.Empty));
+        }
+
+        private void GetStockOfOtherStyles(Guid jobid, Guid styleid)
+        {
+            if (!AlreadyRequisitioned)
+                StockOfOtherStyles = CalculateTotal(Movements
+                .Where(x => x.Job.ID == jobid)
+                .Where(x => x.Style.ID != Guid.Empty)
+                .Where(x => x.Style.ID != DefaultStyle.ID)
+                .Where(x => x.Style.ID != styleid)
+                .Where(x => x.JobRequisitionItem.ID == Guid.Empty));
+
+            else
+                StockOfOtherStyles = CalculateTotal(Movements
+               .Where(x => x.Job.ID == jobid)
+               .Where(x => x.Style.ID != Guid.Empty)
+               .Where(x => x.Style.ID != DefaultStyle.ID)
+               .Where(x => x.Style.ID != styleid)
+               .Where(x => x.JobRequisitionItem.ID != Guid.Empty));
+        }
+
+        private void GetStockOfNoStyle(Guid jobid)
+        {
+            if (!AlreadyRequisitioned)
+                StockOfNoStyle = CalculateTotal(Movements
+                .Where(x => x.Job.ID == jobid)
+                .Where(x => x.Style.ID == Guid.Empty || x.Style.ID == DefaultStyle.ID)
+                .Where(x => x.JobRequisitionItem.ID == Guid.Empty));
+
+            else
+                StockOfNoStyle = CalculateTotal(Movements
+                .Where(x => x.Job.ID == jobid)
+                .Where(x => x.Style.ID == Guid.Empty || x.Style.ID == DefaultStyle.ID)
+                .Where(x => x.JobRequisitionItem.ID != Guid.Empty));
+        }
+
+        private double CalculateTotal(IEnumerable<StockMovement> mvts)
+        {
+            double total = 0;
+
+            double rec = 0;
+            double issued = 0;
+
+            foreach (var sm in mvts)
+            {
+                if (sm.Received != 0)
+                    rec = rec + sm.Received;
+                else if (sm.Issued != 0)
+                    issued = issued + sm.Issued;
+            }
+
+            if (rec >= issued)
+                total = rec - issued;
+
+            return total;
+        }
+    }
+}

+ 1 - 1
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionReviewGrid.cs

@@ -173,7 +173,7 @@ namespace PRSDesktop
                 return "Order Required";
 
             if (JobRequisReservedQty.ContainsKey(id))
-                if (JobRequisReservedQty[id] == row.Get<JobRequisitionItem, double>(x => x.Qty))
+                if (JobRequisReservedQty[id] >= row.Get<JobRequisitionItem, double>(x => x.Qty))
                     return "Reserved";
 
             return status;

+ 0 - 13
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionsPanel.xaml

@@ -7,24 +7,11 @@
              mc:Ignorable="d" 
              d:DesignHeight="450" d:DesignWidth="900">
     <dynamicgrid:DynamicSplitPanel MasterCaption="Job Requisition Items" DetailCaption="Available Stock" AnchorWidth="1200" AllowableViews="Combined" View="Combined">
-        <dynamicgrid:DynamicSplitPanel.Header>
-            <Border CornerRadius="5,5,0,0" BorderBrush="Gray" BorderThickness="0.75" DockPanel.Dock="Top"
-                    Background="WhiteSmoke">
-                <Label Content="Job Requisition Items" HorizontalContentAlignment="Center" />
-            </Border>
-        </dynamicgrid:DynamicSplitPanel.Header>
 
         <dynamicgrid:DynamicSplitPanel.Master>
             <local:JobRequisitionReviewGrid  x:Name="unProcessedJobRequiItems" Margin="0,2,0,0"/>
         </dynamicgrid:DynamicSplitPanel.Master>
 
-        <dynamicgrid:DynamicSplitPanel.DetailHeader>
-            <Border CornerRadius="5,5,0,0" BorderBrush="Gray" BorderThickness="0.75" DockPanel.Dock="Top"
-                    Background="WhiteSmoke">
-                <Label Content="Current Stock of Product" HorizontalContentAlignment="Center" />
-            </Border>
-        </dynamicgrid:DynamicSplitPanel.DetailHeader>
-
         <dynamicgrid:DynamicSplitPanel.Detail>
             <local:JobRequisitionHoldingsReview x:Name="holdings" Margin="0,2,0,0"/>
         </dynamicgrid:DynamicSplitPanel.Detail>

+ 78 - 6
prs.desktop/Panels/Products/Job Requisitions/JobRequisitionsPanel.xaml.cs

@@ -2,6 +2,8 @@
 using Comal.Classes;
 using InABox.Configuration;
 using InABox.Core;
+using InABox.Core.Notifications;
+using InABox.Database;
 using InABox.DynamicGrid;
 using InABox.WPF;
 using System;
@@ -33,6 +35,7 @@ namespace PRSDesktop
         }
     }
 
+
     /// <summary>
     /// Interaction logic for JobRequisitionsPanel.xaml
     /// </summary>
@@ -45,6 +48,71 @@ namespace PRSDesktop
             InitializeComponent();
         }
 
+        private void Run()
+        {
+            Dictionary<Guid, List<String>> dict = new Dictionary<Guid, List<string>>();
+
+            var ReylandJobs = new List<string>
+            {
+                "2839",
+                "2878",
+                "2837",
+                "2902",
+                "2949",
+                "2819",
+                "2989",
+                "2937",
+                "2823",
+                "2817C",
+            };
+
+            var EdmundJobs = new List<string>
+            {
+                "2838",
+                "2885Y",
+                "2885A",
+                "2885E",
+                "2879",
+                "2869",
+            };
+
+            var JasysonJobs = new List<string>
+            {
+                "2881",
+                "2947",
+                "2992",
+                "2819",
+                "2740-3",
+                "2740-2B",
+                "2740-1A",
+                "2995",
+                "2956",
+                "2882",
+            };
+
+            dict.Add(Guid.Parse("1fd0ad29-3cb4-4cde-9252-1b5aab6bb6b6"), ReylandJobs);
+            dict.Add(Guid.Parse("938287b7-bbdb-4fe8-8532-1bba7d9e3806"), EdmundJobs);
+            dict.Add(Guid.Parse("1fd0ad29-3cb4-4cde-9252-1b5aab6bb6b6"), JasysonJobs);
+
+            List<JobForm> JobForms = new List<JobForm>();
+            foreach (JobForm JobForm in JobForms)
+            {
+                if (JobForm.Form.ID != Guid.Parse("b5bca5d9-db39-4bd7-901e-08a98e174212"))
+                    continue;
+                foreach (var pair in dict)
+                {
+                    if (pair.Value.Contains(JobForm.Parent.JobNumber))
+                    {
+                        var notification = new Notification();
+                        notification.Employee.ID = pair.Key;
+                        notification.Title = "New Pressing Form Completed for Job " + pair.Value.FirstOrDefault(x => x.Contains(JobForm.Parent.JobNumber));
+                        notification.Created = DateTime.Now;
+                        DbFactory.Provider.Save<Notification>(notification);
+                    }
+                }
+            }
+        }
+
         public bool IsReady { get; set; }
 
         public string SectionName => "Job Requisitions";
@@ -105,7 +173,7 @@ namespace PRSDesktop
 
         public void Refresh()
         {
-            unProcessedJobRequiItems.Refresh(true, true);
+            unProcessedJobRequiItems.Refresh(false, true);
         }
 
         public Dictionary<string, object[]> Selected()
@@ -118,13 +186,17 @@ namespace PRSDesktop
         public void Setup()
         {
             SetupJobRequiItemGrids();
-            Task.Run(() =>
-            {
-                _settings = new GlobalConfiguration<ProductPanelSettings>().Load();
-            });
-        }
 
+            _settings = new GlobalConfiguration<ProductPanelSettings>().Load();
+            holdings.CompanyDefaultStyle = _settings.ProductStyle;
+
+            holdings.OnHoldingsReviewRefresh += Holdings_OnHoldingsReviewRefresh;
+        }
 
+        private void Holdings_OnHoldingsReviewRefresh()
+        {
+            Refresh();
+        }
 
         private void RefreshJobRequiGrids()
         {

+ 0 - 40
prs.desktop/Panels/Products/JobRequisitionReviewPage.xaml

@@ -1,40 +0,0 @@
-<Page x:Class="PRSDesktop.JobRequisitionReviewPage"
-      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-      xmlns:local="clr-namespace:PRSDesktop"
-      mc:Ignorable="d" 
-      d:DesignHeight="450" d:DesignWidth="800"
-      Title="JobRequisitionReviewPage">
-
-    <Grid>
-        <Grid.RowDefinitions>
-            <RowDefinition Height="auto"/>
-            <RowDefinition Height="*"/>
-        </Grid.RowDefinitions>
-
-        <Grid Grid.Row="0">
-            <Grid.ColumnDefinitions>
-                <ColumnDefinition Width="auto"/>
-                <ColumnDefinition Width="auto"/>
-            </Grid.ColumnDefinitions>
-
-            <Label Grid.Row="0" Content="Supplier: " VerticalAlignment="Center"/>
-
-            <ComboBox Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" SelectionChanged="Filter_SelectionChanged" HorizontalContentAlignment="Left"
-                      Width="300"
-                  x:Name="filterComboBox">
-                <ComboBox.ItemTemplate>
-                    <DataTemplate>
-                        <TextBlock Text="{Binding Text}"/>
-                    </DataTemplate>
-                </ComboBox.ItemTemplate>
-            </ComboBox>
-        </Grid>
-
-
-        <local:JobRequisitionReviewGrid Grid.Row="1"
-            x:Name="Grid"/>
-    </Grid>
-</Page>

+ 0 - 86
prs.desktop/Panels/Products/JobRequisitionReviewPage.xaml.cs

@@ -1,86 +0,0 @@
-using Comal.Classes;
-using InABox.Clients;
-using InABox.Core;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-
-namespace PRSDesktop
-{
-    /// <summary>
-    /// Interaction logic for JobRequisitionReviewPage.xaml
-    /// </summary>
-    public partial class JobRequisitionReviewPage : Page
-    {
-        public List<JobRequiReviewDashboardFilterItem> filterItems = new List<JobRequiReviewDashboardFilterItem>();
-        public JobRequisitionReviewPage()
-        {
-            InitializeComponent();
-            Grid.Refresh(true, true);
-        }
-
-        private void Filter_SelectionChanged(object sender, SelectionChangedEventArgs e)
-        {
-            var item = filterComboBox.SelectedItem as JobRequiReviewDashboardFilterItem;
-            Grid.RefreshOnFilterChanged(item.SupplierID);
-        }
-
-        private void LoadFilters()
-        {
-            List<Guid> productIDs = new List<Guid>();
-            CoreTable productsTable = new Client<JobRequisitionItem>().Query(new Filter<JobRequisitionItem>(x => x.Product).LinkValid(),
-                new Columns<JobRequisitionItem>(x => x.Product.ID));
-            foreach (CoreRow row1 in productsTable.Rows)
-            {
-                productIDs.Add(Guid.Parse(row1.Values[0].ToString()));
-            }
-            CoreTable table = new Client<SupplierProduct>().Query(
-                new Filter<SupplierProduct>(x => x.Product).LinkValid()
-                    .And(x => x.SupplierLink).LinkValid(),
-                new Columns<SupplierProduct>(x => x.SupplierLink.ID, x => x.Product.ID, x => x.SupplierLink.Name, x => x.SupplierLink.Code));
-            if (table.Rows.Any())
-            {
-                JobRequiReviewDashboardFilterItem firstItem = new JobRequiReviewDashboardFilterItem
-                {
-                    Text = "No Filter"
-                };
-                filterItems.Add(firstItem);
-                foreach (CoreRow row in table.Rows)
-                {
-                    JobRequiReviewDashboardFilterItem filterItem = new JobRequiReviewDashboardFilterItem
-                    {
-                        SupplierID = Guid.Parse(row.Values[0].ToString()),
-                        ProductID = Guid.Parse(row.Values[1].ToString()),
-                    };
-                    if (row.Values[3] != null)
-                    {
-                        filterItem.Text = row.Values[3].ToString();
-                        if (row.Values[2] != null)
-                        {
-                            filterItem.Text = filterItem.Text + " " + row.Values[2].ToString();
-                        }
-                    }
-
-                    var founditem = filterItems.Find(x => x.SupplierID == filterItem.SupplierID);
-                    if (founditem == null)
-                    {
-                        if (productIDs.Contains(filterItem.ProductID))
-                            filterItems.Add(filterItem);
-                    }
-                }
-            }
-            filterComboBox.ItemsSource = filterItems;
-        }
-    }
-}