How to add / remove items inside the Cart

0

I would like to make a simple Cart, where I used as a basis some explanations here inside the same Stack. Here is my Shopping 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 are 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 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 on my Menu and it enters this Cart View. Or would it be a View that adds the items to the Cart because it's an Action? Sorry for ignorance, I'm really not good with programming. My Menu is a Products List.

    
asked by anonymous 18.10.2016 / 03:46

1 answer

1

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

  

"/ Cart / AddChoose /

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

    
24.10.2016 / 10:09