using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using com.healthmarketscience.jackcess; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using NPOI.SS.Formula.Functions; namespace PRSDesktop { internal class JobRequisitionGrid : DynamicDataGrid, IJobControl { public Job Job { get; set; } public JobPanelSettings Settings { get; set; } private readonly Button _approve; private readonly Button _createtask; public JobRequisitionGrid() { HiddenColumns.Add(x => x.ID); HiddenColumns.Add(x => x.Job.ID); HiddenColumns.Add(x => x.Approved); _approve = AddButton("Approve", null, ApproveClick); _createtask = AddButton("Create Task", null, CreateTask); } protected override void DoReconfigure(FluentList options) { base.DoReconfigure(options); options.AddRange( DynamicGridOption.SelectColumns, DynamicGridOption.FilterRows ); } private bool ApproveClick(Button button, CoreRow[] rows) { if (rows == null || !rows.Any()) { MessageBox.Show("Please select a row first!"); return false; } var requi = rows[0].ToObject(); requi.Approved = requi.Approved.IsEmpty() ? DateTime.Now : DateTime.MinValue; UpdateRow(rows[0], "Approved", requi.Approved.IsEmpty() ? null : requi.Approved, true); new Client().Save(requi, requi.Approved.IsEmpty() ? "Cleared Approval" : "Marked as Approved"); UpdateButton(_approve, null, !requi.Approved.IsEmpty() ? "Unapprove" : "Approve"); _createtask.IsEnabled = !requi.Approved.IsEmpty(); return false; } protected override void SelectItems(CoreRow[] rows) { base.SelectItems(rows); if (rows?.Length == 1) { _approve.Visibility = Security.IsAllowed() ? Visibility.Visible : Visibility.Collapsed; UpdateButton(_approve, null, !rows[0].Get(c => c.Approved).IsEmpty() ? "Unapprove" : "Approve"); _createtask.Visibility = Visibility.Visible; _createtask.IsEnabled = !rows[0].Get(c => c.Approved).IsEmpty(); } else { _approve.Visibility = Visibility.Collapsed; _createtask.Visibility = Visibility.Collapsed; } } private bool CreateTask(System.Windows.Controls.Button btn, CoreRow[] rows) { if (!rows.Any()) { MessageBox.Show("Please select at least one row to add to Task!"); return false; } Progress.Show("Working"); JobRequisition jobrequi = rows.FirstOrDefault().ToObject(); Kanban kanban = new Kanban(); kanban.ManagerLink.ID = Guid.Parse(new Client().Query(new Filter(x => x.UserLink.UserID).IsEqualTo(ClientFactory.UserID), new Columns(x => x.ID)).Rows.FirstOrDefault().Values[0].ToString()); string jobnumber = new Client().Query(new Filter(x => x.ID).IsEqualTo(Job.ID), new Columns(x => x.JobNumber)).Rows.FirstOrDefault().Values[0].ToString(); kanban.JobLink.ID = Job.ID; kanban.JobLink.Synchronise(Job); kanban.Title = "New Job Requisition Raised for Ordering (Job " + jobnumber + " (" + jobrequi.Number + ")" + ")"; kanban.Category = "Open"; kanban.Description = "Requisition number: " + jobnumber + " (" + jobrequi.Number + "):" + System.Environment.NewLine; CoreTable table = new Client().Query ( new Filter(x => x.Requisition.ID).IsEqualTo(jobrequi.ID), new Columns(x => x.ID) ); if (table.Rows.Any()) { kanban.Description = kanban.Description + "Requisition contains " + table.Rows.Count + " items."; } Progress.Close(); var page = new TaskGrid(); page.MyID = App.EmployeeID; page.OnAfterSave += (form, items) => { KanbanAfterSave(form, items.Cast().ToArray()); }; return page.EditItems(new[] { kanban }); } private void KanbanAfterSave(IDynamicEditorForm form, Kanban[] items) { Progress.Show("Saving documents"); JobRequisition jobrequi = SelectedRows.FirstOrDefault().ToObject(); CoreTable table = new Client().Query(new Filter(x => x.EntityLink.ID).IsEqualTo(jobrequi.ID), new Columns(x => x.DocumentLink.ID, x => x.DocumentLink.FileName)); if (table.Rows.Any()) { List docs = new List(); foreach (CoreRow row in table.Rows) { KanbanDocument doc = new KanbanDocument(); doc.DocumentLink.ID = Guid.Parse(row.Values[0].ToString()); if (row.Values[1] != null) doc.DocumentLink.FileName = row.Values[1].ToString(); doc.EntityLink.ID = items[0].ID; docs.Add(doc); } new Client().Save(docs, "Created From Job Requi Screen"); } Progress.Close(); } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { if (!Security.IsAllowed()) criteria.Add(new Filter(x => x.Approved).IsNotEqualTo(DateTime.MinValue)); criteria.Add(new Filter(x => x.Job.ID).IsEqualTo(Job.ID)); base.Reload(criteria, columns, ref sort, action); } protected override bool CanCreateItems() { return Job.ID != Guid.Empty; } protected override JobRequisition CreateItem() { var result = base.CreateItem(); result.Job.ID = Job.ID; result.Job.Synchronise(Job); return result; } } }