Пример #1
0
        /// <summary>
        /// Saves a single <see cref="IOrder"/>
        /// </summary>
        /// <param name="order">The <see cref="IOrder"/> to save</param>
        /// <param name="raiseEvents">Optional boolean indicating whether or not to raise events</param>
        public void Save(IOrder order, bool raiseEvents = true)
        {
            if (!((Order)order).HasIdentity && order.OrderNumber <= 0)
            {
                // We have to generate a new 'unique' order number off the configurable value
                ((Order)order).OrderNumber = _storeSettingService.GetNextOrderNumber();
            }

            var includesStatusChange = ((Order)order).IsPropertyDirty("OrderStatus") &&
                                       ((Order)order).HasIdentity;

            if (raiseEvents)
            {
                if (Saving.IsRaisedEventCancelled(new SaveEventArgs <IOrder>(order), this))
                {
                    ((Order)order).WasCancelled = true;
                    return;
                }

                if (includesStatusChange)
                {
                    StatusChanging.RaiseEvent(new StatusChangeEventArgs <IOrder>(order), this);
                }
            }

            using (new WriteLock(Locker))
            {
                var uow = UowProvider.GetUnitOfWork();
                using (var repository = RepositoryFactory.CreateOrderRepository(uow))
                {
                    repository.AddOrUpdate(order);
                    uow.Commit();
                }
            }

            if (!raiseEvents)
            {
                return;
            }

            Saved.RaiseEvent(new SaveEventArgs <IOrder>(order), this);
            if (includesStatusChange)
            {
                StatusChanged.RaiseEvent(new StatusChangeEventArgs <IOrder>(order), this);
            }
        }
Пример #2
0
        public void Can_Get_The_Next_OrderNumber()
        {
            var number = _settingsService.GetNextOrderNumber(1);

            Assert.Greater(number, 1);
        }