protected virtual IInventoryItemStateCreated Map(ICreateInventoryItem c)
        {
            var stateEventId             = new InventoryItemEventId(c.InventoryItemId, c.Version);
            IInventoryItemStateCreated e = NewInventoryItemStateCreated(stateEventId);

            e.CommandId = c.CommandId;


            e.CreatedBy = (string)c.RequesterId;
            e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>();
            var version = c.Version;

            decimal onHandQuantity    = default(decimal);
            decimal inTransitQuantity = default(decimal);
            decimal reservedQuantity  = default(decimal);
            decimal occupiedQuantity  = default(decimal);
            decimal virtualQuantity   = default(decimal);

            foreach (ICreateInventoryItemEntry innerCommand in c.Entries)
            {
                ThrowOnInconsistentCommands(c, innerCommand);

                IInventoryItemEntryStateCreated innerEvent = MapCreate(innerCommand, c, version, _state);
                e.AddInventoryItemEntryEvent(innerEvent);
                onHandQuantity    = onHandQuantity + (innerEvent.OnHandQuantity != null ? innerEvent.OnHandQuantity.GetValueOrDefault() : default(decimal));
                inTransitQuantity = inTransitQuantity + (innerEvent.InTransitQuantity != null ? innerEvent.InTransitQuantity.GetValueOrDefault() : default(decimal));
                reservedQuantity  = reservedQuantity + (innerEvent.ReservedQuantity != null ? innerEvent.ReservedQuantity.GetValueOrDefault() : default(decimal));
                occupiedQuantity  = occupiedQuantity + (innerEvent.OccupiedQuantity != null ? innerEvent.OccupiedQuantity.GetValueOrDefault() : default(decimal));
                virtualQuantity   = virtualQuantity + (innerEvent.VirtualQuantity != null ? innerEvent.VirtualQuantity.GetValueOrDefault() : default(decimal));
            }

            e.OnHandQuantity    = onHandQuantity;
            e.InTransitQuantity = inTransitQuantity;
            e.ReservedQuantity  = reservedQuantity;
            e.OccupiedQuantity  = occupiedQuantity;
            e.VirtualQuantity   = virtualQuantity;

            return(e);
        }
 public virtual void When(ICreateInventoryItem c)
 {
     Update(c, ar => ar.Create(c));
 }
 void IInventoryItemApplicationService.When(ICreateInventoryItem c)
 {
     this.When((CreateInventoryItemDto)c);
 }
        public virtual void Create(ICreateInventoryItem c)
        {
            IInventoryItemStateCreated e = Map(c);

            Apply(e);
        }