public PriceForSubscriptionMustBeDefinedRule( string countryCode, SubscriptionPeriod subscriptionPeriod, IList <PriceListItemData> priceListItems, PriceListItemCategory category) { _countryCode = countryCode; _subscriptionPeriod = subscriptionPeriod; _priceListItems = priceListItems; _category = category; }
public MoneyValue GetPrice( string countryCode, SubscriptionPeriod subscriptionPeriod, PriceListItemCategory category) { var priceListItem = _items.Single(x => x.CountryCode == countryCode && x.SubscriptionPeriod == subscriptionPeriod && x.Category == category); return(priceListItem.Value); }
public Task <Guid> Handle(CreatePriceListItemCommand command, CancellationToken cancellationToken) { var priceListItem = PriceListItem.Create( command.CountryCode, SubscriptionPeriod.Of(command.SubscriptionPeriodCode), PriceListItemCategory.Of(command.CategoryCode), MoneyValue.Of(command.PriceValue, command.PriceCurrency)); _aggregateStore.AppendChanges(priceListItem); return(Task.FromResult(priceListItem.Id)); }
public async Task <Unit> Handle(ChangePriceListItemAttributesCommand command, CancellationToken cancellationToken) { var priceListItem = await _aggregateStore.Load(new PriceListItemId(command.PriceListItemId)); priceListItem.ChangeAttributes( command.CountryCode, SubscriptionPeriod.Of(command.SubscriptionPeriodCode), PriceListItemCategory.Of(command.CategoryCode), MoneyValue.Of(command.PriceValue, command.PriceCurrency)); _aggregateStore.AppendChanges(priceListItem); return(Unit.Value); }
public static async Task <PriceList> GetPriceList(IDbConnection connection) { var priceListItemList = await GetPriceListItems(connection); return(PriceList.CreateFromItems( priceListItemList .Select(x => new PriceListItemData( x.CountryCode, SubscriptionPeriod.Of(x.SubscriptionPeriodCode), MoneyValue.Of(x.MoneyValue, x.MoneyCurrency), PriceListItemCategory.Of(x.CategoryCode))) .ToList())); }
public async Task <Unit> Handle(ChangePriceListItemAttributesCommand command, CancellationToken cancellationToken) { var priceListItem = await _aggregateStore.Load(new PriceListItemId(command.PriceListItemId)); if (priceListItem == null) { throw new InvalidCommandException(new List <string> { "Pricelist item for changing must exist." }); } priceListItem.ChangeAttributes( command.CountryCode, SubscriptionPeriod.Of(command.SubscriptionPeriodCode), PriceListItemCategory.Of(command.CategoryCode), MoneyValue.Of(command.PriceValue, command.PriceCurrency)); _aggregateStore.AppendChanges(priceListItem); return(Unit.Value); }
public static async Task <PriceList> CreatePriceList(IDbConnection connection) { var priceListItemList = await GetPriceListItems(connection); var priceListItems = priceListItemList .Select(x => new PriceListItemData( x.CountryCode, SubscriptionPeriod.Of(x.SubscriptionPeriodCode), MoneyValue.Of(x.MoneyValue, x.MoneyCurrency), PriceListItemCategory.Of(x.CategoryCode))) .ToList(); // This is place for selecting pricing strategy based on provided data and the system state. IPricingStrategy pricingStrategy = new DirectValueFromPriceListPricingStrategy(priceListItems); return(PriceList.Create( priceListItems, pricingStrategy)); }
public MoneyValue GetPrice(string countryCode, SubscriptionPeriod subscriptionPeriod, PriceListItemCategory category) { return(_directValue); }