|
@@ -6,6 +6,7 @@ using System.Windows.Controls;
|
|
|
using System.Windows.Media.Imaging;
|
|
|
using InABox.Clients;
|
|
|
using InABox.Core;
|
|
|
+using InABox.Wpf.Editors;
|
|
|
using InABox.WPF;
|
|
|
|
|
|
namespace InABox.DynamicGrid;
|
|
@@ -16,13 +17,13 @@ public class DynamicProblemsColumn<TEntity> : DynamicImageColumn
|
|
|
private static readonly BitmapImage _warning = Wpf.Resources.warning.AsBitmapImage();
|
|
|
private static readonly BitmapImage _graywarning = Wpf.Resources.warning.AsGrayScale().AsBitmapImage();
|
|
|
|
|
|
- private readonly IDynamicGrid _parent;
|
|
|
+ private readonly IDynamicGrid<TEntity> _parent;
|
|
|
|
|
|
public Func<IIssues[], FrameworkElement?>? CustomiseEditor { get; set; }
|
|
|
|
|
|
public Action<IIssues[], FrameworkElement?>? IssuesUpdated { get; set; }
|
|
|
|
|
|
- public DynamicProblemsColumn(IDynamicGrid parent)
|
|
|
+ public DynamicProblemsColumn(IDynamicGrid<TEntity> parent)
|
|
|
{
|
|
|
Image = IssuesImage;
|
|
|
Filters = new[] { "Active Issues", "No Issues" };
|
|
@@ -31,6 +32,15 @@ public class DynamicProblemsColumn<TEntity> : DynamicImageColumn
|
|
|
ToolTip = CreateIssuesToolTip;
|
|
|
_parent = parent;
|
|
|
Position = DynamicActionColumnPosition.Start;
|
|
|
+
|
|
|
+ if (typeof(TEntity).GetInterfaceDefinition(typeof(IProblems<>)) is Type problemInterface)
|
|
|
+ {
|
|
|
+ var tProblem = problemInterface.GenericTypeArguments[0];
|
|
|
+ foreach(var column in DynamicGridUtils.LoadEditorColumns(tProblem))
|
|
|
+ {
|
|
|
+ _parent.AddHiddenColumn(nameof(IProblems.Problem) + "." + column.Name);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private BitmapImage? IssuesImage(CoreRow? row)
|
|
@@ -45,7 +55,7 @@ public class DynamicProblemsColumn<TEntity> : DynamicImageColumn
|
|
|
private FrameworkElement? CreateIssuesToolTip(DynamicActionColumn column, CoreRow? row)
|
|
|
{
|
|
|
var text = row?.Get<TEntity, string[]>(x => x.Problem.Notes) ?? new string[] { };
|
|
|
- return TextToolTip(string.Join("\n==================================", text));
|
|
|
+ return TextToolTip(string.Join("\n==================================\n", text));
|
|
|
}
|
|
|
|
|
|
private bool DoFilterIssues(CoreRow row, string[] filter)
|
|
@@ -68,16 +78,22 @@ public class DynamicProblemsColumn<TEntity> : DynamicImageColumn
|
|
|
|
|
|
private ContextMenu? CreateIssuesMenu(CoreRow[]? rows)
|
|
|
{
|
|
|
+ if (rows is null || rows.Length == 0) return null;
|
|
|
+
|
|
|
if (!Security.CanManageProblems<TEntity>())
|
|
|
return null;
|
|
|
|
|
|
- var issues = rows?.FirstOrDefault()?.Get<TEntity, string[]>(x => x.Problem.Notes)?.Any() == true;
|
|
|
+ var issues = rows.Any(r => r.Get<TEntity, string[]>(x => x.Problem.Notes).Length > 0);
|
|
|
var result = new ContextMenu();
|
|
|
|
|
|
- if (issues != true)
|
|
|
+ if (!issues)
|
|
|
{
|
|
|
result.Items.Add(CreateMenu("Create Issue", (o, e) => EditIssues(rows)));
|
|
|
}
|
|
|
+ else if(rows.Length > 1)
|
|
|
+ {
|
|
|
+ result.Items.Add(CreateMenu("Add Issue", (o, e) => AddIssue(rows)));
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
result.Items.Add(CreateMenu("Update Issues", (o, e) => EditIssues(rows)));
|
|
@@ -91,11 +107,9 @@ public class DynamicProblemsColumn<TEntity> : DynamicImageColumn
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private void ResolveIssues(CoreRow[]? rows)
|
|
|
+ private void ResolveIssues(CoreRow[] rows)
|
|
|
{
|
|
|
- var row = rows?.FirstOrDefault();
|
|
|
- if (row == null)
|
|
|
- return;
|
|
|
+ var row = rows[0];
|
|
|
|
|
|
var entity = row.ToObject<TEntity>();
|
|
|
entity.Problem.Resolved = DateTime.Now;
|
|
@@ -124,22 +138,31 @@ public class DynamicProblemsColumn<TEntity> : DynamicImageColumn
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
- private void EditIssues(CoreRow[]? rows)
|
|
|
+ private void AddIssue(CoreRow[] rows)
|
|
|
{
|
|
|
+ var entities = rows.ToArray<TEntity>();
|
|
|
+ var issue = "";
|
|
|
+ if(TextEdit.Execute("Enter new issue: ", ref issue) && !issue.IsNullOrWhiteSpace())
|
|
|
+ {
|
|
|
+ foreach(var entity in entities)
|
|
|
+ {
|
|
|
+ entity.Problem.Notes = entity.Problem.Notes.Concatenate([issue]);
|
|
|
+ }
|
|
|
+ Client.Save(entities, "Saving Issues", (o, e) => { });
|
|
|
+ _parent.UpdateRows(rows, entities);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void EditIssues(CoreRow[] rows)
|
|
|
+ {
|
|
|
+ var entities = rows.ToArray<TEntity>();
|
|
|
|
|
|
- var row = rows?.FirstOrDefault();
|
|
|
- if (row == null)
|
|
|
- return;
|
|
|
-
|
|
|
- var entity = row.ToObject<TEntity>();
|
|
|
-
|
|
|
- var _grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicItemsListGrid<>), entity.Problem.GetType());
|
|
|
- if (_grid.EditItems(new object[] { entity.Problem }))
|
|
|
+ var _grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicItemsListGrid<>), entities.First().Problem.GetType());
|
|
|
+ if (_grid.EditItems(entities.ToArray(x => x.Problem)))
|
|
|
{
|
|
|
using (new WaitCursor())
|
|
|
- Client.Save(entity, "Resolving Issues", (o, e) => { });
|
|
|
- row.Table.FillRow(row, entity);
|
|
|
- _parent.InvalidateRow(row);
|
|
|
+ Client.Save(entities, "Saving Issues", (o, e) => { });
|
|
|
+ _parent.UpdateRows(rows, entities);
|
|
|
}
|
|
|
}
|
|
|
}
|