public new static PedidoRestaurante Save(PedidoRestaurante pedido)
        {
            ISession     session     = NHibernateHttpModule.Session;
            ITransaction transaction = session.BeginTransaction();

            try
            {
                if (pedido.Empresa == null)
                {
                    throw new Exception("Informe a empresa do pedido.");
                }
                foreach (PagamentoPedido pag in pedido.Pagamento)
                {
                    pag.FormaPagamento = FormaPagamentoRepository.GetById(
                        pag.FormaPagamento.Id);
                }
                foreach (ComposicaoProduto comp in pedido.Produtos)
                {
                    comp.Produto = ProdutoRepository.GetById(comp.Produto.Id);
                    foreach (ProdutoPedido prod in comp.Composicao)
                    {
                        prod.Produto = ProdutoRepository.GetById(prod.Produto.Id);
                    }
                }
                session.Save(pedido);

                foreach (PagamentoPedido pag in pedido.Pagamento)
                {
                    pag.Pedido = pedido;
                    // Cria o recebimento da venda para o caixa.
                    session.Save(RecebimentoVendaRepository
                                 .CreateRecebimentoVendaByPedido(pag, pedido));
                }
                // Efetua o lançamento no contávil.
                PagamentoPedidoRepository.LancarPagamentoRestaurante(pedido);
                // Baixa as quantidades no estoque.
                BaixaEstoque(session, pedido);
                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
                throw;
            }

            return(pedido);
        }
예제 #2
0
        public new static Mercearia Save(Mercearia pedido)
        {
            ISession     session     = SessionFactory.OpenSession();
            ITransaction transaction = session.BeginTransaction();

            try
            {
                //pedido.Usuario = Utils.UsuarioAtual;
                decimal saldoADebitar =
                    pedido.Pagamento.Where(pag => pag.FormaPagamento.AVista).Sum(pag => pag.ValorTotal);
                if (saldoADebitar > 0)
                {
                    if (!ParceiroNegocioPessoaFisicaRepository.IsLimiteDisponivel(pedido.Cliente.Id, saldoADebitar))
                    {
                        throw new Exception("O cliente não possui limite disponível.");
                    }
                }
                session.Save(pedido);

                foreach (PagamentoPedido pag in pedido.Pagamento)
                {
                    RepositoryBase <RecebimentoVenda> .Save(
                        RecebimentoVendaRepository.CreateRecebimentoVendaByPedido(pag, pedido));
                }

                EfetuarLancamentoMercearia(session, pedido);
                BaixaEstoque(session, pedido);
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }

            return(pedido);
        }