| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- using System;
- using System.Data;
- using System.Linq;
- using System.Threading;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media;
- using Comal.Classes;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- namespace PRSDesktop;
- public class LeaveRequestApprovalGrid : DynamicDataGrid<LeaveRequestApproval>, ISpecificGrid
- {
- private LeaveRequest Request;
- public LeaveRequestApprovalGrid(LeaveRequest request)
- {
- Request = request;
- }
- private Button ApproveButton = null!;
- private Button RejectButton = null!;
- private Button ClearButton = null!;
- protected override void Init()
- {
- base.Init();
- HiddenColumns.Add(x => x.Employee.ID);
- HiddenColumns.Add(x => x.IsCustom);
- foreach (var column in LookupFactory.DefineLookupFilterColumns<LeaveRequestApproval, Employee, EmployeeLink>(
- x => x.Employee))
- {
- HiddenColumns.Add(column);
- }
-
- ApproveButton = AddButton("Approve", null, (b,r) => UpdateStatus(r,LeaveRequestApprovalStatus.Approved));
- ApproveButton.Visibility = Visibility.Collapsed;
- RejectButton = AddButton("Reject", null, (b,r) => UpdateStatus(r,LeaveRequestApprovalStatus.Rejected, true));
- RejectButton.Visibility = Visibility.Collapsed;
- ClearButton = AddButton("Clear", null, (b,r) => UpdateStatus(r,LeaveRequestApprovalStatus.NotYetApproved));
- ClearButton.Visibility = Visibility.Collapsed;
- }
- public bool UpdateStatus(CoreRow[] rows, LeaveRequestApprovalStatus status, bool requireNotes = false)
- {
- var note = "";
- if (requireNotes)
- {
- if (!TextBoxDialog.Execute("Reason for Rejection", ref note, false))
- return false;
- }
-
- var items = LoadItems(rows);
-
- foreach (var item in items)
- {
- item.Status = status;
- item.Notes = note;
- }
- SaveItems(items);
- DoChanged();
- return true;
- }
-
- protected override void SelectItems(CoreRow[]? rows)
- {
- base.SelectItems(rows);
- if (rows is null || rows.Length == 0 || !Security.IsAllowed<ManageLeaveRequestApprovals>())
- {
- ApproveButton.Visibility = Visibility.Collapsed;
- RejectButton.Visibility = Visibility.Collapsed;
- ClearButton.Visibility = Visibility.Collapsed;
- }
- else
- {
- ApproveButton.Visibility = rows.Any(r => r.Get<LeaveRequestApproval, LeaveRequestApprovalStatus>(x => x.Status) != LeaveRequestApprovalStatus.Approved)
- ? Visibility.Visible
- : Visibility.Collapsed;
- RejectButton.Visibility = rows.Any(r => r.Get<LeaveRequestApproval, LeaveRequestApprovalStatus>(x => x.Status) != LeaveRequestApprovalStatus.Rejected)
- ? Visibility.Visible
- : Visibility.Collapsed;
- ClearButton.Visibility = rows.Any(r => r.Get<LeaveRequestApproval, LeaveRequestApprovalStatus>(x => x.Status) != LeaveRequestApprovalStatus.NotYetApproved)
- ? Visibility.Visible
- : Visibility.Collapsed;
- }
- }
- #region UI Component
- private class UIComponent : DynamicGridGridUIComponent<LeaveRequestApproval>
- {
- protected override Brush? GetCellBackground(CoreRow row, DynamicColumnBase column)
- {
- if (row.Get<LeaveRequestApproval, bool>(x => x.IsCustom))
- return null;
- return Colors.Gainsboro.ToBrush(0.5);
- }
- }
- protected override IDynamicGridUIComponent<LeaveRequestApproval> CreateUIComponent()
- {
- return new UIComponent { Parent = this };
- }
- #endregion
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.AddRows = Security.IsAllowed<ManageLeaveRequestApprovals>();
- options.EditRows = Security.IsAllowed<ManageLeaveRequestApprovals>();
- options.DeleteRows = Security.IsAllowed<ManageLeaveRequestApprovals>();
- }
- public override LeaveRequestApproval CreateItem()
- {
- var item = base.CreateItem();
- item.LeaveRequest.CopyFrom(Request);
- item.IsCustom = true;
- return item;
- }
- protected override void Reload(Filters<LeaveRequestApproval> criteria, Columns<LeaveRequestApproval> columns,
- ref SortOrder<LeaveRequestApproval>? sort, CancellationToken token, Action<CoreTable?, Exception?> action)
- {
- criteria.Add(new Filter<LeaveRequestApproval>(x => x.LeaveRequest.ID).IsEqualTo(Request.ID));
- base.Reload(criteria, columns, ref sort, token, action);
- }
- protected override void DoEdit()
- {
- if (SelectedRows.Any(x => !x.Get<BillApproval, bool>(x => x.IsCustom)))
- return;
- base.DoEdit();
- }
- protected override void DoDelete()
- {
- if (SelectedRows.Any(x => !x.Get<BillApproval, bool>(x => x.IsCustom)))
- return;
- base.DoDelete();
- }
- protected override void DoAdd(bool openEditorOnDirectEdit = false)
- {
- var columns = LookupFactory.DefineLookupColumns<LeaveRequestApproval, Employee, EmployeeLink>(x => x.Employee);
- var employeeColumn = new Column<LeaveRequestApproval>(x => x.Employee);
- foreach (var column in DataColumns())
- {
- if (employeeColumn.IsParentOf(column.Property))
- {
- columns.Add(column.Property[(employeeColumn.Property.Length + 1)..]);
- }
- }
- if (MultiSelectDialog.SelectItem(out var employee,
- LookupFactory.DefineLookupFilter<LeaveRequestApproval, Employee, EmployeeLink>(x => x.Employee,
- Data.ToArray<LeaveRequestApproval>()),
- columns,
- "Select Leave Request Approval Employee:"))
- {
- CreateItems(() =>
- {
- var approval = CreateItem();
- approval.Employee.CopyFrom(employee);
- return CoreUtils.One(approval);
- });
- }
- }
- }
|