示例#1
0
 public AssetImportReport(IDeliveryQuotation quotation,
                          IDestination destination)
 {
     this.quotation        = quotation;
     this.importedAssets   = new Dictionary <string, IAsset>();
     this.assetsExceptions = new Dictionary <string, Exception>();
     this.destination      = destination;
 }
示例#2
0
        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);
        }
示例#3
0
        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++;
                }
            }
        }