public OrcamentoOperacionalVersao CriarOrcamentoOperacional(List<Orcamento> orcamentosGerenciamento, Departamento setor, CentroDeCusto centroDeCusto, int ano)
        {
            Contract.Requires(setor != null, "Departamento não informado.");
            Contract.Requires(centroDeCusto != null, "Centro de custo não informado.");

            var orcamento = new OrcamentoOperacionalVersao(setor, centroDeCusto, ano);
            orcamento.CriarDespesas();

            if (orcamentosGerenciamento == null)
                orcamentosGerenciamento = new List<Orcamento>();

            var gerenciador = new GerenciadorDeOrcamentos();

            if (!gerenciador.PodeCriarOrcamento(orcamentosGerenciamento, setor, centroDeCusto, TipoOrcamentoEnum.DespesaOperacional))
                throw new Exception("Orçamento já tem dez versões");

            orcamentosGerenciamento.Add(orcamento);
            gerenciador.InformarNomeOrcamento(orcamentosGerenciamento, orcamento, setor, centroDeCusto, TipoOrcamentoEnum.DespesaOperacional);

            foreach (var orcamentoGerenciamento in orcamentosGerenciamento)
            {
                Orcamentos.Salvar(orcamentoGerenciamento);
            }

            return orcamento;
        }
        public Orcamento CriarOrcamentoHospitalar(List<Orcamento> orcamentosGerenciamento, Departamento setor, int ano)
        {
            Contract.Requires(setor != null, "Departamento não informado");

            Orcamento orcamento = new OrcamentoHospitalar(setor, ano);

            if (orcamentosGerenciamento == null)
                orcamentosGerenciamento = new List<Orcamento>();

            GerenciadorDeOrcamentos gerenciador = new GerenciadorDeOrcamentos();

            if (!gerenciador.PodeCriarOrcamento(orcamentosGerenciamento, setor, TipoOrcamentoEnum.Hospitalar))
                throw new Exception("Orçamento já tem dez versões");

            orcamentosGerenciamento.Add(orcamento);

            gerenciador.InformarNomeOrcamento(orcamentosGerenciamento, orcamento, setor, TipoOrcamentoEnum.Hospitalar);

            foreach (var orcamentoGerenciamento in orcamentosGerenciamento)
            {
                Orcamentos.Salvar(orcamentoGerenciamento);
            }

            return orcamento;
        }
        public virtual OrcamentoDeViagem CriarOrcamentoDeViagem(List<Orcamento> orcamentosGerenciamento, Departamento departamento, CentroDeCusto centroDeCusto, int ano)
        {
            Contract.Requires(centroDeCusto != null, "Centro de custo não informado.");
            Contract.Requires(departamento != null, "Departamento não informado.");

            var viagens = Viagens.Todos().ToList();
            var diarias = Diarias.Todos().ToList();

            OrcamentoDeViagem orcamento = new OrcamentoDeViagem(departamento, centroDeCusto, ano);
            orcamento.CriarDespesas(viagens, diarias);

            if (orcamentosGerenciamento == null)
                orcamentosGerenciamento = new List<Orcamento>();

            GerenciadorDeOrcamentos gerenciador = new GerenciadorDeOrcamentos();

            if (!gerenciador.PodeCriarOrcamento(orcamentosGerenciamento, departamento, centroDeCusto, TipoOrcamentoEnum.Viagem))
                throw new Exception("Orçamento já tem dez versões");

            orcamentosGerenciamento.Add(orcamento);

            gerenciador.InformarNomeOrcamento(orcamentosGerenciamento, orcamento, departamento, centroDeCusto, TipoOrcamentoEnum.Viagem);

            foreach (var orcamentoGerenciamento in orcamentosGerenciamento)
            {
                Orcamentos.Salvar(orcamentoGerenciamento);
            }

            return orcamento;
        }