public AssetImportReport(IDeliveryQuotation quotation, IDestination destination) { this.quotation = quotation; this.importedAssets = new Dictionary <string, IAsset>(); this.assetsExceptions = new Dictionary <string, Exception>(); this.destination = destination; }
public async Task <AssetImportReport> ImportAssets(IAssetsContainer assetsContainer, IDestination destination, AssetFilters assetsFilters) { if (assetsContainer.Assets.Count() == 0) { return(new AssetImportReport(null, destination)); } logger.LogDebug("Importing {0} assets to {1}", assetsContainer.Assets.Count(), destination); IDeliveryQuotation deliveryQuotation = QuoteAssetsDelivery(assetsContainer, destination, assetsFilters); AssetImportReport report = new AssetImportReport(deliveryQuotation, destination); logger.LogDebug("Delivery quotation for {0} assets ({1} exceptions)", deliveryQuotation.AssetsDeliveryQuotes.Count, deliveryQuotation.AssetsExceptions.Count); CheckDelivery(deliveryQuotation); foreach (var assetDeliveries in deliveryQuotation.AssetsDeliveryQuotes) { if (assetDeliveries.Value.Count() == 0) { report.AssetsExceptions.Add(assetDeliveries.Key, new AssetImportException("No delivery possible")); continue; } IResource importedResource = null; try { importedResource = await Import(assetDeliveries.Key, assetDeliveries.Value); if (importedResource == null) { throw new AssetImportException("Imported asset is null"); } } catch (AggregateException ae) { report.AssetsExceptions.Add(assetDeliveries.Key, ae); } // OK if (importedResource != null) { IAsset importedAsset = MakeAsset(importedResource, (IAsset)assetDeliveries.Value.First().Route); report.ImportedAssets.Add(assetDeliveries.Key, importedAsset); } } return(report); }
private void CheckDelivery(IDeliveryQuotation deliveryQuotation) { foreach (var item in deliveryQuotation.AssetsDeliveryQuotes) { if (item.Value.Count() == 0) { logger.LogDebug("No delivery for asset {0}", item.Key); } logger.LogDebug("Asset {0} : {1} possible deliveries", item.Key, item.Value.Count()); int j = 1; foreach (var delivery in item.Value) { logger.LogDebug(" #{0}{1} to {2} : {3}$", j, delivery.Carrier.Id, delivery.Destination.ToString(), delivery.Cost); j++; } } }