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 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 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;
        }
        public void DeletarOrcamento(Orcamento orcamento, List<Orcamento> orcamentos, Departamento departamento)
        {
            Contract.Requires(orcamento != null, "Orçamento não informado");
            Contract.Requires(departamento != null, "Departamento não informado");

            Orcamentos.Deletar(orcamento);

            if (orcamentos.Exists(c => c == orcamento))
                orcamentos.Remove(orcamento);

            GerenciadorDeOrcamentos gerenciamento = new GerenciadorDeOrcamentos();
            gerenciamento.InformarNomeOrcamento(orcamentos, orcamento, departamento, TipoOrcamentoEnum.Hospitalar);

            foreach (var item in orcamentos)
            {
                Orcamentos.Salvar(item);
            }
        }