123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xamarin.Forms;
- using XF.Material.Forms.UI.Dialogs;
- using PRSSecurity = InABox.Core.Security;
- namespace comal.timesheets
- {
- public delegate object KanbanGridItemSelected(DataGridViewModelItem item);
- public class KanbanGrid : MobileDataGrid
- {
- public event KanbanGridItemSelected OnKanbanGridItemSelected;
- Filter<Kanban> Filter;
- public KanbanGrid(Filter<Kanban> filter, DataGridSaveType savetype = DataGridSaveType.None)
- {
- Filter = filter;
- savetype = PRSSecurity.IsAllowed<CanChangeOthersTasks>()? DataGridSaveType.Multiple : DataGridSaveType.None;
- Load(filter, savetype);
- OnItemSelected += KanbanGrid_OnItemSelected;
- }
- private object KanbanGrid_OnItemSelected(DataGridViewModelItem item)
- {
- return OnKanbanGridItemSelected.Invoke(item);
- }
- private List<DataGridViewModelItem> LoadItems(Filter<Kanban> filter)
- {
- var columns = new Columns<Kanban>(
- x => x.ID,
- x => x.Number,
- x => x.Title,
- x => x.Summary,
- x => x.Notes,
- x => x.EmployeeLink.Name,
- x => x.ManagerLink.Name,
- x => x.Category,
- x => x.DueDate,
- x => x.Created,
- x => x.StartDate,
- x => x.Type.Description
- );
- if (new Client<CompanyInformation>().Query(new Filter<CompanyInformation>(x => x.CompanyName).IsEqualTo("Com-Al Windows")
- .Or(x => x.CompanyName).IsEqualTo("PRS Software")).Rows.Any())
- columns.Add("IssueNumber");
- CoreTable table = new Client<Kanban>().Query(
- filter,
- columns
- );
- List<DataGridViewModelItem> shells = new List<DataGridViewModelItem>();
- foreach (CoreRow row in table.Rows)
- {
- List<Tuple<string, string>> tuples = new List<Tuple<string, string>>
- {
- new Tuple<string, string>("Title", "(No. " + row.Get<Kanban, int>(x => x.Number).ToString() + ") " + row.Get<Kanban, string>(x => x.Title)),
- new Tuple<string, string>("Summary", row.Get<Kanban, string>(x => x.Summary)),
- new Tuple<string, string>("Type", row.Get<Kanban,string>(x => x.Type.Description)),
- new Tuple<string, string>("Emp", row.Get<Kanban,string>(x => x.EmployeeLink.Name)),
- };
- shells.Add(new DataGridViewModelItem
- (
- id: row.Get<Kanban, Guid>(x => x.ID),
- data: tuples,
- popupdetail: GenerateDetail(row)
- ));
- }
- return shells;
- }
- private string GenerateDetail(CoreRow row)
- {
- string detail = "";
- if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.Title)))
- detail = "TITLE: " + row.Get<Kanban, string>(x => x.Title) + System.Environment.NewLine + System.Environment.NewLine;
- if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.Summary)))
- detail = detail + "SUMMARY: " + row.Get<Kanban, string>(x => x.Summary) + System.Environment.NewLine + System.Environment.NewLine;
- if (row.Get<Kanban, string[]>(x => x.Notes).Any())
- {
- detail = detail + "NOTES: ";
- foreach (var note in row.Get<Kanban, string[]>(x => x.Notes))
- detail = detail + note + System.Environment.NewLine;
- }
- if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.ManagerLink.Name)))
- detail = detail + "MANAGER: " + row.Get<Kanban, string>(x => x.ManagerLink.Name) + System.Environment.NewLine + System.Environment.NewLine;
- if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.Category)))
- detail = detail + "CATEGORY: " + row.Get<Kanban, string>(x => x.Category) + System.Environment.NewLine + System.Environment.NewLine;
- if (!string.IsNullOrWhiteSpace(row.Get<string>("IssueNumber")))
- detail = detail + "ISSUE NUMBER: " + row.Get<string>("IssueNumber") + System.Environment.NewLine + System.Environment.NewLine;
- if (row.Get<Kanban, DateTime>(x => x.Created) != DateTime.MinValue)
- detail = detail + "CREATED: " + row.Get<Kanban, DateTime>(x => x.Created).ToString("dd MMM yy") + System.Environment.NewLine + System.Environment.NewLine;
- if (row.Get<Kanban, DateTime>(x => x.StartDate) != DateTime.MinValue)
- detail = detail + "STARTED: " + row.Get<Kanban, DateTime>(x => x.StartDate).ToString("dd MMM yy") + System.Environment.NewLine + System.Environment.NewLine;
- if (row.Get<Kanban, DateTime>(x => x.DueDate) != DateTime.MinValue)
- detail = detail + "DUE: " + row.Get<Kanban, DateTime>(x => x.DueDate).ToString("dd MMM yy") + System.Environment.NewLine + System.Environment.NewLine;
- return detail;
- }
- private void Load(Filter<Kanban> filter, DataGridSaveType savetype)
- {
- Task.Run(async () =>
- {
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading"))
- {
- Setup(LoadItems(Filter), typeof(Kanban), savetype);
- }
- });
- }
- public async void RefreshGrid()
- {
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading"))
- {
- var list = LoadItems(Filter);
- Items.Clear();
- Items.AddRange(list);
- Refresh(Items);
- UpdateScreenOnFilter();
- }
- }
- }
- }
|