Exemple #1
0
        public override bool Execute(OrderTaskContext context)
        {
            bool allowed = false;

            if (context.MTApp.CurrentRequestContext != null)
            {
                allowed = context.MTApp.CurrentRequestContext.CurrentStore.Settings.AllowZeroDollarOrders;
            }
            if (!allowed)
            {
                if (context.Order.TotalOrderBeforeDiscounts - context.Order.TotalOrderDiscounts <= 0)
                {
                    WorkflowMessage errorMessage = new WorkflowMessage("Error", "Zero dollar orders are not allowed on this store.", true);
                    context.Errors.Add(errorMessage);
                    return(false);
                }
            }

            if (context.Order.Items.Count < 1)
            {
                WorkflowMessage error2 = new WorkflowMessage("Error", "The system was unable to process your order and may be busy. Please try again.", true);
                context.Errors.Add(error2);
                return(false);
            }
            return(true);
        }
Exemple #2
0
        internal void RejectApproveWorkItem(int workItemId, string approveComment, long nextActivityId)
        {
            SysWorkItem item;

            this._pi = this._piCacheFactory.GetProcessInstanceCacheByWorkItem(workItemId, out item);
            if (!item.Status.HasValue)
            {
                item.Status = 0;
            }
            if (item.Status.Value == 1)
            {
                throw new ApplicationException("该工作项已完成");
            }
            if (item.Status.Value == 3)
            {
                throw new ApplicationException("该工作项已被系统取消");
            }
            if (item.Status.Value != 0)
            {
                throw new ApplicationException("该工作项已完成或被取消");
            }
            this.AddInstanceData(item, ApproveResultEnum.Reject, approveComment);
            Queue <WorkflowMessage> queue   = new Queue <WorkflowMessage>(10);
            WorkflowMessage         message = this.NewRejectWorkItemWithNextActivityApproveMessage(item, nextActivityId);

            queue.Enqueue(message);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._piCacheFactory.ClearCache(this._pi.ProcessInstanceId);
        }
Exemple #3
0
        private Mock <IWorkflowMessageRepository> BuildIRepositoryMock(WorkflowMessage message)
        {
            var mock = new Mock <IWorkflowMessageRepository>();

            mock.Setup(r => r.GetByKey(It.IsAny <Guid>())).Returns(message);
            return(mock);
        }
        public override void ProcessMessage(SysWorkflowMessage msg)
        {
            SysWorkItem        wI = this._engine.WI;
            SysProcessInstance pI = this._engine.PI;

            if (!wI.Status.HasValue)
            {
                wI.Status = 0;
            }
            if (wI.Status.Value != 0x63)
            {
                throw new ApplicationException("该工作项的状态已变更");
            }
            Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10);

            if (msg.NextApproveUserList.Count > 0)
            {
                WorkflowMessage item = this._engine.NewCompleteWorkItemWithNextUsersMessage(wI, msg.NextApproveUserList);
                queue.Enqueue(item);
            }
            else
            {
                WorkflowMessage message2 = this._engine.NewCompleteWorkItemMessage(wI);
                queue.Enqueue(message2);
            }
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._engine.ProcessInstanceCache.ClearCache(pI.ProcessInstanceId);
        }
Exemple #5
0
        internal virtual int StartFormProcess(int startUserId, int formInstanceId)
        {
            IOrgProxy proxy        = OrgProxyFactory.GetProxy(this._context);
            int       nextIdentity = this._manager.GetNextIdentity();
            IUser     userById     = proxy.GetUserById(startUserId);

            if (userById == null)
            {
                throw new ApplicationException("用户不存在");
            }
            if (!userById.Department_ID.HasValue)
            {
                throw new ApplicationException("未指定用户部门");
            }
            IDepartment departmentById = proxy.GetDepartmentById(userById.Department_ID.Value);

            if (departmentById == null)
            {
                throw new ApplicationException("用户部门无效");
            }
            SysFormInstance fi = this._context.FindById <SysFormInstance>(new object[] { formInstanceId });

            if (fi == null)
            {
                throw new ApplicationException("表单实例不存在");
            }
            if (!fi.ObjectId.HasValue)
            {
                throw new ApplicationException("表单实例未关联对象ID");
            }
            fi.State = 1;
            this.ProcessInstanceCache.UpdateFormInstance(fi);
            SysProcessInstance instance2 = new SysProcessInstance {
                StartTime         = new DateTime?(DateTime.Now),
                EndTime           = null,
                InstanceStatus    = 0,
                ObjectId          = fi.ObjectId.Value,
                FormInstanceId    = new int?(fi.FormInstanceId),
                FormInstance      = fi,
                ProcessId         = new long?(this._process.ProcessId),
                ProcessInstanceId = nextIdentity,
                StartUserId       = new int?(startUserId),
                StartDeptId       = new int?(departmentById.Department_ID),
                WwfInstanceId     = null
            };

            this._pi = instance2;
            this._pi.FormInstance = fi;
            this._piCacheFactory.AddProcessInstance(this._pi);
            Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10);
            WorkflowMessage         item  = this.NewStartProcessMessage();

            queue.Enqueue(item);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._piCacheFactory.ClearCache(nextIdentity);
            return(nextIdentity);
        }
		public override bool Execute(OrderTaskContext context)
		{
			for (int i = 0; i <= 5; i++) {
				WorkflowMessage errorMessage = new WorkflowMessage("Error", "This error is error number " + i.ToString(), true);
				context.Errors.Add(errorMessage);
			}
			return false;
		}
Exemple #7
0
 public override bool Execute(OrderTaskContext context)
 {
     for (var i = 0; i <= 5; i++)
     {
         var errorMessage = new WorkflowMessage("Error", "This error is error number " + i, true);
         context.Errors.Add(errorMessage);
     }
     return(false);
 }
        public void GetKnownTypes()
        {
            var types = WorkflowMessage.GetKnownTypes();

            types.Should().NotBeEmpty();
            types.Count().Should().Be(4);
            types.Should().Contain(typeof(ReportCompleteMessage));
            types.Should().Contain(typeof(ReportInProgressMessage));
            types.Should().Contain(typeof(ReportPendingCompleteMessage));
            types.Should().Contain(typeof(ReportSubmittedMessage));
        }
Exemple #9
0
        protected void RegisterWarning(string code, IDictionary <string, string> parameters)
        {
            var message = new WorkflowMessage {
                Code = code, Parameters = new Dictionary <string, string>()
            };

            foreach (var param in parameters)
            {
                message.Parameters.Add(param.Key, param.Value);
            }

            CurrentResult.Warnings.Add(message);
        }
Exemple #10
0
        internal virtual void CancelProcess(int processInstanceId)
        {
            this._pi = this._piCacheFactory.GetProcessInstanceCache(processInstanceId);
            Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10);
            WorkflowMessage         item  = this.NewCancelProcessMessage(this._pi);

            queue.Enqueue(item);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._piCacheFactory.ClearCache(processInstanceId);
        }
        public override void ProcessMessage(SysWorkflowMessage msg)
        {
            if (this._engine.ProcessCache.GetProcessCache(msg.ProcessId) == null)
            {
                throw new ApplicationException("process == null");
            }
            SysProcessInstance processInstance = this._engine.PI;

            if (processInstance == null)
            {
                throw new ApplicationException("processInstance == null");
            }
            IOrgProxy proxy = OrgProxyFactory.GetProxy(this.dbContext);

            if (!processInstance.StartUserId.HasValue)
            {
                throw new ApplicationException("processInstance.StartUserId == null");
            }
            IUser userById = proxy.GetUserById(processInstance.StartUserId.Value);

            if (userById == null)
            {
                throw new ApplicationException("用户不存在");
            }
            if (!userById.Department_ID.HasValue)
            {
                throw new ApplicationException("未指定用户部门");
            }
            IDepartment departmentById = proxy.GetDepartmentById(userById.Department_ID.Value);

            if (departmentById == null)
            {
                throw new ApplicationException("用户部门无效");
            }
            int?startDeptId = processInstance.StartDeptId;

            if ((startDeptId.HasValue ? startDeptId.GetValueOrDefault() : -1) < 0)
            {
                processInstance.StartDeptId = new int?(departmentById.Department_ID);
                this.dbContext.UpdatePartial <SysProcessInstance>(processInstance, p => new { StartDeptId = processInstance.StartDeptId });
            }
            Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10);
            WorkflowMessage         item  = this._engine.NewStartProcessWithNextUsersMessage(msg.NextApproveUserList);

            queue.Enqueue(item);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._engine.ProcessInstanceCache.ClearCache(msg.ProcessInstanceId);
        }
        public override void ProcessMessage(SysWorkflowMessage msg)
        {
            if (msg.AddUser && (!msg.AddUserId.HasValue || (msg.AddUserId <= 0)))
            {
                throw new ApplicationException("指定了加签,但未指定加签用户");
            }
            SysWorkItem        wI = this._engine.WI;
            SysProcessInstance pI = this._engine.PI;

            if (!wI.Status.HasValue)
            {
                wI.Status = 0;
            }
            if (wI.Status.Value == 1)
            {
                throw new ApplicationException("该工作项已完成");
            }
            if (wI.Status.Value == 3)
            {
                throw new ApplicationException("该工作项已被系统取消");
            }
            if (wI.Status.Value != 0x63)
            {
                throw new ApplicationException("该工作项已完成或被取消");
            }
            this._engine.AddInstanceData(wI, msg.ApproveResult, msg.ApproveComment);
            if (msg.AddUser && (msg.ApproveResult == ApproveResultEnum.Pass))
            {
                this._engine.CreateAddingWorkItem(wI, msg.AddUserId.Value);
            }
            Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10);

            if (msg.NextApproveUserList.Count > 0)
            {
                WorkflowMessage item = this._engine.NewCompleteWorkItemWithNextUsersApproveMessage(wI, msg.NextApproveUserList);
                queue.Enqueue(item);
            }
            else
            {
                WorkflowMessage message2 = this._engine.NewCompleteWorkItemApproveMessage(wI);
                queue.Enqueue(message2);
            }
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._engine.ProcessInstanceCache.ClearCache(pI.ProcessInstanceId);
        }
Exemple #13
0
        public void CallConstructor_WorkflowMessageCreatedEventRaised()
        {
            using (var serviceLocatorFixture = new ServiceLocatorFixture())
            {
                // Setup
                SetupServiceLocatorFixture(serviceLocatorFixture);

                var events = new List <IDomainEvent> ();
                CommitEvent.RegisterAll(events.Add);

                var workflow = new WorkflowMessage(Guid.NewGuid(), Guid.NewGuid(), string.Empty, Guid.NewGuid(), string.Empty, new Score());

                Assert.AreEqual(1, events.Count(), "Incorrect number of events.");
                Assert.AreEqual(typeof(WorkflowMessageCreatedEvent), events.First().GetType());
            }
        }
Exemple #14
0
        internal virtual int StartProcess(int startUserId, int relativeObjectId, List <IApproveUser> nextApproveUserList)
        {
            IOrgProxy proxy        = OrgProxyFactory.GetProxy(this._context);
            int       nextIdentity = this._manager.GetNextIdentity();
            IUser     userById     = proxy.GetUserById(startUserId);

            if (userById == null)
            {
                throw new ApplicationException("用户不存在");
            }
            if (!userById.Department_ID.HasValue)
            {
                throw new ApplicationException("未指定用户部门");
            }
            IDepartment departmentById = proxy.GetDepartmentById(userById.Department_ID.Value);

            if (departmentById == null)
            {
                throw new ApplicationException("用户部门无效");
            }
            SysProcessInstance instance = new SysProcessInstance {
                StartTime         = new DateTime?(DateTime.Now),
                EndTime           = null,
                InstanceStatus    = 0,
                ObjectId          = relativeObjectId,
                ProcessId         = new long?(this._process.ProcessId),
                ProcessInstanceId = nextIdentity,
                StartUserId       = new int?(startUserId),
                StartDeptId       = new int?(departmentById.Department_ID),
                WwfInstanceId     = null
            };

            this._pi = instance;
            this._piCacheFactory.AddProcessInstance(this._pi);
            Queue <WorkflowMessage> queue = new Queue <WorkflowMessage>(10);
            WorkflowMessage         item  = this.NewStartProcessWithNextUsersMessage(nextApproveUserList);

            queue.Enqueue(item);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._piCacheFactory.ClearCache(nextIdentity);
            return(nextIdentity);
        }
Exemple #15
0
        public void CallAdministerAssessment_WorkflowMessageStatusChangedEventRaised()
        {
            using (var serviceLocatorFixture = new ServiceLocatorFixture())
            {
                // Setup
                SetupServiceLocatorFixture(serviceLocatorFixture);

                var workflowMessage = new WorkflowMessage(Guid.NewGuid(), Guid.NewGuid(), string.Empty, Guid.NewGuid(), string.Empty, new Score());

                var events = new List <IDomainEvent> ();
                CommitEvent.RegisterAll(events.Add);

                workflowMessage.AdministerAssessment();

                Assert.AreEqual(1, events.Count(), "Incorrect number of events.");
                Assert.AreEqual(typeof(WorkflowMessageStatusChangedEvent), events.First().GetType());
                Assert.AreEqual(WorkflowMessageStatus.InProgress, (events.First() as WorkflowMessageStatusChangedEvent).Status);
            }
        }
Exemple #16
0
        public void CallAdvance_CorrectEventsRaised()
        {
            using (var serviceLocatorFixture = new ServiceLocatorFixture())
            {
                // Setup
                SetupServiceLocatorFixture(serviceLocatorFixture);

                var workflowMessage = new WorkflowMessage(Guid.NewGuid(), Guid.NewGuid(), string.Empty, Guid.NewGuid(), string.Empty, new Score());

                workflowMessage.AdministerAssessment();

                var events = new List <IDomainEvent> ();
                CommitEvent.RegisterAll(events.Add);

                var assessmentKey             = Guid.NewGuid();
                var assessmentCode            = Guid.NewGuid().ToString();
                var recommendedAssessmentKey  = Guid.NewGuid();
                var recommendedAssessmentCode = Guid.NewGuid().ToString();
                var score = new Score();
                workflowMessage.Advance(assessmentKey, assessmentCode, recommendedAssessmentKey, recommendedAssessmentCode, score);

                Assert.AreEqual(2, events.Count(), "Incorrect number of events.");
                Assert.IsTrue(events.Any(a => a.GetType() == typeof(WorkflowMessageStatusChangedEvent)), "Status Changed event not raised.");
                Assert.IsTrue(events.Any(a => a.GetType() == typeof(WorkflowMessageAdvancedEvent)), "Advanced Event not raised.");
                Assert.IsTrue(
                    (events.First(a => a.GetType() == typeof(WorkflowMessageStatusChangedEvent)) as WorkflowMessageStatusChangedEvent).Status ==
                    WorkflowMessageStatus.WaitingForResponse,
                    "Status event has wrong status.");
                var advanceEvent = events.First(a => a.GetType() == typeof(WorkflowMessageAdvancedEvent)) as WorkflowMessageAdvancedEvent;
                Assert.AreEqual(assessmentKey, advanceEvent.InitiatingAssessmentKey, "Advance event has wrong InitiatingAssessmentKey.");
                Assert.AreEqual(assessmentCode, advanceEvent.InitiatingAssessmentCode, "Advance event has wrong InitiatingAssessmentCode.");
                Assert.AreEqual(recommendedAssessmentKey, advanceEvent.RecommendedAssessmentDefinitionKey, "Advance event has wrong RecommendedAssessmentDefinitionKey.");
                Assert.AreEqual(recommendedAssessmentCode, advanceEvent.RecommendedAssessmentDefinitionCode, "Advance event has wrong RecommendedAssessmentDefinitionCode.");
                Assert.AreSame(score, advanceEvent.InitiatingAssessmentScore, "Advance event has wrong InitiatingAssessmentScore.");
                Assert.AreEqual(assessmentKey, workflowMessage.InitiatingAssessmentKey, "Worflow message has wrong InitiatingAssessmentKey.");
                Assert.AreEqual(assessmentCode, workflowMessage.InitiatingAssessmentCode, "Worflow message has wrong InitiatingAssessmentCode.");
                Assert.AreEqual(recommendedAssessmentKey, workflowMessage.RecommendedAssessmentDefinitionKey, "Worflow message has wrong RecommendedAssessmentDefinitionKey.");
                Assert.AreEqual(recommendedAssessmentCode, workflowMessage.RecommendedAssessmentDefinitionCode, "Worflow message has wrong RecommendedAssessmentDefinitionCode.");
                Assert.AreSame(score, workflowMessage.InitiatingAssessmentScore, "Worflow message has wrong InitiatingAssessmentScore.");
            }
        }
Exemple #17
0
        public void ExecuteShouldRecommendNidaAssessFurtherRuleThenClause_WorkflowMessageCreated()
        {
            using (var serviceLocatorFixture = new ServiceLocatorFixture())
            {
                // Setup
                SetupServiceLocatorFixture(serviceLocatorFixture);
                var assessmentDefKey = Guid.NewGuid();

                var assessmentDefinition = Substitute.For <AssessmentDefinition>();
                assessmentDefinition.Key.Returns(assessmentDefKey);

                var assessmentInstance = new AssessmentInstanceFactory().Create(assessmentDefinition, Guid.NewGuid(), "TestName");
                var workflowMessage    = new WorkflowMessage(Guid.NewGuid(),
                                                             Guid.NewGuid(),
                                                             string.Empty,
                                                             assessmentInstance.AssessmentDefinitionKey,
                                                             DrugAbuseScreeningTest.AssessmentCodedConcept.Code,
                                                             null);
                workflowMessage.AdministerAssessment();
                assessmentInstance.AddToWorkflow(workflowMessage.Key);
                var ruleCollection =
                    new NidaWorkflowRuleCollection(
                        BuildIAssessmentDefinitionRepositoryMock(assessmentDefKey).Object,
                        BuildIRepositoryMock(workflowMessage).Object,
                        new Mock <IAssessmentInstanceRepository>().Object);
                assessmentInstance.ScoreComplete(new CodedConcept(new CodeSystem("", "", ""), "", ""), "test");
                var messageCollector  = new MessageCollector();
                var ruleEngineContext = new RuleEngineContext <AssessmentInstance>(assessmentInstance);
                ruleEngineContext.WorkingMemory.AddContextObject <IMessageCollector>(messageCollector, "MessageCollector");

                foreach (var action in ruleCollection.ShouldRecommendNidaAssessFurtherRule.ThenClauses)
                {
                    action(ruleEngineContext);
                }

                Assert.AreEqual(1, messageCollector.Messages.Count(), "Incorrect Number of messages.");
                Assert.AreEqual(typeof(WorkflowMessage), messageCollector.Messages.First().GetType());
                Assert.AreSame(workflowMessage, messageCollector.Messages.First());
                Assert.AreEqual(NidaAssessFurther.AssessmentCodedConcept.Code, (messageCollector.Messages.First() as WorkflowMessage).RecommendedAssessmentDefinitionCode);
            }
        }
Exemple #18
0
        internal virtual void CompleteApproveWorkItem(int workItemId, ApproveResultEnum approveResult, string approveComment, bool addUser = false, int?addUserId = new int?())
        {
            SysWorkItem item;

            if (addUser && (!addUserId.HasValue || (addUserId <= 0)))
            {
                throw new ApplicationException("指定了加签,但未指定加签用户");
            }
            this._pi = this._piCacheFactory.GetProcessInstanceCacheByWorkItem(workItemId, out item);
            if (!item.Status.HasValue)
            {
                item.Status = 0;
            }
            if (item.Status.Value == 1)
            {
                throw new ApplicationException("该工作项已完成");
            }
            if (item.Status.Value == 3)
            {
                throw new ApplicationException("该工作项已被系统取消");
            }
            if (item.Status.Value != 0)
            {
                throw new ApplicationException("该工作项已完成或被取消");
            }
            this.AddInstanceData(item, approveResult, approveComment);
            if (addUser && (approveResult == ApproveResultEnum.Pass))
            {
                this.CreateAddingWorkItem(item, addUserId.Value);
            }
            Queue <WorkflowMessage> queue   = new Queue <WorkflowMessage>(10);
            WorkflowMessage         message = this.NewCompleteWorkItemApproveMessage(item);

            queue.Enqueue(message);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._piCacheFactory.ClearCache(this._pi.ProcessInstanceId);
        }
		public override bool Execute(OrderTaskContext context)
		{
            bool allowed = false;
            if (context.MTApp.CurrentRequestContext != null)
            {
                allowed = context.MTApp.CurrentRequestContext.CurrentStore.Settings.AllowZeroDollarOrders;
            }
			if (!allowed) {
				if (context.Order.TotalOrderBeforeDiscounts - context.Order.TotalOrderDiscounts <= 0) {
					WorkflowMessage errorMessage = new WorkflowMessage("Error", "Zero dollar orders are not allowed on this store.", true);
					context.Errors.Add(errorMessage);
					return false;
				}
			}

            if (context.Order.Items.Count < 1)
            {
                WorkflowMessage error2 = new WorkflowMessage("Error", "The system was unable to process your order and may be busy. Please try again.", true);
                context.Errors.Add(error2);
                return false;
            }
			return true;
		}
Exemple #20
0
        internal void CompleteWorkItemSelf(int workItemId)
        {
            SysWorkItem item;

            this._pi = this._piCacheFactory.GetProcessInstanceCacheByWorkItem(workItemId, out item);
            if (!item.Status.HasValue)
            {
                item.Status = 0;
            }
            if (item.Status.Value != 0)
            {
                throw new ApplicationException("该工作项已完成或被取消");
            }
            Queue <WorkflowMessage> queue   = new Queue <WorkflowMessage>(10);
            WorkflowMessage         message = this.NewCompleteWorkItemSelfMessage(item);

            queue.Enqueue(message);
            while (queue.Count > 0)
            {
                queue.Dequeue().Execute(queue);
            }
            this._piCacheFactory.ClearCache(this._pi.ProcessInstanceId);
        }
        public override bool Execute(OrderTaskContext context)
        {
            var allowed = context.HccApp.CurrentStore.Settings.AllowZeroDollarOrders;

            if (!allowed)
            {
                if (context.Order.TotalGrand <= 0)
                {
                    var errorMessage = new WorkflowMessage("Error", "Zero dollar orders are not allowed on this store.",
                                                           true);
                    context.Errors.Add(errorMessage);
                    return(false);
                }
            }

            if (context.Order.Items.Count < 1)
            {
                var error2 = new WorkflowMessage("Error",
                                                 "The system was unable to process your order and may be busy. Please try again.", true);
                context.Errors.Add(error2);
                return(false);
            }
            return(true);
        }
Exemple #22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NidaWorkflowRuleCollection"/> class.
        /// </summary>
        /// <param name="assessmentDefinitionRepository">The assessment definition repository.</param>
        /// <param name="repository">The repository.</param>
        /// <param name="assessmentInstanceRepository">The assessment instance repository.</param>
        /// <param name="resourcesManager">The resources manager.</param>
        public NidaWorkflowRuleCollection(
            IAssessmentDefinitionRepository assessmentDefinitionRepository,
            IWorkflowMessageRepository repository,
            IAssessmentInstanceRepository assessmentInstanceRepository,
            IResourcesManager resourcesManager = null)
        {
            _resourcesManager = resourcesManager;
            NewRule(() => ShouldRecommendDastRule).When(assessment => (int)assessment.Score.Value > 0)
            .Then(
                (assessment, ctx) =>
            {
                var messageReporter =
                    ctx.WorkingMemory.GetContextObject <IMessageCollector> ("MessageCollector");
                var assessmentDefinitionKey =
                    assessmentDefinitionRepository.GetKeyByCode(DrugAbuseScreeningTest.AssessmentCodedConcept.Code);
                WorkflowMessage message = null;
                if (assessment.WorkflowKey.HasValue)
                {
                    message = repository.GetByKey(assessment.WorkflowKey.Value);
                }
                message = message ?? new WorkflowMessage(
                    assessment.PatientKey,
                    assessment.Key,
                    NidaSingleQuestionScreener.AssessmentCodedConcept.Code,
                    assessmentDefinitionKey,
                    DrugAbuseScreeningTest.AssessmentCodedConcept.Code,
                    assessment.Score);
                if (assessment.CanSelfAdminister)
                {
                    message.AllowSelfAdministration();
                }
                assessment.AddToWorkflow(message.Key);
                messageReporter.AddMessage(message);
            })
            .ElseThen(
                (assessment, ctx) =>
            {
                WorkflowMessage message = null;
                if (assessment.WorkflowKey.HasValue)
                {
                    message = repository.GetByKey(assessment.WorkflowKey.Value);
                }
                message = message ?? new WorkflowMessage(
                    assessment.PatientKey,
                    assessment.Key,
                    NidaSingleQuestionScreener.AssessmentCodedConcept.Code,
                    Guid.Empty,
                    null,
                    assessment.Score);

                if (assessment.CanSelfAdminister)
                {
                    message.AllowSelfAdministration();
                }

                message.Complete(NidaPatientSummaryReportModelBuilder.GetGreenReportModel());
            });

            NewRuleSet(() => NidaSingleQuestionScreenerRuleSet, ShouldRecommendDastRule);

            NewRule(() => ShouldRecommendNidaAssessFurtherRule).When(assessment => assessment.WorkflowKey.HasValue)
            .Then(
                (assessment, ctx) =>
            {
                var messageReporter =
                    ctx.WorkingMemory
                    .GetContextObject <IMessageCollector> ("MessageCollector");
                var assessmentDefinitionKey =
                    assessmentDefinitionRepository.GetKeyByCode(NidaAssessFurther.AssessmentCodedConcept.Code);
                var message = repository.GetByKey(assessment.WorkflowKey.Value);
                message.Advance(
                    assessment.Key,
                    DrugAbuseScreeningTest.AssessmentCodedConcept.Code,
                    assessmentDefinitionKey,
                    NidaAssessFurther.AssessmentCodedConcept.Code,
                    assessment.Score);
                messageReporter.AddMessage(message);
            });

            NewRuleSet(() => DrugAbuseScreeningTestRuleSet, ShouldRecommendNidaAssessFurtherRule);

            NewRule(() => ShouldCompleteWorkflowStatusRule).When(assessment => assessment.WorkflowKey.HasValue)
            .Then(
                (assessment, ctx) =>
            {
                var message      = repository.GetByKey(assessment.WorkflowKey.Value);
                var dastKey      = message.GetAssessmentKeyforCodeInWorkflow(DrugAbuseScreeningTest.AssessmentCodedConcept.Code);
                var dastInstance = assessmentInstanceRepository.GetByKey(dastKey.Value);
                ReportModel reportModel;
                if (((long)dastInstance.Score.Value) <= 2 && !(((NidaAssessFurtherScoring)assessment.Score.Value).TotalScore))
                {
                    reportModel = NidaPatientSummaryReportModelBuilder.GetAmberReportModel(
                        _resourcesManager,
                        dastInstance,
                        assessment);
                }
                else
                {
                    reportModel = NidaPatientSummaryReportModelBuilder.GetRedReportModel(
                        _resourcesManager,
                        dastInstance,
                        assessment);
                }
                message.Complete(reportModel);
            });
            NewRuleSet(() => NidaAssessFurtherRuleSet, ShouldCompleteWorkflowStatusRule);
        }
Exemple #23
0
        /// <summary>
        ///     Adds the new gift card.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="lineItem">The line item.</param>
        private static void AddNewGiftCard(OrderTaskContext context, LineItem lineItem)
        {
            var paymentManager = new OrderPaymentManager(context.Order, context.HccApp);

            var store    = context.HccApp.CurrentStore;
            var giftCard = new GiftCardData
            {
                LineItemId     = lineItem.Id,
                CardNumber     = context.HccApp.CatalogServices.GenerateGiftCardNumber(),
                Amount         = Money.RoundCurrency(lineItem.AdjustedPricePerItem),
                RecipientEmail = lineItem.CustomPropGiftCardEmail,
                RecipientName  = lineItem.CustomPropGiftCardName,
                ExpirationDate = DateTime.UtcNow.AddMonths(store.Settings.GiftCard.ExpirationPeriodMonths)
            };
            var gcNumber = paymentManager.GiftCardCreate(giftCard);

            if (string.IsNullOrEmpty(gcNumber))
            {
                var message = new WorkflowMessage(
                    "Gift Certificate Insert Failed",
                    "Gift Certificate for line item " + lineItem.Id + " in order " + context.Order.OrderNumber +
                    " failed.", false);
                context.Errors.Add(message);
            }
            else
            {
                if (string.IsNullOrEmpty(lineItem.CustomPropGiftCardNumber))
                {
                    lineItem.CustomPropGiftCardNumber = gcNumber;
                }
                else
                {
                    lineItem.CustomPropGiftCardNumber = lineItem.CustomPropGiftCardNumber + "<br/>" + gcNumber;
                }

                context.HccApp.OrderServices.Orders.Update(context.Order);

                var gc = new GiftCard(giftCard, lineItem.CustomPropGiftCardMessage);

                if (string.IsNullOrEmpty(gc.RecipientEmail))
                {
                    gc.RecipientEmail = context.Order.UserEmail;

                    if (string.IsNullOrEmpty(gc.RecipientName))
                    {
                        gc.RecipientName = context.Order.ShippingAddress.FirstName;
                    }
                }

                try
                {
                    context.HccApp.ContentServices.SendGiftCardNotification(gc, context.Order, lineItem);
                }
                catch (Exception ex)
                {
                    context.Errors.Add(new WorkflowMessage("Exception Sending Gift Card", ex.Message + ex.StackTrace,
                                                           false));
                    var note = new OrderNote();
                    note.IsPublic = false;
                    note.Note     = "EXCEPTION: " + ex.Message + " | " + ex.StackTrace;
                    context.Order.Notes.Add(note);

                    EventLog.LogEvent(ex);
                }
            }
        }
Exemple #24
0
        /// <summary>
        /// Gets a populated workflow model.
        /// </summary>
        /// <returns>A workflow model.</returns>
        public static WorkflowDefinition GetWorkflowModel()
        {
            var workflowModel = new WorkflowDefinition()
            {
                Name = "BizTalkServerProject.SimpleOrch",
                Key  = "BizTalkServerProject.SimpleOrch",
                Type = "Workflow"
            };

            var workflowChannel = new WorkflowChannel()
            {
                Name      = "ReceiveSendPort",
                Key       = "BizTalkServerProject.SimpleOrch.ReceiveSendPort",
                Type      = "BizTalkServerProject.ReceiveSendPT",
                Activator = true,
                Direction = MessageExchangePattern.ReceiveResponse
            };

            workflowChannel.Properties.Add("OrderedDelivery", "False");
            workflowChannel.Properties.Add("Binding", "Logical");
            workflowModel.Channels.Add(workflowChannel);

            var workflowMessageIn = new WorkflowMessage()
            {
                Name = "Message_1",
                Key  = "BizTalkServerProject.SimpleOrch.Message_1",
                Type = "System.String"
            };

            workflowModel.Messages.Add(workflowMessageIn);
            workflowChannel.MessagesIn.Add(workflowMessageIn);

            var workflowMessageOut = new WorkflowMessage()
            {
                Name = "Message_2",
                Key  = "BizTalkServerProject.SimpleOrch.Message_2",
                Type = "System.String"
            };

            workflowModel.Messages.Add(workflowMessageOut);
            workflowChannel.MessagesOut.Add(workflowMessageOut);

            var receiveActivity = new WorkflowActivity()
            {
                Name = "Receive_1",
                Key  = "BizTalkServerProject.SimpleOrch.Receive_1",
                Type = "Receive"
            };

            receiveActivity.Properties.Add("Activate", "True");
            receiveActivity.Properties.Add("PortName", "ReceiveSendPort");
            receiveActivity.Properties.Add("MessageName", "Message_1");
            receiveActivity.Properties.Add("OperationName", "Operation_1");
            receiveActivity.Properties.Add("OperationMessageName", "Request");
            receiveActivity.Properties.Add("WorkflowChannel", "BizTalkServerProject.SimpleOrch.ReceiveSendPort");
            workflowModel.Activities.Add(receiveActivity);

            var constructActivity = new WorkflowActivity()
            {
                Name = "ConstructMessage_1",
                Key  = "BizTalkServerProject.SimpleOrch.ConstructMessage_11",
                Type = "MessageConstruction"
            };

            constructActivity.Properties.Add("Expression0", "Message_2 = null; //\"hello \" + Message_1;");
            constructActivity.Properties.Add("ConstructedMessage", "Message_2");
            workflowModel.Activities.Add(constructActivity);

            var sendActivity = new WorkflowActivity()
            {
                Name = "Send_1",
                Key  = "BizTalkServerProject.SimpleOrch.Send_12",
                Type = "Send"
            };

            sendActivity.Properties.Add("PortName", "ReceiveSendPort");
            sendActivity.Properties.Add("MessageName", "Message_2");
            sendActivity.Properties.Add("OperationName", "Operation_1");
            sendActivity.Properties.Add("OperationMessageName", "Response");
            sendActivity.Properties.Add("WorkflowChannel", "BizTalkServerProject.SimpleOrch.ReceiveSendPort");
            workflowModel.Activities.Add(sendActivity);

            return(workflowModel);
        }
Exemple #25
0
        public void WorkflowStatesFlowCorrectly()
        {
            using (var serviceLocatorFixture = new ServiceLocatorFixture())
            {
                // Setup
                SetupServiceLocatorFixture(serviceLocatorFixture);

                var events = new List <IDomainEvent> ();
                CommitEvent.RegisterAll(events.Add);

                var workflow = new WorkflowMessage(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid().ToString(), Guid.NewGuid(), Guid.NewGuid().ToString(), new Score());

                Assert.AreEqual(WorkflowMessageStatus.WaitingForResponse, workflow.Status);

                events.Clear();
                workflow.Advance(Guid.NewGuid(), Guid.NewGuid().ToString(), Guid.NewGuid(), Guid.NewGuid().ToString(), new Score());

                Assert.AreEqual(0, events.Count());
                Assert.AreEqual(WorkflowMessageStatus.WaitingForResponse, workflow.Status);

                workflow.AdministerAssessment();

                Assert.AreEqual(WorkflowMessageStatus.InProgress, workflow.Status);

                events.Clear();
                workflow.Reject();

                Assert.AreEqual(0, events.Count());
                Assert.AreEqual(WorkflowMessageStatus.InProgress, workflow.Status);

                events.Clear();
                workflow.AdministerAssessment();

                Assert.AreEqual(0, events.Count());
                Assert.AreEqual(WorkflowMessageStatus.InProgress, workflow.Status);

                workflow.Advance(Guid.NewGuid(), Guid.NewGuid().ToString(), Guid.NewGuid(), Guid.NewGuid().ToString(), new Score());

                Assert.AreEqual(WorkflowMessageStatus.WaitingForResponse, workflow.Status);

                workflow.Reject();

                Assert.AreEqual(WorkflowMessageStatus.Rejected, workflow.Status);

                events.Clear();
                workflow.Reject();

                Assert.AreEqual(0, events.Count());
                Assert.AreEqual(WorkflowMessageStatus.Rejected, workflow.Status);

                events.Clear();
                workflow.AdministerAssessment();

                Assert.AreEqual(0, events.Count());
                Assert.AreEqual(WorkflowMessageStatus.Rejected, workflow.Status);

                events.Clear();
                workflow.Advance(Guid.NewGuid(), Guid.NewGuid().ToString(), Guid.NewGuid(), Guid.NewGuid().ToString(), new Score());

                Assert.AreEqual(0, events.Count());
                Assert.AreEqual(WorkflowMessageStatus.Rejected, workflow.Status);
            }
        }
Exemple #26
0
 /// <summary>
 /// Executes the behavior
 /// </summary>
 /// <param name="sagaStep"></param>
 /// <param name="workflowMessage"></param>
 /// <returns></returns>
 public abstract IWorkflowMessage Execute(ISagaStep sagaStep, WorkflowMessage workflowMessage);