public static TimeUnit?InferEstimationPeriod(this CatalogueItemType itemType, ProvisioningType provisioningType, TimeUnit?estimationPeriod)
 {
     return(itemType switch
     {
         CatalogueItemType.AssociatedService => provisioningType == ProvisioningType.OnDemand
             ? provisioningType.InferEstimationPeriod(estimationPeriod)
             : null,
         _ => provisioningType.InferEstimationPeriod(estimationPeriod),
     });
        public OrderItem(
            string odsCode,
            string catalogueItemId,
            CatalogueItemType catalogueItemType,
            string catalogueItemName,
            ProvisioningType provisioningType,
            CataloguePriceType cataloguePriceType,
            CataloguePriceUnit cataloguePriceUnit,
            TimeUnit priceTimeUnit,
            string currencyCode,
            int quantity,
            TimeUnit estimationPeriod,
            DateTime?deliveryDate,
            decimal?price) : this()
        {
            if (string.IsNullOrWhiteSpace(catalogueItemId))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(catalogueItemId));
            }

            if (string.IsNullOrWhiteSpace(currencyCode))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(currencyCode));
            }

            if (string.IsNullOrWhiteSpace(catalogueItemName))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(catalogueItemName));
            }

            OdsCode            = odsCode;
            CatalogueItemId    = catalogueItemId;
            CatalogueItemType  = catalogueItemType ?? throw new ArgumentNullException(nameof(catalogueItemType));
            CatalogueItemName  = catalogueItemName;
            ProvisioningType   = provisioningType ?? throw new ArgumentNullException(nameof(provisioningType));
            CataloguePriceType = cataloguePriceType ?? throw new ArgumentNullException(nameof(cataloguePriceType));
            CataloguePriceUnit = cataloguePriceUnit ?? throw new ArgumentNullException(nameof(cataloguePriceUnit));
            PriceTimeUnit      = priceTimeUnit;
            CurrencyCode       = currencyCode;
            Quantity           = quantity;
            EstimationPeriod   = estimationPeriod;
            DeliveryDate       = deliveryDate;
            Price = price;
        }
 public static string DisplayName(this CatalogueItemType itemType) => itemType.AsString(EnumFormat.DisplayName);