public void Edit() { var timeEntry = TimeEntryService.Add(new TimeEntry() { IsBillable = true, CreatedWith = "TogglAPI.Net", Duration = 900, Start = DateTime.Now.ToIsoDateStr(), WorkspaceId = DefaultWorkspaceId }); Assert.IsNotNull(timeEntry); var loadedTimeEntry = TimeEntryService.Get(timeEntry.Id.Value); Assert.IsNotNull(loadedTimeEntry); loadedTimeEntry.Duration = 1200; var editedTimeEntry = TimeEntryService.Edit(loadedTimeEntry); Assert.AreEqual(timeEntry.Id, editedTimeEntry.Id); Assert.AreEqual(timeEntry.IsBillable, editedTimeEntry.IsBillable); Assert.AreEqual(timeEntry.CreatedWith, editedTimeEntry.CreatedWith); Assert.AreEqual(loadedTimeEntry.Duration, editedTimeEntry.Duration); Assert.AreEqual(timeEntry.WorkspaceId, editedTimeEntry.WorkspaceId); }
private async Task <bool> GetData() { List <TimeSheetInfo> result = await TimeSheetService.GetRecentTimeSheetInformation(); viewModel.PastPeriods = new ObservableCollection <TimeSheetPeriod>(); var settings = await TimeEntryService.Get(); bool UseHoursMinutes = false; if (settings != null) { UseHoursMinutes = settings.UseHoursMinutesInput; } if (result != null && result.Count > 0) { lstAllPeriod.Children.Clear(); for (int i = 0; i <= result.Count - 1; i++) { var item = result[i]; if (i == 0) { viewModel.CurrentPeriod.StartDate = item.StartDate; viewModel.CurrentPeriod.EndDate = item.EndDate; viewModel.CurrentPeriod.ActualHours = (item.ActualHoursNotOnTimeSheet ?? 0); viewModel.CurrentPeriod.ActualHoursFormated = string.IsNullOrEmpty(item.ActualHoursNotOnTimeSheetFormattedString) ? (UseHoursMinutes ? "00:00" : "0") : item.ActualHoursNotOnTimeSheetFormattedString; viewModel.CurrentPeriod.Status = 0; viewModel.CurrentPeriod.TimeEntries = item.TimeSheet != null ? item.TimeSheet.TimeEntries : null; viewModel.CurrentPeriod.ShowSubmitButton = true; //viewModel.CurrentPeriod.Name = ""; if (item.AllTimeSheetsForPeriod != null && item.AllTimeSheetsForPeriod.Count > 0) { foreach (var ts in item.AllTimeSheetsForPeriod) { AddTimeSheet(ts); } } } else { AddPreviousTimeSheets(item); } } if (viewModel.PastPeriods == null || viewModel.PastPeriods.Count() == 0) { lblNoPreviousRecords.IsVisible = true; } else { lblNoPreviousRecords.IsVisible = false; } int count = 0; foreach (var item in viewModel.PastPeriods) { count++; if (count == viewModel.PastPeriods.Count) { PreviousPeriods_GeneratedRows(item, true); } else { PreviousPeriods_GeneratedRows(item); } } } return(true); }
public void GetTimeEntryByID(int id) { var entry = timeEntrySrv.Get(id); Assert.IsTrue(entry.Id == id); }
private async void LoadData() { viewModel.VisibleLoad = true; viewModel.CurrentPeriod = tsp; if (IsCurrent) { List <TimeSheetInfo> result = await TimeSheetService.GetRecentTimeSheetInformation(); var settings = await TimeEntryService.Get(); bool UseHoursMinutes = false; if (settings != null) { UseHoursMinutes = settings.UseHoursMinutesInput; } if (result != null && result.Count > 0) { lstAllPeriod.Children.Clear(); viewModel.CurrentPeriod = new TimeSheetPeriod(); for (int i = 0; i <= result.Count - 1; i++) { var item = result[i]; if (i == 0) { viewModel.CurrentPeriod.StartDate = item.StartDate; viewModel.CurrentPeriod.EndDate = item.EndDate; viewModel.CurrentPeriod.ActualHours = (item.ActualHoursNotOnTimeSheet ?? 0); viewModel.CurrentPeriod.ActualHoursFormated = string.IsNullOrEmpty(item.ActualHoursNotOnTimeSheetFormattedString) ? (UseHoursMinutes ? "00:00" : "0") : item.ActualHoursNotOnTimeSheetFormattedString; viewModel.CurrentPeriod.Status = 0; viewModel.CurrentPeriod.TimeEntries = item.TimeSheet != null ? item.TimeSheet.TimeEntries : null; viewModel.CurrentPeriod.ShowSubmitButton = true; viewModel.CurrentPeriod.RequiresApprovalFromCurrentUser = false; var timeEntries = TimeEntryService.client.GetByUserUnsubmittedForDateRange(viewModel.CurrentPeriod.StartDate, viewModel.CurrentPeriod.EndDate, modelProperties: new ProjectInsight.Models.Base.ModelProperties("default,Name,Task_Id,ToDo_Id,Issue_Id,Company_Id")); viewModel.TimeEntries = timeEntries; } else { break; } } } } else { if (viewModel.CurrentPeriod != null) { if (viewModel.CurrentPeriod.TimeSheetId.HasValue) { try { var ts = await TimeSheetService.client.GetAsync(viewModel.CurrentPeriod.TimeSheetId.Value, new ProjectInsight.Models.Base.ModelProperties( "default,UserApprover,ApprovalStatusDescription,RequiresApprovalFromCurrentUser,User,TimeEntries;TimeEntry:default,Name,Task_Id,ToDo_Id,Issue_Id,Company_Id;User:default,Photo,PhotoUrl,PhotoMediumUrl,PhotoThumbnailUrl,AvatarHtml")); viewModel.TimeEntries = ts.TimeEntries; viewModel.CurrentPeriod.Name = ts.User.FirstName + " " + ts.User.LastName; viewModel.CurrentPeriod.RequiresApprovalFromCurrentUser = ts.RequiresApprovalFromCurrentUser ?? false; viewModel.CurrentPeriod.ActualHoursFormated = ts.ActualHoursFormattedString; viewModel.timeSheet = ts; viewModel.ShowStatus = true; int status = ts.ApprovalStatus ?? 0; //---------------------- if (status == 5) { statusIcon.Source = "approved"; // "timesheet_approved.png"; } else if (status == 6) { statusIcon.Source = "rejected";//"timesheet_rejected.png"; } else { statusIcon.Source = "pending"; //"timesheet_pending.png"; } slAvatar.Children.Clear(); if (string.IsNullOrEmpty(ts.UserApprover.PhotoUrl)) { if (!string.IsNullOrEmpty(ts.UserApprover.AvatarHtml)) { string userHTML = ts.UserApprover.AvatarHtml; //"<div class=\"user-avatar\" title=\"Gjoko Veljanoski\" style=\"background-color:#00bfff\">GV</div>" //<img class="user-avatar" src="/ProjectInsight.WebApp/Sites/Files/a222e57233a14e15ab67d25e6dbab95e/UserPhotos/6fcc5602c49043c3a2d8d39175040e68/tn_avatar.png" alt="Gjoko Veljanoski" title="Gjoko Veljanoski" /> string myDiv = ts.UserApprover.AvatarHtml; HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(myDiv); HtmlNode node = doc.DocumentNode.SelectSingleNode("div"); string AvatarInitials = "US"; string AvatarColor = "#fff"; string PhotoURL = string.Empty; if (node != null) { AvatarInitials = (node.ChildNodes[0]).OuterHtml; foreach (HtmlAttribute attr in node.Attributes) { if (attr.Name.ToLower() == "style") { string[] parts = attr.Value.Split('#'); if (parts != null && parts.Length > 1) { AvatarColor = parts[1]; } } } } else { HtmlNode node2 = doc.DocumentNode.SelectSingleNode("img"); if (node2 != null) { foreach (HtmlAttribute attr in node2.Attributes) { if (attr.Name.ToLower() == "src") { string imageUrl = attr.Value.Replace("/ProjectInsight.WebApp", ""); PhotoURL = Common.CurrentWorkspace.WorkspaceURL + imageUrl; } } } } if (string.IsNullOrEmpty(PhotoURL)) { slAvatar.BackgroundColor = Color.FromHex(AvatarColor); Label lbInitials = new Label(); lbInitials.HeightRequest = 50; lbInitials.WidthRequest = 50; lbInitials.HorizontalOptions = LayoutOptions.CenterAndExpand; lbInitials.VerticalOptions = LayoutOptions.CenterAndExpand; lbInitials.HorizontalTextAlignment = TextAlignment.Center; lbInitials.VerticalTextAlignment = TextAlignment.Center; lbInitials.TextColor = Color.White; lbInitials.Text = AvatarInitials; lbInitials.FontSize = 26; if (Device.RuntimePlatform.ToLower() == "android") { lbInitials.FontFamily = "OpenSans-SemiBold.ttf#Open Sans"; } else { lbInitials.FontFamily = "OpenSans-SemiBold"; } slAvatar.Children.Add(lbInitials); } else { Image photo = new Image(); photo.Source = ImageSource.FromUri(new Uri(Common.CurrentWorkspace.WorkspaceURL + ts.UserApprover.PhotoUrl)); photo.HeightRequest = 50; photo.WidthRequest = 50; photo.HorizontalOptions = LayoutOptions.CenterAndExpand; photo.VerticalOptions = LayoutOptions.CenterAndExpand; slAvatar.Children.Add(photo); } slStatus.Children.Add(slAvatar); } } else { Image photo = new Image(); photo.Source = ImageSource.FromUri(new Uri(Common.CurrentWorkspace.WorkspaceURL + ts.UserApprover.PhotoUrl)); photo.HeightRequest = 50; photo.WidthRequest = 50; //photo.HorizontalOptions = LayoutOptions.CenterAndExpand; photo.VerticalOptions = LayoutOptions.CenterAndExpand; slAvatar.Children.Add(photo); } //---------------------- } catch (Exception ex) { } } else { try { viewModel.CurrentPeriod.RequiresApprovalFromCurrentUser = false; var timeEntries = TimeEntryService.client.GetByUserUnsubmittedForDateRange(viewModel.CurrentPeriod.StartDate, viewModel.CurrentPeriod.EndDate, modelProperties: new ProjectInsight.Models.Base.ModelProperties("default,Name,Task_Id,ToDo_Id,Issue_Id,Company_Id")); viewModel.TimeEntries = timeEntries; //viewModel.CurrentPeriod.ShowSubmitButton = true; slCreateTimeEntry.IsVisible = false; } catch (Exception ex) { } } } else { if (tId != null) { viewModel.CurrentPeriod = new TimeSheetPeriod(); var ts = TimeSheetService.client.Get(tId, new ProjectInsight.Models.Base.ModelProperties("default,RequiresApprovalFromCurrentUser,User,TimeEntries;TimeEntry:default,Name,Task_Id,ToDo_Id,Issue_Id,Company_Id;User:FirstName,LastName;")); viewModel.CurrentPeriod.Name = ts.User.FirstName + " " + ts.User.LastName; viewModel.CurrentPeriod.RequiresApprovalFromCurrentUser = ts.RequiresApprovalFromCurrentUser ?? false; viewModel.CurrentPeriod.TimeSheetId = ts.Id; viewModel.CurrentPeriod.StartDate = ts.StartDate.Value; viewModel.CurrentPeriod.EndDate = ts.EndDate.Value; viewModel.CurrentPeriod.ActualHours = ts.ActualHours; viewModel.CurrentPeriod.ActualHoursFormated = ts.ActualHoursFormattedString; viewModel.CurrentPeriod.Status = ts.ApprovalStatus; viewModel.CurrentPeriod.TimeEntries = ts.TimeEntries; viewModel.CurrentPeriod.User_Id = ts.User_Id; viewModel.timeSheet = ts; viewModel.TimeEntries = ts.TimeEntries; if (viewModel.CurrentPeriod.ShowPendingApprovalIcon && viewModel.CurrentPeriod.User_Id == Common.CurrentWorkspace.UserID) { ToolbarItems.Add(new ToolbarItem() { Text = "", Icon = "unsubmit_icon.png", Command = new Command(this.btnDeleteTimesheet_Clicked) }); } } } } if (viewModel.TimeEntries != null && viewModel.TimeEntries.Count > 0) { GenerateTimeEntryGrid(); } viewModel.VisibleLoad = false; }
async void Project_OnSelectionChanged(object sender, EventArgs e) { if (viewModel.SelectedProject == null || viewModel.SelectedProject.Name.Equals(TAG_NO_SELECTION)) { rowTask.IsVisible = false; } else { viewModel.CompanyError = false; viewModel.ProjectError = false; rowTask.IsVisible = true; } if (selTask != null || viewModel.ProjectInitialBinding || viewModel.SelectedProject == null || viewModel.SelectedProject.Name.Equals(TAG_NO_SELECTION)) { viewModel.ProjectInitialBinding = false; return; } try { viewModel.TaskInitialBinding = true; viewModel.VisibleLoad = true; viewModel.LoadingMessage = ""; // viewModel.SelectedTask = null; viewModel.SelectedExpenseCode = null; if (viewModel.SelectedProject == null || viewModel.SelectedProject.Name.Equals(TAG_NO_SELECTION)) { inputSettings = await TimeEntryService.Get(selectedProjectId : null); } else { inputSettings = await TimeEntryService.Get(selectedProjectId : viewModel.SelectedProject.Id); } setModelsByTimeEntryService(2); //viewModel.Tasks = new ObservableCollection<ProjectInsight.Models.Tasks.Task>(inputSettings.TaskList); viewModel.SelectedTask = viewModel.Tasks.Where(x => x.Id == inputSettings.SelectedTaskId).FirstOrDefault(); if (!inputSettings.SelectedTaskId.HasValue) { viewModel.TaskInitialBinding = false; } viewModel.SelectedExpenseCode = viewModel.ExpenseCodes.Where(x => x.Id == inputSettings.SelectedTimeEntryExpenseCodeId).FirstOrDefault(); viewModel.ShowTimeInHours = inputSettings.UseHoursMinutesInput; viewModel.ShowTimeInDecimals = !inputSettings.UseHoursMinutesInput; //if (inputSettings.SelectedProjectTimeEntryInputSettings != null) // viewModel.ShowBillableCheckboxInput = inputSettings.SelectedProjectTimeEntryInputSettings.ShowBillableCheckboxInput.Value; if (inputSettings.SelectedTaskId.HasValue) { if (inputSettings.SelectedTaskTimeEntryInputSettings != null && inputSettings.SelectedTaskTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedTaskTimeEntryInputSettings.ShowBillableCheckboxInput.Value; } } else { if (inputSettings.SelectedProjectId.HasValue) { if (inputSettings.SelectedProjectTimeEntryInputSettings != null && inputSettings.SelectedProjectTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedProjectTimeEntryInputSettings.ShowBillableCheckboxInput.Value; } } else { if (inputSettings.SelectedCompanyId.HasValue) { if (inputSettings.SelectedCompanyTimeEntryInputSettings != null && inputSettings.SelectedCompanyTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedCompanyTimeEntryInputSettings.ShowBillableCheckboxInput.Value; } } } } viewModel.VisibleLoad = false; } catch (Exception ex) { } }
private async Task <bool> GetSettings() { try { inputSettings = await TimeEntryService.Get( selectedCompanyId : viewModel.SelectedCompany != null?viewModel.SelectedCompany.Id : null, selectedProjectId : viewModel.SelectedProject != null?viewModel.SelectedProject.Id : null); if (inputSettings.EnableTimeEntry == false) { viewModel.VisibleLoad = false; // Common.Instance.ShowToastMessage("Time entry is not enabled!", DoubleResources.DangerSnackBar); return(false); } if (selTask == null) { //set Default Value setModelsByTimeEntryService(); if (inputSettings.SelectedCompanyId.HasValue) { viewModel.SelectedCompany = viewModel.Companies.Where(x => x.Id == inputSettings.SelectedCompanyId).FirstOrDefault(); } if (inputSettings.SelectedProjectId.HasValue) { viewModel.SelectedProject = viewModel.Projects.Where(x => x.Id == inputSettings.SelectedProjectId).FirstOrDefault(); rowTask.IsVisible = true; } else { rowTask.IsVisible = false; } if (inputSettings.SelectedTaskId.HasValue) { viewModel.SelectedTask = viewModel.Tasks.Where(x => x.Id == inputSettings.SelectedTaskId).FirstOrDefault(); if (inputSettings.SelectedTaskTimeEntryInputSettings != null && inputSettings.SelectedTaskTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedTaskTimeEntryInputSettings.ShowBillableCheckboxInput.Value; viewModel.IsBillable = inputSettings.SelectedTaskTimeEntryInputSettings.IsBillableDefaultOn.Value; //viewModel.ShowBillableCheckboxInput = false; } } else { if (inputSettings.SelectedProjectId.HasValue) { if (inputSettings.SelectedProjectTimeEntryInputSettings != null && inputSettings.SelectedProjectTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedProjectTimeEntryInputSettings.ShowBillableCheckboxInput.Value; viewModel.IsBillable = inputSettings.SelectedProjectTimeEntryInputSettings.IsBillableDefaultOn.Value; } } else { if (inputSettings.SelectedCompanyId.HasValue) { if (inputSettings.SelectedCompanyTimeEntryInputSettings != null && inputSettings.SelectedCompanyTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedCompanyTimeEntryInputSettings.ShowBillableCheckboxInput.Value; viewModel.IsBillable = inputSettings.SelectedCompanyTimeEntryInputSettings.IsBillableDefaultOn.Value; } } } } } else { if (inputSettings.SelectedTaskTimeEntryInputSettings != null && inputSettings.SelectedTaskTimeEntryInputSettings.ShowBillableCheckboxInput.HasValue) { viewModel.ShowBillableCheckboxInput = inputSettings.SelectedTaskTimeEntryInputSettings.ShowBillableCheckboxInput.Value; viewModel.IsBillable = inputSettings.SelectedTaskTimeEntryInputSettings.IsBillableDefaultOn.Value; } } List <ProjectInsight.Models.ReferenceData.ExpenseCode> expenseCodes = await ExpenseCodeService.GetActive(); viewModel.ExpenseCodes = new ObservableCollection <ProjectInsight.Models.ReferenceData.ExpenseCode>(expenseCodes); //viewModel.ExpenseCodes = new ObservableCollection<ProjectInsight.Models.ReferenceData.ExpenseCode>(); //foreach (var item in expenseCodes) // viewModel.ExpenseCodes.Add(item); viewModel.SelectedExpenseCode = viewModel.ExpenseCodes.Where(x => x.Id == inputSettings.SelectedTimeEntryExpenseCodeId).FirstOrDefault(); viewModel.ShowTimeInHours = inputSettings.UseHoursMinutesInput; viewModel.ShowTimeInDecimals = !inputSettings.UseHoursMinutesInput; } catch (Exception ex) { return(false); } return(true); }