Exemplo n.º 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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        ///// <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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 7
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();
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
 protected abstract void PopulateTimesheetItem(HtmlNode htmlNode,
                                               ref ProjectTaskTimesheetItem timesheetItem,
                                               string index,
                                               int dayIndex);
Exemplo n.º 10
0
        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);
        }