Exemple #1
0
        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));
        }
Exemple #5
0
        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();
        }
Exemple #6
0
 public void Save()
 {
     Timesheet = _webScraper.UpdateTimeSheet(Timesheet);
 }