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 Xamarin.Forms.Xaml; namespace comal.timesheets { public delegate void JobDocFiltersPicked(string discipline, string type, string category, string area); [XamlCompilation(XamlCompilationOptions.Compile)] public partial class JobDocsFilterPage : ContentPage { Guid JobID = Guid.Empty; List Disciplines = new List(); List Types = new List(); List Categories = new List(); List Areas = new List(); Dictionary Filters = new Dictionary(); public event JobDocFiltersPicked OnJobDocFiltersPicked; public JobDocsFilterPage(Guid jobid, Dictionary filters) { InitializeComponent(); NavigationPage.SetHasBackButton(this, false); JobID = jobid; Filters = filters; LoadFilters(); } private void CancelBtn_Clicked(object sender, EventArgs e) { Navigation.PopAsync(); } private void SaveBtn_Clicked(object sender, EventArgs e) { Navigation.PopAsync(); OnJobDocFiltersPicked?.Invoke(disciplinePicker.SelectedItem, typePicker.SelectedItem, categoryPicker.SelectedItem, areaPicker.SelectedItem); } private void LoadFilters() { LoadTags(); LoadAreas(); PopulateLists(); } private void LoadTags() { CoreTable table = new Client().Query(); foreach (CoreRow row in table.Rows) { var tag = row.ToObject(); if (tag.Job.ID == Guid.Empty || tag.Job.ID == JobID) CategoriseTag(tag); } } private void LoadAreas() { CoreTable table = new Client().Query( new Filter(x => x.Job.ID).IsEqualTo(JobID), new Columns(x => x.Code)); foreach (CoreRow row in table.Rows) Areas.Add(row.Get(x => x.Code)); } private void PopulateLists() { disciplinePicker.AddItems(Disciplines, CheckNotBlank(JobDocFilterType.Discipline)); typePicker.AddItems(Types, CheckNotBlank(JobDocFilterType.Type)); categoryPicker.AddItems(Categories, CheckNotBlank(JobDocFilterType.Category)); areaPicker.AddItems(Areas, CheckNotBlank(JobDocFilterType.Area)); } private string CheckNotBlank(JobDocFilterType type) { return Filters.ContainsKey(type) ? Filters[type] : ""; } private void CategoriseTag(JobDocumentSetTag tag) { if (tag.Type == JobDocumentSetTagType.Discipline) Disciplines.Add(tag.Description); else if (tag.Type == JobDocumentSetTagType.Type) Types.Add(tag.Description); else if (tag.Type == JobDocumentSetTagType.Category) Categories.Add(tag.Description); } } }