using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.SessionState; using System.Data; using CodeCafe.Web; /// /// Summary description for clsBasket /// public struct BasketItem { public int ProductId; public string Product; public int Qty; public float Cost; public int Term; } public class clsBasket { public List Basket = new List(); /****************************************************************************************************/ /// /// Initializes a new instance of the class. /// public clsBasket() { } /****************************************************************************************************/ /// /// Adds to basket. /// /// The product id. /// The product. /// The qty. public void AddToBasket(int ProductId, string Product, int Qty, int Term) { LoadBasket(); bool HasItem = false; for (int i = 0; i < Basket.Count; i++) { if (Basket[i].ProductId == ProductId) { BasketItem update = Basket[i]; update.Qty = update.Qty + Qty; if (Term > update.Term) update.Term = Term; Basket[i] = update; HasItem = true; break; } } if (!HasItem) { clsProductInfo product = new clsProductInfo(); product.Load(ProductId); BasketItem item = new BasketItem(); item.Qty = Qty; item.Product = Product.Replace("*","").Trim(); item.ProductId = ProductId; item.Cost = product.pi_price; item.Term = Term; Basket.Add(item); } SaveBasket(); } /****************************************************************************************************/ /// /// Updated an item in the basket. /// /// The product id. /// The qty. /// The term. public void UpdateBasket(int ProductId, int Qty, int Term) { LoadBasket(); for (int i = 0; i < Basket.Count; i++) { if (Basket[i].ProductId == ProductId) { BasketItem update = Basket[i]; if (Qty > 0) { update.Qty = Qty; update.Term = Term; Basket[i] = update; } else Basket.Remove(update); break; } } SaveBasket(); } /****************************************************************************************************/ /// /// Updated an item in the basket. /// /// The product id. /// The qty. public void UpdateBasket(int ProductId, int Qty) { LoadBasket(); for (int i = 0; i < Basket.Count; i++) { if (Basket[i].ProductId == ProductId) { BasketItem update = Basket[i]; if (Qty > 0) { update.Qty = Qty; Basket[i] = update; } else Basket.Remove(update); break; } } SaveBasket(); } /****************************************************************************************************/ /// /// Removes an item from the basket. /// /// The product id. public void RemoveFromBasket(int ProductId) { LoadBasket(); for (int i = 0; i < Basket.Count; i++) { if (Basket[i].ProductId == ProductId) { Basket.Remove(Basket[i]); break; } } SaveBasket(); } /****************************************************************************************************/ /// /// Deletes the basket. /// public void DeleteBasket() { Basket.Clear(); SaveBasket(); } /****************************************************************************************************/ /// /// Saves the basket. /// private void SaveBasket() { if (System.Web.HttpContext.Current.Session["userBasket"] == null) { System.Web.HttpContext.Current.Session.Add("userBasket", Basket); } else System.Web.HttpContext.Current.Session["userBasket"] = Basket; } /****************************************************************************************************/ /// /// Loads the basket. /// public void LoadBasket() { if (System.Web.HttpContext.Current.Session["userBasket"] == null) { System.Web.HttpContext.Current.Session.Add("userBasket", Basket); } else Basket = (List)System.Web.HttpContext.Current.Session["userBasket"]; } /****************************************************************************************************/ /// /// Counts the basket items. /// /// public int CountItems() { int ItemCount = 0; LoadBasket(); foreach (BasketItem item in Basket) { ItemCount += item.Qty; } return ItemCount; } /****************************************************************************************************/ /// /// Renders the client email. /// /// public string RenderClientEmail() { string result = ""; LoadBasket(); float vat = Utils.StrToFloatDef(System.Configuration.ConfigurationManager.AppSettings.Get("VATAmount"), 1.14f); bool hasRecurring = false; //float total = 0; float totalOnceOff = 0; float totalRecurring = 0; if (Basket.Count > 0) { result = ""; result += ""; foreach (BasketItem item in Basket) { result += ""; result += ""; result += ""; result += ""; //total += (item.Cost * item.Qty); } string OrderPrefix = ""; if (hasRecurring) OrderPrefix = "Once-off "; if (totalOnceOff > 0) { result += ""; result += ""; result += ""; result += ""; result += ""; result += ""; } if (hasRecurring) { result += ""; result += ""; result += ""; result += ""; result += ""; result += ""; result += ""; } result += "
ProductQtyPriceTotal
" + item.Product ; if (item.Term > 1) { result += "
For a period of " + item.Term + " months"; hasRecurring = true; totalRecurring += (item.Cost * item.Qty); } else totalOnceOff += (item.Cost * item.Qty); result += "
" + item.Qty.ToString() + "R " + item.Cost.ToString("N2") + "R " + (item.Cost * item.Qty).ToString("N2") + "
" + OrderPrefix + "Sub Total (Excl. Vat):R " + totalOnceOff.ToString("N2") + "
Vat:R " + ((totalOnceOff * vat) - totalOnceOff).ToString("N2") + "
"; result += OrderPrefix + "Order Total (Incl. Vat):R " + (totalOnceOff * vat).ToString("N2") + "
 
Monthly Sub Total (Excl. Vat):R " + totalRecurring.ToString("N2") + "
Vat:R " + ((totalRecurring * vat) - totalRecurring).ToString("N2") + "
"; result += "Monthly Order Total (Incl. Vat):R " + (totalRecurring * vat).ToString("N2") + "
"; } return result; } /****************************************************************************************************/ /// /// Renders the blu wave email. /// /// public string RenderBluWaveEmail() { string result = RenderClientEmail(); //Any additional info here... return result; } /****************************************************************************************************/ /// /// Returns the basket as a data set. /// /// public DataSet AsDataSet() { LoadBasket(); DataSet result = new DataSet(); DataTable dt = result.Tables.Add("Brewed"); dt.Columns.Add("ProductId", Type.GetType("System.Int32")); dt.Columns.Add("Product", Type.GetType("System.String")); dt.Columns.Add("Qty", Type.GetType("System.Int32")); dt.Columns.Add("Term", Type.GetType("System.Int32")); dt.Columns.Add("Cost", Type.GetType("System.Decimal")); dt.Columns.Add("Total", Type.GetType("System.Decimal")); foreach (BasketItem item in Basket) { DataRow dr = dt.NewRow(); dr[0] = item.ProductId; dr[1] = item.Product; dr[2] = item.Qty; dr[3] = item.Term; dr[4] = item.Cost; dr[5] = item.Cost * item.Qty; dt.Rows.Add(dr); } return result; } /****************************************************************************************************/ /// /// Totals the basket. /// /// public static float TotalBasket() { float result = 0; clsBasket basket = new clsBasket(); basket.LoadBasket(); foreach (BasketItem item in basket.Basket) { result += (item.Cost * item.Qty); } return result; } /****************************************************************************************************/ /// /// Totals the Monthly basket. /// /// public static float TotalMonthlyBasket() { float result = 0; clsBasket basket = new clsBasket(); basket.LoadBasket(); foreach (BasketItem item in basket.Basket) { if (item.Term > 1) result += (item.Cost * item.Qty); } return result; } /****************************************************************************************************/ /// /// Totals the Once off basket. /// /// public static float TotalOnceOffBasket() { float result = 0; clsBasket basket = new clsBasket(); basket.LoadBasket(); foreach (BasketItem item in basket.Basket) { if (item.Term == 1) result += (item.Cost * item.Qty); } return result; } /****************************************************************************************************/ /// /// Totals the basket and Adds vat. /// /// public static float TotalBasketWithVat() { float result = TotalBasket(); float vat = Utils.StrToFloatDef(System.Configuration.ConfigurationManager.AppSettings.Get("VATAmount"), 1.14f); return result * vat; } /****************************************************************************************************/ /// /// Totals the basket and Adds vat. /// /// public static float TotalOnceOffWithVat() { float result = TotalOnceOffBasket(); float vat = Utils.StrToFloatDef(System.Configuration.ConfigurationManager.AppSettings.Get("VATAmount"), 1.14f); return result * vat; } /****************************************************************************************************/ /// /// Totals the basket and Adds vat. /// /// public static float TotalMonthlyBasketWithVat() { float result = TotalMonthlyBasket(); float vat = Utils.StrToFloatDef(System.Configuration.ConfigurationManager.AppSettings.Get("VATAmount"), 1.14f); return result * vat; } /****************************************************************************************************/ /// /// Determines whether the users basker [has a recurring item]. /// /// /// true if [has recurring item]; otherwise, false. /// public static bool HasRecurringItem() { bool result = false; clsBasket basket = new clsBasket(); basket.LoadBasket(); foreach (BasketItem item in basket.Basket) { if (item.Term > 1) { result = true; break; } } return result; } /****************************************************************************************************/ /// /// Determines whether the basket [has a once off item]. /// /// /// true if [has a once off item]; otherwise, false. /// public static bool HasOnceOffItem() { bool result = false; clsBasket basket = new clsBasket(); basket.LoadBasket(); foreach (BasketItem item in basket.Basket) { if (item.Term == 1) { result = true; break; } } return result; } /****************************************************************************************************/ /// /// Get the maximum term. /// /// public int GetMaxTerm() { int result = 1; LoadBasket(); foreach (BasketItem item in Basket) { if (item.Term > result) { result = item.Term; break; } } return result; } /****************************************************************************************************/ }