示例#1
0
        public static StateMachine <State, string> ConfigureStateMachine(Workflow workflow, InstanceStatePersistence statePersistance, IRepositoryHelper repoHelper)
        {
            Enforce.ArgumentNotNull(workflow, nameof(workflow));
            Enforce.ArgumentNotNull(statePersistance, nameof(statePersistance));
            Enforce.ArgumentNotNull(repoHelper, nameof(repoHelper));

            var stateMachine = new StateMachine <State, string>(statePersistance.GetCurrentState, statePersistance.SetCurrentState);

            //  Get a distinct list of states with a trigger from state configuration
            //  "State => Trigger => TargetState
            var stateRepo      = repoHelper.GetStateRepository(repoHelper.GetUnitOfWork());
            var transitionRepo = new StateTransitionRepository(repoHelper.GetUnitOfWork());

            var states = transitionRepo.Where(t => t.WorkflowId == workflow.Id).Select(t => stateRepo.Get(t.StateId)).Distinct().ToList();

            //var transitions = transitionRepo.Where(s => s.WorkflowId == workflow.Id).ToList();

            //  Assigning triggers to states
            foreach (var state in states)
            {
                var transitions = transitionRepo.Where(t => t.StateId == state.Id).Select(t => new { Trigger = t.Trigger, TargetState = stateRepo.Get(t.TargetStateId) }).ToList();

                foreach (var tran in transitions)
                {
                    if (tran.TargetState != null)
                    {
                        stateMachine.Configure(state).Permit(tran.Trigger, tran.TargetState);
                    }
                }
            }

            return(stateMachine);
        }
示例#2
0
        public static InstanceManager CreateWorkflowManager(Workflow workflow, IRepositoryHelper repoHelper)
        {
            Enforce.ArgumentNotNull(workflow, nameof(workflow));
            Enforce.ArgumentNotNull(repoHelper, nameof(repoHelper));

            var instance = new WorkflowInstance {
                WorkflowId = workflow.Id, CurrentStateId = workflow.StartState
            };
            var repo = repoHelper.GetWorkflowInstanceRepository(repoHelper.GetUnitOfWork());
            var id   = repo.Insert(instance);

            if (!string.IsNullOrWhiteSpace(id))
            {
                repoHelper.GetUnitOfWork().SaveChanges();
                var statePersistance = new InstanceStatePersistence(instance.Id, repoHelper);
                var stateMachine     = ConfigureStateMachine(workflow, statePersistance, repoHelper);
                return(new InstanceManager(instance, workflow, stateMachine, statePersistance, repoHelper));
            }
            return(null);
        }
        public LabTestResult AddLabTestResult(LabTestResult labTestResult)
        {
            try
            {
                var unitOfWork = RepositoryHelper.GetUnitOfWork();
                var context    = unitOfWork.Context;
                using (var transaction = context.Database.BeginTransaction())
                {
                    var labTestResultTmp = new LabTestResult()
                    {
                        PatientId   = labTestResult.PatientId,
                        Comment     = labTestResult.Comment,
                        CreatedDate = DateTime.UtcNow.AddHours(7)
                    };
                    context.Set <LabTestResult>().Add(labTestResultTmp);
                    var result = unitOfWork.SaveChanges();
                    if (result.Any())
                    {
                        transaction.Rollback();
                        return(null);
                    }

                    var labTestResultDetails = labTestResult.LabTestResultDetails.Where(x => !String.IsNullOrEmpty(x.Value)).ToList();
                    var listIds    = labTestResultDetails.Select(y => y.LabTestDetailId).ToList();
                    var allLabTest = context.Set <LabTestDetail>().Where(x => listIds.Contains(x.LabTestDetailId)).ToList();
                    labTestResultDetails.ForEach(x =>
                    {
                        x.LabTestResultId = labTestResultTmp.LabTestResultId;
                        x.Price           = allLabTest.FirstOrDefault(y => y.LabTestDetailId == x.LabTestDetailId).Price;
                    });
                    context.Set <LabTestResultDetail>().AddRange(labTestResultDetails);
                    labTestResultTmp.TotalPrice = labTestResultDetails.Sum(x => x.Price.GetValueOrDefault());
                    result = unitOfWork.SaveChanges();
                    if (result.Any())
                    {
                        transaction.Rollback();
                        return(null);
                    }
                    transaction.Commit();
                    return(labTestResultTmp);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
示例#4
0
        //public static Logger logger = LogManager.GetConsole.WriteLine("Standard");
        static void Main(string[] args)
        {
            var unitOfWork   = repoHelper.GetUnitOfWork();
            var workflowRepo = repoHelper.GetWorkflowRepository(unitOfWork);

            var workflow = workflowRepo.Get("6656c1a5-8a85-4f6f-9657-04615a728bc7");

            //Persistence.CurrentWorkflowName = workflow.Name;

            System.Console.WriteLine("Current Workflow: " + workflow.DisplayName);

            Persistence.CurrentInstanceManager = WorkflowProcesser.CreateWorkflowManager(workflow, repoHelper);

            var dotGraph = Persistence.CurrentInstanceManager.StateMachine.ToDotGraph();


            System.Console.WriteLine("Creating State Machine. Any key to continue");
            System.Console.WriteLine("Current State: " + Persistence.CurrentInstanceManager.StateMachine.State.DisplayName);
            System.Console.ReadKey();

            var canFire  = Persistence.CurrentInstanceManager.StateMachine.CanFire("DesirePromotion");
            var state    = Persistence.CurrentInstanceManager.StateMachine.State;
            var triggers = Persistence.CurrentInstanceManager.StateMachine.PermittedTriggers.ToList();

            while (Persistence.CurrentInstanceManager.StateMachine.State.DisplayName != "Promoted" && Persistence.CurrentInstanceManager.StateMachine.State.DisplayName != "PromotionDenied")
            {
                if (Persistence.CurrentInstanceManager.StateMachine.PermittedTriggers.Any(t => t == "Approve" || t == "Deny"))
                {
                    ChangeYesNoTriggerState();
                }
                else
                {
                    ChangeSingleTriggerState();
                }
            }

            System.Console.WriteLine("Enter any key to quit");
            System.Console.ReadKey();
        }
示例#5
0
 public AppointmentService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public LabTestingIndexService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
示例#7
0
 public ReceptionistService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public SampleGettingService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public LabTestResultService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public FeedbackService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public SupplyService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public ExportPaperService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
示例#13
0
 public AccountTokenService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
示例#14
0
 public HospitalSuggestionService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public EmployeeService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }
 public CashierService(IRepositoryHelper repositoryHelper)
 {
     RepositoryHelper = repositoryHelper;
     UnitOfWork       = RepositoryHelper.GetUnitOfWork();
 }