Carrito de compras

Un trabajo que tuve que hacer en la universidad fue un sitio de ventas de artículo electrónicos.

Una buena implementación de un carrito son las variables de sesión (siempre que no se quiera un carrito persistente obviamente).

Lo recomendable siempre en este tipo de sitios es tener un modelo de tres capas, separando diseño, lógica y acceso a datos.

Visto de este modo necesitaremos una clase que maneje la lógica de negocios del carrito.

Para acceder a las variables de sesión desde una clase se debe usar lo siguiente:

HttpContext.Current.Session["NombreClave"]


También un punto a no olvidar es que hay que establecer en el archivo global.asax que al inicio de cada sesión el carrito no tiene productos cargardos.
void Session_Start(object sender, EventArgs e)
{
Session.Clear();
Session["TotalArts"] = 0;
}


Bueno, sin más, les dejo el código de nuestra clase para la lógica del carrito de compras:
using System;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.SessionState;
using System.Collections.Generic;

///


/// Clase que maneja el carrito de compras
///


namespace BLL
{
public class ShoppingCart
{
public ShoppingCart()
{

}

///
/// Devuelve la cantidad de artículos que se van a comprar
///

public static int TotalActiveArts
{
get
{
int count = 0;

for (int i = 1; i <= Convert.ToInt32(System.Web.HttpContext.Current.Session["TotalArts"]); i++) { if (HttpContext.Current.Session["IdArt" + i.ToString()].ToString() != "0") count++; } return count; } } ///
/// Devuelve el total de los artículos guardados en sesión
///

private static int TotalArts
{
get
{
return Convert.ToInt32(System.Web.HttpContext.Current.Session["TotalArts"]);
}
}


public static void AddArtInCart(int categoryId, string name, string description, string urlImage, decimal price, int memberId)
{
HttpContext.Current.Session["TotalArts"] = TotalArts + 1;
HttpContext.Current.Session["CategoryIdArt" + TotalArts.ToString()] = categoryId;
HttpContext.Current.Session["NameArt" + TotalArts.ToString()] = name;
HttpContext.Current.Session["DescriptionArt" + TotalArts.ToString()] = description;
HttpContext.Current.Session["UrlImg" + TotalArts.ToString()] = urlImage;
HttpContext.Current.Session["PriceArt" + TotalArts.ToString()] = price;
HttpContext.Current.Session["IdArt" + TotalArts.ToString()] = 1;
}

///
/// Guarda cada uno de los artículos en la BD.
///

public static void Purchase()
{
for (int i = 1; i <= TotalArts; i++) { if (HttpContext.Current.Session["IdArt" + i.ToString()].ToString() != "0") { HttpContext.Current.Session["IdArt" + i.ToString()] = /*MÉTODO DE ALTA DE ARTÍCULO*/ ; } } } ///
/// Borra los artículos de la sesión. Devuelve un string con un mensaje al usuario.
///

///
public static string Payed()
{
string state = "Gracias";

try
{
for (int i = 1; i <= TotalArts; i++) { HttpContext.Current.Session.Remove("TotalArts"); HttpContext.Current.Session.Remove("CategoryIdArt"); HttpContext.Current.Session.Remove("NameArt"); HttpContext.Current.Session.Remove("DescriptionArt"); HttpContext.Current.Session.Remove("UrlImg"); HttpContext.Current.Session.Remove("PriceArt"); HttpContext.Current.Session.Remove("IdArt"); HttpContext.Current.Session.Remove("TotalArts"); } } catch { state = "Ha habido un problema con el registro de tu compra"; } return state; } ///
/// Devuelve la tabla con los artículos activos en la sesión
///

///
public static DataTable ShopTable()
{
DataTable dt = new DataTable();

DataColumn[] dcColumns = new DataColumn[3];

dt.Columns.Add("Id");
dt.Columns.Add("Artículo");
dt.Columns.Add("Precio");

dt.Columns.AddRange(dcColumns);

for (int i = 1; i <= TotalArts; i++) { if (HttpContext.Current.Session["IdArt" + i.ToString()].ToString() != "0") { DataRow dr = dt.NewRow(); dr["Id"] = HttpContext.Current.Session["IdArt" + i.ToString()].ToString(); dr["Artículo"] = HttpContext.Current.Session["TitleArt" + i.ToString()].ToString(); dr["Precio"] = HttpContext.Current.Session["PriceArt" + i.ToString()].ToString(); dt.Rows.Add(dr); } } return dt; } } }


Para los que estén interesados en un sitio de compras, pronto iré agregando más info útil, sobre todo enfocada a la BLL y la DAL.

Espero que les sirva!

Saludos!!

6 comentarios:

Martin dijo...

genial!!

me viene de dies capo!

saludos

NiCo-Tool dijo...

Lo que tu amigo necesitaba :D


Gracias Turroz!!!

Me viene de 10 lo de la DAL y la BLL


Saludos!

manuel dijo...

me biene justo para un trabajo en la facu

gracias!

Seba dijo...

Grande Pá como siempre.. le salvas la vida a varios!! Jaja


y de paso te felicito por el blogs!!...


Saludos de un PT + (Vos vas a entender jaja)

cobarto dijo...

Muy bueno el blog Marcos.. Chas Gracias por la info!!

Nos vemoss!!!

Wally... dijo...

grax por la info... lo necesitaba... me viene como anillo al dedo porq somos latinos!!!!!

Publicar un comentario