コード例 #1
0
        public async Task CreateAndStoreOrderAgreementPayload(OrderAgreementIdentifierModel entity, Func <int, StreamWriter, int?, Task <string> > payloadCreator)
        {
            using var memoryStream = new MemoryStream();
            using var writer       = new StreamWriter(memoryStream, Encoding.UTF8);

            var    previousIndex     = (await _tolkDbContext.OrderAgreementPayloads.Where(r => r.RequestId == entity.RequestId).OrderByDescending(p => p.Index).FirstOrDefaultAsync())?.Index;
            string payloadIdentifier = await payloadCreator(entity.CreateById, writer, previousIndex);

            memoryStream.Position = 0;
            byte[] byteArray = new byte[memoryStream.Length];
            memoryStream.Read(byteArray, 0, (int)memoryStream.Length);
            memoryStream.Close();
            //Break out to method, to here. Returns a OrderAgreementPayload?

            var index = previousIndex.HasValue ? previousIndex.Value + 1 : 1;
            //Save it to db
            var payload = new OrderAgreementPayload
            {
                RequestId            = entity.RequestId,
                Payload              = byteArray,
                RequisitionId        = entity.RequisitionId,
                CreatedAt            = _clock.SwedenNow,
                Index                = index,
                IdentificationNumber = payloadIdentifier
            };

            _tolkDbContext.OrderAgreementPayloads.Add(payload);
            if (previousIndex.HasValue)
            {
                var previous = await _tolkDbContext.OrderAgreementPayloads.SingleAsync(p => p.RequestId == entity.RequestId && p.Index == previousIndex);

                previous.ReplacedByPayload = payload;
            }
        }
コード例 #2
0
 internal static OrderAgreementModel GetModelFromOrderAgreement(OrderAgreementPayload payload)
 {
     return(new OrderAgreementModel
     {
         OrderAgreementPayloadId = payload.OrderAgreementPayloadId,
         IdentificationNumber = payload.IdentificationNumber,
         Index = payload.Index,
         CreatedAt = payload.CreatedAt,
         OrderNumber = payload.Request.Order.OrderNumber,
         CreatedBy = payload.CreatedByUser?.FullName ?? "Systemet",
         BasedOn = payload.RequisitionId.HasValue ? "Genererad från rekvisition" : "Genererad från bekräftelse",
         IsLatest = !payload.ReplacedById.HasValue
     });
 }
コード例 #3
0
        public async Task <IActionResult> Create(int orderId)
        {
            var request = await _dbContext.Requests.GetRequestForOrderAgreementCreation(orderId);

            if (!_cacheService.CustomerSettings.Any(c => c.CustomerOrganisationId == request.Order.CustomerOrganisationId && c.UsedCustomerSettingTypes.Any(cs => cs == CustomerSettingType.UseOrderAgreements)))
            {
                return(Forbid());
            }
            request.Requisitions = await _dbContext.Requisitions.GetRequisitionsForRequest(request.RequestId).ToListAsync();

            request.OrderAgreementPayloads = await _dbContext.OrderAgreementPayloads.GetOrderAgreementPayloadsForRequest(request.RequestId).ToListAsync();

            if (request != null && (await _authorizationService.AuthorizeAsync(User, request, Policies.CreateOrderAgreement)).Succeeded)
            {
                if (request.AllowOrderAgreementCreation())
                {
                    var requisitionId = (await _dbContext.Requisitions.GetRequisitionsForOrder(orderId).Where(r => r.Status == RequisitionStatus.Approved ||
                                                                                                              r.Status == RequisitionStatus.AutomaticGeneratedFromCancelledOrder ||
                                                                                                              r.Status == RequisitionStatus.Created ||
                                                                                                              r.Status == RequisitionStatus.Reviewed).SingleOrDefaultAsync())?.RequisitionId;
                    var    previousIndex     = request.OrderAgreementPayloads.Max(p => p.Index as int?);
                    int    index             = 1;
                    string payloadIdentifier = "";
                    using var memoryStream = new MemoryStream();
                    using var writer       = new StreamWriter(memoryStream, Encoding.UTF8);
                    if (requisitionId.HasValue)
                    {
                        payloadIdentifier = await _orderAgreementService.CreateOrderAgreementFromRequisition(requisitionId.Value, writer, previousIndex);

                        index = previousIndex.HasValue ? previousIndex.Value + 1 : 1;
                    }
                    else
                    {
                        payloadIdentifier = await _orderAgreementService.CreateOrderAgreementFromRequest(request.RequestId, writer);
                    }
                    memoryStream.Position = 0;
                    byte[] byteArray = new byte[memoryStream.Length];
                    memoryStream.Read(byteArray, 0, (int)memoryStream.Length);
                    memoryStream.Close();
                    //Save it to db
                    var payload = new OrderAgreementPayload
                    {
                        CreatedBy = User.GetUserId(),
                        ImpersonatingCreatedBy = User.TryGetImpersonatorId(),
                        Payload              = byteArray,
                        RequisitionId        = requisitionId,
                        CreatedAt            = _clock.SwedenNow,
                        Index                = index,
                        IdentificationNumber = payloadIdentifier
                    };
                    request.OrderAgreementPayloads.Add(payload);
                    if (previousIndex.HasValue)
                    {
                        var previous = request.OrderAgreementPayloads.Single(p => p.Index == previousIndex);
                        previous.ReplacedByPayload = payload;
                    }
                    await _dbContext.SaveChangesAsync();

                    //return a identifier for the saved agreement, to be able to retrieve it.
                    return(RedirectToAction(nameof(View), new { id = payload.OrderAgreementPayloadId }));
                }
            }
            else
            {
                //Handle non-allow
            }
            return(Forbid());
        }