Example #1
0
        public void Add(Orcamento orcamento)
        {
            // Iniciando Transação
            var connection = ((IObjectContextAdapter)context).ObjectContext.Connection;

            connection.Open();
            using (System.Data.Common.DbTransaction transaction = connection.BeginTransaction())
            {
                try
                {
                    // Ajustando timezone das datas
                    orcamento.AjusteDatas();

                    // Verificando se é um pedido com orçamento importado
                    bool orcamentoImportado = orcamento.Id != 0 && orcamento.TipoPedido == "Pedido";
                    if (!orcamentoImportado)
                    {
                        orcamento.Id = rep.GetMaxId(x => x.Id);
                    }

                    List <Venda> vendas = new List <Venda>();

                    if (orcamento.TipoPedido == "Pedido")
                    {
                        int vendaId    = orcamento.Id;
                        int vendaGrupo = 0;

                        foreach (var item in orcamento.Venda)
                        {
                            for (int i = 1; i <= item.Plano; i++)
                            {
                                Venda vendaItem = new Venda
                                {
                                    Id           = vendaId,
                                    Grupo        = vendaGrupo,
                                    Parcela      = i,
                                    ValorPago    = 0,
                                    ValorParcela = item.ValorParcela
                                };
                                vendaItem.DataRecebimento = DateTime.Now.AddDays(item.Natureza.NaturezaParcelas.Where(x => x.Parcela == vendaItem.Parcela).First().DiasVencimento);
                                vendaItem.DataPagamento   = DateTime.Now;
                                vendaItem.NaturezaId      = item.NaturezaId;
                                vendaItem.Natureza        = null;
                                vendaItem.Plano           = item.Plano;
                                vendaItem.ValorPago       = vendaItem.ValorParcela;
                                vendas.Add(vendaItem);
                            }

                            vendaGrupo++;
                        }

                        orcamento.Venda = vendas;

                        orcamento.Entrega.Id = repEntrega.GetMaxId(x => x.Id);

                        orcamento.DataPedido = DateTime.Now;
                        AtualizandoEstoque(orcamento);
                        ValidarOrcamento(orcamento);
                    }
                    else
                    {
                        orcamento.Entrega = null;
                        ValidarOrcamento(orcamento);
                        // orcamento.DataEvento = DateTime.Now;
                    }

                    orcamento.DataDevolvido = null;
                    orcamento.Cliente       = null;
                    orcamento.TipoEntrega   = null;
                    orcamento.DataCadastro  = DateTime.Now;

                    foreach (var item in orcamento.OrcamentoProduto)
                    {
                        item.Id = orcamento.Id;
                    }

                    if (orcamentoImportado)
                    {
                        repVenda.AddRange(orcamento.Venda);
                        rep.Update(orcamento);
                    }
                    else
                    {
                        rep.Add(orcamento);
                    }

                    transaction.Commit();
                } catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
        }