public async Task <List <InventoryItemDetails> > CreateItems(List <InventoryItemDetails> items, User activeDev) { var newTypeItems = items .Where(iid => iid.Item.ItemTypeId <= 0); var newTypes = newTypeItems .GroupBy(item => new { item.ItemType.Name, item.ItemType.Description }) .Select(group => group.First().ItemType); List <int> newItemIds = new List <int>(items.Count); using (var trans = TransactionScopeFactory.Create()) { List <int> newTypeIds = new List <int>(newTypes.Count()); foreach (var type in newTypes) { int newTypeId = await ConfigRepo.CreateItemType(type); type.Id = newTypeId; newTypeIds.Add(newTypeId); } foreach (var item in newTypeItems) { item.Item.ItemTypeId = item.ItemType.Id; } foreach (var item in items) { newItemIds.AddRange(await InventoryRepo.CreateItems(item.Item.ItemTypeId, null)); } trans.Complete(); } var iids = (await InventoryRepo.RetrieveFullItemsByIds(newItemIds.ToArray())).AsList(); return(iids); }
private async Task <IEnumerable <ItemResult> > transform(InventoryItemDetails item, ItemEffect effect, User activeUser) { TransformEffectArgument arg = (TransformEffectArgument)effect.EffectParameters; List <ItemResult> response = new List <ItemResult>(); if (arg.To != null) { foreach (var itemToCreate in arg.To) { var newItemIds = await InventoryRepo.CreateItems(itemToCreate.ItemTypeId, activeUser.Id, itemToCreate.Quantity); var itemsDetails = await InventoryRepo.RetrieveFullItemsByIds(newItemIds.ToArray()); foreach (InventoryItemDetails itemDetails in itemsDetails) { response.Add(new ItemResult { ItemId = itemDetails.Item.Id, Deleted = false, NewItem = itemDetails }); } } } if (arg.ToRandom?.Count() > 0) { var totalGenerated = 0; foreach (var itemToCreate in arg.ToRandom) { int generationQty = Math.Max(Utilities.Extensions.Random.Next(itemToCreate.MinimumQuantity ?? 0, itemToCreate.MaximumQuantity ?? 0), 1); if (arg.RandomTotalMaximumQuantity.HasValue) { generationQty = Math.Min(arg.RandomTotalMaximumQuantity.Value - (totalGenerated + generationQty), generationQty); } if (generationQty <= 0) { break; } totalGenerated += generationQty; var newItemIds = await InventoryRepo.CreateItems(itemToCreate.ItemTypeId, activeUser.Id, generationQty); var itemsDetails = await InventoryRepo.RetrieveFullItemsByIds(newItemIds.ToArray()); foreach (InventoryItemDetails itemDetails in itemsDetails) { response.Add(new ItemResult { ItemId = itemDetails.Item.Id, Deleted = false, NewItem = itemDetails }); } } } if (arg.DeleteOnUse) { await InventoryRepo.DestroyItem(item.Item.Id, activeUser.Id); response.Add(new ItemResult { ItemId = item.Item.Id, Deleted = true }); } return(response); }
public async Task <IEnumerable <InventoryItemDetails> > GenerateItems(int itemTypeConfigId, int?ownerId, int quantity) { var itemIds = await InventoryRepo.CreateItems(itemTypeConfigId, ownerId, quantity); return(await InventoryRepo.RetrieveFullItemsByIds(itemIds.ToArray())); }