123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media.Imaging;
- using Comal.Classes;
- using FastReport.DataVisualization.Charting;
- using InABox.Clients;
- using InABox.Configuration;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- using PRSDesktop.Panels.Employees;
- using Xceed.Wpf.Toolkit.PropertyGrid;
- namespace PRSDesktop
- {
- internal class EmployeeGrid : DynamicDataGrid<Employee>
- {
- private bool ShowAll;
- private Button SendFormButton = null!;
- public EmployeeGrid()
- {
- }
- protected override void Init()
- {
- base.Init();
- HiddenColumns.Add(x => x.Code);
-
- HiddenColumns.Add(x=>x.RosterTemplate.ID);
- HiddenColumns.Add(x=>x.RosterTemplate.Code);
- HiddenColumns.Add(x => x.RosterStart);
- ActionColumns.Add(new DynamicScheduleEditorColumn<Employee>());
- HiddenColumns.Add(x => x.ActiveSchedules);
- HiddenColumns.Add(x => x.Thumbnail.ID);
- HiddenColumns.Add(x => x.Thumbnail.FileName);
- ActionColumns.Add(new DynamicImageManagerColumn<Employee>(this, x => x.Thumbnail, true) { Position = DynamicActionColumnPosition.Start });
- ActionColumns.Add(new DynamicMenuColumn(MenuBuild) { Position = DynamicActionColumnPosition.End });
- // AddButton("Activities", PRSDesktop.Resources.quality.AsBitmapImage(), ShowActivities);
- // AddButton("Available Forms", PRSDesktop.Resources.kanban.AsBitmapImage(), ShowRoleForms);
- //ActionColumns.Add(new DynamicEmployeeStatusColumn<Employee>(x => x.InOut));
- //HiddenColumns.Add(x => x.InOut);
- AddButton("Show All", PRSDesktop.Resources.anonymous.AsBitmapImage(Color.White), ToggleFinishedEmployees);
- SendFormButton = AddButton("Send Form", PRSDesktop.Resources.kanban.AsBitmapImage(Color.White), CreateEmployeeForms);
- }
- protected override void SelectItems(CoreRow[]? rows)
- {
- base.SelectItems(rows);
- SendFormButton.IsEnabled = rows is not null && rows.Length > 0;
- }
- private bool CreateEmployeeForms(Button button, CoreRow[] rows)
- {
- if(rows.Length == 0)
- {
- MessageBox.Show("Please select at least one row.");
- return false;
- }
- var select = new MultiSelectDialog<DigitalForm>(
- LookupFactory.DefineFilter<EmployeeForm, DigitalForm>(Array.Empty<EmployeeForm>()),
- LookupFactory.DefineColumns<DigitalForm>()
- .Add(x => x.ID)
- .Add(x => x.Description),
- false);
- if (select.ShowDialog() == true)
- {
- var digitalForm = select.Data().Rows.FirstOrDefault()?.ToObject<DigitalForm>();
- if (digitalForm is not null)
- {
- var employees = Client.Query(
- new Filter<EmployeeDigitalForm>(x => x.Form.ID).IsEqualTo(digitalForm.ID),
- new Columns<EmployeeDigitalForm>(x => x.Employee.ID))
- .Rows.Select(x => x.Get<EmployeeDigitalForm, Guid>(x => x.Employee.ID))
- .ToArray();
- var selectedEmployees = rows.Select(x => x.ToObject<Employee>()).ToArray();
- var warningEmployees = selectedEmployees.Where(x => !employees.Contains(x.ID)).ToArray();
- if (warningEmployees.Any())
- {
- var message = "The selected form is not usually available for ";
- if(warningEmployees.Length == 1)
- {
- message += warningEmployees[0].Code;
- }
- else
- {
- message += string.Join(',', warningEmployees.Take(warningEmployees.Length - 1).Select(x => x.Code))
- + " and " + warningEmployees.Last().Code;
- }
- message += ", since it has not been assigned to their role";
- if(warningEmployees.Length > 1)
- {
- message += "s";
- }
- message += "; do you still wish to send this form?";
- var result = MessageBox.Show(message, "Confirm", MessageBoxButton.YesNo);
- if(result != MessageBoxResult.Yes)
- {
- MessageBox.Show("Sending form cancelled.");
- return false;
- }
- }
- var employeeForms = new List<EmployeeForm>(rows.Length);
- foreach(var employee in selectedEmployees)
- {
- var employeeForm = new EmployeeForm();
- employeeForm.Form.ID = digitalForm.ID;
- employeeForm.Description = digitalForm.Description;
- employeeForm.Parent.ID = employee.ID;
- employeeForms.Add(employeeForm);
- }
- Client.Save(employeeForms, "Assigned to employee by user");
- MessageBox.Show("Form sent.");
- }
- }
- return false;
- }
- protected override void DoReconfigure(FluentList<DynamicGridOption> options)
- {
- base.DoReconfigure(options);
- options.AddRange(
- DynamicGridOption.FilterRows,
- DynamicGridOption.SelectColumns,
- DynamicGridOption.MultiSelect
- );
- }
- private void MenuBuild(DynamicMenuColumn column, CoreRow? row)
- {
- if (row is null) return;
- var newItem = column.AddItem("Digital Forms", null, null);
- DynamicGridUtils.PopulateFormMenu<EmployeeForm, Employee, EmployeeLink>(
- newItem,
- row.Get<Employee, Guid>(x => x.ID),
- row.ToObject<Employee>);
- column.AddSeparator();
- column.AddItem("Activities", PRSDesktop.Resources.quality, ShowActivitiesWindow);
- column.AddItem("Available Forms", PRSDesktop.Resources.kanban, ShowRoleFormsWindow);
- }
- private void ShowActivitiesWindow(CoreRow? row)
- {
- if (row is null) return;
- DynamicGridUtils.CreateGridWindow("Employee Activities",
- new EmployeeActivityGrid() { Left = row.ToObject<Employee>() }).ShowDialog();
- }
- private void ShowRoleFormsWindow(CoreRow? row)
- {
- if (row is null) return;
- DynamicGridUtils.CreateGridWindow("Employee Role Forms",
- new EmployeeRoleFormGrid() { Left = row.ToObject<Employee>() }).ShowDialog();
- }
- private bool ShowActivities(Button button, CoreRow[] rows)
- {
- if(rows.Length == 0)
- {
- MessageBox.Show("Please select an employee.");
- return false;
- }
- else if(rows.Length > 1)
- {
- MessageBox.Show("Please select only one employee");
- return false;
- }
- ShowActivitiesWindow(rows[0]);
- return false;
- }
- private bool ShowRoleForms(Button button, CoreRow[] rows)
- {
- if(rows.Length == 0)
- {
- MessageBox.Show("Please select an employee.");
- return false;
- }
- else if(rows.Length > 1)
- {
- MessageBox.Show("Please select only one employee");
- return false;
- }
- ShowRoleFormsWindow(rows[0]);
- return false;
- }
- public Employee[] Employees { get; private set; }
- private bool ToggleFinishedEmployees(Button btn, CoreRow[] rows)
- {
- ShowAll = !ShowAll;
- UpdateButton(btn, PRSDesktop.Resources.anonymous.AsBitmapImage(Color.White), ShowAll ? "Hide Finished" : "Show All");
- return true;
- }
- protected override void Reload(Filters<Employee> criteria, Columns<Employee> columns, ref SortOrder<Employee>? sort, Action<CoreTable?, Exception?> action)
- {
- if (!ShowAll)
- criteria.Add(new Filter<Employee>(x => x.FinishDate).IsEqualTo(DateTime.MinValue));
- base.Reload(criteria, columns, ref sort, action);
- }
- protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
- {
- if (column.ColumnName.StartsWith($"{nameof(Employee.OrgChart)}."))
- {
- if (!Security.IsAllowed<CanEditOrgChart>())
- return new NullEditor();
- var orgChartSettings = new GlobalConfiguration<OrgChartSettings>().Load();
- if (orgChartSettings.Layout != OrgChartLayout.Employee)
- return new NullEditor();
- }
- return base.GetEditor(item, column);
- }
-
-
- }
- }
|