|
@@ -31,6 +31,7 @@ namespace PRSDesktop
|
|
|
private readonly DispatcherTimer columnsizer = new();
|
|
|
|
|
|
public CoreTable Employees;
|
|
|
+ private Dictionary<Guid, EmployeeRosterItem[]> Rosters;
|
|
|
|
|
|
private readonly List<AttendanceKanban> Kanbans = new();
|
|
|
public CoreTable LeaveRequests;
|
|
@@ -162,29 +163,35 @@ namespace PRSDesktop
|
|
|
{
|
|
|
Kanban.Columns.Clear();
|
|
|
|
|
|
-
|
|
|
- MultiQuery query = new MultiQuery();
|
|
|
-
|
|
|
- query.Add<Employee>(
|
|
|
- LookupFactory.DefineFilter<Employee>(),
|
|
|
- Columns.Required<Employee>().Add(
|
|
|
- x => x.ID,
|
|
|
- x => x.Name,
|
|
|
- x => x.Thumbnail.ID,
|
|
|
- x => x.Group.ID,
|
|
|
- x => x.Group.Description,
|
|
|
- x => x.Type,
|
|
|
- x => x.ShowOnInOutBoard,
|
|
|
- x => x.Roster,
|
|
|
- x => x.RosterStart
|
|
|
- ),
|
|
|
- new SortOrder<Employee>(x => x.Name)
|
|
|
- );
|
|
|
- query.Add<Activity>();
|
|
|
- query.Query();
|
|
|
+ var data = Client.QueryMultiple(
|
|
|
+ new KeyedQueryDef<Employee>(
|
|
|
+ LookupFactory.DefineFilter<Employee>(),
|
|
|
+ Columns.Required<Employee>().Add(
|
|
|
+ x => x.ID,
|
|
|
+ x => x.Name,
|
|
|
+ x => x.Thumbnail.ID,
|
|
|
+ x => x.Group.ID,
|
|
|
+ x => x.Group.Description,
|
|
|
+ x => x.Type,
|
|
|
+ x => x.ShowOnInOutBoard,
|
|
|
+ x => x.RosterStart),
|
|
|
+ new SortOrder<Employee>(x => x.Name)),
|
|
|
+ new KeyedQueryDef<EmployeeRosterItem>(
|
|
|
+ new Filter<EmployeeRosterItem>(x => x.Employee.ID)
|
|
|
+ .InQuery(LookupFactory.DefineFilter<Employee>(), x => x.ID),
|
|
|
+ sortorder: new SortOrder<EmployeeRosterItem>(x => x.Day)),
|
|
|
+ new KeyedQueryDef<Activity>(
|
|
|
+ null,
|
|
|
+ Columns.None<Activity>()
|
|
|
+ .Add(x => x.ID)
|
|
|
+ .Add(x => x.IsLeave)
|
|
|
+ .Add(x => x.IsDefault)));
|
|
|
|
|
|
- Employees = query.Get<Employee>();
|
|
|
- Activities = query.Get<Activity>();
|
|
|
+ Employees = data.Get<Employee>();
|
|
|
+ Activities = data.Get<Activity>();
|
|
|
+ Rosters = data.GetObjects<EmployeeRosterItem>()
|
|
|
+ .GroupBy(x => x.Employee.ID)
|
|
|
+ .ToDictionary(x => x.Key, x => x.ToArray());
|
|
|
|
|
|
CreateColumns();
|
|
|
|
|
@@ -322,7 +329,7 @@ namespace PRSDesktop
|
|
|
var lastrow = TimeSheets.Rows.LastOrDefault(r => r.Get<TimeSheet, Guid>(c => c.EmployeeLink.ID).Equals(empid));
|
|
|
|
|
|
var actid = lastrow.Get<TimeSheet, Guid>(c => c.ActivityLink.ID);
|
|
|
- var actrow = Equals(actid, Guid.Empty) ? null : Activities.Rows.FirstOrDefault(r => r.Get<Activity, Guid>(c => c.ID).Equals(actid));
|
|
|
+ var actrow = Equals(actid, Guid.Empty) ? null : Activities.Rows.FirstOrDefault(r => r.Get<Activity, Guid>(c => c.ID) == actid);
|
|
|
|
|
|
var color = "White";
|
|
|
var finish = lastrow.Get<TimeSheet, TimeSpan>(c => c.Finish);
|
|
@@ -363,7 +370,7 @@ namespace PRSDesktop
|
|
|
return false;
|
|
|
|
|
|
var actid = row.Get<StandardLeave, Guid>(c => c.LeaveType.ID);
|
|
|
- var actrow = Equals(actid, Guid.Empty) ? null : Activities.Rows.FirstOrDefault(r => r.Get<Activity, Guid>(c => c.ID).Equals(actid));
|
|
|
+ var actrow = Equals(actid, Guid.Empty) ? null : Activities.Rows.FirstOrDefault(r => r.Get<Activity, Guid>(c => c.ID) == actid);
|
|
|
var color = actrow?.Get<Activity, string>(c => c.Color);
|
|
|
if (string.IsNullOrWhiteSpace(color))
|
|
|
color = "Gainsboro";
|
|
@@ -395,7 +402,7 @@ namespace PRSDesktop
|
|
|
return false;
|
|
|
|
|
|
var actid = row.Get<LeaveRequest, Guid>(c => c.LeaveType.ID);
|
|
|
- var actrow = Equals(actid, Guid.Empty) ? null : Activities.Rows.FirstOrDefault(r => r.Get<Activity, Guid>(c => c.ID).Equals(actid));
|
|
|
+ var actrow = Equals(actid, Guid.Empty) ? null : Activities.Rows.FirstOrDefault(r => r.Get<Activity, Guid>(c => c.ID) == actid);
|
|
|
var color = actrow?.Get<Activity, string>(c => c.Color);
|
|
|
if (string.IsNullOrWhiteSpace(color))
|
|
|
color = "Gainsboro";
|
|
@@ -422,10 +429,7 @@ namespace PRSDesktop
|
|
|
|
|
|
private bool CheckRoster(Guid empid, AttendanceKanban kanban, CoreRow empdata)
|
|
|
{
|
|
|
- var rosterdata = empdata.Get<Employee, String>(c => c.Roster);
|
|
|
- var rosters = !String.IsNullOrWhiteSpace(rosterdata)
|
|
|
- ? Serialization.Deserialize<List<EmployeeRosterItem>>(rosterdata).ToArray()
|
|
|
- : null;
|
|
|
+ var rosters = Rosters.GetValueOrDefault(empid);
|
|
|
var roster = RosterUtils.GetRoster(rosters, empdata.Get<Employee,DateTime>(c=>c.RosterStart), DateTime.Today);
|
|
|
|
|
|
if ((roster == null) || (!roster.Enabled))
|