Alguien me dirá: pero si ya existen soluciones robustas de carritos de compras!! Yo diré: Sí pues, pero a veces sólo necesitamos algo muy ligero y simple y no las tremendas aplicaciones que ya existen.
Y como siempre, vamos a tratar de hacer las cosas simples.
Empecemos. Qué necesitamos en un carrito de compras? Primero que nada necesitamos productos o servicios que vender, entonces vamos a crear una clase llamada Product, entonces añadimos una clase llamada Product.vb y pegamos allí el sgte código:
Public Class Product Sub New() End Sub Sub New(ByVal ProductID As Integer, ByVal ProductName As String, ByVal Price As Decimal) _ProductID = ProductID _ProductName = ProductName _Price = Price End Sub Public Property ProductID() As Integer Public Property ProductName() As String Public Property Price() As Decimal End Class
Luego, voy a añadir una nueva clase llamada ProductOfTheShoppingCart (ProductOfTheShoppingCart.vb), la cual es parecida a la clase Product recién creada, pero ésta añade la propiedad Quantity (cantidad) y SubTotal… esta clase la usaremos para capturar los datos de cada producto que voy eligiendo para comprar:
Public Class ProductOfTheShoppingCart Inherits Product Sub New() End Sub Sub New(ByVal _ProductID As Integer, ByVal _ProductName As String, ByVal _Price As Decimal, ByVal Quantity As Integer) MyBase.New(_ProductID, _ProductName, _Price) _Quantity = Quantity End Sub Private _Quantity As Decimal = 1 Public Property Quantity() As Decimal Get Return _Quantity End Get Set(ByVal value As Decimal) _Quantity = value End Set End Property Private _SubTotal As Decimal = 0.0 Public ReadOnly Property SubTotal() As Decimal Get Return _Quantity * Price End Get End Property End Class
Luego que tenemos los productos, necesitamos algún mecanismo que me permita almacenar aquellos productos que voy eligiendo, asimismo el precio y la cantidad de lo que voy añadiendo a mi carrito de compras, pero también debería poder borrar aquellos productos que ya no quiero, y opcionalmente la opción de ordenar por precio. Para gestionar los productos que voy añadiendo a mi carrito añado una nueva clase llamada ShoppingCart.vb y pego el sgte código:
Public Class ShoppingCart Private Shared MyShoppingCart As String = "MyShoppingCart" Public Shared Function GetAll() As List(Of ProductOfTheShoppingCart) Dim sc As New List(Of ProductOfTheShoppingCart) 'recupero el carrito desde la variable Session If Not IsNothing(HttpContext.Current.Session(MyShoppingCart)) Then sc = DirectCast(HttpContext.Current.Session(MyShoppingCart), List(Of ProductOfTheShoppingCart)) End If Return sc End Function Public Shared Sub Remove(ByVal id As Integer) Dim sc As New List(Of ProductOfTheShoppingCart) 'recupero el carrito desde la variable Session If Not IsNothing(HttpContext.Current.Session(MyShoppingCart)) Then sc = DirectCast(HttpContext.Current.Session(MyShoppingCart), List(Of ProductOfTheShoppingCart)) End If 'quito el producto, si existe sc.Remove(sc.Find(Function(Prod As ProductOfTheShoppingCart) Prod.ProductID = id)) 'guardo el carrito en la sesión HttpContext.Current.Session(MyShoppingCart) = sc End Sub Public Shared Sub Sort() Dim sc As New List(Of ProductOfTheShoppingCart) 'recupero el carrito desde la variable Session If Not IsNothing(HttpContext.Current.Session(MyShoppingCart)) Then sc = DirectCast(HttpContext.Current.Session(MyShoppingCart), List(Of ProductOfTheShoppingCart)) End If 'ordena x precio sc.Sort(Function(p1 As ProductOfTheShoppingCart, p2 As ProductOfTheShoppingCart) p1.Price.CompareTo(p2.Price)) 'guarda el carrito en la sesión HttpContext.Current.Session(MyShoppingCart) = sc End Sub Public Shared Sub Add(ByVal Prod As ProductOfTheShoppingCart) Dim sc As New List(Of ProductOfTheShoppingCart) 'recupero el carrito desde la variable Session If Not IsNothing(HttpContext.Current.Session(MyShoppingCart)) Then sc = DirectCast(HttpContext.Current.Session(MyShoppingCart), List(Of ProductOfTheShoppingCart)) End If 'añade el producto sc.Add(Prod) 'guarda el carrito en la sesión HttpContext.Current.Session(MyShoppingCart) = sc End Sub Public Shared ReadOnly Property Total() As Decimal Get Dim sc As New List(Of ProductOfTheShoppingCart) Dim _Total As Decimal = 0.0 If Not IsNothing(HttpContext.Current.Session(MyShoppingCart)) Then sc = DirectCast(HttpContext.Current.Session(MyShoppingCart), List(Of ProductOfTheShoppingCart)) For Each Prod As ProductOfTheShoppingCart In sc _Total += Prod.SubTotal Next End If Return _Total End Get End Property End Class
Esto va para más, así que la seguimos en el sgte post ;)
No hay comentarios.:
Publicar un comentario