public void IsChanged__ChangedProjectItemTimeEntryLoggedTimeObservableTimesheet_True() { var ts = new Timesheet(); var projectCode = new PickListItem(1, "pc1"); var taskCode = new PickListItem(1, "tc1"); var projectItem = new ProjectTaskTimesheetItem(projectCode, taskCode); for (int i = 0; i < 7; i++) { projectItem.TimeEntries[i].LoggedTime = TimeSpan.FromMinutes(1); } ts.ProjectTimeItems.Add(projectItem); for (int i = 0; i < 7; i++) { ts.RequiredHours[i] = TimeSpan.FromHours(7.5); } var timesheet = new ObservableTimesheet(ts); Assert.IsFalse(timesheet.IsChanged); timesheet.ProjectTimeItems[0].TimeEntries[6].LoggedTime = new TimeSpan(1, 0, 0); Assert.IsTrue(timesheet.IsChanged); }
protected override void PopulateTimesheetItem(HtmlNode htmlNode, ref ProjectTaskTimesheetItem timesheetItem, string index, int dayIndex) { Ensure.ArgumentNotNull(timesheetItem, "timesheetItem"); var timeValue = htmlNode.SelectSingleNode(string.Format(LoggedTimeSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); var extraTimeValue = htmlNode.SelectSingleNode(string.Format(ExtraTimeSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); var notesValue = htmlNode.SelectSingleNode(string.Format(NotesSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); var workDetailValue = htmlNode.SelectSingleNode(string.Format(WorkDetailSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); if (timeValue != null && timeValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].LoggedTime = TimeSpan.Parse(timeValue.Attributes["value"].Value); } if (extraTimeValue != null && extraTimeValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].ExtraTime = TimeSpan.Parse(extraTimeValue.Attributes["value"].Value); } if (notesValue != null && notesValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].Notes = notesValue.Attributes["value"].Value; } if (workDetailValue != null && workDetailValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].WorkDetailId = int.Parse(workDetailValue.Attributes["value"].Value); } }
///// <summary> ///// The required hours per day is a hidden field (should be 7:30) ///// </summary> ///// <param name="htmlNode"></param> ///// <param name="requiredHoursSelector"></param> ///// <returns></returns> //private List<TimeSpan> GetRequiredHours(HtmlNode htmlNode, string requiredHoursSelector) //{ // var requiredHours = new List<TimeSpan>(); // for (int i = 0; i < 7; i++) // { // var requiredHoursNode = htmlNode.SelectSingleNode(string.Format(requiredHoursSelector, i.ToString())); // var parsedTime = requiredHoursNode.Attributes["value"].Value == "0" // ? TimeSpan.Zero // : TimeSpan.Parse(requiredHoursNode.Attributes["value"].Value); // requiredHours.Add(parsedTime); // } // return requiredHours; //} //private List<ProjectTaskTimesheetItem> GetApprovedTimesheetItems(HtmlNode htmlNode, string projectSelector, // string projectTaskSelector, // string loggedTimeSelector, // string extraTimeSelector, // string notesSelector, // string workDetailsSelector) //{ // var projectTimeItems = new List<ProjectTaskTimesheetItem>(); // HtmlNode projectCode = null; // // index starts at 2 because of the naming of the ASP.net controls - i.e. first is ctl00$C1$ProjectGrid$ctl2 // var i = 2; // while (projectCode != null || i == 2) // { // var index = i.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0'); // i++; // } //} //private List<ProjectTaskTimesheetItem> GetTimesheetItems(HtmlNode htmlNode, string projectSelector, // string projectNameSelector, // string projectTaskSelector, // string projectTaskNameSelector, // string loggedTimeSelector, // string extraTimeSelector, // string notesSelector, // string workDetailSelector, // bool isApprovedTimesheet = false) //{ // var projectTimeItems = new List<ProjectTaskTimesheetItem>(); // HtmlNode projectCode = null; // // index starts at 2 because of the naming of the ASP.net controls - i.e. first is ctl00$C1$ProjectGrid$ctl2 // var i = 2; // while (projectCode != null || i == 2) // { // var index = i.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0'); // var projectControlName = string.Format(projectSelector, index); // projectCode = htmlNode.SelectSingleNode(projectControlName); // if (projectCode != null) // { // // assume that there is a task combo control for each project combo control; // HtmlNode taskCode = htmlNode.SelectSingleNode(string.Format(projectTaskSelector, index)); // ProjectTaskTimesheetItem timesheetItem = null; // if (isApprovedTimesheet) // { // var projectName = htmlNode.SelectSingleNode(string.Format(projectNameSelector, index)); // var taskName = htmlNode.SelectSingleNode(string.Format(projectTaskNameSelector, index)); // AddApprovedTimesheetItem(projectTimeItems, // projectCode.Attributes["value"].Value, // projectName.InnerText, // taskCode.Attributes["value"].Value, // taskName.InnerText); // } // else // { // AddTimesheetItem(projectTimeItems, projectCode, taskCode); // } // // always 7 days a week // for (int j = 0; j < 7; j++) // { // if (isApprovedTimesheet) // { // PopulateApprovedTimesheetItem(htmlNode, ref timesheetItem, index, j, loggedTimeSelector, extraTimeSelector, notesSelector, // workDetailSelector); // } // else // { // PopulateTimesheetItem(htmlNode, ref timesheetItem, index, j, loggedTimeSelector, extraTimeSelector, notesSelector, // workDetailSelector); // } // var timeValue = htmlNode.SelectSingleNode(string.Format(loggedTimeSelector, index, j.ToString(CultureInfo.InvariantCulture))); // var extraTimeValue = htmlNode.SelectSingleNode(string.Format(extraTimeSelector, index, j.ToString(CultureInfo.InvariantCulture))); // var notesValue = htmlNode.SelectSingleNode(string.Format(notesSelector, index, j.ToString(CultureInfo.InvariantCulture))); // var workDetailValue = htmlNode.SelectSingleNode(string.Format(workDetailSelector, index, j.ToString(CultureInfo.InvariantCulture))); // if (timeValue != null && timeValue.Attributes["value"] != null) // { // timesheetItem.TimeEntries[j].LoggedTime = TimeSpan.Parse(timeValue.Attributes["value"].Value); // } // if (extraTimeValue != null && extraTimeValue.Attributes["value"] != null) // { // timesheetItem.TimeEntries[j].ExtraTime = // TimeSpan.Parse(extraTimeValue.Attributes["value"].Value); // } // if (notesValue != null && notesValue.Attributes["value"] != null) // { // timesheetItem.TimeEntries[j].Notes = notesValue.Attributes["value"].Value; // } // if (workDetailValue != null && workDetailValue.Attributes["value"] != null) // { // timesheetItem.TimeEntries[j].WorkDetailId = // int.Parse(workDetailValue.Attributes["value"].Value); // } // } // i++; // } // } // return projectTimeItems; //} private static void PopulateApprovedTimesheetItem(HtmlNode htmlNode, ref ProjectTaskTimesheetItem timesheetItem, string index, int dayIndex, string loggedTimeSelector, string extraTimeSelector, string notesSelector, string workDetailSelector) { var timeValue = htmlNode.SelectSingleNode(string.Format(loggedTimeSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); var extraTimeValue = htmlNode.SelectSingleNode(string.Format(extraTimeSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); var notesValue = htmlNode.SelectSingleNode(string.Format(notesSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); var workDetailValue = htmlNode.SelectSingleNode(string.Format(workDetailSelector, index, dayIndex.ToString(CultureInfo.InvariantCulture))); if (timeValue != null && timeValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].LoggedTime = TimeSpan.Parse(timeValue.Attributes["value"].Value); } if (extraTimeValue != null && extraTimeValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].ExtraTime = TimeSpan.Parse(extraTimeValue.Attributes["value"].Value); } if (notesValue != null && notesValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].Notes = notesValue.Attributes["value"].Value; } if (workDetailValue != null && workDetailValue.Attributes["value"] != null) { timesheetItem.TimeEntries[dayIndex].WorkDetailId = int.Parse(workDetailValue.Attributes["value"].Value); } }
public void IsChanged_ProjectItemsAdd_True() { var ts = CreateDummyTimesheet(); var item = new ProjectTaskTimesheetItem(new PickListItem(10, "item1"), new PickListItem(20, "item2")); ts.ProjectTimeItems.Add(new ObservableProjectTaskTimesheetItem(item)); Assert.IsTrue(ts.IsChanged); }
/// <summary> /// Construct a ProjectTaskTimesheetItem from Html fragment and add to the list of projectTimeItems /// </summary> /// <param name="projectTimeItems"></param> /// <param name="projectCode"></param> /// <param name="taskCode"></param> /// <returns></returns> protected override ProjectTaskTimesheetItem AddTimesheetItem(List <ProjectTaskTimesheetItem> projectTimeItems, HtmlNode projectCode, HtmlNode taskCode) { var projectCodePickListItem = GetPickListItemFromCombobox(projectCode); var projectTaskCodePickListItem = GetPickListItemFromCombobox(taskCode); var timesheetItem = new ProjectTaskTimesheetItem(projectCodePickListItem, projectTaskCodePickListItem); projectTimeItems.Add(timesheetItem); return(timesheetItem); }
// Create timesheet with 3 dummy project+task items private ObservableTimesheet CreateDummyTimesheet() { var ts = new Timesheet(); for (int i = 0; i < 7; i++) { ts.RequiredHours[i] = new TimeSpan(7, 30, 0); } // Project items var projectCode1 = new PickListItem(0, "p1"); var taskCode1 = new PickListItem(0, "t1"); var timesheetItem1 = new ProjectTaskTimesheetItem(projectCode1, taskCode1); ts.ProjectTimeItems.Add(timesheetItem1); var projectCode2 = new PickListItem(1, "p2"); var taskCode2 = new PickListItem(1, "t2"); var timesheetItem2 = new ProjectTaskTimesheetItem(projectCode2, taskCode2); ts.ProjectTimeItems.Add(timesheetItem2); var projectCode3 = new PickListItem(2, "p3"); var taskCode3 = new PickListItem(2, "t3"); var timesheetItem3 = new ProjectTaskTimesheetItem(projectCode3, taskCode3); ts.ProjectTimeItems.Add(timesheetItem3); // Non-project items var npProjectCode1 = new PickListItem(0, "npp1"); var nptaskCode1 = new PickListItem(0, "npt1"); var nptimesheetItem1 = new ProjectTaskTimesheetItem(npProjectCode1, nptaskCode1); ts.NonProjectActivityItems.Add(nptimesheetItem1); var npProjectCode2 = new PickListItem(1, "npp2"); var nptaskCode2 = new PickListItem(1, "npt2"); var nptimesheetItem2 = new ProjectTaskTimesheetItem(npProjectCode2, nptaskCode2); ts.NonProjectActivityItems.Add(nptimesheetItem2); var npProjectCode3 = new PickListItem(2, "npp3"); var nptaskCode3 = new PickListItem(2, "npt3"); var nptimesheetItem3 = new ProjectTaskTimesheetItem(npProjectCode3, nptaskCode3); ts.NonProjectActivityItems.Add(nptimesheetItem3); var timeSheet = new ObservableTimesheet(ts); return(timeSheet); }
public void CalculateTotals_LoggedTimeProject1EachDay_CorrectTotalsUnchangedItems() { var ts = new Timesheet(); var projectCode = new PickListItem(1, "pc1"); var taskCode = new PickListItem(1, "tc1"); var projectItem = new ProjectTaskTimesheetItem(projectCode, taskCode); for (int i = 0; i < 7; i++) { projectItem.TimeEntries[i].LoggedTime = TimeSpan.FromHours(1); } ts.ProjectTimeItems.Add(projectItem); for (int i = 0; i < 7; i++) { ts.RequiredHours[i] = TimeSpan.FromHours(7.5); } var timesheet = new ObservableTimesheet(ts); timesheet.CalculateTotals(); }
private ObservableDummyTestObject CreateDummyTimesheet() { var timesheet = new DummyTestObject(); timesheet.TimesheetId = "timesheetId"; timesheet.DummyTimeEntry = new TimeEntry() { Notes = "notes", ExtraTime = TimeSpan.FromHours(1), LoggedTime = TimeSpan.FromHours(1), // WorkDetailId = null }; var projectCode1 = new PickListItem(1, "projectCode1"); var taskCode1 = new PickListItem(1, "p1taskCode1"); var taskCode2 = new PickListItem(2, "p1taskCode2"); var taskCode3 = new PickListItem(3, "p1taskCode3"); var timesheetItem1 = new ProjectTaskTimesheetItem(projectCode1, taskCode1); // 7 days of the week timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(0) }); //timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(10) }); //timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(20) }); //timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(30) }); //timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(40) }); //timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(50) }); //timesheetItem1.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(60) }); //var timesheetItem2 = new ProjectTaskTimesheetItem(projectCode1, taskCode3); //// 7 days of the week //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(0) }); //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(10) }); //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(20) }); //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(30) }); //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(40) }); //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(50) }); //timesheetItem2.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(60) }); //var timesheetItem3 = new ProjectTaskTimesheetItem(projectCode1, taskCode3); //// 7 days of the week //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(0) }); //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(10) }); //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(20) }); //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(30) }); //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(40) }); //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(50) }); //timesheetItem3.TimeEntries.Add(new TimeEntry { LoggedTime = TimeSpan.FromMinutes(60) }); timesheet.ProjectTimeItems.Add(timesheetItem1); //timesheet.ProjectTimeItems.Add(timesheetItem2); //timesheet.ProjectTimeItems.Add(timesheetItem3); timesheet.RequiredHours.AddRange(new List <TimeSpan> { TimeSpan.FromHours(7.5), TimeSpan.FromHours(7.5), TimeSpan.FromHours(7.5), TimeSpan.FromHours(7.5), TimeSpan.FromHours(7.5), TimeSpan.FromHours(7.5), TimeSpan.FromHours(7.5) }); timesheet.TotalRequiredHours = TimeSpan.FromHours(37.5); timesheet.Title = "timesheetTiele"; timesheet.DummyValueTypeCollection = new List <int> { 0, 1, 2, 3, 4, 5 }; var ObservableDummyTestObject = new ObservableDummyTestObject(timesheet); return(ObservableDummyTestObject); }
protected abstract void PopulateTimesheetItem(HtmlNode htmlNode, ref ProjectTaskTimesheetItem timesheetItem, string index, int dayIndex);
private List <ProjectTaskTimesheetItem> GetTimesheetItems(HtmlNode htmlNode) { var projectTimeItems = new List <ProjectTaskTimesheetItem>(); HtmlNode projectCode = null; // index starts at 2 because of the naming of the ASP.net controls - i.e. first is ctl00$C1$ProjectGrid$ctl2 var i = 2; while (projectCode != null || i == 2) { var index = i.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0'); var projectControlName = string.Format(ProjectSelector, index); projectCode = htmlNode.SelectSingleNode(projectControlName); if (projectCode != null) { // assume that there is a task combo control for each project combo control; HtmlNode taskCode = htmlNode.SelectSingleNode(string.Format(ProjectTaskSelector, index)); ProjectTaskTimesheetItem timesheetItem = AddTimesheetItem(projectTimeItems, projectCode, taskCode); // always 7 days a week for (int j = 0; j < 7; j++) { PopulateTimesheetItem(htmlNode, ref timesheetItem, index, j); var timeValue = htmlNode.SelectSingleNode(string.Format(LoggedTimeSelector, index, j.ToString(CultureInfo.InvariantCulture))); var extraTimeValue = htmlNode.SelectSingleNode(string.Format(ExtraTimeSelector, index, j.ToString(CultureInfo.InvariantCulture))); var notesValue = htmlNode.SelectSingleNode(string.Format(NotesSelector, index, j.ToString(CultureInfo.InvariantCulture))); var workDetailValue = htmlNode.SelectSingleNode(string.Format(WorkDetailSelector, index, j.ToString(CultureInfo.InvariantCulture))); if (timeValue != null && timeValue.Attributes["value"] != null) { timesheetItem.TimeEntries[j].LoggedTime = TimeSpan.Parse(timeValue.Attributes["value"].Value); } if (extraTimeValue != null && extraTimeValue.Attributes["value"] != null) { timesheetItem.TimeEntries[j].ExtraTime = TimeSpan.Parse(extraTimeValue.Attributes["value"].Value); } if (notesValue != null && notesValue.Attributes["value"] != null) { timesheetItem.TimeEntries[j].Notes = notesValue.Attributes["value"].Value; } if (workDetailValue != null && workDetailValue.Attributes["value"] != null) { timesheetItem.TimeEntries[j].WorkDetailId = int.Parse(workDetailValue.Attributes["value"].Value); } } i++; } } return(projectTimeItems); }