Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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()));
        }