protected void ThrowOnWrongEvent(IInventoryItemRequirementEntryEvent e) { var id = new System.Text.StringBuilder(); id.Append("[").Append("InventoryItemRequirementEntry|"); var stateEntityIdInventoryItemRequirementId = (this as IGlobalIdentity <InventoryItemRequirementEntryId>).GlobalId.InventoryItemRequirementId; var eventEntityIdInventoryItemRequirementId = e.InventoryItemRequirementEntryEventId.InventoryItemRequirementId; if (stateEntityIdInventoryItemRequirementId != eventEntityIdInventoryItemRequirementId) { throw DomainError.Named("mutateWrongEntity", "Entity Id InventoryItemRequirementId {0} in state but entity id InventoryItemRequirementId {1} in event", stateEntityIdInventoryItemRequirementId, eventEntityIdInventoryItemRequirementId); } id.Append(stateEntityIdInventoryItemRequirementId).Append(","); var stateEntityIdEntrySeqId = (this as IGlobalIdentity <InventoryItemRequirementEntryId>).GlobalId.EntrySeqId; var eventEntityIdEntrySeqId = e.InventoryItemRequirementEntryEventId.EntrySeqId; if (stateEntityIdEntrySeqId != eventEntityIdEntrySeqId) { throw DomainError.Named("mutateWrongEntity", "Entity Id EntrySeqId {0} in state but entity id EntrySeqId {1} in event", stateEntityIdEntrySeqId, eventEntityIdEntrySeqId); } id.Append(stateEntityIdEntrySeqId).Append(","); id.Append("]"); if (ForReapplying) { return; } var stateVersion = this.Version; var stateEvent = e is IInventoryItemRequirementEntryStateEvent ? (IInventoryItemRequirementEntryStateEvent)e : null; if (e == null) { return; } stateEvent.Version = stateVersion; //var stateEventStateVersion = stateEvent.Version; //if (InventoryItemRequirementEntryState.VersionZero == stateEventStateVersion) //{ // stateEventStateVersion = stateEvent.Version = stateVersion; //} //if (stateVersion != stateEventStateVersion) //{ // throw OptimisticConcurrencyException.Create(stateVersion, stateEventStateVersion, id.ToString()); //} }
protected virtual IInventoryItemRequirementStateMergePatched Map(IMergePatchInventoryItemRequirement c) { var stateEventId = new InventoryItemRequirementEventId(c.InventoryItemRequirementId, c.Version); IInventoryItemRequirementStateMergePatched e = NewInventoryItemRequirementStateMergePatched(stateEventId); e.CommandId = c.CommandId; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); var version = c.Version; decimal quantity = _state.Quantity; foreach (IInventoryItemRequirementEntryCommand innerCommand in c.InventoryItemRequirementEntryCommands) { ThrowOnInconsistentCommands(c, innerCommand); IInventoryItemRequirementEntryEvent innerEvent = Map(innerCommand, c, version, _state); e.AddInventoryItemRequirementEntryEvent(innerEvent); // //////////////// if (!(innerEvent is IInventoryItemRequirementEntryStateCreated)) { continue; } var entryCreated = (IInventoryItemRequirementEntryStateCreated)innerEvent; quantity = quantity + (entryCreated.Quantity != null ? entryCreated.Quantity.GetValueOrDefault() : default(decimal)); // //////////////// } e.Quantity = quantity; return(e); }
public virtual void AddInventoryItemRequirementEntryEvent(IInventoryItemRequirementEntryEvent e) { ThrowOnInconsistentEventIds(e); this._inventoryItemRequirementEntryEvents[e.InventoryItemRequirementEntryEventId] = e; }
public static void ThrowOnInconsistentEventIds(IInventoryItemRequirementEvent oe, IInventoryItemRequirementEntryEvent e) { if (!oe.InventoryItemRequirementEventId.InventoryItemRequirementId.Equals(e.InventoryItemRequirementEntryEventId.InventoryItemRequirementId)) { throw DomainError.Named("inconsistentEventIds", "Outer Id InventoryItemRequirementId {0} but inner id InventoryItemRequirementId {1}", oe.InventoryItemRequirementEventId.InventoryItemRequirementId, e.InventoryItemRequirementEntryEventId.InventoryItemRequirementId); } }
protected void ThrowOnInconsistentEventIds(IInventoryItemRequirementEntryEvent e) { ThrowOnInconsistentEventIds(this, e); }
public void AddInventoryItemRequirementEntryEvent(IInventoryItemRequirementEntryEvent e) { _innerStateEvents.Add((InventoryItemRequirementEntryStateCreatedOrMergePatchedOrRemovedDto)e); }
void IInventoryItemRequirementStateMergePatched.AddInventoryItemRequirementEntryEvent(IInventoryItemRequirementEntryEvent e) { this._inventoryItemRequirementEntryEvents.AddInventoryItemRequirementEntryEvent(e); }
public virtual InventoryItemRequirementEntryStateCreatedOrMergePatchedOrRemovedDto ToInventoryItemRequirementEntryStateEventDto(IInventoryItemRequirementEntryEvent stateEvent) { if (stateEvent.EventType == StateEventType.Created) { var e = (IInventoryItemRequirementEntryStateCreated)stateEvent; return(ToInventoryItemRequirementEntryStateCreatedDto(e)); } throw DomainError.Named("invalidEventType", String.Format("Invalid state event type: {0}", stateEvent.EventType)); }