示例#1
0
        public static QueryExpression Build(GetEntryTimeRangeRequest request)
        {
            request.ArgumentNotNull(nameof(request));

            var query = new QueryExpression(TimeEntry.Name)
            {
                ColumnSet = new ColumnSet(new[]
                {
                    TimeEntry.Properties.Start
                }),
                Criteria = new FilterExpression
                {
                    Conditions =
                    {
                        new ConditionExpression
                        {
                            AttributeName = TimeEntry.Properties.Start,
                            Operator      = ConditionOperator.Between,
                            Values        = { request.Start.Date, request.End.EndOfTheDay() }
                        },
                        new ConditionExpression(TimeEntry.Properties.BookableResource, ConditionOperator.Equal, request.ResourceId)
                    }
                }
            };

            return(query);
        }
示例#2
0
        private DataCollection <Entity> GetTimeEntries(GetEntryTimeRangeRequest request, XrmFakedContext context)
        {
            var queryExpression = new QueryExpression(TimeEntry.Name)
            {
                ColumnSet = new ColumnSet(new[]
                {
                    TimeEntry.Properties.Duration,
                    TimeEntry.Properties.BookableResource,
                    TimeEntry.Properties.Start,
                    TimeEntry.Properties.End
                }),
                Criteria = new FilterExpression
                {
                    Conditions =
                    {
                        new ConditionExpression
                        {
                            AttributeName = TimeEntry.Properties.Start,
                            Operator      = ConditionOperator.Between,
                            Values        = { request.Start.Date, request.End.Date.EndOfTheDay() }
                        },
                        new ConditionExpression(TimeEntry.Properties.BookableResource, ConditionOperator.Equal, request.ResourceId)
                    }
                }
            };

            return(context.GetOrganizationService().RetrieveMultiple(queryExpression).Entities);
        }
示例#3
0
        public void CreationOnlyNonExistingTimeEntriesTest()
        {
            XrmFakedContext context    = new XrmFakedContext();
            Guid            resourseId = Guid.NewGuid();
            DateTime        startDate  = new DateTime(2000, 1, 1, 9, 0, 0, DateTimeKind.Utc);
            TimeSpan        duration   = TimeSpan.FromDays(2);

            var targetTimeEntry = EntityFactory.CreateTimeEntry(startDate, duration, resourseId);

            var existingEntryStart    = startDate.AddDays(1);
            var existingEntryDuration = TimeSpan.FromHours(2);

            context.Initialize(new List <Entity> {
                EntityFactory.CreateTimeEntry(existingEntryStart, existingEntryDuration, resourseId),
            });

            var request = new GetEntryTimeRangeRequest(startDate, startDate + duration, resourseId);

            var entitiesBeforeCreation = GetTimeEntries(request, context);

            Assert.AreEqual(1, entitiesBeforeCreation.Count);
            // One TimeEnrty exists, 1 should be added before existing one and 1 should be added after existing one
            PreOperationAndThenCreate(context, targetTimeEntry);

            var entitiesAfterCreation = GetTimeEntries(request, context);
            var timeEntries           = entitiesAfterCreation.Select(e => TimeEntryDtoConverter.ConvertToDto(e)).ToArray();

            Assert.AreEqual(3, timeEntries.Length);

            var existingTimeEntry = timeEntries[0];

            Assert.AreEqual(existingTimeEntry.BookableResource.Id, resourseId);
            Assert.AreEqual(existingTimeEntry.Start, existingEntryStart);
            Assert.AreEqual(existingTimeEntry.End, existingEntryStart + existingEntryDuration);

            var firstNewTimeEntry = timeEntries[1];

            Assert.AreEqual(firstNewTimeEntry.BookableResource.Id, resourseId);
            Assert.AreEqual(firstNewTimeEntry.Start, startDate.Date.AddDays(2));
            Assert.AreEqual(firstNewTimeEntry.End, startDate.Date.AddDays(2).EndOfTheDay());

            // a new time entry before the existing one is a changed "target" TimeEntry
            // the "target" TimeEntry is created last
            var secondNewTimeEntry = timeEntries[2];

            Assert.AreEqual(secondNewTimeEntry.BookableResource.Id, resourseId);
            Assert.AreEqual(secondNewTimeEntry.Start, startDate);
            Assert.AreEqual(secondNewTimeEntry.End, startDate.EndOfTheDay());
        }