/// <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); } }
public void Can_Get_The_Next_OrderNumber() { var number = _settingsService.GetNextOrderNumber(1); Assert.Greater(number, 1); }