Added: first implementation of categories

This commit is contained in:
TheJoKlLa 2022-07-18 21:47:35 +02:00
parent e20e585426
commit a3bf515fb4
21 changed files with 144 additions and 54 deletions

View File

@ -7,7 +7,7 @@ namespace Borepin.Droid.Services
{ {
public class BrowserService : IBrowserService public class BrowserService : IBrowserService
{ {
private Xamarin.Essentials.BrowserLaunchOptions ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions) private Xamarin.Essentials.BrowserLaunchOptions _ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
return new Xamarin.Essentials.BrowserLaunchOptions() return new Xamarin.Essentials.BrowserLaunchOptions()
{ {
@ -30,7 +30,7 @@ namespace Borepin.Droid.Services
public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions) public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions)); await Browser.OpenAsync(uri, _ConvertBrowserLaunchOptions(browserLaunchOptions));
} }
public async Task OpenAsync(Uri uri) public async Task OpenAsync(Uri uri)
@ -45,7 +45,7 @@ namespace Borepin.Droid.Services
public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions) public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions)); await Browser.OpenAsync(uri, _ConvertBrowserLaunchOptions(browserLaunchOptions));
} }
} }
} }

View File

@ -7,7 +7,7 @@ namespace Borepin.UWP.Services
{ {
public class BrowserService : IBrowserService public class BrowserService : IBrowserService
{ {
private Xamarin.Essentials.BrowserLaunchOptions ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions) private Xamarin.Essentials.BrowserLaunchOptions _ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
return new Xamarin.Essentials.BrowserLaunchOptions() return new Xamarin.Essentials.BrowserLaunchOptions()
{ {
@ -30,7 +30,7 @@ namespace Borepin.UWP.Services
public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions) public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions)); await Browser.OpenAsync(uri, _ConvertBrowserLaunchOptions(browserLaunchOptions));
} }
public async Task OpenAsync(Uri uri) public async Task OpenAsync(Uri uri)
@ -45,7 +45,7 @@ namespace Borepin.UWP.Services
public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions) public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions)); await Browser.OpenAsync(uri, _ConvertBrowserLaunchOptions(browserLaunchOptions));
} }
} }
} }

View File

@ -7,7 +7,7 @@ namespace Borepin.iOS.Services
{ {
public class BrowserService : IBrowserService public class BrowserService : IBrowserService
{ {
private Xamarin.Essentials.BrowserLaunchOptions ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions) private Xamarin.Essentials.BrowserLaunchOptions _ConvertBrowserLaunchOptions(Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
return new Xamarin.Essentials.BrowserLaunchOptions() return new Xamarin.Essentials.BrowserLaunchOptions()
{ {
@ -30,7 +30,7 @@ namespace Borepin.iOS.Services
public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions) public async Task OpenAsync(string uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions)); await Browser.OpenAsync(uri, _ConvertBrowserLaunchOptions(browserLaunchOptions));
} }
public async Task OpenAsync(Uri uri) public async Task OpenAsync(Uri uri)
@ -45,7 +45,7 @@ namespace Borepin.iOS.Services
public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions) public async Task OpenAsync(Uri uri, Service.Browser.BrowserLaunchOptions browserLaunchOptions)
{ {
await Browser.OpenAsync(uri, ConvertBrowserLaunchOptions(browserLaunchOptions)); await Browser.OpenAsync(uri, _ConvertBrowserLaunchOptions(browserLaunchOptions));
} }
} }
} }

View File

@ -2,6 +2,7 @@
using FabAccessAPI; using FabAccessAPI;
using Prism.Navigation; using Prism.Navigation;
using Prism.Services; using Prism.Services;
using System;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Borepin.Base namespace Borepin.Base
@ -109,7 +110,7 @@ namespace Borepin.Base
{ {
await LoadAPIData().ConfigureAwait(false); await LoadAPIData().ConfigureAwait(false);
} }
catch catch(Exception ex)
{ {
IsConnected = false; IsConnected = false;
await _API.Disconnect().ConfigureAwait(false); await _API.Disconnect().ConfigureAwait(false);

View File

@ -59,7 +59,7 @@ namespace Borepin.DialogModel
IDialogParameters parameters = new DialogParameters() IDialogParameters parameters = new DialogParameters()
{ {
{ "result", "confirm" }, { "result", "confirm" },
{ "instance", _Instance } { "instance", _Instance },
}; };
RequestClose(parameters); RequestClose(parameters);
} }
@ -75,7 +75,7 @@ namespace Borepin.DialogModel
IDialogParameters parameters = new DialogParameters() IDialogParameters parameters = new DialogParameters()
{ {
{ "result", "abort" }, { "result", "abort" },
{ "instance", _Instance } { "instance", _Instance },
}; };
RequestClose(parameters); RequestClose(parameters);
} }

View File

@ -71,7 +71,7 @@ namespace Borepin.DialogModel
{ {
{ "result", "scanned" }, { "result", "scanned" },
{ "value", ScanResult.Text }, { "value", ScanResult.Text },
{ "instance", _Instance } { "instance", _Instance },
}; };
RequestClose(parameters); RequestClose(parameters);
} }
@ -90,7 +90,7 @@ namespace Borepin.DialogModel
IDialogParameters parameters = new DialogParameters() IDialogParameters parameters = new DialogParameters()
{ {
{ "result", "abort" }, { "result", "abort" },
{ "instance", _Instance } { "instance", _Instance },
}; };
RequestClose(parameters); RequestClose(parameters);
} }

View File

@ -13,8 +13,6 @@ namespace Borepin.Model
public ConnectionDataVisualize(ConnectionData connectionData) public ConnectionDataVisualize(ConnectionData connectionData)
{ {
_ConnectionData = connectionData; _ConnectionData = connectionData;
LoadData();
} }
#endregion #endregion

View File

@ -0,0 +1,19 @@
using Borepin.ViewModel;
using NaturalSort.Extension;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Borepin.Model
{
public class MachineViewModelListGroup : List<MachineListItemViewModel>
{
public string Category { get; set; }
public void Sort_Machines()
{
List<MachineListItemViewModel> ordered = new List<MachineListItemViewModel>(this.OrderBy(x => x.Machine.Name, StringComparison.OrdinalIgnoreCase.WithNaturalSort()));
Clear();
AddRange(ordered);
}
}
}

View File

@ -1,5 +1,6 @@
using FabAccessAPI.Schema; using FabAccessAPI.Schema;
using Prism.Mvvm; using Prism.Mvvm;
using System.Threading.Tasks;
using static FabAccessAPI.Schema.Machine; using static FabAccessAPI.Schema.Machine;
namespace Borepin.Model namespace Borepin.Model
@ -14,13 +15,11 @@ namespace Borepin.Model
public MachineVisualize(Machine machine) public MachineVisualize(Machine machine)
{ {
_Machine = machine; _Machine = machine;
LoadData();
} }
#endregion #endregion
#region Methods #region Methods
public async void LoadData() public async Task LoadData()
{ {
//ID = _Machine.Id; //ID = _Machine.Id;
//Space = new SpaceVisualize(_Machine.Space); //Space = new SpaceVisualize(_Machine.Space);
@ -28,11 +27,12 @@ namespace Borepin.Model
Description = _Machine.Description; Description = _Machine.Description;
Wiki = _Machine.Wiki; Wiki = _Machine.Wiki;
State = _Machine.State; State = _Machine.State;
Category = _Machine.Category;
if(_Machine.Manager.Just != null) if(_Machine.Manager.Just != null)
{ {
Manager = new UserVisualize(_Machine.Manager.Just); Manager = new UserVisualize(_Machine.Manager.Just);
Manager.LoadData(); await Manager.LoadData().ConfigureAwait(false);
} }
else else
{ {
@ -49,7 +49,7 @@ namespace Borepin.Model
else else
{ {
CurrentUser = new UserVisualize(machineInfoExtended.CurrentUser.Just); CurrentUser = new UserVisualize(machineInfoExtended.CurrentUser.Just);
CurrentUser.LoadData(); await CurrentUser.LoadData().ConfigureAwait(false);
} }
if (machineInfoExtended.LastUser.Just == null) if (machineInfoExtended.LastUser.Just == null)
@ -59,7 +59,7 @@ namespace Borepin.Model
else else
{ {
LastUser = new UserVisualize(machineInfoExtended.LastUser.Just); LastUser = new UserVisualize(machineInfoExtended.LastUser.Just);
LastUser.LoadData(); await LastUser.LoadData().ConfigureAwait(false);
} }
} }
else else
@ -74,7 +74,7 @@ namespace Borepin.Model
CanCheck = !((CheckInterface_Proxy)_Machine.Check).IsNull; CanCheck = !((CheckInterface_Proxy)_Machine.Check).IsNull;
CanManage = !((ManageInterface_Proxy)_Machine.Manage).IsNull; CanManage = !((ManageInterface_Proxy)_Machine.Manage).IsNull;
CanAdmin = !((AdminInterface_Proxy)_Machine.Admin).IsNull; CanAdmin = !((AdminInterface_Proxy)_Machine.Admin).IsNull;
CanNotUseByPermission = State == MachineState.free && CanUse == false; CanNotUseByPermission = State == MachineState.free && !CanUse;
} }
#endregion #endregion
@ -100,6 +100,13 @@ namespace Borepin.Model
set => SetProperty(ref _Name, value); set => SetProperty(ref _Name, value);
} }
private string _Category;
public string Category
{
get => _Category;
set => SetProperty(ref _Category, value);
}
private string _Description; private string _Description;
public string Description public string Description
{ {

View File

@ -13,7 +13,6 @@ namespace Borepin.Model
public SpaceVisualize(Space space) public SpaceVisualize(Space space)
{ {
_Space = space; _Space = space;
LoadData();
} }
#endregion #endregion

View File

@ -1,5 +1,6 @@
 using FabAccessAPI.Schema;  using FabAccessAPI.Schema;
using Prism.Mvvm; using Prism.Mvvm;
using System.Threading.Tasks;
namespace Borepin.Model namespace Borepin.Model
{ {
@ -13,16 +14,17 @@ namespace Borepin.Model
public UserVisualize(User user) public UserVisualize(User user)
{ {
_User = user; _User = user;
LoadData();
} }
#endregion #endregion
#region LoadData #region LoadData
public void LoadData() public Task LoadData()
{ {
//ID = _User.Id; //ID = _User.Id;
Username = _User.Username; Username = _User.Username;
//Space = new SpaceVisualize(_User.Space); //Space = new SpaceVisualize(_User.Space);
return Task.CompletedTask;
} }
#endregion #endregion

View File

@ -29,7 +29,8 @@
Android="True"/> Android="True"/>
</Button.IsVisible> </Button.IsVisible>
</Button> </Button>
<ListView ItemsSource="{Binding MachineListItemViewModel_List}" SelectionMode="None" SeparatorColor="Transparent"> <ListView ItemsSource="{Binding MachineListItemViewModel_List}" SelectionMode="None" SeparatorColor="Transparent" IsGroupingEnabled="True" GroupDisplayBinding="{Binding Category}">
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
<ViewCell> <ViewCell>

View File

@ -12,6 +12,7 @@ using NaturalSort.Extension;
using System.Linq; using System.Linq;
using Borepin.Service; using Borepin.Service;
using static FabAccessAPI.Schema.Machine; using static FabAccessAPI.Schema.Machine;
using Borepin.Model;
namespace Borepin.PageModel namespace Borepin.PageModel
{ {
@ -28,12 +29,23 @@ namespace Borepin.PageModel
#region Data #region Data
public override async Task LoadAPIData() public override async Task LoadAPIData()
{ {
User user_self = await _API.Session.UserSystem.Info.GetUserSelf().ConfigureAwait(false);
IReadOnlyList<Machine> machine_list = await _API.Session.MachineSystem.Info.GetMachineList().ConfigureAwait(false); IReadOnlyList<Machine> machine_list = await _API.Session.MachineSystem.Info.GetMachineList().ConfigureAwait(false);
List<MachineListItemViewModel> viewmodel_list_user_assigned = new List<MachineListItemViewModel>(); await _CreateMachineList(new List<Machine>(machine_list)).ConfigureAwait(false);
List<MachineListItemViewModel> viewmodel_list_not_user_assigned = new List<MachineListItemViewModel>(); }
private async Task _CreateMachineList(List<Machine> machine_list)
{
List<MachineViewModelListGroup> viewmodel_group_list = new List<MachineViewModelListGroup>();
MachineViewModelListGroup viewmodel_group_inusebyme = new MachineViewModelListGroup()
{
Category = Resources.Text.TextResource.InUseByMe,
};
MachineViewModelListGroup viewmodel_group_uncategorised = new MachineViewModelListGroup()
{
Category = null,
};
foreach (Machine machine in machine_list) foreach (Machine machine in machine_list)
{ {
if (!((InUseInterface_Proxy)machine.Inuse).IsNull) if (!((InUseInterface_Proxy)machine.Inuse).IsNull)
@ -43,26 +55,67 @@ namespace Borepin.PageModel
IsInUseByMe = true, IsInUseByMe = true,
}; };
await new_viewmodel.LoadInstance(machine).ConfigureAwait(false); await new_viewmodel.LoadInstance(machine).ConfigureAwait(false);
viewmodel_list_user_assigned.Add(new_viewmodel);
new_viewmodel.Machine.Category = Resources.Text.TextResource.InUseByMe;
viewmodel_group_inusebyme.Add(new_viewmodel);
}
else if (machine.Category == null)
{
MachineListItemViewModel new_viewmodel = new MachineListItemViewModel(_NavigationService, _PageDialogService);
await new_viewmodel.LoadInstance(machine).ConfigureAwait(false);
viewmodel_group_inusebyme.Add(new_viewmodel);
} }
else else
{ {
MachineListItemViewModel new_viewmodel = new MachineListItemViewModel(_NavigationService, _PageDialogService); MachineListItemViewModel new_viewmodel = new MachineListItemViewModel(_NavigationService, _PageDialogService);
await new_viewmodel.LoadInstance(machine).ConfigureAwait(false); await new_viewmodel.LoadInstance(machine).ConfigureAwait(false);
viewmodel_list_not_user_assigned.Add(new_viewmodel);
MachineViewModelListGroup viewmodel_group = viewmodel_group_list.Find(x => string.Equals(x.Category, machine.Category, StringComparison.Ordinal));
if (viewmodel_group != null)
{
viewmodel_group.Add(new_viewmodel);
}
else
{
MachineViewModelListGroup new_viewmodel_group = new MachineViewModelListGroup()
{
Category = machine.Category,
};
new_viewmodel_group.Add(new_viewmodel);
viewmodel_group_list.Add(new_viewmodel_group);
}
} }
} }
List<MachineListItemViewModel> viewmodel_list_sorted = new List<MachineListItemViewModel>(); viewmodel_group_inusebyme.Sort_Machines();
viewmodel_list_sorted.AddRange(viewmodel_list_user_assigned.OrderBy(x => x.Machine.Name, StringComparison.OrdinalIgnoreCase.WithNaturalSort())); viewmodel_group_uncategorised.Sort_Machines();
viewmodel_list_sorted.AddRange(viewmodel_list_not_user_assigned.OrderBy(x => x.Machine.Name, StringComparison.OrdinalIgnoreCase.WithNaturalSort())); foreach(MachineViewModelListGroup viewmodel_group in viewmodel_group_list)
MachineListItemViewModel_List = viewmodel_list_sorted; {
viewmodel_group.Sort_Machines();
}
List<MachineViewModelListGroup> viewmodel_group_list_sorted = new List<MachineViewModelListGroup>();
if(viewmodel_group_inusebyme.Count != 0)
{
viewmodel_group_list_sorted.Add(viewmodel_group_inusebyme);
}
viewmodel_group_list_sorted.AddRange(new List<MachineViewModelListGroup>(viewmodel_group_list.OrderBy(x => x.Category, StringComparison.OrdinalIgnoreCase.WithNaturalSort())));
if (viewmodel_group_uncategorised.Count != 0)
{
viewmodel_group_list_sorted.Add(viewmodel_group_uncategorised);
}
MachineListItemViewModel_List = viewmodel_group_list_sorted;
} }
#endregion #endregion
#region Fields #region Fields
private IList<MachineListItemViewModel> _MachineListItemViewModel_List; private IList<MachineViewModelListGroup> _MachineListItemViewModel_List;
public IList<MachineListItemViewModel> MachineListItemViewModel_List public IList<MachineViewModelListGroup> MachineListItemViewModel_List
{ {
get => _MachineListItemViewModel_List; get => _MachineListItemViewModel_List;
set => SetProperty(ref _MachineListItemViewModel_List, value); set => SetProperty(ref _MachineListItemViewModel_List, value);

View File

@ -19,7 +19,7 @@ namespace Borepin.PageModel
#region Private Fields #region Private Fields
private string _ID; private string _ID;
private Machine _Machine; private Machine _Machine;
private IBrowserService _BrowserService; private readonly IBrowserService _BrowserService;
#endregion #endregion
#region Contructors #region Contructors
@ -55,7 +55,7 @@ namespace Borepin.PageModel
{ {
_Machine = (await _API.Session.MachineSystem.Info.GetMachine(_ID).ConfigureAwait(false)).Just; _Machine = (await _API.Session.MachineSystem.Info.GetMachine(_ID).ConfigureAwait(false)).Just;
MachineItem = new MachineVisualize(_Machine); MachineItem = new MachineVisualize(_Machine);
MachineItem.LoadData(); await MachineItem.LoadData().ConfigureAwait(false);
} }
#endregion #endregion

View File

@ -36,9 +36,9 @@ namespace Borepin.PageModel
PossibleFormats = new List<BarcodeFormat>() PossibleFormats = new List<BarcodeFormat>()
{ {
BarcodeFormat.QR_CODE, BarcodeFormat.QR_CODE,
BarcodeFormat.EAN_13 BarcodeFormat.EAN_13,
// TODO add more Barcode Formats if needed // TODO add more Barcode Formats if needed
} },
}; };
} }
//set => SetProperty(ref _ScanOptions, value); //set => SetProperty(ref _ScanOptions, value);

View File

@ -24,7 +24,7 @@ namespace Borepin.PageModel
#region Private Fields #region Private Fields
private string _ID; private string _ID;
private User _User; private User _User;
private IDialogService _DialogService; private readonly IDialogService _DialogService;
private bool _IsDialog; private bool _IsDialog;
#endregion #endregion
@ -65,7 +65,7 @@ namespace Borepin.PageModel
_User = (await _API.Session.UserSystem.Search.GetUserByName(_ID).ConfigureAwait(false)).Just; _User = (await _API.Session.UserSystem.Search.GetUserByName(_ID).ConfigureAwait(false)).Just;
UserItem = new UserVisualize(_User); UserItem = new UserVisualize(_User);
UserItem.LoadData(); await UserItem.LoadData().ConfigureAwait(false);
IReadOnlyList<Role> role_list = await _API.Session.PermissionSystem.Info.GetRoleList().ConfigureAwait(false); IReadOnlyList<Role> role_list = await _API.Session.PermissionSystem.Info.GetRoleList().ConfigureAwait(false);
List<Role> user_role_list = new List<Role>(await _User.Info.ListRoles().ConfigureAwait(false)); List<Role> user_role_list = new List<Role>(await _User.Info.ListRoles().ConfigureAwait(false));
@ -78,7 +78,7 @@ namespace Borepin.PageModel
{ {
role, role,
_User, _User,
user_role_list.Exists(x => string.Equals(x.Name, role.Name, StringComparison.Ordinal)) user_role_list.Exists(x => string.Equals(x.Name, role.Name, StringComparison.Ordinal)),
}; };
await new_viewmodel.LoadInstance(array).ConfigureAwait(false); await new_viewmodel.LoadInstance(array).ConfigureAwait(false);

View File

@ -350,6 +350,15 @@ namespace Borepin.Resources.Text {
} }
} }
/// <summary>
/// Looks up a localized string similar to In Use By Me.
/// </summary>
internal static string InUseByMe {
get {
return ResourceManager.GetString("InUseByMe", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to You do not have the authorization to use this machine. /// Looks up a localized string similar to You do not have the authorization to use this machine.
///Ask in your Space if you can be trained on the machine to be unlocked for the machine.. ///Ask in your Space if you can be trained on the machine to be unlocked for the machine..

View File

@ -215,6 +215,9 @@ You can also put down several servers and then connect to the desired server.</v
<data name="HOST" xml:space="preserve"> <data name="HOST" xml:space="preserve">
<value>Host</value> <value>Host</value>
</data> </data>
<data name="InUseByMe" xml:space="preserve">
<value>In Use By Me</value>
</data>
<data name="MachinePage_CanNotUseByPermission" xml:space="preserve"> <data name="MachinePage_CanNotUseByPermission" xml:space="preserve">
<value>You do not have the authorization to use this machine. <value>You do not have the authorization to use this machine.
Ask in your Space if you can be trained on the machine to be unlocked for the machine.</value> Ask in your Space if you can be trained on the machine to be unlocked for the machine.</value>

View File

@ -3,6 +3,6 @@
public enum BrowserLaunchMode public enum BrowserLaunchMode
{ {
SystemPreferred = 0, SystemPreferred = 0,
External = 1 External = 1,
} }
} }

View File

@ -4,6 +4,6 @@
{ {
Default = 0, Default = 0,
Show = 1, Show = 1,
Hide = 2 Hide = 2,
} }
} }

View File

@ -20,15 +20,13 @@ namespace Borepin.ViewModel
#endregion #endregion
#region LoadData #region LoadData
public override Task LoadInstance(object instance) public override async Task LoadInstance(object instance)
{ {
if(instance is Machine) if(instance is Machine)
{ {
Machine = new MachineVisualize(instance as Machine); Machine = new MachineVisualize(instance as Machine);
Machine.LoadData(); await Machine.LoadData().ConfigureAwait(false);
} }
return Task.CompletedTask;
} }
#endregion #endregion