public ActionResult Editar(int cod, FormCollection form)
        {
            if (cod > 0 && form.HasKeys())
            {
                Cliente cliente = Cliente.ObterPorCodigo(cod);

                /* Dados Pessoais */
                cliente.Pessoa.Tipo = form["txtTipo"] ?? "N";
                cliente.Pessoa.Nome = form["txtNome"];
                cliente.Pessoa.Telefone.Clear();
                int n = 1;
                while (!String.IsNullOrWhiteSpace(form[$"txtTelefone{n}"]))
                {
                    cliente.Pessoa.Telefone.Add(new Telefone { NumTelefone = form[$"txtTelefone{n}"].SomenteNumeros() });
                    n++;
                }
                switch (cliente.Pessoa.Tipo)
                {
                    case "F":
                        cliente.Pessoa.CPF = form["txtCPFOuCNPJ"].SomenteNumeros() ?? null;
                        cliente.Pessoa.CNPJ = null;
                        break;
                    case "J":
                        cliente.Pessoa.CNPJ = form["txtCPFOuCNPJ"].SomenteNumeros() ?? null;
                        cliente.Pessoa.CPF = null;
                        break;
                    default:
                        break;
                }
                cliente.Pessoa.Email = form["txtEmail"] ?? null;

                /* Endereço */
                if (!String.IsNullOrWhiteSpace(form["txtLogradouro"]))
                {
                    if (cliente.Pessoa.Endereco == null)
                        cliente.Pessoa.Endereco = new Endereco();
                    cliente.Pessoa.Endereco.Logradouro = form["txtLogradouro"];
                    cliente.Pessoa.Endereco.Numero = form["txtNumero"];
                    cliente.Pessoa.Endereco.Complemento = form["txtComplemento"] ?? null;
                    cliente.Pessoa.Endereco.Bairro = form["txtBairro"];
                    cliente.Pessoa.Endereco.Cidade = form["txtCidade"];
                    cliente.Pessoa.Endereco.Estado = form["txtEstado"];
                    cliente.Pessoa.Endereco.CEP = form["txtCEP"].SomenteNumeros();
                }
                else
                {
                    if (cliente.Pessoa.Endereco != null)
                        Contexto.Current.Endereco.Remove(cliente.Pessoa.Endereco);
                    cliente.Pessoa.Endereco = null;
                }

                Cliente.Editar(cliente);

                return PartialView("_Lista", Cliente.Listar());
            }
            return Json(false);
        }
 public ActionResult Editar(int cod, FormCollection form)
 {
     if (cod > 0 && form.HasKeys())
     {
         Produto produto = Produto.ObterPorCodigo(cod);
         produto.Descricao = form["txtDescricao"];
         Produto.Editar(produto);
         return PartialView("_Lista", Produto.Listar());
     }
     return Json(false);
 }
 public ActionResult Incluir(FormCollection form)
 {
     if (form.HasKeys())
     {
         Produto produto = new Produto();
         produto.Descricao = form["txtDescricao"];
         Produto.Incluir(produto);
         return PartialView("_Lista", Produto.Listar());
     }
     return Json(false);
 }
        public ActionResult Incluir(FormCollection form)
        {
            if (form.HasKeys())
            {
                Cliente cliente = new Cliente();

                /* Dados Pessoais */
                cliente.Pessoa = new Pessoa();
                cliente.Pessoa.Tipo = form["txtTipo"] ?? "N";
                cliente.Pessoa.Nome = form["txtNome"];

                int n = 1;
                while (!String.IsNullOrWhiteSpace(form[$"txtTelefone{n}"]))
                {
                    string numTelefone = form[$"txtTelefone{n}"].SomenteNumeros();
                    if (numTelefone.Length == 11 || numTelefone.Length == 10)
                    {
                        cliente.Pessoa.Telefone.Add(new Telefone { NumTelefone =  numTelefone});
                    }
                    n++;
                }

                switch (cliente.Pessoa.Tipo)
                {
                    case "F":
                        cliente.Pessoa.CPF = form["txtCPFOuCNPJ"].SomenteNumeros() ?? null;
                        break;
                    case "J":
                        cliente.Pessoa.CNPJ = form["txtCPFOuCNPJ"].SomenteNumeros() ?? null;
                        break;
                    default:
                        break;
                }
                cliente.Pessoa.Email = form["txtEmail"] ?? null;

                /* Endereço */
                if (!String.IsNullOrWhiteSpace(form["txtLogradouro"]))
                {
                    cliente.Pessoa.Endereco = new Endereco();
                    cliente.Pessoa.Endereco.Logradouro = form["txtLogradouro"];
                    cliente.Pessoa.Endereco.Numero = form["txtNumero"];
                    cliente.Pessoa.Endereco.Complemento = form["txtComplemento"];
                    cliente.Pessoa.Endereco.Bairro = form["txtBairro"];
                    cliente.Pessoa.Endereco.Cidade = form["txtCidade"];
                    cliente.Pessoa.Endereco.Estado = form["txtEstado"];
                    cliente.Pessoa.Endereco.CEP = form["txtCEP"].SomenteNumeros();
                }

                Cliente.Incluir(cliente);

                return PartialView("_Lista", Cliente.Listar());
            }
            return Json(false);
        }
        public ActionResult Editar(int cod, FormCollection form)
        {
            if (cod > 0 && form.HasKeys())
            {
                Fornecedor fornecedor = Fornecedor.ObterPorCodigo(cod);

                /* Dados Pessoais */
                fornecedor.Pessoa.Tipo = form["txtTipo"] ?? "N";
                fornecedor.Pessoa.Nome = form["txtNome"];
                fornecedor.Pessoa.Telefone.Clear();
                int n = 1;
                while (!String.IsNullOrWhiteSpace(form[$"txtTelefone{n}"]))
                {
                    fornecedor.Pessoa.Telefone.Add(new Telefone { NumTelefone = form[$"txtTelefone{n}"].SomenteNumeros() });
                    n++;
                }
                switch (fornecedor.Pessoa.Tipo)
                {
                    case "F":
                        fornecedor.Pessoa.CPF = form["txtCPFOuCNPJ"].SomenteNumeros() ?? null;
                        fornecedor.Pessoa.CNPJ = null;
                        break;
                    case "J":
                        fornecedor.Pessoa.CNPJ = form["txtCPFOuCNPJ"].SomenteNumeros() ?? null;
                        fornecedor.Pessoa.CPF = null;
                        break;
                    default:
                        break;
                }
                fornecedor.Pessoa.Email = form["txtEmail"] ?? null;

                /* Endereço */
                if (!String.IsNullOrWhiteSpace(form["txtLogradouro"]))
                {
                    fornecedor.Pessoa.Endereco = new Endereco();
                    fornecedor.Pessoa.Endereco.Logradouro = form["txtLogradouro"];
                    fornecedor.Pessoa.Endereco.Numero = form["txtNumero"];
                    fornecedor.Pessoa.Endereco.Complemento = form["txtComplemento"];
                    fornecedor.Pessoa.Endereco.Bairro = form["txtBairro"];
                    fornecedor.Pessoa.Endereco.Cidade = form["txtCidade"];
                    fornecedor.Pessoa.Endereco.Estado = form["txtEstado"];
                    fornecedor.Pessoa.Endereco.CEP = form["txtCEP"].SomenteNumeros();
                }

                Fornecedor.Editar(fornecedor);

                return PartialView("_Lista", Fornecedor.Listar());
            }
            return Json(false);
        }
        public ActionResult Incluir(FormCollection form)
        {
            if (form.HasKeys())
            {
                Venda venda = new Venda();

                venda.CodCliente = int.Parse(form["txtCliente"]);
                venda.DtVenda = DateTime.Parse(form["txtData"]);
                venda.Desconto = Decimal.Parse(form["txtDesconto"], new CultureInfo("pt-BR"));

                int n = 1;

                while (!StringExt.IsNullOrEmpty(form[$"txtProduto{n}"], form[$"txtUnidade{n}"], form[$"txtQuantidade{n}"], form[$"txtPrecoUnitario{n}"]))
                {
                    int produto = int.Parse(form[$"txtProduto{n}"]);
                    string unidade = form[$"txtUnidade{n}"];
                    double quantidade = Double.Parse(form[$"txtQuantidade{n}"], new CultureInfo("pt-BR"));
                    decimal precoUnitario = Decimal.Parse(form[$"txtPrecoUnitario{n}"], new CultureInfo("pt-BR"));

                    if (produto > 0 && !String.IsNullOrWhiteSpace(unidade) && quantidade > 0 && precoUnitario > 0)
                    {
                        venda.VendaProduto.Add(new VendaProduto
                        {
                            CodProduto = produto,
                            Unidade = unidade,
                            Quantidade = quantidade,
                            PrecoUnitario = precoUnitario
                        });
                    }
                    n++;
                }

                if (venda.VendaProduto.Count > 0)
                {
                    Venda.Incluir(venda);
                }

                return PartialView("_Lista", Venda.Listar());
            }
            return Json(false);
        }
        public ActionResult Incluir(FormCollection form)
        {
            if (form.HasKeys())
            {
                Funcionario funcionario = new Funcionario();

                /* Dados Pessoais */
                funcionario.Pessoa = new Pessoa();
                funcionario.Pessoa.Tipo = "F";
                funcionario.Pessoa.Nome = form["txtNome"];
                int n = 1;
                while (!String.IsNullOrWhiteSpace(form[$"txtTelefone{n}"]))
                {
                    string numTelefone = form[$"txtTelefone{n}"].SomenteNumeros();
                    if (numTelefone.Length == 11 || numTelefone.Length == 10)
                    {
                        funcionario.Pessoa.Telefone.Add(new Telefone { NumTelefone = numTelefone });
                    }
                    n++;
                }

                /* Funcionario */
                funcionario.NumIdentidade = form["txtIdentidade"].SomenteNumeros();
                funcionario.NumCarteiraTrabalho = form["txtCarteiraTrabalho"].SomenteNumeros();
                funcionario.Salario = Decimal.Parse(form["txtSalario"], new CultureInfo("pt-BR"));
                funcionario.Categoria = form["txtCategoria"];
                funcionario.Observacao = form["txtObservacao"];

                Funcionario.Incluir(funcionario);

                return PartialView("_Lista", Funcionario.Listar());
            }
            return Json(false);
        }
        public ActionResult ClearTablesHandler(FormCollection collection)
        {


            string entityConnectionString = HydroServerToolsUtils.BuildConnectionStringForUserName(HttpContext.User.Identity.Name.ToString());

            //var entityConnectionString = HydroServerToolsUtils.GetDBEntityConnectionStringByName(connectionName);
            //"Sites", "Variables", "OffsetTypes", "ISOMetadata", "Sources", "Methods", "LabMethods", "Samples", "Qualifiers", "QualityControlLevels", "DataValues", "GroupDescriptions", "Groups", "DerivedFrom", "Categories"};

            //Sites
 
            try
            {
                if (collection.HasKeys())
                {
                    //do in this order to remove foreign keys in order
                    if (collection.AllKeys.Contains("categories")) { var repo = new CategoriesRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("derivedfrom")) { var repo = new DerivedFromRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("groups")) { var repo = new GroupsRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("groupdescriptions")) { var repo = new GroupDescriptionsRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("datavalues")) { var repo = new DataValuesRepository(); repo.deleteAll(entityConnectionString); }                  
                    if (collection.AllKeys.Contains("qualitycontrollevels")) { var repo = new QualityControlLevelsRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("qualifiers")) { var repo = new QualifiersRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("samples")) { var repo = new SamplesRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("labmethods")) { var repo = new LabMethodsRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("methods")) { var repo = new MethodsRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("sources")) { var repo = new SourcesRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("offsettypes")) { var repo = new OffsetTypesRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("variables")) { var repo = new VariablesRepository(); repo.deleteAll(entityConnectionString); }
                    if (collection.AllKeys.Contains("sites")) { var repo = new SitesRepository(); repo.deleteAll(entityConnectionString); }

                    
                }
            }
            catch (DbUpdateException ex)
            {
                //HttpContext.Response.ContentType = "text/plain";
                Response.StatusCode = (int)HttpStatusCode.BadRequest; 
                return Json(new { success = false });

            }
           
            // Now we need to wire up a response so that the calling script understands what happened
            HttpContext.Response.ContentType = "text/plain";
            HttpContext.Response.StatusCode = 200;

            // For compatibility with IE's "done" event we need to return a result as well as setting the context.response
            return Json(new { success = true });

        }
        // GET: Spectacles
        public ActionResult Index(FormCollection collection,string trieSpectacle)
        {
            List<Spectacle> listeSpectacles = unitOfWork.SpectacleRepository.ObtenirSpectacles().ToList();
            ViewBag.TypeSpectacles = new SelectList(unitOfWork.TypeSpectacleRepository.ObtenirTypeSpectacles(), "Nom", "Nom", string.Empty);
            if (collection.HasKeys())
            {
                string type = collection[0];
                string nom = collection[1];
                string musicien = collection[2];

                List<Spectacle> colSpectacle = unitOfWork.SpectacleRepository.ObtenirSpectacles().ToList();
                List<Spectacle> colSpectacleApresrechecheType = colSpectacle.Where(s => s.TypeSpectacle.Nom.Contains(type)).ToList();
                List<Spectacle> colSpectacleApresRechercheNomSpectacle = colSpectacleApresrechecheType.Where(s => s.Nom.Contains(nom)).ToList(); //A changer une fois les rôles implenté List<Spectacle> colConferenceApresRechercheConferencier = colSpectacleApresRechercheNomConference;

                return View(colSpectacleApresRechercheNomSpectacle);
            }
            if (trieSpectacle != null)
            {
                listeSpectacles = unitOfWork.SpectacleRepository.ObtenirSpectacles().OrderBy(x => x.TypeSpectacle.Nom).ToList();
            }
            else
            {
                trieSpectacle = "";
            }
            return View(listeSpectacles);
        }
        public ActionResult Vendas(FormCollection form)
        {
            if (form.HasKeys())
            {
                int cliente = int.Parse(form["txtCliente"]);
                int produto = int.Parse(form["txtProduto"]);

                List<Venda> vendas = Venda.Listar();

                if (cliente > 0)
                {
                    vendas = vendas.Where(v => v.CodCliente == cliente).ToList();
                }

                if (produto > 0)
                {
                    vendas = vendas.Where(v => v.VendaProduto.FirstOrDefault(vp => vp.CodProduto == produto) != null).ToList();
                }

                if (!String.IsNullOrWhiteSpace(form["txtDataInicio"]))
                {
                    DateTime data = DateTime.Parse(form["txtDataInicio"], new CultureInfo("pt-BR"));
                    vendas = vendas.Where(v => v.DtVenda >= data).ToList();
                }

                if (!String.IsNullOrWhiteSpace(form["txtDataTermino"]))
                {
                    DateTime data = DateTime.Parse(form["txtDataTermino"] + " 23:59:59", new CultureInfo("pt-BR"));
                    vendas = vendas.Where(v => v.DtVenda <= data).ToList();
                }

                if (vendas.Count == 0)
                {
                    TempData["Erro"] = "Não há vendas no filtro especificado";
                    return RedirectToAction("Vendas");
                }

                vendas = vendas.OrderBy(v => v.DtVenda).ToList();

                // PDF

                MemoryStream memStream = new MemoryStream();
                Document document = new Document(PageSize.A4.Rotate(), 36, 36, 54, 36);
                PdfWriter writer = PdfWriter.GetInstance(document, memStream);
                writer.CloseStream = false;
                writer.PageEvent = new PaginacaoPdfPageEventHelper();

                document.Open();

                Paragraph titulo = new Paragraph("Relatório de Vendas");
                titulo.Font.Size = 18;
                titulo.Font.SetStyle(Font.BOLD);
                document.Add(titulo);

                document.Add(Chunk.NEWLINE);

                if (!String.IsNullOrWhiteSpace(form["txtDataInicio"]) || !String.IsNullOrWhiteSpace(form["txtDataTermino"]))
                {
                    string periodo = "";
                    if (!String.IsNullOrWhiteSpace(form["txtDataInicio"]) && !String.IsNullOrWhiteSpace(form["txtDataTermino"]))
                    {
                        periodo = $"de {form["txtDataInicio"]} até {form["txtDataTermino"]}";
                    }
                    else if (!String.IsNullOrWhiteSpace(form["txtDataInicio"]))
                    {
                        periodo = $"de {form["txtDataInicio"]} até {DateTime.Today.ToString("dd/MM/yyyy")}";
                    }
                    else if (!String.IsNullOrWhiteSpace(form["txtDataTermino"]))
                    {
                        periodo = $"até {form["txtDataTermino"]}";
                    }
                    Paragraph filtroPeriodo = new Paragraph($"Período: {periodo}");
                    filtroPeriodo.Font.SetStyle(Font.BOLD);
                    document.Add(filtroPeriodo);
                }

                string descricao = "Todos";
                if (produto > 0)
                {
                    descricao = Produto.ObterPorCodigo(produto).Descricao;
                }
                Paragraph filtroProduto = new Paragraph($"Produto: {descricao}");
                filtroProduto.Font.SetStyle(Font.BOLD);
                document.Add(filtroProduto);

                string nome = "Todos";
                if (cliente > 0)
                {
                    nome = Cliente.ObterPorCodigo(cliente).Pessoa.Nome;
                }
                Paragraph filtroCliente = new Paragraph($"Cliente: {nome}");
                filtroCliente.Font.SetStyle(Font.BOLD);
                document.Add(filtroCliente);

                document.Add(Chunk.NEWLINE);

                PdfPTable tabela = new PdfPTable(6);
                tabela.SetWidths(new float[] { 1, 1, 1, 1, 1, 1 });
                tabela.TotalWidth = document.PageSize.Width - document.RightMargin - document.LeftMargin;
                tabela.LockedWidth = true;
                tabela.DefaultCell.MinimumHeight = 20;
                tabela.DefaultCell.Border = Rectangle.BOTTOM_BORDER | Rectangle.TOP_BORDER;
                tabela.DefaultCell.BorderWidthBottom = 2;
                Font fontBold = new Font();
                fontBold.SetStyle(Font.BOLD);
                tabela.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
                tabela.AddCell(new Phrase("Data", fontBold));
                tabela.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
                tabela.AddCell(new Phrase("Cliente", fontBold));
                tabela.AddCell(new Phrase("Produto", fontBold));
                tabela.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;
                tabela.AddCell(new Phrase("Quantidade", fontBold));
                tabela.AddCell(new Phrase("Preço Unitário", fontBold));
                tabela.AddCell(new Phrase("Valor Total", fontBold));
                tabela.DefaultCell.Border = Rectangle.BOTTOM_BORDER;
                tabela.DefaultCell.BorderWidthBottom = 1;

                foreach (Venda venda in vendas)
                {
                    foreach (VendaProduto vendaProduto in venda.VendaProduto)
                    {
                        if (produto > 0 && vendaProduto.CodProduto != produto)
                        {
                            continue;
                        }
                        tabela.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
                        tabela.AddCell(venda.DtVenda.ToString("dd/MM/yyyy"));
                        tabela.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
                        tabela.AddCell(venda.Cliente.Pessoa.Nome);
                        tabela.AddCell(vendaProduto.Produto.Descricao);
                        tabela.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;
                        tabela.AddCell(vendaProduto.QuantidadeUnidade);
                        tabela.AddCell(vendaProduto.PrecoUnitario.ToString("C", new System.Globalization.CultureInfo("pt-BR")));
                        tabela.AddCell(vendaProduto.Valor.ToString("C", new System.Globalization.CultureInfo("pt-BR")));
                    }
                }

                document.Add(tabela);

                document.Add(Chunk.NEWLINE);

                PdfPTable tabelaTotais = new PdfPTable(2);
                tabelaTotais.SetWidths(new float[] { 1, 1 });
                tabelaTotais.TotalWidth = document.PageSize.Width - document.RightMargin - document.LeftMargin;
                tabelaTotais.LockedWidth = true;
                tabelaTotais.DefaultCell.Border = Rectangle.BOTTOM_BORDER;
                tabelaTotais.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;

                PdfPCell totais = new PdfPCell(new Phrase("TOTAIS", fontBold));
                totais.Colspan = 2;
                totais.Border = Rectangle.BOTTOM_BORDER;
                totais.HorizontalAlignment = Element.ALIGN_CENTER;
                tabelaTotais.AddCell(totais);
                tabelaTotais.AddCell(new Phrase("Quantidades", fontBold));
                tabelaTotais.AddCell(new Phrase("Valores", fontBold));

                PdfPTable tabelaQuantidades = new PdfPTable(1);
                tabelaQuantidades.SetWidths(new float[] { 1 });
                tabelaQuantidades.TotalWidth = (document.PageSize.Width - document.RightMargin - document.LeftMargin) / 2;
                tabelaQuantidades.LockedWidth = true;
                tabelaQuantidades.DefaultCell.Border = Rectangle.NO_BORDER;
                tabelaQuantidades.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;
                Dictionary<string, double> totaisQuantidadePorUnidade = new Dictionary<string, double>();
                foreach (Venda venda in vendas)
                {
                    foreach (string unidade in venda.QuantidadePorUnidade.Keys)
                    {
                        if (totaisQuantidadePorUnidade.ContainsKey(unidade))
                        {
                            totaisQuantidadePorUnidade[unidade] += venda.QuantidadePorUnidade[unidade];
                        }
                        else
                        {
                            totaisQuantidadePorUnidade[unidade] = venda.QuantidadePorUnidade[unidade];
                        }
                    }
                }
                foreach (string unidade in totaisQuantidadePorUnidade.Keys)
                {
                    tabelaQuantidades.AddCell($"{totaisQuantidadePorUnidade[unidade]} {unidade}\n");
                }
                tabelaTotais.AddCell(tabelaQuantidades);

                PdfPTable tabelaValores = new PdfPTable(2);
                tabelaValores.SetWidths(new float[] { 3, 1 });
                tabelaValores.TotalWidth = (document.PageSize.Width - document.RightMargin - document.LeftMargin) / 2;
                tabelaValores.LockedWidth = true;
                tabelaValores.DefaultCell.Border = Rectangle.NO_BORDER;
                tabelaValores.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;

                tabelaValores.AddCell(new Phrase("Desconto Total:", fontBold));
                tabelaValores.AddCell(new Phrase(vendas.Sum(v => v.Desconto)?.ToString("C", new System.Globalization.CultureInfo("pt-BR")) ?? "R$ 0,00"));

                tabelaValores.AddCell(new Phrase("Valor Total (com desconto):", fontBold));
                tabelaValores.AddCell(new Phrase(vendas.Sum(v => v.ValorTotal).ToString("C", new System.Globalization.CultureInfo("pt-BR"))));

                tabelaValores.AddCell(new Phrase("Valor Total (sem desconto):", fontBold));
                tabelaValores.AddCell(new Phrase(vendas.Sum(v => v.ValorTotalSemDesconto).ToString("C", new System.Globalization.CultureInfo("pt-BR"))));

                tabelaTotais.AddCell(tabelaValores);

                document.Add(tabelaTotais);

                document.Close();

                Response.AddHeader("Content-Disposition", "attachment; filename=\"relatorio-vendas-" + DateTime.Today.ToString("dd-MM-yyyy") + ".pdf\"");

                byte[] buf = new byte[memStream.Position];
                memStream.Position = 0;
                memStream.Read(buf, 0, buf.Length);

                return new BinaryContentResult(buf, "application/pdf");
            }

            return RedirectToAction("Vendas");
        }
        public ActionResult Editar(int cod, FormCollection form)
        {
            if (cod > 0 && form.HasKeys())
            {
                Compra compra = Compra.ObterPorCodigo(cod);

                compra.CodFornecedor = int.Parse(form["txtFornecedor"]);
                compra.DtCompra = DateTime.Parse(form["txtData"]);
                compra.Desconto = Decimal.Parse(form["txtDesconto"], new CultureInfo("pt-BR"));

                int n = 1;

                compra.CompraProduto.Clear();

                while (!StringExt.IsNullOrEmpty(form[$"txtProduto{n}"], form[$"txtUnidade{n}"], form[$"txtQuantidade{n}"], form[$"txtPrecoUnitario{n}"]))
                {
                    int produto = int.Parse(form[$"txtProduto{n}"]);
                    string unidade = form[$"txtUnidade{n}"];
                    double quantidade = Double.Parse(form[$"txtQuantidade{n}"], new CultureInfo("pt-BR"));
                    decimal precoUnitario = Decimal.Parse(form[$"txtPrecoUnitario{n}"], new CultureInfo("pt-BR"));

                    if (produto > 0 && !String.IsNullOrWhiteSpace(unidade) && quantidade > 0 && precoUnitario > 0)
                    {
                        compra.CompraProduto.Add(new CompraProduto
                        {
                            CodProduto = produto,
                            Unidade = unidade,
                            Quantidade = quantidade,
                            PrecoUnitario = precoUnitario
                        });
                    }
                    n++;
                }

                Compra.Editar(compra);

                return PartialView("_Lista", Compra.Listar());
            }
            return Json(false);
        }