public JsonResult JsGetItens(int idProduto)
        {
            try
            {
                LogBLL.Insert(new LogDado("JsGetItens", "ProdutoMaterial", _idUsuario));
                using (var db = new Context())
                {
                    var _bll = new BLL.ProdutoMaterialBLL(db, _idUsuario);
                    var list = _bll.Find(u => u.idProduto == idProduto, u => u.Material).ToList();
                    
                    var result = list.Select(s => new
                    {
                        s.idMaterial,
                        s.idProduto,
                        s.quantidade,
                        s.margemGanho,
                        s.valor,
                        s.Material.nome,
                        s.idProdutoMaterial,
                        totalCusto = s.valor * s.quantidade,
                        totalGanho = ((s.margemGanho / 100) * (s.valor * s.quantidade)) + (s.valor * s.quantidade),
                        totalLiquido = (((s.margemGanho / 100) * (s.valor * s.quantidade)) + (s.valor * s.quantidade)) - (s.valor * s.quantidade)
                    });

                    return Json(new RP.Util.Class.JsonCollection { result = result, count = result.Count() }, JsonRequestBehavior.AllowGet);
                }
            }

            catch (Exception ex)
            {
                Response.StatusCode = 500;
                return Json(RP.Util.Exception.Message.Get(ex), JsonRequestBehavior.AllowGet);
            }
        }
        public JsonResult JsCreate(ProdutoMaterial model)
        {
            try
            {
                LogBLL.Insert(new LogDado("JsCreate", "ProdutoMaterial", _idUsuario));
                using (var db = new Context())
                {
                    using (var trans = new RP.DataAccess.RPTransactionScope(db))
                    {
                        var _bll = new BLL.ProdutoMaterialBLL(db, _idUsuario);
                        var _produtoBLL = new BLL.ProdutoBLL(db, _idUsuario);

                        _bll.Insert(model);
                        _bll.SaveChanges();
                        trans.Complete();

                        decimal totalCusto = model.quantidade * model.valor;
                        decimal totalGanho = ((model.margemGanho / 100) * totalCusto) + totalCusto;
                        decimal totalLiquido = totalGanho - totalCusto;
                        var result = new
                        {
                            idMaterial = model.idMaterial,
                            idProduto = model.idProduto,
                            model.quantidade,
                            model.margemGanho,
                            model.valor,
                            model.Material.nome,
                            model.idProdutoMaterial,
                            totalCusto = totalCusto,
                            totalGanho = totalGanho,
                            totalLiquido = totalLiquido
                        };

                        return Json(new { model = result }, JsonRequestBehavior.AllowGet);
                    }
                }
            }

            catch (Exception ex)
            {
                Response.StatusCode = 500;
                return Json(RP.Util.Exception.Message.Get(ex), JsonRequestBehavior.AllowGet);
            }
        }
        public JsonResult JsDelete(int idProdutoMaterial)
        {
            try
            {
                LogBLL.Insert(new LogDado("JsDelete", "ProdutoMaterial", _idUsuario));
                using (var db = new Context())
                {
                    using (var trans = new RP.DataAccess.RPTransactionScope(db))
                    {
                        var _bll = new BLL.ProdutoMaterialBLL(db, _idUsuario);

                        _bll.Delete(u => u.idProdutoMaterial == idProdutoMaterial);
                        _bll.SaveChanges();

                        trans.Complete();

                        return Json(new { msg = "Item removido com sucesso!" }, JsonRequestBehavior.AllowGet);
                    }
                }
            }

            catch (Exception ex)
            {
                Response.StatusCode = 500;
                return Json(RP.Util.Exception.Message.Get(ex), JsonRequestBehavior.AllowGet);
            }
        }
        public ActionResult Produto(int idProduto)
        {
            try
            {
                using (var db = new Context())
                {
                    var _produtoBLL = new BLL.ProdutoBLL(db, _idUsuario);
                    var _materialBLL = new BLL.ProdutoMaterialBLL(db, _idUsuario);

                    var _produto = _produtoBLL.Find(e => e.idProduto == idProduto)
                        .Select(u => new Models.Orcamento.ProdutoVM
                        {
                            idProjeto = u.idProjeto,
                            nome = u.nome,
                            idProduto = u.idProduto,
                            descricao = u.descricao,
                        }).FirstOrDefault();
                    _produto.Itens = _materialBLL.Find(u => u.idProduto == idProduto)
                        .Select(k => new
                             Models.Orcamento.ProdutoVM.MaterialVM
                        {
                            idMaterial = k.idMaterial,
                            nome = k.Material.nome,
                            quantidade = k.quantidade
                        }).ToList();
                    return View(_produto);
                }
            }
            catch (Exception ex)
            {
                RP.Util.Entity.ErroLog.Add(ex, Session.SessionID, _idUsuario);
                return RedirectToAction("Index", "Erro", new { area = string.Empty });
            }
        }