public async Task <AShipment_Shipment> GetShipmentAsync(long shipmentId) { using var log = BeginFunction(nameof(ShipmentAdminService), nameof(GetShipmentAsync), shipmentId); try { await Assert(SecurityPolicy.AllowViewFulfillment).ConfigureAwait(false); var mShipment = await FulfillmentMicroService.GetShipmentAsync(shipmentId); var mTransactions = await FulfillmentMicroService.GetShipmentTransactionSummariesAsync(shipmentId, null, null); var mEvents = await FulfillmentMicroService.GetShipmentEventLogSummariesAsync(shipmentId, null, null); var mFulfillables = new List <MFulfillment_Fulfillable>(); foreach (var mShipmentItem in mShipment.ShipmentItems) { // Retrieve the associated fulfillable if we haven't already. // var fulfillableId = mShipmentItem.FulfillableId; if (!mFulfillables.Any(r => r.FulfillableId == fulfillableId)) { var mFulfillable = await FulfillmentMicroService.GetFulfillableAsync(fulfillableId).ConfigureAwait(false); mFulfillables.Add(mFulfillable); } } var allowEdit = await SecurityPolicy.AllowEditFulfillment(); var result = Create.AShipment_Shipment(mShipment, mTransactions, mEvents, mFulfillables, allowEdit); log.Result(result); return(result); } catch (Exception ex) { log.Exception(ex); throw; } }