How to add/remove items within the Cart

Asked

Viewed 472 times

0

I would like to make a simple Cart, where I used as a base some explanations here inside the same Stack. It follows below my Cart Controller:

public class CarrinhoController : Controller
{
    private Context db = new Context();

    public ActionResult AdicionarCarrinho(int id)
    {

        Pedido carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();

        var produto = db.Produtos.Find(id);

        if (produto != null)
        {
            var itemPedido = new ItemPedido();
            itemPedido.ItemPedidoID = Guid.NewGuid();
            itemPedido.Produto = produto;
            itemPedido.Qtd = 1;

            if (carrinho.ItensPedido.FirstOrDefault(p => p.ProdutoID == produto.ProdutoID) != null)
            {
                carrinho.ItensPedido.FirstOrDefault(p => p.ProdutoID == produto.ProdutoID).Qtd += 1;
            }

            else
            {
                carrinho.ItensPedido.Add(itemPedido);
            }
            carrinho.ValorTotal = carrinho.ItensPedido.Select(i => i.Produto).Sum(d => d.Valor);

            Session["Carrinho"] = carrinho;
        }

        return RedirectToAction("Carrinho");
    }

    public ActionResult Carrinho()
    {
        Pedido carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();

        return View(carrinho);
    }

    public ActionResult ExcluirItem(Guid id)
    {
        var carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
        var itemExclusao = carrinho.ItensPedido.FirstOrDefault(i => i.ItemPedidoID == id);
        carrinho.ItensPedido.Remove(itemExclusao);

        Session["Carrinho"] = carrinho;
        return RedirectToAction("Carrinho");
    }

    public ActionResult SalvarCarrinho()
    {
        var carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();

        db.Pedidos.Add(carrinho);
        db.SaveChanges();

        return RedirectToAction("Carrinho");
    }
}

Below follow my classes being used:

public class ItemPedido
{
    [Key]
    public Guid ItemPedidoID { get; set; }

    public int ProdutoID { get; set; }
    public virtual Produto Produto { get; set; }

    public int PedidoID { get; set; }
    public virtual Pedido Pedido { get; set; }

    public int Qtd { get; set; }


}
public class Produto
{
    [Key]
    public int ProdutoID { get; set; }

    [Required(ErrorMessage = "Preencha o nome do produto")]
    [DisplayName("Produto")]
    [StringLength(20, MinimumLength = 5, ErrorMessage = "O nome do produto deve ter entre 5 a 20 caracteres")]
    public string Nome { get; set; }

    [Required(ErrorMessage = "Preencha a descrição do produto")]
    [DisplayName("Descrição")]
    [StringLength(50, MinimumLength = 5, ErrorMessage = "O nome do produto deve ter entre 5 a 50 caracteres")]
    public string Descricao { get; set; }

    [DisplayName("Foto")]
    public string Foto { get; set; }

    [Required(ErrorMessage = "Preencha o valor do produto")]
    [DisplayName("Valor R$")]
    public decimal Valor { get; set; }

    //relacionamentos
    public int RestauranteID { get; set; }
    public virtual Restaurante Restaurante { get; set; }

    public virtual ICollection<ItemPedido> ItensPedido { get; set; }
}

public class Pedido
{
    public int PedidoID { get; set; }

    public DateTime DtPedido { get; set; }

    public int UsuarioID { get; set; }
    public virtual Usuario Usuario { get; set; }

    public Decimal Valor { get; set; }

    public Decimal ValorTotal { get; set; }

    public virtual ICollection<ItemPedido> ItensPedido { get; set; }
}

Below is the only View I made, based on the previous explanations:

 @model FoodInTime.Models.Pedido
 @{
 ViewBag.Title = "Carrinho";
 Layout = "~/Views/Shared/_LayoutCliente.cshtml";
}

<h2>Carrinho</h2>

@foreach (var item in Model.ItensPedido)
{
<li>
    @item.ProdutoID - @item.Produto.Nome

    <input type="text" value="@item.Qtd" readonly="readonly" />
    <input type="submit" value="alterar" />
    @Html.ActionLink("Remover", "ExcluirItem", new { id = item.ProdutoID }, null)
</li>
}

@Html.ActionLink("Retornar", "Cardapio", "Restaurantes")

What I want, is to know where I click to add a Product that is in my Menu and it enter this Cart View. Or would it be a View that adds the items in the Cart, because it is an Action? Sorry for the ignorance, I’m really not good with programming. My Menu is a Product List.

1 answer

1

In your menu you should create a link, or post to

"~/Cart/Additionsmall/@idProduct".

According to your code, this will add the item in the cart (if it doesn’t exist) or increase the amount of this item in the cart (if it already exists) and then redirect the user to the cart page.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.