コード例 #1
0
        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);
        }
コード例 #2
0
        public void CreateMonetaryOfferAssertTest()
        {
            var pr = new CreateMonetaryOfferParam()
            {
            };

            monetaryMarketService.CreateOffer(pr);
        }
コード例 #3
0
        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"));
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 private int getUsedCurrencyID(CreateMonetaryOfferParam param)
 {
     return(GetUsedCurrencyID(param.OfferType.Value, param.SellCurency.ID, param.BuyCurrency.ID));
 }