public async Task <IActionResult> FinishMaintenanceJob([FromForm] WorkshopManagementFinishViewModel inputModel)
        {
            if (ModelState.IsValid)
            {
                return(await _resiliencyHelper.ExecuteResilient(async() =>
                {
                    string dateStr = inputModel.Date.ToString("yyyy-MM-dd");
                    DateTime actualStartTime = inputModel.Date.Add(inputModel.ActualStartTime.Value.TimeOfDay);
                    DateTime actualEndTime = inputModel.Date.Add(inputModel.ActualEndTime.Value.TimeOfDay);

                    FinishMaintenanceJob cmd = new FinishMaintenanceJob(Guid.NewGuid(), inputModel.Id,
                                                                        actualStartTime, actualEndTime, inputModel.Notes);

                    await _workshopManagementAPI.FinishMaintenanceJob(dateStr, inputModel.Id.ToString("D"), cmd);

                    return RedirectToAction("Details", new { planningDate = dateStr, jobId = inputModel.Id });
                }, View("Offline", new WorkshopManagementOfflineViewModel())));
            }
            else
            {
                return(View("Finish", inputModel));
            }
        }
Beispiel #2
0
 public async Task FinishMaintenanceJob(string planningDate, string jobId, FinishMaintenanceJob cmd)
 {
     await _restClient.FinishMaintenanceJob(planningDate, jobId, cmd);
 }
        public async Task <WorkshopPlanning> HandleCommandAsync(DateTime planningDate, FinishMaintenanceJob command)
        {
            // get planning
            var aggregateId = WorkshopPlanningId.Create(planningDate);
            var planning    = await _planningRepo.GetByIdAsync(aggregateId);

            if (planning == null)
            {
                return(null);
            }

            // handle command
            planning.FinishMaintenanceJob(command);

            // persist
            IEnumerable <Event> events = planning.GetEvents();
            await _planningRepo.SaveAsync(
                planning.Id, planning.OriginalVersion, planning.Version, events);

            // publish event
            foreach (var e in events)
            {
                await _messagePublisher.PublishMessageAsync(e.MessageType, e, "");
            }

            // return result
            return(planning);
        }
        public async Task <IActionResult> FinishMaintenanceJobAsync(DateTime planningDate, Guid jobId, [FromBody] FinishMaintenanceJob command)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // handle command
                    WorkshopPlanning planning = await
                                                _finishMaintenanceJobCommandHandler.HandleCommandAsync(planningDate, command);

                    // handle result
                    if (planning == null)
                    {
                        return(NotFound());
                    }

                    // return result
                    return(Ok());
                }
                return(BadRequest());
            }
            catch (ConcurrencyException)
            {
                string errorMessage = "Unable to save changes. " +
                                      "Try again, and if the problem persists " +
                                      "see your system administrator.";
                Log.Error(errorMessage);
                ModelState.AddModelError("", errorMessage);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        public async Task <WorkshopPlanning> HandleCommandAsync(DateTime planningDate, FinishMaintenanceJob command)
        {
            // get planning
            WorkshopPlanning planning = await _planningRepo.GetWorkshopPlanningAsync(planningDate);

            if (planning == null)
            {
                return(null);
            }

            // handle command
            IEnumerable <Event> events = planning.FinishMaintenanceJob(command);

            // persist
            await _planningRepo.SaveWorkshopPlanningAsync(planning, events);

            // publish event
            foreach (var e in events)
            {
                await _messagePublisher.PublishMessageAsync(e.MessageType, e, "");
            }

            // return result
            return(planning);
        }
 public async Task FinishMaintenanceJob(string date, string jobId, FinishMaintenanceJob cmd)
 {
     await _client.FinishMaintenanceJob(date, jobId, cmd);
 }
        public async Task <IActionResult> FinishMaintenanceJobAsync(DateTime date, Guid jobId, [FromBody] FinishMaintenanceJob command)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // get planning
                    WorkshopPlanning planning = await _planningRepo.GetWorkshopPlanningAsync(date);

                    if (planning == null)
                    {
                        return(NotFound());
                    }

                    // handle command
                    IEnumerable <Event> events = planning.FinishMaintenanceJob(command);

                    // persist
                    await _planningRepo.SaveWorkshopPlanningAsync(planning, events);

                    // publish event
                    foreach (var e in events)
                    {
                        await _messagePublisher.PublishMessageAsync(e.MessageType, e, "");
                    }

                    // return result
                    return(Ok());
                }
                return(BadRequest());
            }
            catch (ConcurrencyException)
            {
                //Log the error (uncomment ex variable name and write a log.
                ModelState.AddModelError("", "Unable to save changes. " +
                                         "Try again, and if the problem persists " +
                                         "see your system administrator.");
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }