コード例 #1
0
        public async Task <IActionResult> UpdateWorkorderState([FromRoute] int id, [FromBody] UpdateStateDto newState)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var workorder = await _context.Workorders
                            .Include(w => w.State)
                            .FirstOrDefaultAsync(w => w.Id == id);

            if (id != workorder.Id || workorder == null)
            {
                return(NotFound(new { Error = "Workorder " + id + " not found" }));
            }

            // Get full state object
            var state = await _context.States.FirstOrDefaultAsync(s => s.Id == newState.NewStateId);

            if (newState.NewStateId != state.Id || state == null)
            {
                return(NotFound(new { Error = "State " + newState.NewStateId + " not found" }));
            }

            // TODO: Verify that it is a valid state for the active workflow

            // Get transition object inferred from current state id and the new state id
            var transition = await _context.Transitions.FirstOrDefaultAsync(t => t.CurrentStateId == workorder.State.Id && t.NextStateId == newState.NewStateId);

            // Verify that it is a valid transition
            if (transition == null)
            {
                // TODO: Create a better error object for situations like this
                //  Perhaps include redirect url for GET Transitions
                return(Conflict(new { Error = "Invalid state transition" }));
            }

            // Update state
            workorder.State = state;
            _context.Entry(workorder).State = EntityState.Modified;

            // Add transition
            var transitionHistoryEntry = new TransitionHistory
            {
                Comment    = newState.Comment,
                Timestamp  = DateTime.Now,
                Workorder  = workorder,
                Transition = transition
            };

            _context.TransitionHistory.Add(transitionHistoryEntry);
            await _context.SaveChangesAsync();

            //return GetPossibleWorkorderTransitions(id);
            return(NoContent());
        }
コード例 #2
0
        public void UpdateStateDtoModelTests()
        {
            ValidatorStateDto state = new ValidatorStateDto();

            UpdateStateDto ruf = new UpdateStateDto
            {
                ValidatorState = state
            };

            ruf.ValidatorState.Should().Be(state);
        }