|
@@ -33,6 +33,7 @@ namespace comal.timesheets
|
|
|
bool foldersLoaded = false;
|
|
|
bool filesLoaded = false;
|
|
|
bool specificQueryLoading = false;
|
|
|
+ Dictionary<JobDocFilterType, string> filters = new Dictionary<JobDocFilterType, string>();
|
|
|
Guid jobID = Guid.Empty;
|
|
|
List<Guid> loadedFolders = new List<Guid>();
|
|
|
List<MileStoneShell> mileStoneShells = new List<MileStoneShell>();
|
|
@@ -67,7 +68,7 @@ namespace comal.timesheets
|
|
|
|
|
|
private void FilterButton_Tapped(object sender, EventArgs e)
|
|
|
{
|
|
|
- var page = new JobDocsFilterPage(jobID);
|
|
|
+ var page = new JobDocsFilterPage(jobID, filters);
|
|
|
page.OnJobDocFiltersPicked += Page_OnJobDocFiltersPicked;
|
|
|
Navigation.PushAsync(page);
|
|
|
}
|
|
@@ -75,32 +76,126 @@ namespace comal.timesheets
|
|
|
private void Page_OnJobDocFiltersPicked(string discipline, string type, string category, string area)
|
|
|
{
|
|
|
filterLayout.Children.Clear();
|
|
|
+ filteredShells.Clear();
|
|
|
+ filters.Clear();
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(discipline))
|
|
|
AddFilter(discipline, JobDocFilterType.Discipline);
|
|
|
if (!string.IsNullOrWhiteSpace(type))
|
|
|
AddFilter(type, JobDocFilterType.Type);
|
|
|
- if (!string.IsNullOrWhiteSpace(discipline))
|
|
|
+ if (!string.IsNullOrWhiteSpace(category))
|
|
|
AddFilter(category, JobDocFilterType.Category);
|
|
|
if (!string.IsNullOrWhiteSpace(area))
|
|
|
AddFilter(area, JobDocFilterType.Area);
|
|
|
+
|
|
|
+ DisplayFolderContents();
|
|
|
}
|
|
|
|
|
|
private void AddFilter(string text, JobDocFilterType type)
|
|
|
{
|
|
|
+ if (!filters.ContainsKey(type))
|
|
|
+ filters.Add(type, text);
|
|
|
+
|
|
|
JobDocFilterItem item = new JobDocFilterItem();
|
|
|
item.Init(text, type);
|
|
|
- item.OnJobDocFilterClosed += ((filter, type) =>
|
|
|
+ item.OnJobDocFilterClosed += ((filter, type) =>
|
|
|
{
|
|
|
filterLayout.Children.Remove(item);
|
|
|
+ filters.Remove(type);
|
|
|
+ RemoveShells(filter, type);
|
|
|
+ DisplayFolderContents();
|
|
|
});
|
|
|
filterLayout.Children.Add(item);
|
|
|
+
|
|
|
+ FilterList(text, type);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void FilterList(string text, JobDocFilterType type)
|
|
|
+ {
|
|
|
+ if (type == JobDocFilterType.Discipline)
|
|
|
+ {
|
|
|
+ var list = fullListShells.Where(x => x.DocSetDiscipline.Equals(text));
|
|
|
+ foreach (var v in list)
|
|
|
+ CheckDuplicateAndAdd(v);
|
|
|
+ }
|
|
|
+ else if (type == JobDocFilterType.Type)
|
|
|
+ {
|
|
|
+ var list = fullListShells.Where(x => x.DocSetType.Equals(text));
|
|
|
+ foreach (var v in list)
|
|
|
+ CheckDuplicateAndAdd(v);
|
|
|
+ }
|
|
|
+ else if (type == JobDocFilterType.Category)
|
|
|
+ {
|
|
|
+ var list = fullListShells.Where(x => x.DocSetCategory.Equals(text));
|
|
|
+ foreach (var v in list)
|
|
|
+ CheckDuplicateAndAdd(v);
|
|
|
+ }
|
|
|
+ else if (type == JobDocFilterType.Area)
|
|
|
+ {
|
|
|
+ var list = fullListShells.Where(x => x.DocSetArea.Equals(text));
|
|
|
+ foreach (var v in list)
|
|
|
+ CheckDuplicateAndAdd(v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CheckDuplicateAndAdd(JobDocSetFileShell v)
|
|
|
+ {
|
|
|
+ var duplicate = filteredShells.FirstOrDefault(x => x.ID == v.ID);
|
|
|
+ if (duplicate == null)
|
|
|
+ filteredShells.Add(v);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void RemoveShells(string filter, JobDocFilterType type)
|
|
|
+ {
|
|
|
+ if (type == JobDocFilterType.Discipline)
|
|
|
+ {
|
|
|
+ while (filteredShells.Find(x => x.DocSetDiscipline == filter) != null)
|
|
|
+ {
|
|
|
+ var shell = filteredShells.FirstOrDefault(x => x.DocSetDiscipline == filter);
|
|
|
+ filteredShells.Remove(shell);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (type == JobDocFilterType.Type)
|
|
|
+ {
|
|
|
+ while (filteredShells.Find(x => x.DocSetType == filter) != null)
|
|
|
+ {
|
|
|
+ var shell = filteredShells.FirstOrDefault(x => x.DocSetType == filter);
|
|
|
+ filteredShells.Remove(shell);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (type == JobDocFilterType.Category)
|
|
|
+ {
|
|
|
+ while (filteredShells.Find(x => x.DocSetCategory == filter) != null)
|
|
|
+ {
|
|
|
+ var shell = filteredShells.FirstOrDefault(x => x.DocSetCategory == filter);
|
|
|
+ filteredShells.Remove(shell);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (type == JobDocFilterType.Area)
|
|
|
+ {
|
|
|
+ while (filteredShells.Find(x => x.DocSetArea == filter) != null)
|
|
|
+ {
|
|
|
+ var shell = filteredShells.FirstOrDefault(x => x.DocSetArea == filter);
|
|
|
+ filteredShells.Remove(shell);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region TreeView / Folder Interaction
|
|
|
void Folder_Tapped(object sender, EventArgs e)
|
|
|
{
|
|
|
+ DisplayFolderContents();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void DisplayFolderContents()
|
|
|
+ {
|
|
|
+ if (treeView.SelectedItem == null)
|
|
|
+ {
|
|
|
+ DisplayAlert("Info", "Please select a folder or All folders", "OK");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
var folder = treeView.SelectedItem as FolderViewItem;
|
|
|
if (folder.Documents == 0)
|
|
|
return;
|
|
@@ -112,12 +207,23 @@ namespace comal.timesheets
|
|
|
{
|
|
|
if (folder.ItemName == "All")
|
|
|
{
|
|
|
- AddSearchItems(fullListShells);
|
|
|
+ if (filters.Count != 0)
|
|
|
+ AddSearchItems(filteredShells);
|
|
|
+ else
|
|
|
+ AddSearchItems(fullListShells);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var list = fullListShells.Where(x => x.FolderID == folder.ID);
|
|
|
- AddSearchItems(list);
|
|
|
+ if (filters.Count != 0)
|
|
|
+ {
|
|
|
+ var list = filteredShells.Where(x => x.FolderID == folder.ID);
|
|
|
+ AddSearchItems(list);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var list = fullListShells.Where(x => x.FolderID == folder.ID);
|
|
|
+ AddSearchItems(list);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else if (loadedFolders.Contains(folder.ID))
|
|
@@ -233,6 +339,7 @@ namespace comal.timesheets
|
|
|
displayList = new ObservableCollection<FolderViewItem>(displayList.OrderBy(x => x.ItemName));
|
|
|
treeView.ItemsSource = displayList;
|
|
|
foldersLoaded = true;
|
|
|
+ filterBtn.IsEnabled = true;
|
|
|
}
|
|
|
|
|
|
private async void LoadFiles(Filter<JobDocumentSetMileStone> filter, bool specificQuery = false, Guid loadFolder = new Guid())
|
|
@@ -312,6 +419,7 @@ namespace comal.timesheets
|
|
|
CoreTable table = new Client<JobDocumentSetMileStoneFile>().Query(
|
|
|
filter,
|
|
|
new Columns<JobDocumentSetMileStoneFile>(
|
|
|
+ x => x.ID,
|
|
|
x => x.DocumentLink.ID,
|
|
|
x => x.Thumbnail,
|
|
|
x => x.DocumentLink.FileName,
|
|
@@ -347,9 +455,10 @@ namespace comal.timesheets
|
|
|
{
|
|
|
JobDocSetFileShell file = new JobDocSetFileShell
|
|
|
{
|
|
|
- DocLinkID = filerow.Get<Guid>("DocumentLink.ID"),
|
|
|
- FileName = filerow.Get<string>("DocumentLink.FileName"),
|
|
|
- MileStoneID = filerow.Get<Guid>("EntityLink.ID")
|
|
|
+ ID = filerow.Get<JobDocumentSetMileStoneFile, Guid>(x => x.ID),
|
|
|
+ DocLinkID = filerow.Get<JobDocumentSetMileStoneFile, Guid>(x => x.DocumentLink.ID),
|
|
|
+ FileName = filerow.Get<JobDocumentSetMileStoneFile, string>(x => x.DocumentLink.FileName),
|
|
|
+ MileStoneID = filerow.Get<JobDocumentSetMileStoneFile, Guid>(x => x.EntityLink.ID)
|
|
|
};
|
|
|
|
|
|
MileStoneShell mileStone = mileStoneShells.Find(x => x.ID == file.MileStoneID);
|
|
@@ -589,6 +698,7 @@ namespace comal.timesheets
|
|
|
|
|
|
public class JobDocSetFileShell
|
|
|
{
|
|
|
+ public Guid ID { get; set; }
|
|
|
public Guid DocLinkID { get; set; }
|
|
|
public string FileName { get; set; }
|
|
|
public string FolderName { get; set; }
|
|
@@ -610,6 +720,7 @@ namespace comal.timesheets
|
|
|
|
|
|
public JobDocSetFileShell()
|
|
|
{
|
|
|
+ ID = Guid.Empty;
|
|
|
DocLinkID = Guid.Empty;
|
|
|
FileName = "";
|
|
|
FolderName = "";
|