public void CreateMonetaryOfferTest() { CreateMonetaryOfferParam pr = new CreateMonetaryOfferParam() { Amount = 123, BuyCurrency = new Entities.Currency() { ID = 5 }, SellCurency = new Entities.Currency() { ID = 1 }, OfferType = MonetaryOfferTypeEnum.Buy, Rate = 1.3154, Seller = new Entities.Entity() { EntityID = 1 } }; var offer = monetaryMarketService.CreateOffer(pr); Assert.AreEqual(pr.Amount, offer.Amount); Assert.AreEqual(pr.BuyCurrency.ID, offer.BuyCurrencyID); Assert.AreEqual(pr.SellCurency.ID, offer.SellCurrencyID); Assert.AreEqual((int)pr.OfferType, offer.OfferTypeID); Assert.AreEqual(pr.Rate, (double)offer.Rate); Assert.AreEqual(pr.Seller.EntityID, offer.SellerID); }
public void CreateMonetaryOfferAssertTest() { var pr = new CreateMonetaryOfferParam() { }; monetaryMarketService.CreateOffer(pr); }
public ActionResult Create(AddMonetaryOfferViewModel vm) { if (ModelState.IsValid) { if (vm.Amount <= 0) { AddError("Amount cannot be lower or equal to 0!"); return(RedirectToAction("IndexSpecified", new { buyCurrencyID = vm.BuyCurrencyID, sellCurrencyID = vm.SellCurrencyID })); } if (vm.OfferType.HasValue == false) { AddError("You need to select offer type!"); return(RedirectToAction("IndexSpecified", new { buyCurrencyID = vm.BuyCurrencyID, sellCurrencyID = vm.SellCurrencyID })); } if (vm.Rate <= 0) { AddError("Rate cannot be lower or equal to 0!"); return(RedirectToAction("IndexSpecified", new { buyCurrencyID = vm.BuyCurrencyID, sellCurrencyID = vm.SellCurrencyID })); } var entity = SessionHelper.CurrentEntity; var cost = monetaryMarketService.GetMonetaryOfferCost(vm.SellCurrencyID.Value, vm.BuyCurrencyID.Value, vm.Amount, vm.Rate, (MonetaryOfferTypeEnum)vm.OfferType); if (walletService.HaveMoney(entity.WalletID, new Money(cost.Currency, (decimal)cost.Sum)) == false) { AddError("You do not have enough money!"); return(RedirectToAction("IndexSpecified", new { buyCurrencyID = vm.BuyCurrencyID, sellCurrencyID = vm.SellCurrencyID })); } var param = new CreateMonetaryOfferParam() { Amount = vm.Amount, BuyCurrency = Persistent.Currencies.GetById(vm.BuyCurrencyID.Value), SellCurency = Persistent.Currencies.GetById(vm.SellCurrencyID.Value), OfferType = (MonetaryOfferTypeEnum)vm.OfferType, Rate = vm.Rate, Seller = SessionHelper.CurrentEntity }; monetaryMarketService.CreateOffer(param); return(RedirectToAction("IndexSpecified", new { buyCurrencyID = vm.BuyCurrencyID, sellCurrencyID = vm.SellCurrencyID })); } return(RedirectToAction("Index")); }
public MonetaryOffer CreateOffer(CreateMonetaryOfferParam param) { using (var transaction = transactionScopeProvider.CreateTransactionScope()) { if (param.IsValid == false) { throw new ArgumentException("Invalid CreateMonetaryOfferParam"); } int usedCurrencyID = getUsedCurrencyID(param); var country = Persistent.Countries.FirstOrDefault(c => c.CurrencyID == usedCurrencyID); CountryPolicy policy = null; if (country != null) { policy = countryRepository.GetCountryPolicyById(country.ID); } var entity = param.Seller; var offer = new MonetaryOffer() { Amount = param.Amount.Value, BuyCurrencyID = param.BuyCurrency.ID, OfferTypeID = (int)param.OfferType, Rate = (decimal)param.Rate.Value, SellCurrencyID = param.SellCurency.ID, SellerID = param.Seller.EntityID, Tax = policy?.MonetaryTaxRate ?? 0, MinimumTax = policy?.MinimumMonetaryTax ?? 0, TaxReservedMoney = (decimal)CalculateTax(param.Amount.Value * (param.OfferType == MonetaryOfferTypeEnum.Buy ? param.Rate.Value : 1), ((double?)policy?.MonetaryTaxRate) ?? 0.0, ((double?)policy?.MinimumMonetaryTax) ?? 0.0), OfferReservedMoney = (decimal)(param.Amount.Value * (param.OfferType == MonetaryOfferTypeEnum.Buy ? param.Rate.Value : 1)), AmountSold = 0, ValueOfSold = 0 }; ReserveMoneyFromEntity(entity, offer); monetaryOfferRepository.Add(offer); tryToBuySell(offer); monetaryOfferRepository.SaveChanges(); transaction.Complete(); return(offer); } }
private int getUsedCurrencyID(CreateMonetaryOfferParam param) { return(GetUsedCurrencyID(param.OfferType.Value, param.SellCurency.ID, param.BuyCurrency.ID)); }