Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        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));
            }
        }
Ejemplo n.º 5
0
        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);
        }