Beispiel #1
0
 public StatusTransition(JobApplication application,
                         ApplicationStatuses from,
                         ApplicationStatuses to,
                         DateTime timestamp,
                         ApplicationResolutions resolution)
 {
     ApplicationId  = application.Id;
     Application    = application;
     Timestamp      = timestamp;
     TransitionFrom = from;
     TransitionTo   = to;
     Resolution     = resolution;
 }
        public Result <StatusTransition> Close(ApplicationResolutions resolution, DateTime?effective = null)
        {
            var result = Application.Transition(ApplicationStatuses.CLOSED, effective ?? DateTime.Now, resolution);

            return(HandleTransitionResult(result));
        }
        /// <summary>
        /// Transition this application from one status to another.
        /// </summary>
        /// <remarks>
        /// This method is agnostic about workflows, and will only enforce that you cannot transition from one statu to the same status.
        /// Use an appropriate class that derives from <see cref="StatusWrapper"/> (e.g. <see cref="SubmittedApplication"/>) as helpers to more
        /// effective manage the status.
        /// </remarks>
        /// <param name="transitionTo"></param>
        /// <param name="effectiveAsOf"></param>
        /// <param name="resolution"></param>
        /// <returns></returns>
        public Result <StatusTransition> Transition(ApplicationStatuses transitionTo, DateTime effectiveAsOf, ApplicationResolutions resolution = ApplicationResolutions.UNRESOLVED)
        {
            // CAUTION: if the inner logic of this method changes, you may have to revisit the first transition created
            // in the ctor

            if (CurrentStatus == transitionTo)
            {
                return(Result.Fail("Unable to transition to the current status."));
            }

            if (transitionTo != ApplicationStatuses.CLOSED)
            {
                resolution = ApplicationResolutions.UNRESOLVED;
            }

            var transition = new StatusTransition(this, CurrentStatus, transitionTo, effectiveAsOf, resolution);

            ((List <StatusTransition>)Transitions).Add(transition);
            return(Result.Ok(transition));
        }