public virtual string CanBuySnack(int positon) { SnackPile snackPile = GetSnackPile(positon); if (snackPile.Quantity == 0) { return("The snack pile is empty"); } if (MoneyInTransaction < snackPile.Price) { return("Not enough money"); } if (!MoneyInside.CanAllocate(MoneyInTransaction - snackPile.Price)) { return("Not enough change"); } return(string.Empty); }
public void BuySnack(int position) { if (!CanBuySnak(position)) { throw new CannotBuySnakException(); } var slot = GetSlot(position); slot.SubtractOneSnak(); var allocatedCharge = MoneyInside.Allocate( MoneyInTransaction.Amount - slot.GetItemPrice()); MoneyInside -= allocatedCharge; MoneyInside += MoneyInTransaction; SetToZeroAmountInTransaction(); AddDomainEvent(new SnackBoughtDomainEvent( slot.SnackType.Id, slot.GetItemPrice())); }
public virtual void BuySnack(int position) { var slot = GetSlot(position); if (slot.SnackPile.Price > MoneyInTransaction) { throw new InvalidOperationException(); } var change = MoneyInTransaction - slot.SnackPile.Price; var allocate = MoneyInside.Allocate(change); if (allocate.Amount < change) { throw new InvalidOperationException(); } slot.SnackPile = slot.SnackPile.SubtractOne(); MoneyInside -= allocate; MoneyInTransaction = 0; }
public virtual void BuySnack(int position) { if (CanBuySnack(position) != string.Empty) { throw new InvalidOperationException(); } Slot slot = GetSlot(position); // slot.Quantity--; //if (slot.SnackPile.Price > MoneyInTransaction) now we don't need these checks // throw new InvalidOperationException(); slot.SnackPile = slot.SnackPile.SubstractOne(); // MoneyInside += MoneyInTransaction; // MoneyInTransaction = None; Money change = MoneyInside.Allocate(MoneyInTransaction - slot.SnackPile.Price); //if (change.Amount < MoneyInTransaction - slot.SnackPile.Price) now we don't need these checks // throw new InvalidOperationException(); MoneyInside -= change; MoneyInTransaction = 0; }
public bool CanBuySnak(int position) { var slot = GetSlot(position); if (slot.GetItemsQuantity() < 0) { return(false); } if (MoneyInTransaction.Amount < slot.GetItemPrice()) { return(false); } var chargeToAllocate = MoneyInTransaction.Amount - slot.GetItemPrice(); if (!MoneyInside.CanAllocate(chargeToAllocate)) { return(false); } return(true); }
public void BuySnack(int position) { // Don't allow purchase if not enough money inserted if (GetSlot(position).SnackPile.Price > this.AmountInTransaction) { throw new InvalidOperationException(); } Slot slot = GetSlot(position); slot.SnackPile = slot.SnackPile.SubtractOne(); //find the amount of change to return Money change = MoneyInside.AllocateToReturn(AmountInTransaction - slot.SnackPile.Price); if (change.Amount < AmountInTransaction - slot.SnackPile.Price) { throw new CannotMakeChangeException(); } MoneyInside -= change; AmountInTransaction = 0; }
public virtual bool CanWithdrawal(decimal amount) { ValidationMessages.Clear(); if (amount <= 0m) { ValidationMessages.Add(Constants.InvalidAmount); return(false); } if (amount > MoneyInside.Amount) { ValidationMessages.Add(Constants.NotEnoughChange); return(false); } if (!MoneyInside.CanAllocate(amount)) { ValidationMessages.Add(Constants.NotEnoughChange); return(false); } return(true); }
public void BuySnack(int position) { var slot = GetSlot(position); if (slot.SnackPile.Price > MoneyInTransaction) { throw new InvalidOperationException(); } slot.SnackPile = slot.SnackPile.SubtractOne(); var change = MoneyInside.Allocate(MoneyInTransaction - slot.SnackPile.Price); if (change.Amount < MoneyInTransaction - slot.SnackPile.Price) { throw new InvalidOperationException(); } MoneyInside -= change; MoneyInTransaction = 0; AddDomainEvent(new SnackBought(slot.Position, slot.SnackPile.Quantity, slot.SnackPile.Snack.Name)); }
public virtual void BuySnack(int position) { if (CanBuySnack(position) != string.Empty) { throw new InvalidOperationException(); } //Slots.Single(x => x.Position == position).Quantity--; var slot = GetSlot(position); //if (slot.SnackPile.Price > MoneyInTransaction.Amount) throw new InvalidOperationException(); //if (slot.SnackPile.Price > MoneyInTransaction) throw new InvalidOperationException(); slot.SnackPile = slot.SnackPile.SubtractOne(); //No longer needed the InsertMoney take care of it //MoneyInside += MoneyInTransaction; //MoneyInTransaction = None; Money change = MoneyInside.Allocate(MoneyInTransaction - slot.SnackPile.Price); //if (change.Amount < MoneyInTransaction - slot.SnackPile.Price) throw new InvalidOperationException(); MoneyInside -= change; MoneyInTransaction = 0; }
public virtual void ReturnMoney() { MoneyInside -= MoneyInside.Allocate(MoneyInTransaction); MoneyInTransaction = 0; }