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); }
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); } }
//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(); }
public AppointmentService(IRepositoryHelper repositoryHelper) { RepositoryHelper = repositoryHelper; UnitOfWork = RepositoryHelper.GetUnitOfWork(); }
public LabTestingIndexService(IRepositoryHelper repositoryHelper) { RepositoryHelper = repositoryHelper; UnitOfWork = RepositoryHelper.GetUnitOfWork(); }
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(); }
public AccountTokenService(IRepositoryHelper repositoryHelper) { RepositoryHelper = repositoryHelper; UnitOfWork = RepositoryHelper.GetUnitOfWork(); }
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(); }