public void ShouldExecuteDraftTransition()
        {
            new DatabaseTester().Clean();

            var report = new ExpenseReport();

            report.Number = "123";
            report.Status = ExpenseReportStatus.Draft;
            var employee = new Employee("jpalermo", "Jeffrey", "Palermo", "jeffrey @ clear dash measure.com");

            report.Submitter = employee;
            report.Approver  = employee;

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(employee);
                session.SaveOrUpdate(report);
                session.Transaction.Commit();
            }

            var command = new ExecuteTransitionCommand(report, "Save", employee, new DateTime(2001, 1, 1));

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();

            ExecuteTransitionResult result = bus.Send(command);

            result.NewStatus.ShouldEqual("Drafting");
        }
        public bool IsValid(ExecuteTransitionCommand transitionCommand)
        {
            bool beginStatusMatches       = transitionCommand.Report.Status.Equals(GetBeginStatus());
            bool currentUserIsCorrectRole = userCanExecute(transitionCommand.CurrentUser, transitionCommand.Report);

            return(beginStatusMatches && currentUserIsCorrectRole);
        }
        private static void RunToDraft(string number, Employee employee, int total, DateTime startingDate, params string[] commandsToRun)
        {
            var report = new ExpenseReport();

            report.Number    = number;
            report.Status    = ExpenseReportStatus.Draft;
            report.Submitter = employee;
            report.Approver  = employee;
            report.Total     = total;

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(report);
                session.Transaction.Commit();
            }

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();

            for (int j = 0; j < commandsToRun.Length; j++)
            {
                DateTime timestamp = startingDate.AddSeconds(j);
                var      command   = new ExecuteTransitionCommand(report, commandsToRun[j], employee, timestamp);
                bus.Send(command);
            }
        }
        private static void RunToDraft(string number, Employee employee, int total, DateTime startingDate, params string[] commandsToRun)
        {
            var report = new ExpenseReport();
            report.Number = number;
            report.Status = ExpenseReportStatus.Draft;
            report.Submitter = employee;
            report.Approver = employee;
            report.Total = total;

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(report);
                session.Transaction.Commit();
            }

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var bus = container.GetInstance<Bus>();

            for (int j = 0; j < commandsToRun.Length; j++)
            {
                DateTime timestamp = startingDate.AddSeconds(j);
                var command = new ExecuteTransitionCommand(report, commandsToRun[j], employee, timestamp);
                bus.Send(command);
            }
        }
        private static void RunToDraft(string number, Employee employee, int total, DateTime startingDate,
                                       params string[] commandsToRun)
        {
            var report = new ExpenseReport();

            report.Number    = number;
            report.Status    = ExpenseReportStatus.Draft;
            report.Submitter = employee;
            report.Approver  = employee;
            report.Total     = total;


            var container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var context   = container.GetInstance <EfCoreContext>();

            context.Update(report);
            context.SaveChanges();


            var bus = container.GetInstance <Bus>();

            for (var j = 0; j < commandsToRun.Length; j++)
            {
                var timestamp = startingDate.AddSeconds(j);
                var command   = new ExecuteTransitionCommand(report, commandsToRun[j], employee, timestamp);
                bus.Send(command);
            }
        }
        public void ShouldExecuteDraftTransition()
        {
            new DatabaseTester().Clean();

            var report = new ExpenseReport();
            report.Number = "123";
            report.Status = ExpenseReportStatus.Draft;
            var employee = new Employee("jpalermo", "Jeffrey", "Palermo", "jeffrey @ clear dash measure.com");
            report.Submitter = employee;
            report.Approver = employee;

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(employee);
                session.SaveOrUpdate(report);
                session.Transaction.Commit();
            }

            var command = new ExecuteTransitionCommand(report, "Save", employee, new DateTime(2001, 1, 1));

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var bus = container.GetInstance<Bus>();

            ExecuteTransitionResult result = bus.Send(command);
            result.NewStatus.ShouldEqual("Drafting");
        }
        public IStateCommand[] GetValidStateCommands(ExecuteTransitionCommand transitionCommand)
        {
            var commands = new List<IStateCommand>(
                GetAllStateCommands());
            commands.RemoveAll(delegate(IStateCommand obj) { return !obj.IsValid(transitionCommand); });

            return commands.ToArray();
        }
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     transitionCommand.Report.LastSubmitted = transitionCommand.CurrentDate;
     if (transitionCommand.Report.FirstSubmitted == null)
     {
         transitionCommand.Report.FirstSubmitted = transitionCommand.CurrentDate;
     }
 }
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     transitionCommand.Report.LastSubmitted = transitionCommand.CurrentDate;
     if (transitionCommand.Report.FirstSubmitted == null)
     {
         transitionCommand.Report.FirstSubmitted = transitionCommand.CurrentDate;
     }
 }
        public IStateCommand[] GetValidStateCommands(ExecuteTransitionCommand transitionCommand)
        {
            var commands = new List <IStateCommand>(
                GetAllStateCommands());

            commands.RemoveAll(delegate(IStateCommand obj) { return(!obj.IsValid(transitionCommand)); });

            return(commands.ToArray());
        }
Ejemplo n.º 11
0
        public ExecuteTransitionResult Execute(ExecuteTransitionCommand transitionCommand)
        {
            preExecute(transitionCommand);
            string currentUserFullName = transitionCommand.CurrentUser.GetFullName();
            transitionCommand.Report.ChangeStatus(transitionCommand.CurrentUser, transitionCommand.CurrentDate, GetBeginStatus(), GetEndStatus());

            string loweredTransitionVerb = TransitionVerbPastTense.ToLower();
            string reportNumber = transitionCommand.Report.Number;
            string message = string.Format("You have {0} expense report {1}", loweredTransitionVerb, reportNumber);
            string debugMessage = string.Format("{0} has {1} expense report {2}", currentUserFullName, loweredTransitionVerb,
                reportNumber);

            return new ExecuteTransitionResult {NewStatus = GetEndStatus().FriendlyName
                , NextStep = NextStep.Edit, Action = debugMessage, Message = message };
        }
Ejemplo n.º 12
0
        public ActionResult Manage(ExpenseReportManageModel model, string command)
        {
            Employee currentUser = _session.GetCurrentUser();

            ExpenseReport expenseReport;

            if (model.Mode == EditMode.New)
            {
                expenseReport = _expenseReportBuilder.Build(currentUser);
            }
            else
            {
                expenseReport = _bus.Send(new ExpenseReportByNumberQuery {
                    ExpenseReportNumber = model.ExpenseReportNumber
                }).Result;
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ExpenseReport = expenseReport;
                ViewBag.CurrentUser   = currentUser;
                return(View("Manage", model));
            }

            Employee approver  = _bus.Send(new EmployeeByUserNameQuery(model.ApproverUserName)).Result;
            Employee submitter = _bus.Send(new EmployeeByUserNameQuery(model.SubmitterUserName)).Result;

            expenseReport.Number      = model.ExpenseReportNumber;
            expenseReport.Submitter   = submitter;
            expenseReport.Approver    = approver;
            expenseReport.Title       = model.Title;
            expenseReport.Description = model.Description;
            expenseReport.Total       = model.Total;

            var transitionCommand = new ExecuteTransitionCommand(expenseReport, command, currentUser,
                                                                 _calendar.GetCurrentTime());

            ExecuteTransitionResult transitionResult = _bus.Send(transitionCommand);

            if (transitionResult.NextStep == NextStep.Dashboard)
            {
                return(Redirect("~/Home"));
            }

            return(RedirectToAction("Manage", new { id = expenseReport.Number, mode = "edit" }));
        }
        public ExecuteTransitionResult Execute(ExecuteTransitionCommand transitionCommand)
        {
            preExecute(transitionCommand);
            string currentUserFullName = transitionCommand.CurrentUser.GetFullName();

            transitionCommand.Report.ChangeStatus(transitionCommand.CurrentUser, transitionCommand.CurrentDate, GetBeginStatus(), GetEndStatus());

            string loweredTransitionVerb = TransitionVerbPastTense.ToLower();
            string reportNumber          = transitionCommand.Report.Number;
            string message      = string.Format("You have {0} work order {1}", loweredTransitionVerb, reportNumber);
            string debugMessage = string.Format("{0} has {1} work order {2}", currentUserFullName, loweredTransitionVerb,
                                                reportNumber);

            return(new ExecuteTransitionResult {
                NewStatus = GetEndStatus().FriendlyName
                , NextStep = NextStep.Edit, Action = debugMessage, Message = message
            });
        }
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     base.preExecute(transitionCommand);
     transitionCommand.Report.LastDeclined = transitionCommand.CurrentDate;
 }
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     transitionCommand.Report.LastCancelled     =
         transitionCommand.Report.LastWithdrawn = transitionCommand.CurrentDate;
 }
 protected virtual void preExecute(ExecuteTransitionCommand transitionCommand)
 {
 }
Ejemplo n.º 17
0
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     transitionCommand.Report.LastApproved = transitionCommand.CurrentDate;
 }
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     transitionCommand.Report.LastApproved = transitionCommand.CurrentDate;
 }
 public bool IsValid(ExecuteTransitionCommand transitionCommand)
 {
     return _isValid;
 }
 public ExecuteTransitionResult Execute(ExecuteTransitionCommand transitionCommand)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 21
0
 protected virtual void preExecute(ExecuteTransitionCommand transitionCommand)
 {
 }
Ejemplo n.º 22
0
 public bool IsValid(ExecuteTransitionCommand transitionCommand)
 {
     bool beginStatusMatches = transitionCommand.Report.Status.Equals(GetBeginStatus());
     bool currentUserIsCorrectRole = userCanExecute(transitionCommand.CurrentUser, transitionCommand.Report);
     return beginStatusMatches && currentUserIsCorrectRole;
 }
 public ExecuteTransitionResult Execute(ExecuteTransitionCommand transitionCommand)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 24
0
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     base.preExecute(transitionCommand);
     transitionCommand.Report.LastDeclined = transitionCommand.CurrentDate;
 }
        public ActionResult Manage(ExpenseReportManageModel model, string command)
        {
            Employee currentUser = _session.GetCurrentUser();

            ExpenseReport expenseReport;

            if (model.Mode == EditMode.New)
                expenseReport = _expenseReportBuilder.Build(currentUser);
            else
                expenseReport = _bus.Send(new ExpenseReportByNumberQuery { ExpenseReportNumber = model.ExpenseReportNumber }).Result;

            if (!ModelState.IsValid)
            {
                ViewBag.ExpenseReport = expenseReport;
                ViewBag.CurrentUser = currentUser;
                return View("Manage", model);
            }

            Employee approver = _bus.Send(new EmployeeByUserNameQuery(model.ApproverUserName)).Result;
            Employee submitter = _bus.Send(new EmployeeByUserNameQuery(model.SubmitterUserName)).Result;

            expenseReport.Number = model.ExpenseReportNumber;
            expenseReport.Submitter = submitter;
            expenseReport.Approver = approver;
            expenseReport.Title = model.Title;
            expenseReport.Description = model.Description;
            expenseReport.Total = model.Total;

            var transitionCommand = new ExecuteTransitionCommand(expenseReport, command, currentUser,
                _calendar.GetCurrentTime());

            ExecuteTransitionResult transitionResult = _bus.Send(transitionCommand);

            if (transitionResult.NextStep == NextStep.Dashboard)
                return Redirect("~/Home");

            return RedirectToAction("Manage", new {id = expenseReport.Number, mode = "edit"});
        }
 protected override void preExecute(ExecuteTransitionCommand transitionCommand)
 {
     transitionCommand.Report.LastCancelled =
         transitionCommand.Report.LastWithdrawn = transitionCommand.CurrentDate;
 }
 public bool IsValid(ExecuteTransitionCommand transitionCommand)
 {
     return(_isValid);
 }