public Coordenador criaCoordenador(Curso curso, Pessoa pessoa)
 {
     Coordenador coordenador = new Coordenador();
     coordenador.curso = curso;
     coordenador.pessoa = pessoa;
     return coordenador;
 }
 public Curso criaCurso(String nomeCurso, Universidade universidade)
 {
     Curso curso = new Curso();
     curso.nome = nomeCurso;
     curso.universidade = universidade;
     return curso;
 }
 public Aluno criaAluno(Curso curso, Pessoa pessoa)
 {
     Aluno aluno = new Aluno();
     aluno.curso = curso;
     aluno.pessoa = pessoa;
     return aluno;
 }
        public void associaCursoCoordenador(Curso curso, Coordenador coordenador)
        {
            repositorio.context.cursos.Attach(curso);

            curso.coordenador = coordenador;
            curso.coordenadorId = coordenador.coordenadorId;

            repositorio.context.coordenadores.Attach(coordenador);

            coordenador.curso = curso;
            coordenador.cursoId = curso.cursoId;

            repositorio.context.Entry(curso).State = EntityState.Modified;
            repositorio.context.Entry(coordenador).State = EntityState.Modified;

            repositorio.salva();
        }
        private int criar(Curso curso, List<Periodo> periodos, int qtdPessoas)
        {
            List<Disciplina> disciplinas = new List<Disciplina>();
            Disciplina disciplina1 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc01", curso.nome + "- disciplina01");
            Disciplina disciplina2 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc02", curso.nome + "- disciplina02");
            Disciplina disciplina3 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc03", curso.nome + "- disciplina03");
            Disciplina disciplina4 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc04", curso.nome + "- disciplina04");
            Disciplina disciplina5 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc05", curso.nome + "- disciplina05");
            Disciplina disciplina6 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc06", curso.nome + "- disciplina06");
            Disciplina disciplina7 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc07", curso.nome + "- disciplina07");
            Disciplina disciplina8 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc08", curso.nome + "- disciplina08");
            Disciplina disciplina9 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc09", curso.nome + "- disciplina09");
            Disciplina disciplina10 = disciplinaBusiness.criaDisciplina(curso.nome + "- disc10", curso.nome + "- disciplina10");
            disciplinas.Add(disciplina1);
            disciplinas.Add(disciplina2);
            disciplinas.Add(disciplina3);
            disciplinas.Add(disciplina4);
            disciplinas.Add(disciplina5);
            disciplinas.Add(disciplina6);
            disciplinas.Add(disciplina7);
            disciplinas.Add(disciplina8);
            disciplinas.Add(disciplina9);
            disciplinas.Add(disciplina10);
            disciplinaBusiness.persisteDisciplinas(disciplinas);

            List<Pessoa> pessoas = new List<Pessoa>();
            List<Matricula> matriculas = new List<Matricula>();
            List<Aluno> alunos = new List<Aluno>();
            List<Professor> professores = new List<Professor>();
            List<Coordenador> coordenadores = new List<Coordenador>();

            qtdPessoas++;
            Endereco enderecoCoordenador = enderecoBusiness.criaEndereco("Rua " + qtdPessoas, qtdPessoas, "apto " + qtdPessoas, "bairro" + qtdPessoas, "cidade" + qtdPessoas, "estado" + qtdPessoas, "11111-11");
            Pessoa pessoaCoordenador = pessoaBusiness.criaPessoa("Pessoa" + qtdPessoas, "111111111-11", "pessoa" + qtdPessoas + "@email.com.br", "1111-1111", enderecoCoordenador);
            Matricula matriculaCoordenador = matriculaBusiness.criaMatricula(qtdPessoas.ToString(), TipoMatricula.COORDENADOR, pessoaCoordenador);
            matriculas.Add(matriculaCoordenador);

            Coordenador coordenador = coordenadorBusiness.criaCoordenador(curso, pessoaCoordenador);
            coordenadores.Add(coordenador);
            coordenadorBusiness.persisteCoordenadores(coordenadores);

            for (int i = 1; i <= 63; i++)
            {
                qtdPessoas++;

                Endereco endereco = enderecoBusiness.criaEndereco("Rua " + qtdPessoas, qtdPessoas, "apto " + qtdPessoas, "bairro" + qtdPessoas, "cidade" + qtdPessoas, "estado" + qtdPessoas, "11111-11");
                Pessoa pessoa = pessoaBusiness.criaPessoa("Pessoa" + qtdPessoas, "111111111-11", "pessoa" + qtdPessoas + "@email.com.br", "1111-1111", endereco);
                pessoas.Add(pessoa);
                if (i % 20 != 0)
                {
                    Matricula matricula = matriculaBusiness.criaMatricula(qtdPessoas.ToString(), TipoMatricula.ALUNO, pessoa);
                    Aluno aluno = alunoBusiness.criaAluno(curso, pessoa);
                    matriculas.Add(matricula);
                    alunos.Add(aluno);
                }
                else
                {
                    Matricula matricula = matriculaBusiness.criaMatricula(qtdPessoas.ToString(), TipoMatricula.PROFESSOR, pessoa);
                    Professor professor = professorBusiness.criaProfessor(curso, pessoa);
                    professores.Add(professor);
                    matriculas.Add(matricula);
                }
            }

            pessoaBusiness.persistePessoas(pessoas);
            matriculaBusiness.persisteMatriculas(matriculas);
            alunoBusiness.persisteAlunos(alunos);
            professorBusiness.persisteProfessores(professores);
            cursoBusiness.associaCursoCoordenador(curso, coordenador);

            List<Turma> turmas = new List<Turma>();

            int indiceDisciplina = 0;
            int contTurma = 0;
            foreach(Periodo periodo in periodos)
            {
                foreach (Professor professor in professores)
                {
                    Disciplina disciplina = disciplinas.ElementAt(indiceDisciplina);
                    if (indiceDisciplina < disciplinas.Count()-1)
                    {
                        indiceDisciplina++;
                    }
                    else
                    {
                        indiceDisciplina = 0;
                    }

                    Turma turma = turmaBusiness.criaTurma("turma"+contTurma, disciplina, professor, periodo, Turno.MATUTINO);
                    contTurma++;
                    turmas.Add(turma);
                }
            }

            turmaBusiness.persisteTurmas(turmas);

            List<Avaliacao> avaliacoes = new List<Avaliacao>();

            List<Nota> notas = new List<Nota>();
            Random randNum = new Random();
            Dictionary<Turma, List<Avaliacao>> mapAvaliacoesPorTurma = new Dictionary<Turma, List<Avaliacao>>();
            for (int i = 0; i < turmas.Count; i++)
            {
                List<Aluno> alunosTurma = new List<Aluno>();
                Turma turma = turmas.ElementAt(i);
                if (i % 3 == 0)
                {
                    alunosTurma.AddRange(alunos.GetRange(0, 20));
                }
                else if (i % 3 == 1)
                {
                    alunosTurma.AddRange(alunos.GetRange(19, 20));
                }
                else
                {
                    alunosTurma.AddRange(alunos.GetRange(39, 20));
                }
                turmaBusiness.associaTurmaAlunos(turma, alunosTurma);

                List<Avaliacao> avaliacoesTurma = new List<Avaliacao>();
                Avaliacao avaliacao1 = avaliacaoBusiness.criaAvaliacao("prova1", turma);
                Avaliacao avaliacao2 = avaliacaoBusiness.criaAvaliacao("prova2", turma);
                Avaliacao avaliacao3 = avaliacaoBusiness.criaAvaliacao("prova3", turma);
                avaliacoesTurma.Add(avaliacao1);
                avaliacoesTurma.Add(avaliacao2);
                avaliacoesTurma.Add(avaliacao3);

                avaliacoes.AddRange(avaliacoesTurma);
                mapAvaliacoesPorTurma.Add(turma, avaliacoesTurma);
                foreach (Avaliacao avaliacao in avaliacoesTurma)
                {
                    foreach (Aluno aluno in alunosTurma)
                    {
                        Double valor = randNum.Next(10);
                        Nota nota = notaBusiness.criaNota(aluno, valor, avaliacao);
                        notas.Add(nota);
                    }

                }
            }
            avaliacaoBusiness.persisteAvaliacoes(avaliacoes);
            notaBusiness.persisteNotas(notas);
            return qtdPessoas;
        }