private async void DeleteParentContextAction_Clicked(object sender, EventArgs e) { //get parent entry that was selected to be removed TimeEntryParent selectedParent = (sender as MenuItem)?.BindingContext as TimeEntryParent; if (selectedParent.Entries.Count > 1) { var response = await Application.Current.MainPage.DisplayAlert("Attention", $"Are you sure you want to delete all {selectedParent.Entries.Count()} entries?", "yes", "cancel"); //user did not approve, return if (!response) { return; } } //find corresponding collection var correspondingCollection = (this.BindingContext as TimeTrackerPageViewModel)?.TimeEntries.FirstOrDefault(x => x.Date.Date.Equals(selectedParent?.Date.Date)); //for each child, remove it from the list and delete from database foreach (var entry in selectedParent.Entries) { entry.Delete(); if (correspondingCollection.Contains(entry)) { correspondingCollection.Remove(entry); } } //remove parent from list correspondingCollection.Remove(selectedParent); }
private void OnExpandCollapseParent(TimeEntryParent timeentryparent) { //sub list that contains all TimeEntryParents for specified date of the selected timeEntryParent var correspondingDateList = _vm.TimeEntries.FirstOrDefault(x => x.Date.Date.Equals(timeentryparent.Date.Date)); if (correspondingDateList == null) { return; } if (correspondingDateList.Contains(timeentryparent.Entries.FirstOrDefault())) { foreach (var childEntry in timeentryparent.Entries) { correspondingDateList.Remove(childEntry); } return; } int index = -1; foreach (var timeEntryVM in timeentryparent.Entries) { if (index.Equals(-1)) { index = correspondingDateList.IndexOf(timeentryparent); } correspondingDateList.Insert(index + 1, timeEntryVM); } }
/// <summary> /// Will add time entry to corresponding parent or make new parent if required /// </summary> /// <param name="vm"></param> public void AddTimeEntryToList(TimeEntryViewModel vm) { //correspodning date collection var collection = TimeEntries?.FirstOrDefault(x => x.Date.Date.Equals(vm.StartTime.Date)); if (collection == null) { collection = new TimeEntryListElementOverservableCollection(vm.StartTime.Date.Date); } //check if valid parent ticket exists and place child inside or make new one and place child inside if does not exist foreach (var entryParent in collection) { if (entryParent.Ticket != null && ((entryParent as TimeEntryParent)?.BillCustomer == vm.BillCustomer) && (string.IsNullOrEmpty(entryParent.Ticket?.uri) && entryParent.Ticket.ProjectURI.Equals(vm.Ticket?.ProjectURI) || (!string.IsNullOrEmpty(entryParent.Ticket?.uri) && entryParent.Ticket.uri.Equals(vm?.Ticket?.uri)))) { var castedParent = (entryParent as TimeEntryParent); vm.parent = castedParent; vm.OnTicketRequiresReorg += OnTicketRequiresReorg; castedParent?.Entries.Add(vm); //add new item to viewable list if the parent is already expanded if (collection.Contains(castedParent.Entries.FirstOrDefault())) { collection.Insert(collection.IndexOf(castedParent) + 1, vm); } castedParent?.OnPropertyChanged(null); return; } } //No valid parent yest on list //create new parent var newParent = new TimeEntryParent(); newParent.Date = DateTime.Today; //add new time entry as the first item in the new parent's Entries list newParent.Entries = new List <TimeEntryViewModel>() { vm }; //set the ticket for the parent newParent.Ticket = vm.Ticket; //set the parent of the entry to the newly created parent vm.parent = newParent; //set ticket changed delegate vm.OnTicketRequiresReorg += OnTicketRequiresReorg; // add to list TimeEntries.First().Insert(0, newParent); }
private void ListView_OnItemTapped(object sender, ItemTappedEventArgs e) { if (e.Item is TimeEntryParent) { TimeEntryParent parent = e.Item as TimeEntryParent; OnExpandCollapseParent?.Invoke(parent); } else { this.Navigation.PushAsync(new TimeEntryDetailPage(e.Item as TimeEntryViewModel)); } }
private static Cell CreateCellFromEntry(TimeEntryParent timeEntry) { //new cell for entry var newCell = new Cell(); //comments newCell.comments = timeEntry.Comments; //duration var roundedTime = timeEntry.TotalTime.RoundToNearestMinutes(15); newCell.duration.hours = roundedTime.Hours.ToString(); newCell.duration.minutes = roundedTime.Minutes.ToString(); newCell.duration.seconds = "0"; newCell.duration.milliseconds = "0"; newCell.duration.microseconds = "0"; //date newCell.date.day = timeEntry.Date.Day; newCell.date.month = timeEntry.Date.Month; newCell.date.year = timeEntry.Date.Year; //bill rate return(newCell); }