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 });
     }
 }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
            }
        }