protected virtual void EnsureThatAllOperationsHaveNumber(CustomerOrder order) { var store = StoreService.GetById(order.StoreId); foreach (var operation in order.GetFlatObjectsListWithInterface <Domain.Commerce.Model.IOperation>()) { if (operation.Number == null) { var objectTypeName = operation.OperationType; // take uppercase chars to form operation type, or just take 2 first chars. (CustomerOrder => CO, PaymentIn => PI, Shipment => SH) var opType = string.Concat(objectTypeName.Select(c => char.IsUpper(c) ? c.ToString() : "")); if (opType.Length < 2) { opType = objectTypeName.Substring(0, 2).ToUpper(); } var numberTemplate = opType + "{0:yyMMdd}-{1:D5}"; if (store != null) { numberTemplate = store.Settings.GetSettingValue("Order." + objectTypeName + "NewNumberTemplate", numberTemplate); } operation.Number = UniqueNumberGenerator.GenerateNumber(numberTemplate); } } }
public virtual async Task SaveSubscriptionsAsync(Subscription[] subscriptions) { var pkMap = new PrimaryKeyResolvingMap(); var changedEntries = new List <GenericChangedEntry <Subscription> >(); using (var repository = SubscriptionRepositoryFactory()) { var existEntities = await repository.GetSubscriptionsByIdsAsync(subscriptions.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray()); foreach (var subscription in subscriptions) { //Generate numbers for new subscriptions if (string.IsNullOrEmpty(subscription.Number)) { var store = await StoreService.GetByIdAsync(subscription.StoreId); var numberTemplate = store.Settings.GetSettingValue("Subscription.SubscriptionNewNumberTemplate", "SU{0:yyMMdd}-{1:D5}"); subscription.Number = UniqueNumberGenerator.GenerateNumber(numberTemplate); } //Save subscription order prototype with same as subscription Number if (subscription.CustomerOrderPrototype != null) { subscription.CustomerOrderPrototype.Number = subscription.Number; subscription.CustomerOrderPrototype.IsPrototype = true; await CustomerOrderService.SaveChangesAsync(new[] { subscription.CustomerOrderPrototype }); } var originalEntity = existEntities.FirstOrDefault(x => x.Id == subscription.Id); var originalSubscription = originalEntity != null?originalEntity.ToModel(AbstractTypeFactory <Subscription> .TryCreateInstance()) : subscription; var modifiedEntity = AbstractTypeFactory <SubscriptionEntity> .TryCreateInstance().FromModel(subscription, pkMap); if (originalEntity != null) { changedEntries.Add(new GenericChangedEntry <Subscription>(subscription, originalEntity.ToModel(AbstractTypeFactory <Subscription> .TryCreateInstance()), EntryState.Modified)); modifiedEntity.Patch(originalEntity); //force the subscription.ModifiedDate update, because the subscription object may not have any changes in its properties originalEntity.ModifiedDate = DateTime.UtcNow; } else { repository.Add(modifiedEntity); changedEntries.Add(new GenericChangedEntry <Subscription>(subscription, EntryState.Added)); } } //Raise domain events await EventPublisher.Publish(new SubscriptionChangingEvent(changedEntries)); await repository.UnitOfWork.CommitAsync(); pkMap.ResolvePrimaryKeys(); await EventPublisher.Publish(new SubscriptionChangedEvent(changedEntries)); } ClearCacheFor(subscriptions); }
protected override void EnsureThatAllOperationsHaveNumber(CustomerOrder order) { var store = StoreService.GetById(order.StoreId); foreach (var operation in order.GetFlatObjectsListWithInterface <Domain.Commerce.Model.IOperation>()) { if (operation.Number == null) { if (operation.OperationType == "CustomerOrder") { CustomerOrderSearchCriteria criteria = new CustomerOrderSearchCriteria() { Sort = "createdDate:desc", Take = 1, ResponseGroup = "default" }; var lastOrder = _orderSearchService.SearchCustomerOrders(criteria).Results.First(); if (lastOrder != null) { operation.Number = (Convert.ToInt32(lastOrder.Number) + 1).ToString(); } } else { var objectTypeName = operation.OperationType; // take uppercase chars to form operation type, or just take 2 first chars. (CustomerOrder => CO, PaymentIn => PI, Shipment => SH) var opType = string.Concat(objectTypeName.Select(c => char.IsUpper(c) ? c.ToString() : "")); if (opType.Length < 2) { opType = objectTypeName.Substring(0, 2).ToUpper(); } var numberTemplate = opType + "{0:yyMMdd}-{1:D5}"; if (store != null) { numberTemplate = store.Settings.GetSettingValue("Order." + objectTypeName + "NewNumberTemplate", numberTemplate); } operation.Number = UniqueNumberGenerator.GenerateNumber(numberTemplate); } } } }