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); }
/// <summary> /// Write contents of the timesheet to the console /// </summary> /// <param name="timesheet"></param> public static void PrettyPrintTimesheet(ObservableTimesheet timesheet) { Console.WriteLine(timesheet.TimesheetId + ": " + timesheet.Title + Environment.NewLine); Console.WriteLine("MON".PadRight(10) + "TUE".PadRight(10) + "WED".PadRight(10) + "THU".PadRight(10) + "FRI".PadRight(10) + "SAT".PadRight(10) + "SUN".PadRight(10)); Console.WriteLine(@"PROJECT ITEMS"); foreach (var projectTimeItem in timesheet.ProjectTimeItems) { Console.WriteLine(string.Format("Project: {0} ({1}), Task: {2} ({3})", projectTimeItem.ProjectCode.Name, projectTimeItem.ProjectCode.Value, projectTimeItem.TaskCode.Name, projectTimeItem.TaskCode.Value)); for (int i = 0; i < 7; i++) { Console.Write(projectTimeItem.TimeEntries[i].LoggedTime.ToString().PadRight(10)); } Console.WriteLine(Environment.NewLine); } Console.WriteLine(@"NON-PROJECT ITEMS"); foreach (var projectTimeItem in timesheet.NonProjectActivityItems) { Console.WriteLine(string.Format("Project: {0} ({1}), Task: {2} ({3})", projectTimeItem.ProjectCode.Name, projectTimeItem.ProjectCode.Value, projectTimeItem.TaskCode.Name, projectTimeItem.TaskCode.Value)); for (int i = 0; i < 7; i++) { Console.Write(projectTimeItem.TimeEntries[i].LoggedTime.ToString().PadRight(10)); } Console.WriteLine(Environment.NewLine); } }
// 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); }
/// <summary> /// Submit timesheet changes and read in the newly saved timesheet /// </summary> /// <param name="timesheet">timesheet with changes</param> /// <returns></returns> public ObservableTimesheet UpdateTimeSheet(ObservableTimesheet timesheet) { if (_cookies.Count == 0) { throw new InvalidOperationException("Cannot update timesheet as login cookies have not been set"); } string postData = HtmlHelper.ConstructQuerystring( //VIEWSTATENAME, _viewState, // We don't seem to need the viewstate - cool! USERNAMECONTROLNAME, USERNAME, PASSWORDCONTROLNAME, PASSWORD, "__EVENTTARGET", "ctl00$btnSave", "ctl00$hSave", "Y", "ctl00$C1$hdnTimesheetId", timesheet.TimesheetId); var changes = timesheet.ExtractChanges(); var changesQueryString = HtmlHelper.ConstructQuerystring(changes); postData += "&" + changesQueryString; //postData += "&" + "ctl00$C1$ProjectGrid$ctl02$txtLoggedTime1=1:11"; var webRequest = WebRequest.Create(TIMESHEETPAGE) as HttpWebRequest; webRequest.Method = "POST"; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.CookieContainer = _cookies; // write the form values into the request message var requestWriter = new StreamWriter(webRequest.GetRequestStream()); requestWriter.Write(postData); requestWriter.Close(); string reponseData; using (var responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream())) { reponseData = responseReader.ReadToEnd(); } var parser = new HtmlParser(); var updatedTimesheet = parser.ParseTimesheet(reponseData, out _viewState); return(new ObservableTimesheet(updatedTimesheet)); }
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(); }
public void Save() { Timesheet = _webScraper.UpdateTimeSheet(Timesheet); }