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