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); }
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); }