//TODO: colocar a regra de negocio no Negocio
        public void AtribuirVersaoFinal(Orcamento orcamento)
        {
            Contract.Requires(orcamento != null, "Orçamento não informado.0");
            Contract.Requires(orcamento.DespesasOperacionais != null, "Despesas operacionais não informadas.");
            Contract.Requires(orcamento.ValorTotal > default(int), "É necessário que o total seje maior do que zero para atribuir esta versão como final.");

            var orcamentoFinal = Orcamentos.ObterOrcamentoFinalOrcamentoOperacional(orcamento.CentroDeCusto,orcamento.Setor);

            if (orcamentoFinal != null)
            {
                orcamentoFinal.VersaoFinal = false;
                Orcamentos.Salvar(orcamentoFinal);
            }

            orcamento.AtribuirVersaoFinal();
            Orcamentos.Salvar(orcamento);
        }
        //TODO: colocar a regra de negocio no Negocio
        public void AtribuirVersaoFinal(Orcamento orcamento)
        {
            Contract.Requires(orcamento != null, "Orçamento não informado.");
            Contract.Requires(orcamento.Servicos != null, "Produção não informada.");
            Contract.Requires(!orcamento.Servicos.All(d => d.Valores.All(v => v.Valor == 0)), "Não é possivel atribuir versão final para orçamento de produção, quando existir todos os valores zerados");

            var listaTickets =  Tickets.Todos(orcamento.Setor);
            Contract.Requires(listaTickets.Any(t => t.Parcelas.Sum(p=> p.Valor) > 0),"Todos os tickets de produção estão iguais a zero, por favor insira tickets antes de atribuir versão final.");

            var orcamentoFinal = Orcamentos.ObterOrcamentoHospitalarFinal(orcamento.Setor);

            if (orcamentoFinal != null)
            {
                orcamentoFinal.VersaoFinal = false;
                Orcamentos.Salvar(orcamentoFinal);
            }

            orcamento.AtribuirVersaoFinal();
            Orcamentos.Salvar(orcamento);
        }