using System.Collections.Generic; using Castle.ActiveRecord; namespace ECOEarth.Web.Domain { [ActiveRecord] public class OrderBasket : ActiveRecordBase { private IList orderItems = new List(); private int orderBasketId; public double shippingTotal; public virtual double ShippingTotal { get { return shippingTotal; } set { shippingTotal = value; } } [PrimaryKey] public virtual int OrderBasketId { get { return orderBasketId; } set { orderBasketId = value; } } [HasMany(typeof(OrderItem), Table = "OrderItems", ColumnKey = "OrderBasketId",Cascade=ManyRelationCascadeEnum.SaveUpdate)] public virtual IList OrderItems { get { return orderItems; } set { orderItems = value; } } public virtual double TotalProductPrice { get { double cost = 0; foreach (OrderItem oItem in OrderItems) cost += oItem.Price; return cost; } } public virtual double TotalVATPrice { get { double cost = 0; foreach (OrderItem oItem in OrderItems) cost += oItem.VAT; cost += (TotalShippingPrice * 0.175d); return cost; } } public virtual double TotalShippingPrice { get { double shippingCost = 0; foreach (OrderItem oItem in OrderItems) shippingCost += oItem.Shipping; return shippingCost; } } public void AddItem(OrderItem product) { // If product already exists in cart just increase quanity. foreach (OrderItem item in OrderItems) { // If available products expands beyond a few, change this logic // so not evaluate against instance type but encapsulated product type. if(item.GetType().Equals(product.GetType())) { item.ChangeQuantity(item.Quantity + product.Quantity); return; } } this.OrderItems.Add(product); } } }