public override void Delete() { if (IsDeleted) { throw new InvalidOperationException("Order item is already deleted."); } var deletedMovementItem = CustomerDeposit.MakeCustomerDeposit(this, Amount, DepositMovement.In); Deposits.Add(deletedMovementItem); CustomerOrder.Customer.UpdateTotalSpent(-Amount); base.Delete(); }
public void ChangeAmount(float amount) { if (IsDeleted) { throw new InvalidOperationException("Order item is deleted."); } if (amount <= 0) { throw new ArgumentException("Amount must be larger than 0."); } if (Amount == amount) { throw new ArgumentException("Amount can't be the same as before."); } if (Product.Amount < amount) { throw new ArgumentException("Amount larger than product deposit."); } var difference = amount - Amount; var movementType = DepositMovement.Out; if (difference < 0) { difference = -difference; movementType = DepositMovement.In; } Amount = amount; var oldValue = TotalValue; TotalValue = Price * Amount; var deposit = CustomerDeposit.MakeCustomerDeposit(this, difference, movementType); Deposits.Add(deposit); difference = TotalValue - oldValue; CustomerOrder.UpdateTotalValue(difference); }
public static CustomerOrderItem MakeCustomerOrderItem(CustomerOrder customerOrder, Product product, float amount) { if (customerOrder == null) { throw new ArgumentNullException("Customer order must have a value."); } if (product == null) { throw new ArgumentNullException("Product must have a value."); } if (amount <= 0) { throw new ArgumentException("Amount must be larger than 0."); } if (product.Amount < amount) { throw new ArgumentException("Amount larger than product deposit."); } var customerOrderItem = new CustomerOrderItem(); customerOrderItem.CustomerOrderId = customerOrder.Id; customerOrderItem.CustomerOrder = customerOrder; customerOrderItem.ProductId = product.Id; customerOrderItem.Product = product; customerOrderItem.Amount = amount; customerOrderItem.Price = product.Price; customerOrderItem.TotalValue = customerOrderItem.Price * customerOrderItem.Amount; customerOrderItem.Deposits = new List <CustomerDeposit>(); customerOrder.UpdateTotalValue(customerOrderItem.TotalValue); var deposit = CustomerDeposit.MakeCustomerDeposit(customerOrderItem, amount, DepositMovement.Out); customerOrderItem.Deposits.Add(deposit); return(customerOrderItem); }