public void atualizar_estrutura_hospitalar_departamentoExistentes()
        {
            var tiposConta = new TiposConta();
            var tiposDeconta = new TiposConta();
            var tipoContaOutras = tiposDeconta.Obter<TipoConta>(1);

            string _conectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;";
            _conectionstring += String.Format("Data Source={0};", "D:\\CargaOrcamento2014\\DepartamentoCentroDeCustoContaHospitalarNew.xls");
            _conectionstring += "Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'";

            var cn = new OleDbConnection(_conectionstring);
            var cmd = new OleDbCommand("Select * from [c$]", cn);
            cn.Open();
            var reader = cmd.ExecuteReader();

            var documento = new List<RegistroExcel>();

            var listaContas = new List<Conta>();
            var listaCentrosDeCusto = new List<CentroDeCusto>();

            var repositorioDeHospitais = new Hospitais();
            var repositorioDeCusto = new CentrosDeCusto();
            var repositorioContas = new Contas();

            int i = 0;

            while (reader.Read())
            {
                if (i == 0)
                {
                    i++;
                    continue;
                }
                if (reader[0] == null || reader[0] == DBNull.Value || string.IsNullOrEmpty(reader[0].ToString()))
                    break;

                var registroExcel = new RegistroExcel()
                {
                    NomeHospital = (string)reader[5],
                    CodigoCentroDeCusto = Convert.ToString(reader[0]),
                    DescricaoCentroDeCusto = (string)reader[1]
                };

                if (reader[5] != DBNull.Value)
                {
                    registroExcel.DescricaoConta = (string)reader[3];
                    registroExcel.CodigoConta = Convert.ToString(reader[2]);
                    registroExcel.GrupoResumoNome = (string)reader[4];
                }

                documento.Add(registroExcel);
            }

            cn.Close();
            cn.Dispose();
            cmd.Dispose();

            var gruposDeConta = documento.Select(x => x.GrupoResumoNome).Distinct();

            var codigosDeConta = documento.Select(x => x.CodigoConta).Distinct();

            foreach (var codigoDeConta in codigosDeConta)
            {
                string descricaoDaConta = documento.Where(x => x.CodigoConta == codigoDeConta).Select(y => y.DescricaoConta).Distinct().First();

                var conta = repositorioContas.ObterContaPor(codigoDeConta);

                if (listaContas.All(c => c.CodigoDaConta != codigoDeConta))
                {
                    if (conta == null)
                    {
                        throw new Exception();

                        conta = new Conta(descricaoDaConta, tipoContaOutras)
                        {
                            CodigoDaConta = codigoDeConta
                        };
                        repositorioContas.Salvar(conta);
                    }

                    listaContas.Add(conta);
                }
                else
                    conta = listaContas.FirstOrDefault(c => c.CodigoDaConta == codigoDeConta);

            }
            var grupos = new GruposDeConta();
            var gruposDeContaLista = new List<GrupoDeConta>();
            foreach (var grupo in gruposDeConta)
            {
                var grupoDeConta = grupos.ObterPor(grupo);

                if (grupoDeConta == null)
                    throw new Exception();

                var contasDoGrupo = documento.Where(x => x.GrupoResumoNome == grupo).Select(y => y.CodigoConta).Distinct();

                foreach (var codigoConta in contasDoGrupo)
                {
                    var conta = listaContas.FirstOrDefault(c => c.CodigoDaConta == codigoConta);

                    if (grupoDeConta.Contas == null)
                        grupoDeConta.Contas = new List<Conta>();

                    if (grupoDeConta.Contas.All(c => c.CodigoDaConta != codigoConta))
                        grupoDeConta.Adicionar(conta);
                }

                gruposDeContaLista.Add(grupoDeConta);
                grupos.Salvar(grupoDeConta);
            }

            var codigosDecentrosDeCusto = documento.Select(x => x.CodigoCentroDeCusto).Distinct();

            foreach (var codigoDeCentro in codigosDecentrosDeCusto)
            {
                var descricaoDeCentroDeCusto = documento.Where(x => x.CodigoCentroDeCusto == codigoDeCentro).Select(y => y.DescricaoCentroDeCusto).Distinct().First();

                var centroDeCusto = repositorioDeCusto.ObterPor(codigoDeCentro);
                if (centroDeCusto == null)
                {
                        throw new Exception();

                    centroDeCusto = new CentroDeCusto(descricaoDeCentroDeCusto)
                    {
                        CodigoDoCentroDeCusto = codigoDeCentro
                    };
                }

                var contas = documento.Where(x => x.CodigoCentroDeCusto == codigoDeCentro).Select(y => y.CodigoConta).Distinct();

                if (centroDeCusto.Contas == null)
                    centroDeCusto.Contas = new List<Conta>();

                foreach (var conta in contas)
                {
                    if (centroDeCusto.Contas.All(c => c.CodigoDaConta != conta))
                        centroDeCusto.AdicionarConta(listaContas.SingleOrDefault(x => x.CodigoDaConta == conta));
                }

                repositorioDeCusto.Salvar(centroDeCusto);
                listaCentrosDeCusto.Add(centroDeCusto);
            }

            var hospitais = documento.Select(x => x.NomeHospital).Distinct();

            foreach (var nomeHospital in hospitais)
            {
                var hospital = repositorioDeHospitais.ObterPor(nomeHospital);
                if(hospital == null)
                    throw new Exception();

                var centrosDeCusto = documento.Where(x => x.NomeHospital == hospital.Nome).Select(y => y.CodigoCentroDeCusto).Distinct();

                if (hospital.CentrosDeCusto == null)
                    hospital.CentrosDeCusto = new List<CentroDeCusto>();

                foreach (var codigoCentroCusto in centrosDeCusto)
                {
                    if (hospital.CentrosDeCusto.All(c => c.CodigoDoCentroDeCusto != codigoCentroCusto))
                        hospital.AdicionarCentroDeCusto(listaCentrosDeCusto.SingleOrDefault(x => x.CodigoDoCentroDeCusto == codigoCentroCusto));
                }

                repositorioDeHospitais.Salvar(hospital);
            }
        }
        public void f_importar_centro_de_custo_conta_coorporativo_do_excel()
        {
            string _conectionstring;
            _conectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;";
            _conectionstring += String.Format("Data Source={0};", "D:\\Coorporativo.xls");
            _conectionstring += "Extended Properties='Excel 8.0;HDR=NO;'";

            TiposConta tiposDeconta = new TiposConta();
            var tipoContaOutras = tiposDeconta.Obter<TipoConta>(1);

            OleDbConnection cn = new OleDbConnection(_conectionstring);
            OleDbCommand cmd = new OleDbCommand("Select * from [CC x Contas$]", cn);
            cn.Open();

            OleDbDataReader reader = cmd.ExecuteReader();

            List<CentroDeCustoContaExcel> centrosCustoConta = new List<CentroDeCustoContaExcel>();

            List<Conta> listaContas = new List<Conta>();
            List<CentroDeCusto> listaCentrosDeCusto = new List<CentroDeCusto>();

            CentrosDeCusto repositorioDeCusto = new CentrosDeCusto();
            Contas repositorioContas = new Contas();

            int i = 0;

            while (reader.Read())
            {
                if (i > 1)
                {
                    if (reader[0] == DBNull.Value)
                        break;

                    CentroDeCustoContaExcel centroContaExcel = new CentroDeCustoContaExcel();

                    centroContaExcel.CodCentro = (string)reader[1];
                    centroContaExcel.DescricaoCentro = (string)reader[2];
                    centroContaExcel.DescricaoConta = (string)reader[4];
                    centroContaExcel.CodConta = (string)reader[3];
                    centroContaExcel.GrupoConta = (string)reader[5];

                    centrosCustoConta.Add(centroContaExcel);
                }
                i++;
            }

            cn.Close();
            cn.Dispose();
            cmd.Dispose();

            var codigosDeConta = centrosCustoConta.Select(x => x.CodConta).Distinct();

            foreach (var codigoDeConta in codigosDeConta)
            {
                string descricaoDaConta = centrosCustoConta.Where(x => x.CodConta == codigoDeConta).Select(y => y.DescricaoConta).Distinct().FirstOrDefault();

                Conta conta = repositorioContas.ObterContaPor(codigoDeConta);

                if (!listaContas.Any(c => c.CodigoDaConta == codigoDeConta))
                {
                    if (conta == null)
                    {
                        conta = new Conta(descricaoDaConta, tipoContaOutras)
                        {
                            CodigoDaConta = codigoDeConta
                        };
                        repositorioContas.Salvar(conta);
                    }

                    listaContas.Add(conta);
                }
                else
                    conta = listaContas.Where(c => c.CodigoDaConta == codigoDeConta).FirstOrDefault();
            }

            var gruposDeConta = centrosCustoConta.Select(x => x.GrupoConta).Distinct();

            GruposDeConta grupos = new GruposDeConta();
            List<GrupoDeConta> gruposDeContaLista = new List<GrupoDeConta>();
            foreach (var grupo in gruposDeConta)
            {
                var grupoContaRecuperado = grupos.ObterPor(grupo);

                if (grupoContaRecuperado == null)
                    grupoContaRecuperado = new GrupoDeConta(grupo);

                var contasDoGrupo = centrosCustoConta.Where(x => x.GrupoConta == grupo).Select(y => y.CodConta).Distinct();

                foreach (var codigoConta in contasDoGrupo)
                {
                    var conta = listaContas.Where(c => c.CodigoDaConta == codigoConta).FirstOrDefault();

                    grupoContaRecuperado.Adicionar(conta);
                }

                gruposDeContaLista.Add(grupoContaRecuperado);
                grupos.Salvar(grupoContaRecuperado);
            }

            var codigosDecentrosDeCusto = centrosCustoConta.Select(x => x.CodCentro).Distinct();

            foreach (var codigoDeCentro in codigosDecentrosDeCusto)
            {
                var descricaoDeCentroDeCusto = centrosCustoConta.Where(x => x.CodCentro == codigoDeCentro).Select(y => y.DescricaoCentro).Distinct().First();

                var centroDeCusto = repositorioDeCusto.ObterPor(codigoDeCentro);
                if (centroDeCusto == null)
                {
                    centroDeCusto = new CentroDeCusto(descricaoDeCentroDeCusto)
                    {
                        CodigoDoCentroDeCusto = codigoDeCentro
                    };
                }
                var contas = centrosCustoConta.Where(x => x.CodCentro == codigoDeCentro).Select(y => y.CodConta).Distinct();

                foreach (var conta in contas)
                {
                    centroDeCusto.AdicionarConta(listaContas.Where(x => x.CodigoDaConta == conta).SingleOrDefault());
                }

                repositorioDeCusto.Salvar(centroDeCusto);
                listaCentrosDeCusto.Add(centroDeCusto);
            }
        }
        public void l_InserirContasEGrupoDeContasNosDepartamentos()
        {
            var tiposConta = new TiposConta();
            var tipoContaBeneficios = new TipoConta { Nome = "Beneficios" };
            tiposConta.Adicionar(tipoContaBeneficios);

            Departamentos departamentos = new Departamentos();
            var listaDepartamentos = departamentos.Todos();

            var tipoContaFGTS = new TipoConta { Nome = "FGTS" };
            var tipoContaINSS = new TipoConta { Nome = "INSS" };
            var tipoContaFerias = new TipoConta { Nome = "Férias" };
            var tipoContaIndenizacao = new TipoConta { Nome = "Indenização" };
            var tipoContaDecimoTerceiro = new TipoConta { Nome = "Décimo Terceiro" };
            var tipoContaSalario = new TipoConta { Nome = "Salário" };
            var tipoContaBolsasDeEstagio = new TipoConta { Nome = "Bolsas de Estágio" };
            var tipoContaExtras = new TipoConta { Nome = "Extras" };

            tiposConta.Adicionar(tipoContaFGTS);
            tiposConta.Adicionar(tipoContaINSS);
            tiposConta.Adicionar(tipoContaFerias);
            tiposConta.Adicionar(tipoContaIndenizacao);
            tiposConta.Adicionar(tipoContaDecimoTerceiro);
            tiposConta.Adicionar(tipoContaSalario);
            tiposConta.Adicionar(tipoContaBolsasDeEstagio);
            tiposConta.Adicionar(tipoContaExtras);
            var gruposDeConta = new GruposDeConta();
            var encargosSociais = new GrupoDeConta("Encargos Sociais");
            var remuneracao = new GrupoDeConta("Remuneração");
            var beneficios = new GrupoDeConta("Benefícios");

            gruposDeConta.Salvar(beneficios);
            gruposDeConta.Salvar(remuneracao);
            gruposDeConta.Salvar(encargosSociais);

            var contaAlimentacao = new Conta("Alimentação", tipoContaBeneficios);
            contaAlimentacao.Adicionar(TipoTicketDePessoal.Alimentação);

            var contaAssistenciaMedica = new Conta("Assistência Médica", tipoContaBeneficios);
            contaAssistenciaMedica.Adicionar(TipoTicketDePessoal.AssistenciaMedica);

            var contaOutrosBeneficios = new Conta("Outros Benefícios", tipoContaBeneficios);
            contaOutrosBeneficios.Adicionar(TipoTicketDePessoal.OutrosBeneficios);

            var contaTreinamentoPessoal = new Conta("Treinamento Pessoal", tipoContaBeneficios);
            contaTreinamentoPessoal.Adicionar(TipoTicketDePessoal.TreinamentoPessoal);

            var contaValeDeTransporte = new Conta("Vale de Transporte", tipoContaBeneficios);
            contaValeDeTransporte.Adicionar(TipoTicketDePessoal.ValeDeTransporte);

            var contaOutrasDespesas = new Conta("Outras Despesas", tipoContaBeneficios);
            contaOutrasDespesas.Adicionar(TipoTicketDePessoal.OutrasDespesas);

            var contaAssistenciaOdontologica = new Conta("Assistência Odontológica", tipoContaBeneficios);
            contaAssistenciaOdontologica.Adicionar(TipoTicketDePessoal.AssistenciaOdontologica);

            beneficios.Adicionar(contaAlimentacao);
            beneficios.Adicionar(contaAssistenciaMedica);
            beneficios.Adicionar(contaAssistenciaOdontologica);
            beneficios.Adicionar(contaOutrosBeneficios);
            beneficios.Adicionar(contaTreinamentoPessoal);
            beneficios.Adicionar(contaValeDeTransporte);
            beneficios.Adicionar(contaOutrasDespesas);

            var contaFGTS = new Conta("FGTS", tipoContaFGTS);
            contaFGTS.Adicionar(TipoTicketDePessoal.FGTS);
            encargosSociais.Adicionar(contaFGTS);

            var contaINSS = new Conta("INSS", tipoContaINSS);
            contaINSS.Adicionar(TipoTicketDePessoal.INSS);
            encargosSociais.Adicionar(contaINSS);

            var contaFerias = new Conta("Férias", tipoContaFerias);
            encargosSociais.Adicionar(contaFerias);

            var contaIndenizacao = new Conta("Indenização", tipoContaIndenizacao);
            encargosSociais.Adicionar(contaIndenizacao);

            var contaDecimoTerceiro = new Conta("Décimo Terceiro", tipoContaDecimoTerceiro);
            encargosSociais.Adicionar(contaDecimoTerceiro);

            foreach (var conta in encargosSociais.Contas)
            {
                if (conta.Nome == "Indenização")
                {
                    conta.Adicionar(TipoTicketDePessoal.Indenizacao);
                }
                else
                {
                    if (conta.Nome == "INSS" || conta.Nome == "FGTS")
                        conta.Adicionar(TipoTicketDePessoal.AdicionalDeSobreaviso);

                    conta.Adicionar(TipoTicketDePessoal.AdicionalNoturno);
                    conta.Adicionar(TipoTicketDePessoal.AdicionalDeInsalubridade);
                    conta.Adicionar(TipoTicketDePessoal.AdicionaDePericulosidade);
                    conta.Adicionar(TipoTicketDePessoal.Gratificacoes);
                    conta.Adicionar(TipoTicketDePessoal.HorasExtras);
                }
            }

            remuneracao.Adicionar(new Conta("Salário", tipoContaSalario));

            var contaBolsaDeEstagio = new Conta("Bolsas Estágio", tipoContaBolsasDeEstagio);
            contaBolsaDeEstagio.Adicionar(TipoTicketDePessoal.BolsaDeEstagio);
            remuneracao.Adicionar(contaBolsaDeEstagio);

            var contaAdicionalNoturno = new Conta("Adicional Noturno", tipoContaExtras);
            contaAdicionalNoturno.Adicionar(TipoTicketDePessoal.AdicionalNoturno);
            remuneracao.Adicionar(contaAdicionalNoturno);

            var contaPericulosidade = new Conta("Periculosidade", tipoContaExtras);
            contaPericulosidade.Adicionar(TipoTicketDePessoal.AdicionaDePericulosidade);
            remuneracao.Adicionar(contaPericulosidade);

            var contaInsalubridade = new Conta("Insalubridade", tipoContaExtras);
            contaInsalubridade.Adicionar(TipoTicketDePessoal.AdicionalDeInsalubridade);
            remuneracao.Adicionar(contaInsalubridade);

            var contaHorasExtras = new Conta("Horas Extras", tipoContaExtras);
            contaHorasExtras.Adicionar(TipoTicketDePessoal.HorasExtras);
            remuneracao.Adicionar(contaHorasExtras);

            var contaGratificacoes = new Conta("Gratificações", tipoContaExtras);
            contaGratificacoes.Adicionar(TipoTicketDePessoal.Gratificacoes);
            remuneracao.Adicionar(contaGratificacoes);

            Contas contas = new Orcamento.Domain.Contas();

            contas.Salvar(contaGratificacoes);
            contas.Salvar(contaHorasExtras);
            contas.Salvar(contaInsalubridade);
            contas.Salvar(contaPericulosidade);
            contas.Salvar(contaAdicionalNoturno);
            contas.Salvar(contaBolsaDeEstagio);
            contas.Salvar(contaDecimoTerceiro);
            contas.Salvar(contaIndenizacao);
            contas.Salvar(contaFerias);
            contas.Salvar(contaINSS);
            contas.Salvar(contaFGTS);
            contas.Salvar(contaAssistenciaOdontologica);
            contas.Salvar(contaOutrasDespesas);
            contas.Salvar(contaValeDeTransporte);
            contas.Salvar(contaTreinamentoPessoal);
            contas.Salvar(contaOutrosBeneficios);
            contas.Salvar(contaAssistenciaMedica);
            contas.Salvar(contaAlimentacao);
            contas.Salvar(contaAssistenciaMedica);
            contas.Salvar(contaAssistenciaMedica);
            contas.Salvar(contaAssistenciaMedica);
            contas.Salvar(contaAssistenciaMedica);

            TicketsDeProducao tickets = new TicketsDeProducao();
            NovosOrcamentosPessoais orcamentos = new NovosOrcamentosPessoais();

            foreach (var departamento in listaDepartamentos)
            {

                var ticketDeAlimentacao = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.Alimentação, Descricao = "Alimentação", Valor = 300 };
                var ticketDeAssistenciaMedica = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.AssistenciaMedica, Descricao = "Assistência Médica", Valor = 300 };
                var ticketAssistencia = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.AssistenciaOdontologica, Descricao = "Assistência Odontológica", Valor = 50 };
                var ticketDeBeneficios = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.OutrosBeneficios, Descricao = "Outros Benefícios", Valor = 50 };
                var ticketTreinamentoPessoal = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.TreinamentoPessoal, Descricao = "Treinamento Pessoal", Valor = 50 };
                var ticketValeTransporte = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.ValeDeTransporte, Descricao = "Vale de Transporte", Valor = 150 };
                var ticketDeOutrasDespesas = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.OutrasDespesas, Descricao = "Outras Despesas", Valor = 50 };

                var adicionalNoturno = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.AdicionalNoturno, Descricao = "Adicional Noturno", Valor = 4 };
                var insalubridade = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.AdicionalDeInsalubridade, Descricao = "Adicional de Insalubridade", Valor = 10 };
                var periculosidade = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.AdicionaDePericulosidade, Descricao = "Adicional de Periculosidade", Valor = 1 };
                var gratificacoes = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.Gratificacoes, Descricao = "Gratificações", Valor = 1 };
                var horasExtras = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.HorasExtras, Descricao = "Horas Extras", Valor = 2 };
                var sobreaviso = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.AdicionalDeSobreaviso, Descricao = "Adicional de Sobreaviso", Valor = 0 };
                var indenizacao = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.Indenizacao, Descricao = "Indenização", Valor = 235 };
                var bolsaDeEstagio = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.BolsaDeEstagio, Descricao = "Bolsa de Estágio", Valor = 0 };
                var fgts = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.FGTS, Descricao = "FGTS", Valor = 8 };
                var inss = new TicketDeOrcamentoPessoal(departamento) { Ticket = TipoTicketDePessoal.INSS, Descricao = "INSS", Valor = 28 };

                foreach (var centroDeCusto in departamento.CentrosDeCusto)
                {
                    if (!centroDeCusto.GrupoDeContas.Any(g => g.Id == beneficios.Id))
                        centroDeCusto.Adicionar(beneficios);

                    if (!centroDeCusto.GrupoDeContas.Any(g => g.Id == remuneracao.Id))
                        centroDeCusto.Adicionar(remuneracao);

                    if (!centroDeCusto.GrupoDeContas.Any(g => g.Id == encargosSociais.Id))
                        centroDeCusto.Adicionar(encargosSociais);
                }

                tickets.Salvar(ticketDeAlimentacao);
                tickets.Salvar(ticketDeAssistenciaMedica);
                tickets.Salvar(ticketAssistencia);
                tickets.Salvar(ticketDeBeneficios);
                tickets.Salvar(ticketTreinamentoPessoal);
                tickets.Salvar(ticketValeTransporte);
                tickets.Salvar(ticketDeOutrasDespesas);

                tickets.Salvar(adicionalNoturno);
                tickets.Salvar(insalubridade);
                tickets.Salvar(periculosidade);
                tickets.Salvar(gratificacoes);
                tickets.Salvar(horasExtras);
                tickets.Salvar(sobreaviso);
                tickets.Salvar(indenizacao);
                tickets.Salvar(bolsaDeEstagio);
                tickets.Salvar(fgts);
                tickets.Salvar(inss);

                List<NovoOrcamentoPessoal> orcamentosPessoais = new List<NovoOrcamentoPessoal>();

                foreach (var centroDeCusto in departamento.CentrosDeCusto)
                {
                    var orcamento = new NovoOrcamentoPessoal(departamento, centroDeCusto, 2014);

                    orcamento.Adicionar(ticketDeAlimentacao);
                    orcamento.Adicionar(ticketDeAssistenciaMedica);
                    orcamento.Adicionar(ticketAssistencia);
                    orcamento.Adicionar(ticketDeBeneficios);
                    orcamento.Adicionar(ticketTreinamentoPessoal);
                    orcamento.Adicionar(ticketValeTransporte);
                    orcamento.Adicionar(ticketDeOutrasDespesas);

                    orcamento.Adicionar(adicionalNoturno);
                    orcamento.Adicionar(insalubridade);
                    orcamento.Adicionar(periculosidade);
                    orcamento.Adicionar(gratificacoes);
                    orcamento.Adicionar(horasExtras);
                    orcamento.Adicionar(sobreaviso);
                    orcamento.Adicionar(indenizacao);
                    orcamento.Adicionar(bolsaDeEstagio);
                    orcamento.Adicionar(fgts);
                    orcamento.Adicionar(inss);

                    orcamentosPessoais.Add(orcamento);
                }

                orcamentos.SalvarLista(orcamentosPessoais);
                departamentos.Salvar(departamento);
            }
        }
        public void c_integrar_dados_do_excel_test()
        {
            var tiposConta = new TiposConta();

            var tipoContaOutras = new TipoConta { Nome = "Outras" };

            tiposConta.Adicionar(tipoContaOutras);

            string _conectionstring;
            _conectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;";
            _conectionstring += String.Format("Data Source={0};", "D:\\Hospital2.xls");
            _conectionstring += "Extended Properties='Excel 8.0;HDR=NO;'";

            OleDbConnection cn = new OleDbConnection(_conectionstring);
            OleDbCommand cmd = new OleDbCommand("Select * from [HOSPITAL x CENTRO CUSTO MOD$]", cn);
            cn.Open();
            OleDbDataReader reader = cmd.ExecuteReader();

            List<RegistroExcel> documento = new List<RegistroExcel>();

            List<Conta> listaContas = new List<Conta>();
            List<CentroDeCusto> listaCentrosDeCusto = new List<CentroDeCusto>();

            Hospitais repositorioDeHospitais = new Hospitais();
            CentrosDeCusto repositorioDeCusto = new CentrosDeCusto();
            Contas repositorioContas = new Contas();

            int i = 0;

            while (reader.Read())
            {
                if (i == 0)
                {
                    i++;
                    continue;
                }
                if (reader[0] == DBNull.Value)
                    break;

                RegistroExcel registroExcel = new RegistroExcel()
                {
                    NomeHospital = (string)reader[0],
                    CodigoCentroDeCusto = (string)reader[1],
                    DescricaoCentroDeCusto = (string)reader[2]
                };

                if (reader[3] != DBNull.Value)
                {
                    registroExcel.DescricaoConta = (string)reader[3];
                    registroExcel.CodigoConta = (string)reader[4];
                    registroExcel.GrupoResumoNome = (string)reader[5];
                }

                documento.Add(registroExcel);
            }

            cn.Close();
            cn.Dispose();
            cmd.Dispose();

            var gruposDeConta = documento.Select(x => x.GrupoResumoNome).Distinct();

            var codigosDeConta = documento.Select(x => x.CodigoConta).Distinct();

            foreach (var codigoDeConta in codigosDeConta)
            {
                string descricaoDaConta = documento.Where(x => x.CodigoConta == codigoDeConta).Select(y => y.DescricaoConta).Distinct().First();

                Conta conta;
                if (!listaContas.Any(c => c.CodigoDaConta == codigoDeConta))
                {
                    conta = new Conta(descricaoDaConta, tipoContaOutras)
                    {
                        CodigoDaConta = codigoDeConta
                    };
                    repositorioContas.Salvar(conta);
                    listaContas.Add(conta);
                }
                else
                    conta = listaContas.Where(c => c.CodigoDaConta == codigoDeConta).FirstOrDefault();

            }
            GruposDeConta grupos = new GruposDeConta();
            List<GrupoDeConta> gruposDeContaLista = new List<GrupoDeConta>();
            foreach (var grupo in gruposDeConta)
            {
                GrupoDeConta grupoDeConta = new GrupoDeConta(grupo);

                var contasDoGrupo = documento.Where(x => x.GrupoResumoNome == grupo).Select(y => y.CodigoConta).Distinct();

                foreach (var codigoConta in contasDoGrupo)
                {
                    var conta = listaContas.Where(c => c.CodigoDaConta == codigoConta).FirstOrDefault();

                    grupoDeConta.Adicionar(conta);
                }

                gruposDeContaLista.Add(grupoDeConta);
                grupos.Salvar(grupoDeConta);
            }

            var codigosDecentrosDeCusto = documento.Select(x => x.CodigoCentroDeCusto).Distinct();

            foreach (var codigoDeCentro in codigosDecentrosDeCusto)
            {
                var descricaoDeCentroDeCusto = documento.Where(x => x.CodigoCentroDeCusto == codigoDeCentro).Select(y => y.DescricaoCentroDeCusto).Distinct().First();

                CentroDeCusto centroDeCusto = new CentroDeCusto(descricaoDeCentroDeCusto)
                {
                    CodigoDoCentroDeCusto = codigoDeCentro
                };

                var contas = documento.Where(x => x.CodigoCentroDeCusto == codigoDeCentro).Select(y => y.CodigoConta).Distinct();

                foreach (var conta in contas)
                {
                    centroDeCusto.AdicionarConta(listaContas.Where(x => x.CodigoDaConta == conta).SingleOrDefault());
                }

                repositorioDeCusto.Salvar(centroDeCusto);
                listaCentrosDeCusto.Add(centroDeCusto);
            }

            var hospitais = documento.Select(x => x.NomeHospital).Distinct();

            foreach (var nomeHospital in hospitais)
            {
                Hospital hospital = new Hospital();

                hospital.Nome = nomeHospital;

                var centrosDeCusto = documento.Where(x => x.NomeHospital == hospital.Nome).Select(y => y.CodigoCentroDeCusto).Distinct();

                foreach (var codigoCentroCusto in centrosDeCusto)
                {
                    hospital.AdicionarCentroDeCusto(listaCentrosDeCusto.Where(x => x.CodigoDoCentroDeCusto == codigoCentroCusto).SingleOrDefault());
                }

                repositorioDeHospitais.Salvar(hospital);
            }
        }
        public void InserirContas(Departamento setor)
        {
            var tiposConta = new TiposConta();

            var tipoContaOutros = tiposConta.Obter<TipoConta>(1);

            var maquinario = new Conta("Maquinário", tipoContaOutros);
            var cabos = new Conta("Cabos", tipoContaOutros);

            var RecursosExternos = new Conta("Recursos Externos", tipoContaOutros);
            var HorasExtras = new Conta("Horas Extras", tipoContaOutros);
            Contas = new List<Conta>();

            Contas.Add(maquinario);
            Contas.Add(cabos);
            Contas.Add(RecursosExternos);
            Contas.Add(HorasExtras);

            var contas = new Contas();
            contas.Salvar(maquinario);
            contas.Salvar(cabos);
            contas.Salvar(RecursosExternos);
            contas.Salvar(HorasExtras);
        }