コード例 #1
0
        public async Task <IActionResult> BatchCreate()
        {
            if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageOrders))
            {
                return(AccessDeniedView());
            }

            var batch = new EasyPostBatch
            {
                StatusId     = (int)BatchStatus.Unknown,
                ShipmentIds  = string.Empty,
                CreatedOnUtc = DateTime.UtcNow,
                UpdatedOnUtc = DateTime.UtcNow
            };
            await _easyPostService.InsertBatchAsync(batch);

            return(RedirectToAction("BatchEdit", new { id = batch.Id }));
        }
コード例 #2
0
        /// <summary>
        /// Prepare pickup model
        /// </summary>
        /// <param name="model">Pickup model</param>
        /// <param name="shipment">Shipment; pass null if it's a pickup for the batch</param>
        /// <param name="batch">Batch; pass null if it's a pickup for the shipment</param>
        /// <param name="addressId">Address id</param>
        /// <returns>
        /// A task that represents the asynchronous operation
        /// The task result contains the pickup model
        /// </returns>
        public async Task <PickupModel> PreparePickupModelAsync(PickupModel model, Shipment shipment, EasyPostBatch batch, int?addressId)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var pickupId = shipment is not null
                ? await _genericAttributeService.GetAttributeAsync <string>(shipment, EasyPostDefaults.PickupIdAttribute)
                : batch?.PickupId;

            model.PickupId   = pickupId;
            model.ShipmentId = shipment?.Id;
            model.BatchId    = batch?.Id;

            if (!string.IsNullOrEmpty(pickupId))
            {
                var(pickup, _) = await _easyPostService.GetPickupAsync(pickupId);

                model.Created   = pickup is not null;
                model.Status    = pickup?.status ?? "not found";
                model.Purchased = string.Equals(pickup?.status, "scheduled", StringComparison.InvariantCultureIgnoreCase);
                if (model.Created && !model.Purchased)
                {
                    var(pickupRates, _) = await _easyPostService.GetPickupRatesAsync(pickup);

                    if (pickupRates?.Any() ?? false)
                    {
                        model.AvailablePickupRates = await pickupRates.OrderBy(rate => rate.Rate).SelectAwait(async rate =>
                        {
                            var rateName = $"{rate.Carrier} {rate.Service}".TrimEnd(' ');
                            var text     = $"{await _priceFormatter.FormatShippingPriceAsync(rate.Rate, true)} {rateName}";
                            return(new SelectListItem(text, rate.Id));
                        }).ToListAsync();
                    }
                    else
                    {
                        var locale = await _localizationService.GetResourceAsync("Plugins.Shipping.EasyPost.Pickup.Rate.None");

                        model.AvailablePickupRates.Add(new SelectListItem(locale, string.Empty));
                    }
                }
            }

            if (!model.Created)
            {
                var address = await _addressService.GetAddressByIdAsync(addressId ?? 0);

                if (address is not null)
                {
                    model.PickupAddress = address.ToModel(model.PickupAddress);
                }
                await _addressModelFactory.PrepareAddressModelAsync(model.PickupAddress, address);

                model.PickupAddress.CustomAddressAttributes.Clear();

                model.MinDate = DateTime.UtcNow.AddDays(1).Date;
                model.MaxDate = DateTime.UtcNow.AddDays(7).Date;
            }

            return(model);
        }