95 lines
2.7 KiB
C#
95 lines
2.7 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using WebVentaCoche.DataBase;
|
|
using WebVentaCoche.Helpers;
|
|
using WebVentaCoche.Models;
|
|
using System.Linq;
|
|
|
|
namespace WebVentaCoche.Controllers
|
|
{
|
|
public class CartController : Controller
|
|
{
|
|
private readonly ApplicationDbContext _context;
|
|
|
|
public CartController(ApplicationDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
// GET: /Cart/Index
|
|
// Muestra la lista de productos del carrito y el total.
|
|
public IActionResult Index()
|
|
{
|
|
// Diccionario de IDs -> Cantidades desde sesión (o cualquier fuente)
|
|
var itemsDict = CartSessionHelper.GetCartItems(HttpContext.Session);
|
|
|
|
// Crear tu ViewModel
|
|
var viewModel = new CartViewModel();
|
|
|
|
foreach (var kvp in itemsDict)
|
|
{
|
|
var productId = kvp.Key;
|
|
var amount = kvp.Value;
|
|
var product = _context.Products.Find(productId);
|
|
|
|
if (product != null)
|
|
{
|
|
viewModel.Products.Add(new CartProduct
|
|
{
|
|
Product = product,
|
|
Amount = amount
|
|
});
|
|
}
|
|
}
|
|
|
|
return View(viewModel);
|
|
}
|
|
|
|
// POST: /Cart/AddProductToCart
|
|
// Añade el producto al carrito y devuelve un JSON con el nuevo contador
|
|
[HttpPost]
|
|
public IActionResult AddProductToCart(int id)
|
|
{
|
|
var product = _context.Products.Find(id);
|
|
if (product == null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
// Añade a la sesión
|
|
CartSessionHelper.AddToCart(HttpContext.Session, id);
|
|
|
|
// Devuelve la cuenta actualizada para actualizar el badge
|
|
var productIds = CartSessionHelper.GetCartItems(HttpContext.Session);
|
|
int count = productIds.Count;
|
|
|
|
return Json(new { success = true, cartCount = count });
|
|
}
|
|
|
|
// POST: /Cart/Remove
|
|
// Elimina un producto según su ID
|
|
[HttpPost]
|
|
public IActionResult Remove(int id)
|
|
{
|
|
CartSessionHelper.RemoveFromCart(HttpContext.Session, id);
|
|
return RedirectToAction("Index");
|
|
}
|
|
|
|
// POST: /Cart/Clear
|
|
// Vacía todo el carrito (la sesión)
|
|
[HttpPost]
|
|
public IActionResult Clear()
|
|
{
|
|
CartSessionHelper.ClearCart(HttpContext.Session);
|
|
return RedirectToAction("Index");
|
|
}
|
|
|
|
// GET: /Cart/Checkout
|
|
// (Opcional) Muestra un formulario o datos para la compra/pago.
|
|
public IActionResult Checkout()
|
|
{
|
|
return View();
|
|
}
|
|
}
|
|
}
|