public virtual void SaveChanges(CustomerOrder[] orders) { var pkMap = new PrimaryKeyResolvingMap(); var changedEvents = new List <OrderChangedEvent>(); using (var repository = RepositoryFactory()) using (var changeTracker = GetChangeTracker(repository)) { var dataExistOrders = repository.GetCustomerOrdersByIds(orders.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray(), CustomerOrderResponseGroup.Full); foreach (var order in orders) { EnsureThatAllOperationsHaveNumber(order); var originalEntity = dataExistOrders.FirstOrDefault(x => x.Id == order.Id); var originalOrder = originalEntity != null ? (CustomerOrder)originalEntity.ToModel(AbstractTypeFactory <CustomerOrder> .TryCreateInstance()) : order; //Calculate order totals before event raising TotalsCalculator.CalculateTotals(order); var changingEvent = new OrderChangeEvent(originalEntity == null ? EntryState.Added : EntryState.Modified, originalOrder, order); OrderChangingPublisher.Publish(changingEvent); changedEvents.Add(new OrderChangedEvent(changingEvent.ChangeState, changingEvent.OrigOrder, changingEvent.ModifiedOrder)); //Calculate order totals after event raising but before save TotalsCalculator.CalculateTotals(order); var modifiedEntity = AbstractTypeFactory <CustomerOrderEntity> .TryCreateInstance() .FromModel(order, pkMap) as CustomerOrderEntity; if (originalEntity != null) { changeTracker.Attach(originalEntity); modifiedEntity?.Patch(originalEntity); } else { repository.Add(modifiedEntity); } } CommitChanges(repository); pkMap.ResolvePrimaryKeys(); } //Save dynamic properties foreach (var order in orders) { DynamicPropertyService.SaveDynamicPropertyValues(order); } //Raise changed events foreach (var changedEvent in changedEvents) { OrderChangedPublisher.Publish(changedEvent); } }
public void OnNext(OrderChangeEvent value) { //log for new recurring orders creation //handle only recurring orders if (value.ChangeState == Platform.Core.Common.EntryState.Added && !string.IsNullOrEmpty(value.OrigOrder.SubscriptionId)) { var operationLog = GetLogRecord(value.ModifiedOrder.SubscriptionId, SubscriptionResources.NewRecurringOrderCreated, value.ModifiedOrder.Number); _changeLogService.SaveChanges(new[] { operationLog }); } }
public static void SetOrder(Properties properties = null) { int order = -1; if (properties != null) { order = properties.Order; } PromptSelectionResult acSSPrompt = Global.Doc.Editor.GetSelection(); List <Entity> list = ListFromSelecion(acSSPrompt); if (list.Count == 0) { return; } if (order < 0) { PromptIntegerOptions pOpts = new PromptIntegerOptions( "Пожалуйста, введите порядковый номер линии в чертеже: "); pOpts.LowerLimit = -1; pOpts.DefaultValue = API.prevOrder + 1; PromptIntegerResult promptInteger = Global.Doc.Editor.GetInteger(pOpts); order = promptInteger.Value; if (order < 0) { Global.Editor.WriteMessage("Порядковый номер не может быть меньше нуля для печатной линии\n"); return; } } API.prevOrder = order; foreach (Entity entity in list) { UserEntity uEntity = XDataManage.getXData(entity); if (uEntity == null) { uEntity = UserEntity.Create(entity, new Properties()); } if (uEntity == null) { continue; } uEntity.Properties.Printable = true; uEntity.Properties.Order = order; uEntity = XDataManage.setXData(uEntity); OrderChangeEvent?.Invoke(uEntity); } }
public override bool SystemLocker(Order order) { var orderState = AutofacHelper .ResolverNamed <IOrderState>("OrderPayState"); //OrderStatesFactory.GetOrderState(OrderStatus.待支付); order.SetStateTo(orderState); var submmitted = new OrderChangeEvent() { Order = order }; //触发锁定库存,暂时屏蔽 var result = DomainEvent.Raise <bool, OrderChangeEvent> (submmitted, "OrderSystemHandler"); //var result=DomainEvent.Raise<bool, OrderChangeEvent>(submmitted, "OrderDeliveryHandler"); return(true); }
public override void SaveChanges(CustomerOrder[] orders) { var pkMap = new PrimaryKeyResolvingMap(); using (var repository = RepositoryFactory()) using (var changeTracker = GetChangeTracker(repository)) { var dataExistOrders = repository.GetCustomerOrdersByIds(orders.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray(), CustomerOrderResponseGroup.Full); foreach (var order in orders) { EnsureThatAllOperationsHaveNumber(order); var originalEntity = dataExistOrders.FirstOrDefault(x => x.Id == order.Id); var originalOrder = originalEntity != null ? (CustomerOrder)originalEntity.ToModel(AbstractTypeFactory <CustomerOrder> .TryCreateInstance()) : order; var changeEvent = new OrderChangeEvent(originalEntity == null ? EntryState.Added : EntryState.Modified, originalOrder, order); CustomerOrderEventventPublisher.Publish(changeEvent); var modifiedEntity = AbstractTypeFactory <CustomerOrderEntity> .TryCreateInstance() .FromModel(order, pkMap) as CustomerOrderEntity; if (originalEntity != null) { changeTracker.Attach(originalEntity); modifiedEntity.Patch(originalEntity); } else { repository.Add(modifiedEntity); } } CommitChanges(repository); pkMap.ResolvePrimaryKeys(); } //Save dynamic properties foreach (var order in orders) { DynamicPropertyService.SaveDynamicPropertyValues(order); } }