public async Task <ActionResult> Reserve(string plate) { if (string.IsNullOrWhiteSpace(plate)) { return(BadRequest()); } var actorProxy = this.actorFactory.Create <IVehicleActor>(new ActorId(plate), new Uri(UriConstants.VehicleActorUri)); var vehicleInfo = await actorProxy.GetInfoAsync(default(CancellationToken)); if (vehicleInfo == null || !vehicleInfo.IsValid()) { return(NotFound()); } var modelForReserve = new VehicleInfoForReserveDto(vehicleInfo); return(View(modelForReserve)); }
public async Task <ActionResult> Reserve(string plate, [FromForm] VehicleInfoForReserveDto reservation) { if (!ModelState.IsValid) { return(View(reservation)); } if (reservation.StartReservation > reservation.EndReservation) { ModelState.AddModelError("", "The start reservation date must be less then the end reservation date."); return(View(reservation)); } var vehicleProxy = this.actorFactory.Create <IVehicleActor>(new ActorId(plate), new Uri(UriConstants.VehicleActorUri)); var vehicleInfo = await vehicleProxy.GetInfoAsync(default(CancellationToken)); if (vehicleInfo == null || !vehicleInfo.IsValid()) { return(NotFound()); } if (vehicleInfo.State != VehicleState.Free) { ModelState.AddModelError("", "The vehicle is not available."); return(View(reservation)); } var result = await vehicleProxy.ReserveAsync(reservation.Customer, reservation.StartReservation, reservation.EndReservation, default(CancellationToken)); if (result == VehicleActorError.Ok) { return(RedirectToAction(nameof(Index))); } switch (result) { case VehicleActorError.Ok: break; case VehicleActorError.ReservationDatesWrong: ModelState.AddModelError("", "The reservation dates are wrong"); break; case VehicleActorError.VehicleBusy: ModelState.AddModelError("", "The vehicle cannot be reserved"); break; case VehicleActorError.VehicleNotAvailable: ModelState.AddModelError("", "The vehicle is not available"); break; case VehicleActorError.VehicleNotExists: ModelState.AddModelError("", "The vehicle doesn't exist"); break; case VehicleActorError.GenericError: default: ModelState.AddModelError("", "An error occurs during reservation procedure"); break; } return(View(reservation)); }