public ActionResult Edit(int id, OrcamentoViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var orcamento = OrcamentoService.getOrcamento(id);

            if (orcamento == null)
            {
                this.addMensagemErro("Orçamento não encontrado.");
                return(RedirectToAction("Index"));
            }

            orcamento = LoadOrcamento(orcamento, model);
            OrcamentoService.saveOrcamento(orcamento);
            this.addMensagemSucesso("Orçamento alterado com sucesso.");

            if (model.EhServico)
            {
                return(RedirectToAction("IndexServico"));
            }

            return(RedirectToAction("Index"));
        }
        public ActionResult Edit(int id)
        {
            var orcamento = OrcamentoService.getOrcamento(id);

            if (orcamento == null)
            {
                this.addMensagemErro("Orçamento não encontrado.");
                return(RedirectToAction("Index"));
            }

            var model = LoadOrcamentoModel(orcamento);

            prepareModelLists(model);
            return(View(model));
        }
        public ActionResult Refuse(int id)
        {
            var orcamento = OrcamentoService.getOrcamento(id);

            if (orcamento == null)
            {
                this.addMensagemErro("Orçamento não encontrado.");
                return(RedirectToAction("Index"));
            }

            orcamento.Status = (int)StatusOrcamento.Recusado;
            OrcamentoService.saveOrcamento(orcamento);
            this.addMensagemSucesso("Orçamento recusado com sucesso.");
            return(RedirectToAction("Index", "Orcamento"));
        }
        public ActionResult CreatePurchaseOrder(int id)
        {
            var orcamento = OrcamentoService.getOrcamento(id);

            if (orcamento == null)
            {
                this.addMensagemErro("Orçamento não encontrado.");
                return(RedirectToAction("Index"));
            }

            orcamento.Status    = (int)StatusOrcamento.Aprovado;
            orcamento.Orcamento = false;
            OrcamentoService.saveOrcamento(orcamento);
            this.addMensagemSucesso("Pedido criado com sucesso.");
            return(RedirectToAction("Index", "Pedido"));
        }
        public ActionResult Delete(int id)
        {
            var orcamento = OrcamentoService.getOrcamento(id);

            if (orcamento == null)
            {
                this.addMensagemErro("Orçamento não encontrado.");
                return(RedirectToAction("Index"));
            }

            try {
                OrcamentoService.deleteOrcamento(id);
            } catch (BusinessException ex) {
                this.addMensagemErro(ex.Message);
                return(RedirectToAction("Index"));
            }

            this.addMensagemSucesso("Orçamento excluído com sucesso.");
            return(RedirectToAction("Index"));
        }
        public FileResult DownloadOrder(int id)
        {
            var orcamento          = OrcamentoService.getOrcamento(id);
            var cliente            = ClienteService.getCliente(orcamento.IDCliente);
            var usuarioResponsavel = UsuarioService.getUsuario(orcamento.IDUsuario);
            var dictValue          = new Dictionary <string, string>();
            var dateTimeNow        = DateTime.Now;

            dictValue.Add("DataEscrito", String.Format("{0} de {1} de {2}", dateTimeNow.Day, dateTimeNow.ToString("MMM", new CultureInfo("pt-BR")), dateTimeNow.Year));
            dictValue.Add("IDOrcamento", orcamento.IDOrcamento.ToString());
            dictValue.Add("NomeCliente", cliente.Nome);
            dictValue.Add("NomeAeronave", "");
            dictValue.Add("PrefixoAeronave", "");
            dictValue.Add("YYYY", dateTimeNow.Year.ToString());
            dictValue.Add("EmailResponsavel", usuarioResponsavel.Email);
            dictValue.Add("NomeResponsavel", usuarioResponsavel.Nome);

            StringBuilder sbCondicao = new StringBuilder();

            foreach (PagamentosOrcamento pagamento in orcamento.PagamentosOrcamento)
            {
                sbCondicao.AppendFormat(" R$ {0} em {1}, ", pagamento.Preco.ToString(new CultureInfo("pt-BR")), pagamento.DataPagamento.ToShortDateString());
            }

            if (sbCondicao.Length > 0)
            {
                sbCondicao.Remove(sbCondicao.Length - 2, 2);
            }

            dictValue.Add("CondicaoPagamento", sbCondicao.ToString());

            DataTable dataTable = new DataTable();

            dataTable.Columns.Add("Item");
            dataTable.Columns.Add("Descrição");
            dataTable.Columns.Add("QTDE");
            dataTable.Columns.Add("Valor");
            double precoTotal = 0;

            foreach (ItensOrcamento itemOrcamento in orcamento.ItensOrcamento)
            {
                string descricaoServico = "Equipamento";
                if (orcamento.Servico)
                {
                    var servico = ServicoService.getServico(itemOrcamento.IDServico.Value);
                    descricaoServico = servico.Descricao.ToUpper();
                }
                double precoUnitarioReal = Math.Round(itemOrcamento.PrecoUnitario * orcamento.CotacaoDolar, 2, MidpointRounding.ToEven);
                precoTotal += precoUnitarioReal;
                dataTable.Rows.Add(itemOrcamento.Equipamentos.Descricao, descricaoServico, itemOrcamento.Quantidade.ToString(), "R$ " + precoUnitarioReal.ToString(new CultureInfo("pt-BR")));
            }

            dataTable.Rows.Add("", "", "Total", "R$ " + precoTotal.ToString(new CultureInfo("pt-BR")));


            var b          = new CTMStorageService().GetOrcamentoPreenchidoAzure("OrcamentoTimbrado.docx", dataTable, dictValue);
            var fileResult = new FileContentResult(b, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");

            fileResult.FileDownloadName = String.Format("Orcamento{0}-{1}.docx", orcamento.IDOrcamento.ToString(), dateTimeNow.Year.ToString());
            return(fileResult);
        }