public async Task <IActionResult> Process(int id) { var request = await _dbContext.Requests.GetRequestById(id); if ((await _authorizationService.AuthorizeAsync(User, request, Policies.Accept)).Succeeded) { if (!request.IsToBeProcessedByBroker) { _logger.LogWarning("Wrong status when trying to process request. Status: {request.Status}, RequestId: {request.RequestId}", request.Status, request.RequestId); return(RedirectToAction(nameof(View), new { id })); } if (request.Status == RequestStatus.Created) { _requestService.Acknowledge(request, _clock.SwedenNow, User.GetUserId(), User.TryGetImpersonatorId()); await _dbContext.SaveChangesAsync(); } RequestModel model = await GetModel(request); model.FileGroupKey = new Guid(); model.CombinedMaxSizeAttachments = _options.CombinedMaxSizeAttachments; model.ExpectedTravelCosts = null; model.AllowProcessing = !request.RequestGroupId.HasValue; if (model.OrderViewModel.ReplacingOrderId.HasValue) { model.ProcessReplacementRequestViewModel = RequestViewModel.GetModelFromRequest(request, request.Order.AllowExceedingTravelCost); model.ProcessReplacementRequestViewModel.LanguageAndDialect = model.OrderViewModel.LanguageAndDialect; model.ProcessReplacementRequestViewModel.RegionName = model.OrderViewModel.RegionName; model.ProcessReplacementRequestViewModel.TimeRange = model.OrderViewModel.TimeRange; model.ProcessReplacementRequestViewModel.DisplayMealBreakIncluded = model.OrderViewModel.DisplayMealBreakIncludedText; model.ProcessReplacementRequestViewModel.IsReplacingOrderRequest = true; model.ProcessReplacementRequestViewModel.RequirementAnswers = await RequestRequirementAnswerModel.GetFromList(_dbContext.OrderRequirementRequestAnswer.GetRequirementAnswersForRequest(request.RequestId)); } model.OrderViewModel.UseAttachments = true; return(View(model)); } return(Forbid()); }
internal async Task <OrderViewModel> AddInformationFromListsToModel(OrderViewModel model) { int id = model.OrderId.Value; //Lists var orderStatusConfirmations = await _dbContext.OrderStatusConfirmation.GetStatusConfirmationsForOrder(id).ToListAsync(); model.HasNoBrokerAcceptedConfirmation = orderStatusConfirmations.Any(os => os.OrderStatus == OrderStatus.NoBrokerAcceptedOrder); model.HasResponseNotAnsweredByCreatorConfirmation = orderStatusConfirmations.Any(os => os.OrderStatus == OrderStatus.ResponseNotAnsweredByCreator); //Locations var interpreterLocations = await _dbContext.OrderInterpreterLocation.GetOrderedInterpreterLocationsForOrder(id).ToListAsync(); await GetOrderBaseLists(model, interpreterLocations, id); if (model.UseAttachments) { model.AttachmentListModel = await AttachmentListModel.GetReadOnlyModelFromList(_dbContext.Attachments.GetAttachmentsForOrderAndGroup(id, model.OrderGroupId), "Bifogade filer från myndighet"); } model.PreviousRequests = await BrokerListModel.GetFromList(_dbContext.Requests.GetLostRequestsForOrder(id)); model.OrderCalculatedPriceInformationModel = PriceInformationModel.GetPriceinformationToDisplay(await _dbContext.OrderPriceRows.GetPriceRowsForOrder(id).ToListAsync(), PriceInformationType.Order, mealBreakIncluded: model.MealbreakIncluded); model.Dialect = model.OrderRequirements.SingleOrDefault(r => r.RequirementType == RequirementType.Dialect)?.RequirementDescription; if (model.RequestId.HasValue) { var requestStatusConfirmations = await _dbContext.RequestStatusConfirmation.GetStatusConfirmationsForRequest(model.RequestId.Value).ToListAsync(); model.HasCancelledByBrokerConfirmation = requestStatusConfirmations.Any(rs => rs.RequestStatus == RequestStatus.CancelledByBroker); model.HasNoRequisitionConfirmation = requestStatusConfirmations.Any(rs => rs.RequestStatus == RequestStatus.Approved); model.HasDeniedByCreatorConfirmation = requestStatusConfirmations.Any(rs => rs.RequestStatus == RequestStatus.DeniedByCreator); model.HasResponseNotAnsweredByCreatorBrokerConfirmation = requestStatusConfirmations.Any(rs => rs.RequestStatus == RequestStatus.ResponseNotAnsweredByCreator); model.HasCancelledByCreatorWhenApprovedConfirmation = requestStatusConfirmations.Any(rs => rs.RequestStatus == RequestStatus.CancelledByCreatorWhenApproved); model.ActiveRequestPriceInformationModel = PriceInformationModel.GetPriceinformationToDisplay(await _dbContext.RequestPriceRows.GetPriceRowsForRequest(model.RequestId.Value).ToListAsync(), PriceInformationType.Request, mealBreakIncluded: model.MealbreakIncluded); model.RequestAttachmentListModel = await AttachmentListModel.GetReadOnlyModelFromList(_dbContext.Attachments.GetAttachmentsForRequest(model.RequestId.Value, model.RequestGroupId), "Bifogade filer från förmedling"); var requestChecks = await _dbContext.Requests .Where(r => r.RequestId == model.RequestId.Value) .Select(r => new { LatestComplaintId = r.Complaints.Max(c => (int?)c.ComplaintId), LatestRequisitionId = r.Requisitions.Max(req => (int?)req.RequisitionId), HasActiveRequisitions = r.Requisitions.Any(req => req.Status == RequisitionStatus.Reviewed || req.Status == RequisitionStatus.Created), HasComplaints = r.Complaints.Any(), }).SingleAsync(); model.HasComplaints = requestChecks.HasComplaints; model.ComplaintId = requestChecks.LatestComplaintId; model.RequisitionId = requestChecks.LatestRequisitionId; model.HasActiveRequisitions = requestChecks.HasActiveRequisitions; model.ActiveRequest.RequirementAnswers = await RequestRequirementAnswerModel.GetFromList(_dbContext.OrderRequirementRequestAnswer.GetRequirementAnswersForRequest(model.RequestId.Value)); //just for broker var orderChanges = await _dbContext.OrderChangeLogEntries.GetOrderChangeLogEntitesForOrder(id).Where(oc => oc.BrokerId == model.ActiveRequest.BrokerId && oc.OrderChangeLogType != OrderChangeLogType.ContactPerson && oc.OrderChangeConfirmation == null).ToListAsync(); model.ConfirmedOrderChangeLogEntries = orderChanges.Select(oc => oc.OrderChangeLogEntryId).ToList(); if (orderChanges.Any() && (model.ActiveRequest.Status == RequestStatus.Approved || model.ActiveRequest.Status == RequestStatus.AcceptedNewInterpreterAppointed) && model.StartAtIsInFuture) { model.DisplayOrderChangeText = await GetOrderChangeTextToDisplay(model.ActiveRequest.BrokerId, interpreterLocations, model.InterpreterLocationAnswer, orderChanges, model.Description, model.UnitName, model.InvoiceReference, model.CustomerReferenceNumber); } if (model.ReplacedByOrderId.HasValue) { var request = await _dbContext.Requests.GetLastRequestWithRankingForOrder(model.ReplacedByOrderId.Value); if (request.Ranking.BrokerId == model.ActiveRequest.BrokerId) { model.ActiveRequest.ReplacedByOrderRequestId = request.RequestId; } } if (model.ReplacingOrderId.HasValue) { model.ActiveRequest.ReplacingOrderRequestId = (await _dbContext.Requests.GetLastRequestForOrder(model.ReplacingOrderId.Value)).RequestId; } //end just for broker } return(model); }