public async Task <IActionResult> Create([FromBody] InterpreterDetailsModel interpreter) { if (interpreter == null) { return(ReturnError(ErrorCodes.IncomingPayloadIsMissing)); } try { var brokerId = User.TryGetBrokerId().Value; if (EnumHelper.GetEnumByCustomName <InterpreterInformationType>(interpreter.InterpreterInformationType) != InterpreterInformationType.NewInterpreter) { ReturnError(ErrorCodes.InterpreterFaultyIntention); } var createdInterpreter = _apiUserService.GetInterpreter(interpreter, brokerId); await _dbContext.SaveChangesAsync(); var createdInterpreterResponse = ApiUserService.GetModelFromEntity(createdInterpreter); return(Ok(new CreateInterpreterResponse { Interpreter = createdInterpreterResponse })); } catch (InvalidApiCallException ex) { return(ReturnError(ex.ErrorCode)); } catch (Exception e) { _logger.LogError(e, $"Unexpected error occured when client called Request/{nameof(View)}"); return(ReturnError(ErrorCodes.UnspecifiedProblem)); } }
public async Task <IActionResult> Answer([FromBody] RequestAnswerModel model) { if (model == null) { return(ReturnError(ErrorCodes.IncomingPayloadIsMissing)); } try { var brokerId = User.TryGetBrokerId(); var apiUserId = User.UserId(); var order = await _apiOrderService.GetOrderAsync(model.OrderNumber, brokerId.Value); if (order.OrderGroupId != null) { return(ReturnError(ErrorCodes.RequestIsPartOfAGroup)); } var user = await _apiUserService.GetBrokerUser(model.CallingUser, brokerId.Value); var request = await _dbContext.Requests.GetActiveRequestForApiWithBrokerAndOrderNumber(model.OrderNumber, User.TryGetBrokerId().Value); if (request == null) { return(ReturnError(ErrorCodes.RequestNotFound)); } if (!request.IsToBeProcessedByBroker) { return(ReturnError(ErrorCodes.RequestNotInCorrectState)); } InterpreterBroker interpreter; try { interpreter = _apiUserService.GetInterpreter(new InterpreterDetailsModel(model.Interpreter), brokerId.Value); } catch (InvalidOperationException) { return(ReturnError(ErrorCodes.InterpreterOfficialIdAlreadySaved)); } //Does not handle Kammarkollegiets tolknummer if (interpreter == null) { //Possibly the interpreter should be added, if not found?? return(ReturnError(ErrorCodes.InterpreterNotFound)); } if (model.Location == null) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, "Location was missing")); } if (model.CompetenceLevel == null) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, "CompetenceLevel was missing")); } var now = _timeService.SwedenNow; if (request.Status == RequestStatus.Created) { _requestService.Acknowledge(request, now, user?.Id ?? apiUserId, user != null ? (int?)apiUserId : null); } try { await _requestService.Accept( request, now, user?.Id ?? apiUserId, user != null?(int?)apiUserId : null, interpreter, EnumHelper.GetEnumByCustomName <InterpreterLocation>(model.Location).Value, EnumHelper.GetEnumByCustomName <CompetenceAndSpecialistLevel>(model.CompetenceLevel).Value, model.RequirementAnswers == null?new List <OrderRequirementRequestAnswer>() : model.RequirementAnswers.Select(ra => new OrderRequirementRequestAnswer { Answer = ra.Answer, CanSatisfyRequirement = ra.CanMeetRequirement, OrderRequirementId = ra.RequirementId, }).ToList(), //Does not handle attachments yet. new List <RequestAttachment>(), model.ExpectedTravelCosts, model.ExpectedTravelCostInfo, model.LatestAnswerTimeForCustomer, model.BrokerReferenceNumber ); await _dbContext.SaveChangesAsync(); return(Ok(new AnswerResponse { InterpreterId = interpreter.InterpreterBrokerId })); } catch (InvalidOperationException ex) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, ex.Message)); } catch (ArgumentNullException ex) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, ex.Message)); } } catch (InvalidApiCallException ex) { return(ReturnError(ex.ErrorCode)); } }