public void TestAddingSimpleItem()
        {
            using (var scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(1)))
            {
                IEquipmentRepository repository = Ninject.Current.Get <IEquipmentRepository>();

                var entity = Factory.CreateTemporaryEntity();

                var equipment = entity.Equipment;

                repository.AddEquipmentItem(equipment.ID, (int)ProductTypeEnum.Bread, 3, 25);
                repository.SaveChanges();
                var item = repository.GetEquipmentItem(equipment.ID, (int)ProductTypeEnum.Bread, 3);

                Assert.IsTrue(item != null);
                Assert.IsTrue(item.Quality == 3);
                Assert.IsTrue(item.ProductID == (int)ProductTypeEnum.Bread);

                var items = repository.GetEquipmentItems(equipment.ID, (int)ProductTypeEnum.Bread);

                Assert.IsTrue(items.Count == 1);
                Assert.IsTrue(items[0].Quality == 3);
                Assert.IsTrue(items[0].ProductID == (int)ProductTypeEnum.Bread);
            }
        }
Beispiel #2
0
        public void GiveItem(ProductTypeEnum productType, int amount, int quality, Equipment equipment)
        {
            equipmentRepository.AddEquipmentItem(equipment.ID,
                                                 (int)productType,
                                                 quality,
                                                 amount);

            ConditionalSaveChanges(equipmentRepository);
        }
        public void ProcessDayChange(int newDay)
        {
            var shops = companyRepository
                        .Where(c => c.CompanyTypeID == (int)CompanyTypeEnum.Shop)
                        .ToList();

            foreach (var shop in shops)
            {
                var item = shop.Entity.GetEquipmentItem(ProductTypeEnum.SellingPower, 1, productRepository);
                equipmentRepository.AddEquipmentItem(shop.Entity.EquipmentID.Value, item.ProductID, 1, 10);
            }

            equipmentRepository.SaveChanges();
        }
        public void RemoveAmountItem()
        {
            using (var scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(1)))
            {
                IEquipmentRepository repository = Ninject.Current.Get <IEquipmentRepository>();

                var entity = Factory.CreateTemporaryEntity();

                var equipment = entity.Equipment;

                repository.AddEquipmentItem(equipment.ID, (int)ProductTypeEnum.Bread, 3, 25);

                repository.RemoveEquipmentItem(equipment.ID, (int)ProductTypeEnum.Bread, 3, 20);

                var item = repository.GetEquipmentItem(equipment.ID, (int)ProductTypeEnum.Bread, 3);

                Assert.IsTrue(item.Amount == 5);

                var items = repository.GetEquipmentItems(equipment.ID, (int)ProductTypeEnum.Bread);

                Assert.IsTrue(items.Count == 1);
                Assert.IsTrue(items[0].Amount == 5);
            }
        }
Beispiel #5
0
        public MethodResult Buy(MarketOffer offer, Entity buyer, int amount, int walletID)
        {
            using (var scope = transactionScopeProvider.CreateTransactionScope())
            {
                var eqID         = buyer.EquipmentID.Value;
                var sellerEntity = offer.Company.Entity;
                var localCountry = sellerEntity.GetCurrentCountry();

                if (offer.GetProductType() == ProductTypeEnum.House)
                {
                    var houseService = DependencyResolver.Current.GetService <IHouseService>();
                    houseService.CreateHouseForCitizen(buyer.Citizen);
                }
                else
                {
                    equipmentRepository.AddEquipmentItem(eqID, offer.ProductID, offer.Quality, amount);
                }



                var cost = GetOfferCost(offer, buyer, amount);

                if (sellerEntity.Company.CompanyTypeID == (int)CompanyTypeEnum.Shop)
                {
                    equipmentRepository.RemoveEquipmentItem(sellerEntity.EquipmentID.Value, (int)ProductTypeEnum.SellingPower, 1, amount);
                }

                if (buyer.EntityTypeID == (int)EntityTypeEnum.Company)
                {
                    UseFuelInBuyProcess(eqID, cost);
                }

                var currency = Persistent.Currencies.First(c => c.ID == offer.CurrencyID);

                if (makeCompanyTransactionForBuy(offer, buyer, sellerEntity, cost, currency, amount, walletID) != TransactionResult.Success)
                {
                    return(MethodResult.Failure);
                }

                if (makeLocalCountryTransactionForBuy(offer, buyer, sellerEntity, localCountry, cost, currency, amount, walletID) != TransactionResult.Success)
                {
                    return(MethodResult.Failure);
                }

                //there is no vat because company is not paying vat (directly). Citizen is paying the vat.
                ICompanyFinance[] finances = new ICompanyFinance[] {
                    new SellRevenueFinance(cost.BasePrice, currency.ID),
                };

                companyFinanceSummaryService.AddFinances(offer.Company, finances);

                /*if (cost.ExportTax > 0)
                 * {
                 *  makeExportTransactionForBuy(offer, buyer, sellerEntity, cost, amount);
                 * }*/

                offer.Amount -= amount;
                if (offer.Amount <= 0)
                {
                    marketOfferRepository.Remove(offer.ID);
                }

                equipmentRepository.SaveChanges();
                scope.Complete();

                return(MethodResult.Success);
            }
        }