示例#1
0
        public async Task NotifyTriangleTasks_HasTasksToNotify_Notify()
        {
            IEmailService    emailService    = A.Fake <IEmailService>();
            IWorkTaskService workTaskService = A.Fake <IWorkTaskService>();

            TaskTriangleBuilder taskTriangleBuilder = new TaskTriangleBuilder();
            TaskTriangle        taskTriangle        = taskTriangleBuilder.AddContent("content1")
                                                      .AddResource("resource1")
                                                      .AddPercentageProgressToNotify(60)
                                                      .SetTime("20/09/2020", DayPeriod.Noon, 4, halfWorkDay: true)
                                                      .Build();

            IWorkTask workTask = A.Fake <IWorkTask>();

            A.CallTo(() => workTask.TaskMeasurement).Returns(taskTriangle);

            List <IWorkTask> workTasks = new List <IWorkTask>()
            {
                workTask
            };

            A.CallTo(() => workTaskService.FindWorkTasksByConditionAsync(A <Func <IWorkTask, bool> > .Ignored))
            .Returns(workTasks);

            NotifierService notifierService = new NotifierService(
                emailService, workTaskService, NullLogger <NotifierService> .Instance);

            await notifierService.NotifyTriangleTasks().ConfigureAwait(false);

            A.CallTo(() => emailService.SendEmail(A <string> .Ignored)).MustHaveHappenedOnceExactly();
        }
        public async Task SaveTaskAsync_ValidWorkTaskToAdd_SuccessResponseReturnedAndSavePerformed()
        {
            IWorkTask validWorkTask = A.Fake <IWorkTask>();

            validWorkTask.GroupName   = "groupName";
            validWorkTask.Description = "validDescription";

            ITasksGroup tasksGroup = mTasksGroupFactory.CreateGroup("bla");

            tasksGroup.SetGroupName(validWorkTask.GroupName);

            IDbRepository <ITasksGroup> dbRepository = A.Fake <IDbRepository <ITasksGroup> >();

            A.CallTo(() => dbRepository.ListAsync()).Returns(new List <ITasksGroup>()
            {
                tasksGroup
            });
            TasksGroupService tasksGroupService =
                new TasksGroupService(dbRepository, mTasksGroupFactory, NullLogger <TasksGroupService> .Instance);

            IResponse <IWorkTask> response =
                await tasksGroupService.SaveTaskAsync(validWorkTask.GroupName, validWorkTask.Description)
                .ConfigureAwait(false);

            Assert.True(response.IsSuccess);
            Assert.Equal(tasksGroup.GetAllTasks().First(), response.ResponseObject);
            A.CallTo(() => dbRepository.UpdateAsync(A <ITasksGroup> .Ignored)).MustHaveHappenedOnceExactly();
        }
示例#3
0
 /// <summary>
 /// Adds the given element to the collection
 /// </summary>
 /// <param name="item">The item to add</param>
 public override void Add(IModelElement item)
 {
     if ((this._parent.Status == null))
     {
         IStatus statusCasted = item.As <IStatus>();
         if ((statusCasted != null))
         {
             this._parent.Status = statusCasted;
             return;
         }
     }
     if ((this._parent.WorkCostDetail == null))
     {
         IWorkCostDetail workCostDetailCasted = item.As <IWorkCostDetail>();
         if ((workCostDetailCasted != null))
         {
             this._parent.WorkCostDetail = workCostDetailCasted;
             return;
         }
     }
     if ((this._parent.WorkTask == null))
     {
         IWorkTask workTaskCasted = item.As <IWorkTask>();
         if ((workTaskCasted != null))
         {
             this._parent.WorkTask = workTaskCasted;
             return;
         }
     }
 }
示例#4
0
            /// <summary>
            /// Adds the given element to the collection
            /// </summary>
            /// <param name="item">The item to add</param>
            public override void Add(IModelElement item)
            {
                if ((this._parent.WorkTask == null))
                {
                    IWorkTask workTaskCasted = item.As <IWorkTask>();
                    if ((workTaskCasted != null))
                    {
                        this._parent.WorkTask = workTaskCasted;
                        return;
                    }
                }
                ISwitchingStep scheduleStepsCasted = item.As <ISwitchingStep>();

                if ((scheduleStepsCasted != null))
                {
                    this._parent.ScheduleSteps.Add(scheduleStepsCasted);
                }
                if ((this._parent.Interval == null))
                {
                    IDateTimeInterval intervalCasted = item.As <IDateTimeInterval>();
                    if ((intervalCasted != null))
                    {
                        this._parent.Interval = intervalCasted;
                        return;
                    }
                }
                ICrew crewsCasted = item.As <ICrew>();

                if ((crewsCasted != null))
                {
                    this._parent.Crews.Add(crewsCasted);
                }
            }
示例#5
0
            /// <summary>
            /// Removes the given item from the collection
            /// </summary>
            /// <returns>True, if the item was removed, otherwise False</returns>
            /// <param name="item">The item that should be removed</param>
            public override bool Remove(IModelElement item)
            {
                IWorkTask workTaskItem = item.As <IWorkTask>();

                if (((workTaskItem != null) &&
                     this._parent.WorkTasks.Remove(workTaskItem)))
                {
                    return(true);
                }
                if ((this._parent.ValidityInterval == item))
                {
                    this._parent.ValidityInterval = null;
                    return(true);
                }
                if ((this._parent.Crew == item))
                {
                    this._parent.Crew = null;
                    return(true);
                }
                ICraft craftItem = item.As <ICraft>();

                if (((craftItem != null) &&
                     this._parent.Crafts.Remove(craftItem)))
                {
                    return(true);
                }
                if ((this._parent.Status == item))
                {
                    this._parent.Status = null;
                    return(true);
                }
                return(false);
            }
        public async Task ListAsync_AsExpected()
        {
            AppDbContext database = new AppDbContext(
                Options.Create(new DatabaseConfigurtaion()),
                mObjectSerializer,
                mIDProducer,
                NullLogger <AppDbContext> .Instance);

            WorkTaskRepository workTaskRepository =
                new WorkTaskRepository(database, NullLogger <WorkTaskRepository> .Instance);

            ITasksGroup tasksGroup1 = mTasksGroupBuilder.CreateGroup("group1");
            IWorkTask   workTask1   = mTasksGroupBuilder.CreateTask(tasksGroup1, "task1");
            IWorkTask   workTask2   = mTasksGroupBuilder.CreateTask(tasksGroup1, "task2");

            ITasksGroup tasksGroup2 = mTasksGroupBuilder.CreateGroup("group2");
            IWorkTask   workTask3   = mTasksGroupBuilder.CreateTask(tasksGroup2, "task3");

            database.Entities.Add(tasksGroup1);
            database.Entities.Add(tasksGroup2);

            List <IWorkTask> workTasks = (await workTaskRepository.ListAsync().ConfigureAwait(false)).ToList();

            Assert.Equal(workTask1, workTasks[0]);
            Assert.Equal(workTask2, workTasks[1]);
            Assert.Equal(workTask3, workTasks[2]);
        }
        public async Task AddAsync_WorkTaskAlreadyExist_NotAdded()
        {
            AppDbContext database = new AppDbContext(
                Options.Create(new DatabaseConfigurtaion()),
                mObjectSerializer,
                mIDProducer,
                NullLogger <AppDbContext> .Instance);

            WorkTaskRepository workTaskRepository =
                new WorkTaskRepository(database, NullLogger <WorkTaskRepository> .Instance);

            const string tasksGroupName = "group1";

            ITasksGroup tasksGroup = mTasksGroupBuilder.CreateGroup(tasksGroupName);
            IWorkTask   workTask   = mTasksGroupBuilder.CreateTask(tasksGroup, "taskDescription");

            database.Entities.Add(tasksGroup);

            Assert.Single(await workTaskRepository.ListAsync().ConfigureAwait(false));

            await workTaskRepository.AddAsync(workTask).ConfigureAwait(false);

            Assert.NotNull(await workTaskRepository.FindAsync(workTask.ID).ConfigureAwait(false));
            Assert.Single(await workTaskRepository.ListAsync().ConfigureAwait(false));
        }
示例#8
0
 public void AllowCorrectionWorkTask(IWorkTask workTask)
 {
     if (WorkTaskStatus == WorkTaskStatus.Executed)
     {
         AllowCorrectionWorkTask();
     }
 }
示例#9
0
        private void AddTaskMeasurementIfNeeded(IWorkTask task, List <TaskMeasurement> tasksMeasurements)
        {
            if (mOpenTasksMeasurementsDict.TryGetValue(task.ID, out TaskMeasurementInfo taskMeasurementInfo))
            {
                if (!taskMeasurementInfo.TaskMeasurement.Triangle.ShouldNotifyExact())
                {
                    return;
                }

                int currentProgressPercentage =
                    taskMeasurementInfo.TaskMeasurement.Triangle.GetCurrentTimeProgressPercentage();

                if (taskMeasurementInfo.PercentageProgress < currentProgressPercentage)
                {
                    AddOrUpdateNewTaskMeasurement(taskMeasurementInfo, tasksMeasurements);
                }

                return;
            }

            TaskMeasurement taskMeasurement = new TaskMeasurement(task.ID, task.Description, task.TaskMeasurement);

            taskMeasurementInfo = new TaskMeasurementInfo(taskMeasurement);
            AddOrUpdateNewTaskMeasurement(taskMeasurementInfo, tasksMeasurements);
        }
示例#10
0
            /// <summary>
            /// Removes the given item from the collection
            /// </summary>
            /// <returns>True, if the item was removed, otherwise False</returns>
            /// <param name="item">The item that should be removed</param>
            public override bool Remove(IModelElement item)
            {
                ISpecification specificationItem = item.As <ISpecification>();

                if (((specificationItem != null) &&
                     this._parent.Specifications.Remove(specificationItem)))
                {
                    return(true);
                }
                IWorkTask workTaskItem = item.As <IWorkTask>();

                if (((workTaskItem != null) &&
                     this._parent.WorkTasks.Remove(workTaskItem)))
                {
                    return(true);
                }
                ICULaborItem cULaborItemItem = item.As <ICULaborItem>();

                if (((cULaborItemItem != null) &&
                     this._parent.CULaborItems.Remove(cULaborItemItem)))
                {
                    return(true);
                }
                ISkill skillItem = item.As <ISkill>();

                if (((skillItem != null) &&
                     this._parent.Skills.Remove(skillItem)))
                {
                    return(true);
                }
                return(false);
            }
示例#11
0
        public async Task PutWorkTaskAsync_RequestSuccess_ExpectedResourceReturned()
        {
            IWorkTask expectedWorkTask = A.Fake <IWorkTask>();

            A.CallTo(() => expectedWorkTask.Description).Returns("description");
            A.CallTo(() => expectedWorkTask.GroupName).Returns("newGroupName");

            ITasksGroupService tasksGroupService = A.Fake <ITasksGroupService>();

            A.CallTo(() => tasksGroupService.SaveTaskAsync(expectedWorkTask.GroupName, expectedWorkTask.Description))
            .Returns(new SuccessResponse <IWorkTask>(expectedWorkTask));

            using TestServer testServer = ApiTestHelper.BuildTestServerWithFakes(tasksGroupService);
            using HttpClient httpClient = testServer.CreateClient();

            WorkTaskResource workTaskResource = new WorkTaskResource
            {
                GroupName   = expectedWorkTask.GroupName,
                Description = expectedWorkTask.Description
            };

            using StringContent jsonContent =
                      new StringContent(JsonConvert.SerializeObject(workTaskResource), Encoding.UTF8, PostMediaType);
            using HttpResponseMessage response = await httpClient.PutAsync(MainRoute, jsonContent).ConfigureAwait(false);

            string stringResponse = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            WorkTaskResource returnedResource = JsonConvert.DeserializeObject <WorkTaskResource>(stringResponse);

            Assert.Equal(expectedWorkTask.GroupName, returnedResource.GroupName);
            Assert.Equal(expectedWorkTask.Description, returnedResource.Description);
        }
示例#12
0
        /// <summary>
        /// 获取评审报告中指定工作任务的下个工作任务
        /// </summary>
        /// <param name="reviewReport">评审报告</param>
        /// <param name="workTask">指定工作任务</param>
        /// <returns></returns>
        public static IWorkTask GetNextWorkTask(IReviewReport reviewReport, IWorkTask workTask)
        {
            if (reviewReport.DataReports == null)
            {
                return(null);
            }

            var dataReports = reviewReport.DataReports.ToList();

            if (dataReports.Any(p => p.ID == workTask.ID))
            {
                if (reviewReport.DataReportType == DataReportType.Parallel)
                {
                    return(reviewReport);  // 在审批报告中,审批报告是子工作任务的下个流程
                }
                else
                {
                    var index = dataReports.FindIndex(p => p.ID.Equals(workTask.ID));
                    if (0 <= index && index < dataReports.Count - 1)
                    {
                        return(dataReports[index + 1]);
                    }
                    else if (index == dataReports.Count - 1)
                    {
                        return(reviewReport); // 在审批报告中,审批报告是子工作任务的下个流程
                    }
                }
            }
            return(null);
        }
        public async Task SaveTaskAsync_DescriptionExistsInTheSameGroup_SaveNotPerformed()
        {
            IWorkTask workTask = A.Fake <IWorkTask>();

            workTask.GroupName   = "groupName";
            workTask.Description = "description";

            IWorkTask workTaskWithSameDescription = A.Fake <IWorkTask>();

            workTask.GroupName   = workTask.GroupName;
            workTask.Description = workTask.Description;

            ITasksGroup tasksGroup = A.Fake <ITasksGroup>();

            tasksGroup.SetGroupName(workTask.GroupName);
            A.CallTo(() => tasksGroup.GetAllTasks()).Returns(new List <IWorkTask> {
                workTask
            });

            IDbRepository <ITasksGroup> dbRepository = A.Fake <IDbRepository <ITasksGroup> >();

            A.CallTo(() => dbRepository.ListAsync()).Returns(new List <ITasksGroup>()
            {
                tasksGroup
            });

            TasksGroupService tasksGroupService =
                new TasksGroupService(dbRepository, mTasksGroupFactory, NullLogger <TasksGroupService> .Instance);

            await tasksGroupService.SaveTaskAsync(workTask.GroupName, workTask.Description).ConfigureAwait(false);

            A.CallTo(() => dbRepository.UpdateAsync(A <ITasksGroup> .Ignored)).MustNotHaveHappened();
        }
        public async Task UpdateTaskAsync_TaskExists_TaskUpdated()
        {
            IWorkTask taskToUpdate = A.Fake <IWorkTask>();

            A.CallTo(() => taskToUpdate.Description).Returns("some-description");
            A.CallTo(() => taskToUpdate.ID).Returns("some-id");

            ITasksGroup tasksGroup = A.Fake <ITasksGroup>();
            OperationResult <IWorkTask> getTaskResult = new OperationResult <IWorkTask>(true, taskToUpdate);

            A.CallTo(() => tasksGroup.GetTask(A <string> .Ignored)).Returns(getTaskResult);

            IDbRepository <ITasksGroup> dbRepository = A.Fake <IDbRepository <ITasksGroup> >();

            A.CallTo(() => dbRepository.ListAsync()).Returns(new List <ITasksGroup>()
            {
                tasksGroup
            });
            TasksGroupService tasksGroupService =
                new TasksGroupService(dbRepository, mTasksGroupFactory, NullLogger <TasksGroupService> .Instance);

            await tasksGroupService.UpdateTaskAsync(
                new WorkTaskResource
            {
                TaskId      = taskToUpdate.ID,
                Description = taskToUpdate.Description
            }).ConfigureAwait(false);

            A.CallTo(() => dbRepository.UpdateAsync(tasksGroup)).MustHaveHappenedOnceExactly();
        }
        public async Task SaveTaskAsync_DescriptionExistsInTheSameGroup_FailResponseReturned()
        {
            IWorkTask workTask = A.Fake <IWorkTask>();

            workTask.GroupName   = "groupName";
            workTask.Description = "description";

            IWorkTask workTaskWithSameDescription = A.Fake <IWorkTask>();

            workTask.GroupName   = workTask.GroupName;
            workTask.Description = workTask.Description;

            ITasksGroup tasksGroup = A.Fake <ITasksGroup>();

            tasksGroup.SetGroupName(workTask.GroupName);
            A.CallTo(() => tasksGroup.GetAllTasks()).Returns(new List <IWorkTask> {
                workTask
            });

            IDbRepository <ITasksGroup> dbRepository = A.Fake <IDbRepository <ITasksGroup> >();

            A.CallTo(() => dbRepository.ListAsync()).Returns(new List <ITasksGroup>()
            {
                tasksGroup
            });

            TasksGroupService tasksGroupService =
                new TasksGroupService(dbRepository, mTasksGroupFactory, NullLogger <TasksGroupService> .Instance);

            IResponse <IWorkTask> response =
                await tasksGroupService.SaveTaskAsync(workTask.GroupName, workTask.Description).ConfigureAwait(false);

            Assert.False(response.IsSuccess);
            Assert.Null(response.ResponseObject);
        }
        public async Task SaveTaskAsync_InvalidTaskName_FailResponseReturnedAndSaveNotPerformed()
        {
            const string groupName = "groupName";

            IWorkTask workTask = A.Fake <IWorkTask>();

            workTask.GroupName   = groupName;
            workTask.Description = mInvalidTaskName;
            OperationResult <IWorkTask> createTaskResult = new OperationResult <IWorkTask>(true, workTask);

            ITasksGroup tasksGroup = A.Fake <ITasksGroup>();

            tasksGroup.SetGroupName(groupName);

            A.CallTo(() => tasksGroup.CreateTask(A <string> .Ignored, A <string> .Ignored)).Returns(createTaskResult);

            IDbRepository <ITasksGroup> dbRepository = A.Fake <IDbRepository <ITasksGroup> >();

            A.CallTo(() => dbRepository.ListAsync()).Returns(new List <ITasksGroup> {
                tasksGroup
            });

            TasksGroupService tasksGroupService =
                new TasksGroupService(dbRepository, mTasksGroupFactory, NullLogger <TasksGroupService> .Instance);

            IResponse <IWorkTask> response =
                await tasksGroupService.SaveTaskAsync(workTask.GroupName, workTask.Description).ConfigureAwait(false);

            Assert.False(response.IsSuccess);
            Assert.Null(response.ResponseObject);
            A.CallTo(() => dbRepository.AddAsync(A <ITasksGroup> .Ignored)).MustNotHaveHappened();
        }
示例#17
0
            /// <summary>
            /// Adds the given element to the collection
            /// </summary>
            /// <param name="item">The item to add</param>
            public override void Add(IModelElement item)
            {
                ISpecification specificationsCasted = item.As <ISpecification>();

                if ((specificationsCasted != null))
                {
                    this._parent.Specifications.Add(specificationsCasted);
                }
                IWorkTask workTasksCasted = item.As <IWorkTask>();

                if ((workTasksCasted != null))
                {
                    this._parent.WorkTasks.Add(workTasksCasted);
                }
                ICULaborItem cULaborItemsCasted = item.As <ICULaborItem>();

                if ((cULaborItemsCasted != null))
                {
                    this._parent.CULaborItems.Add(cULaborItemsCasted);
                }
                ISkill skillsCasted = item.As <ISkill>();

                if ((skillsCasted != null))
                {
                    this._parent.Skills.Add(skillsCasted);
                }
            }
        public async Task UpdateTaskAsync_TaskExists_SuccessResponseReturned()
        {
            IWorkTask taskToUpdate = A.Fake <IWorkTask>();

            A.CallTo(() => taskToUpdate.Description).Returns("some-description");
            A.CallTo(() => taskToUpdate.ID).Returns("some-id");

            ITasksGroup tasksGroup = A.Fake <ITasksGroup>();
            OperationResult <IWorkTask> getTaskResult = new OperationResult <IWorkTask>(true, taskToUpdate);

            A.CallTo(() => tasksGroup.GetTask(A <string> .Ignored)).Returns(getTaskResult);

            IDbRepository <ITasksGroup> dbRepository = A.Fake <IDbRepository <ITasksGroup> >();

            A.CallTo(() => dbRepository.ListAsync()).Returns(new List <ITasksGroup>()
            {
                tasksGroup
            });

            TasksGroupService tasksGroupService =
                new TasksGroupService(dbRepository, mTasksGroupFactory, NullLogger <TasksGroupService> .Instance);

            IResponse <IWorkTask> response = await tasksGroupService.UpdateTaskAsync(
                new WorkTaskResource
            {
                TaskId      = taskToUpdate.ID,
                Description = taskToUpdate.Description
            }).ConfigureAwait(false);

            Assert.True(response.IsSuccess);
            Assert.Equal(taskToUpdate, response.ResponseObject);
        }
示例#19
0
        /// <summary>
        /// 获取下个工作任务
        /// </summary>
        /// <param name="workTask"></param>
        /// <returns></returns>
        public IWorkTask GetNextWorkTask(IWorkTask workTask)
        {
            var index = _workTasks.FindIndex(p => p.ID.Equals(workTask.ID));

            if (index == _workTasks.Count - 1)
            {
                return(null);
            }
            return(_workTasks[index + 1]);
        }
示例#20
0
        /// <summary>
        /// Queues work that will be run in the engine main thread.
        /// </summary>
        /// <param name="task">The work task.</param>
        public static void QueueWork(IWorkTask task)
        {
            if (task == null)
            {
                throw new ArgumentNullException("task");
            }

            workQueue.Enqueue(task);
            workQueueResetEvent.Set();
        }
        private async Task <(ITasksGroup, IWorkTask)> FindWorkTaskAndItsParentGroup(string workTaskId)
        {
            foreach (ITasksGroup group in await ListAsync().ConfigureAwait(false))
            {
                IWorkTask task = group.GetTask(workTaskId).Value;
                if (task != null)
                {
                    return(group, task);
                }
            }

            return(null, null);
        }
示例#22
0
        public void IsFinished_HasOpenTasks_False()
        {
            ITasksGroup taskGroup = mTaskGroupFactory.CreateGroup("TestGroup", mTasksGroupProducer).Value;

            mTaskGroupFactory.CreateTask(taskGroup, "task1", mWorkTaskProducer);
            IWorkTask task2 = mTaskGroupFactory.CreateTask(taskGroup, "task2", mWorkTaskProducer).Value;
            IWorkTask task3 = mTaskGroupFactory.CreateTask(taskGroup, "task3", mWorkTaskProducer).Value;

            task2.CloseTask(string.Empty);
            task3.CloseTask(string.Empty);

            Assert.False(taskGroup.IsFinished);
        }
示例#23
0
        public async Task Start(IWorkTask workTask, int workTheardCount)
        {
            await workQueue.EnqueueAsync(workTask);

            if (workTheardCount < 1)
            {
                workTheardCount = 1;
            }

            tasks = new Task[workTheardCount];
            for (int i = 0; i < tasks.Length; i++)
            {
                tasks[i] = Work();
            }
            await Task.WhenAll(tasks);
        }
示例#24
0
        public async Task <IActionResult> PutNoteAsync([FromBody] NoteResource noteResource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.GetErrorMessages()));
            }

            if (noteResource == null)
            {
                return(BadRequest($"Parameter {nameof(noteResource)} is null"));
            }

            IEnumerable <IWorkTask> workTasks =
                await mWorkTaskService.FindWorkTasksByConditionAsync(task => task.ID == noteResource.NotePath)
                .ConfigureAwait(false);

            if (!workTasks.Any())
            {
                return(StatusCode(StatusCodes.Status405MethodNotAllowed, $"Could not find work task {noteResource.NotePath}"));
            }

            mLogger.LogDebug($"Requesting putting new note {noteResource.NotePath}");

            IWorkTask firstWorkTask = workTasks.First();

            string noteName = $"{firstWorkTask.ID}-{firstWorkTask.Description}{AppConsts.NoteExtension}";

            try
            {
                IResponse <NoteResourceResponse> result =
                    await mNoteService.CreatePrivateNote(noteName, noteResource.Text).ConfigureAwait(false);

                NoteResource noteResourceResult = mMapper.Map <NoteResourceResponse, NoteResource>(result.ResponseObject);

                if (!result.IsSuccess)
                {
                    return(StatusCode(StatusCodes.Status405MethodNotAllowed, result.Message));
                }

                return(Ok(noteResourceResult));
            }
            catch (Exception ex)
            {
                mLogger.LogError(ex, "Put operation failed with error");
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }
示例#25
0
        private void Item_OnWorkTaskStatusChange(IWorkTask workTask)
        {
            if ((workTask as IWorkFlow).WorkFlowStatus == WorkFlowStatus.NoPass)
            {
                ProjectFlowStatus = ProjectFlowStatus.NoPass;
                UpdateWorkTaskStatus(WorkTaskStatus.Executed);
            }
            else if ((workTask as IWorkFlow).WorkFlowStatus == WorkFlowStatus.Pass)
            {
                ExecutNextWorkTask();
            }

            if (_workTasks.All(p => (p as IWorkFlow).WorkFlowStatus == WorkFlowStatus.Pass))
            {
                ProjectFlowStatus = ProjectFlowStatus.Pass;
                UpdateWorkTaskStatus(WorkTaskStatus.Executed);
            }
        }
        public async Task FindAsync_IdExist_Found()
        {
            AppDbContext database = new AppDbContext(
                Options.Create(new DatabaseConfigurtaion()),
                mObjectSerializer,
                mIDProducer,
                NullLogger <AppDbContext> .Instance);

            WorkTaskRepository workTaskRepository =
                new WorkTaskRepository(database, NullLogger <WorkTaskRepository> .Instance);

            ITasksGroup tasksGroup = mTasksGroupBuilder.CreateGroup("group1");
            IWorkTask   workTask   = mTasksGroupBuilder.CreateTask(tasksGroup, "taskDescription");

            database.Entities.Add(tasksGroup);

            Assert.NotNull(await workTaskRepository.FindAsync(workTask.ID).ConfigureAwait(false));
        }
示例#27
0
        /// <summary>
        /// 工作任务允许修改
        /// 将下个工作任务由执行状态改为等待状态
        /// 本工作任务由执行完成状态改为执行状态
        /// 只有已执行完成的工作任务才可以请求【工作任务允许修改】
        /// </summary>
        /// <param name="nexWorkTask">下个工作任务</param>
        public void AllowCorrectionWorkTask(IWorkTask nexWorkTask)
        {
            if (WorkTaskStatus == WorkTaskStatus.Executing)
            {
                throw new Exception("工作任务处于执行状态,可以直接修改数据报告!");
            }
            if (WorkTaskStatus == WorkTaskStatus.Waiting)
            {
                throw new Exception("工作任务处于等待状态,不能修改数据报告状态!");
            }

            if (nexWorkTask != null)
            {
                nexWorkTask.Wait();
            }

            UpdateWorkTaskStatus(WorkTaskStatus.Executing);
        }
        public async Task <IResponse <IWorkTask> > SaveTaskAsync(string taskGroupIdentifier, string workTaskDescription)
        {
            try
            {
                ITasksGroup tasksGroup =
                    (await FindTasksGroupsByConditionAsync(group => group.ID == taskGroupIdentifier)
                     .ConfigureAwait(false))
                    .FirstOrDefault();

                if (tasksGroup == null && taskGroupIdentifier != null)
                {
                    tasksGroup = (await FindTasksGroupsByConditionAsync(group =>
                                                                        string.Equals(group.Name, taskGroupIdentifier, StringComparison.OrdinalIgnoreCase))
                                  .ConfigureAwait(false))
                                 .FirstOrDefault();
                }

                if (tasksGroup == null)
                {
                    return(new FailResponse <IWorkTask>($"Tasks group {taskGroupIdentifier} does not exist"));
                }

                if (!ValidateUniqueTaskDescription(tasksGroup, workTaskDescription))
                {
                    return(new FailResponse <IWorkTask>($"Tasks group {tasksGroup.Name} " +
                                                        $"has already work task with description {workTaskDescription}"));
                }

                IWorkTask workTask = mTaskGroupFactory.CreateTask(tasksGroup, workTaskDescription);

                if (!mWorkTaskNameValidator.IsNameValid(workTask.Description))
                {
                    return(new FailResponse <IWorkTask>($"Task description'{workTask.Description}' is invalid"));
                }

                await mTasksGroupRepository.UpdateAsync(tasksGroup).ConfigureAwait(false);

                return(new SuccessResponse <IWorkTask>(workTask));
            }
            catch (Exception ex)
            {
                return(new FailResponse <IWorkTask>($"An error occurred when saving work task {taskGroupIdentifier}: {ex.Message}"));
            }
        }
示例#29
0
            /// <summary>
            /// Adds the given element to the collection
            /// </summary>
            /// <param name="item">The item to add</param>
            public override void Add(IModelElement item)
            {
                IWorkTask workTasksCasted = item.As <IWorkTask>();

                if ((workTasksCasted != null))
                {
                    this._parent.WorkTasks.Add(workTasksCasted);
                }
                if ((this._parent.ValidityInterval == null))
                {
                    IDateTimeInterval validityIntervalCasted = item.As <IDateTimeInterval>();
                    if ((validityIntervalCasted != null))
                    {
                        this._parent.ValidityInterval = validityIntervalCasted;
                        return;
                    }
                }
                if ((this._parent.Crew == null))
                {
                    ICrew crewCasted = item.As <ICrew>();
                    if ((crewCasted != null))
                    {
                        this._parent.Crew = crewCasted;
                        return;
                    }
                }
                ICraft craftsCasted = item.As <ICraft>();

                if ((craftsCasted != null))
                {
                    this._parent.Crafts.Add(craftsCasted);
                }
                if ((this._parent.Status == null))
                {
                    IStatus statusCasted = item.As <IStatus>();
                    if ((statusCasted != null))
                    {
                        this._parent.Status = statusCasted;
                        return;
                    }
                }
            }
示例#30
0
        public OperationResult <IWorkTask> CreateTask(ITasksGroup tasksGroup, string description, IWorkTaskProducer workTaskProducer)
        {
            if (workTaskProducer == null)
            {
                throw new ArgumentNullException(nameof(workTaskProducer));
            }

            IWorkTask createdTask = workTaskProducer.ProduceTask(mIDProducer.ProduceID(), description);

            OperationResult addTaskResult = tasksGroup.AddTask(createdTask);

            addTaskResult.Log(mLogger);

            if (!addTaskResult.Success)
            {
                return(new OperationResult <IWorkTask>(false, addTaskResult.Reason, createdTask));
            }

            return(new OperationResult <IWorkTask>(true, addTaskResult.Reason, createdTask));
        }