示例#1
0
        public async Task OpenAirClientGetTimesheets_ShouldParseResult()
        {
            var options = new OpenAirOptions("http://localhost/", "MM", "K", "R", "P");
            var handler = new MockHttpMessageHandler()
                          .Set("<?xml version=\"1.0\" standalone=\"yes\"?><response><Auth status=\"0\"></Auth ><Read status=\"0\"><Timesheet><status>A</status><userid>722</userid><name>02/25/19 to 03/03/19 PTO</name><total>8.00</total><starts><Date><hour/><minute/><timezone/><second/><month>02</month><day>25</day><year>2019</year></Date></starts><notes>PTO</notes></Timesheet></Read ></response>");

            var client  = new OpenAirClient(() => handler, options);
            var date    = new DateTime(2000, 10, 10);
            var results = await client.GetTimesheetsAsync(date, date);

            var content = Encoding.UTF8.GetString(handler[0].RequestContent);

            Assert.AreEqual("<request API_version=\"1.0\" client=\"MM\" client_ver=\"1.0\" namespace=\"default\" key=\"K\"><Auth><Login><company>MM</company><user>R</user><password>P</password></Login></Auth><Read type=\"Timesheet\" filter=\"newer-than,older-than\" field=\"starts,starts\" method=\"all\" limit=\"0,1000\"><Date><month>10</month><day>10</day><year>2000</year></Date><Date><month>10</month><day>10</day><year>2000</year></Date><_Return><status/><name /><total/><notes /><userid /><starts /></_Return></Read></request>", content);
            Assert.AreEqual(1, results.Count);

            var first = results.First();

            Assert.AreEqual(722, first.UserId);
            Assert.AreEqual(2, first.StartDate.Date.Month);
            Assert.AreEqual(25, first.StartDate.Date.Day);
            Assert.AreEqual(2019, first.StartDate.Date.Year);
        }
示例#2
0
        /// <inheritdoc/>
        public async Task <IReadOnlyList <Timesheet> > GetUnsubmittedTimesheetsAsync(DateTime date)
        {
            var requiredHours = date.DayOfWeek == DayOfWeek.Saturday ? 40 : (int)date.DayOfWeek * 8;
            var toweek        = date.AddDays(-(double)date.DayOfWeek);
            var timesheets    = await _client.GetTimesheetsAsync(
                toweek.AddDays(-7),
                date.AddDays(1));

            var unsubmittedTimesheets = timesheets
                                        .Where(it => it.Status == "A" || it.Status == "S")
                                        .GroupBy(it => it.UserId)
                                        .Select(it => new
            {
                UserId = it.Key,
                Name   = it.FirstOrDefault()?.Name,
                Total  = it.Where(sheet => sheet.StartDate.Date > toweek).Sum(sheet => sheet.Total)
            })
                                        .Where(it => it.Total < requiredHours)
                                        .ToArray();

            var users = await GetUsersWithDepartmentAsync(unsubmittedTimesheets.Select(it => it.UserId));

            var result = unsubmittedTimesheets
                         .Select(it => new { timesheet = it, user = users.FirstOrDefault(user => user.OpenAirUserId == it.UserId) })
                         .Where(it => it.user != null)
                         .Select(it => new Timesheet
            {
                Name           = it.timesheet.Name,
                UserName       = FormatDisplayName(it.user.Name),
                UserEmail      = it.user.Email,
                DepartmentName = it.user.Department.Name,
                Total          = it.timesheet.Total
            });

            return(result.ToArray());
        }