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));
            }
        }
예제 #2
0
        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));
            }
        }