

@ManagedBean
public class AtividadeAcademicaBean implements Serializable {

	private static final long serialVersionUID = 1L;

	Usuario usuarioLogado;
	private String semCorrente;
	private Integer qtdHoras = 0;
	private Integer idCursoSelected;
	private Funcionario funcionario;
	private Aluno aluno = new Aluno();
	private List<CursoSetor> cursosList;
	private List<Aluno> alunosSelectedList;
	private Funcionario funcionarioSelected;
	private Aluno alunoSelected;
	private String periodoLetivoSelected = "";
	private String modalidadeAcademicaSelected;
	private ParametrosMatricula parametrosMatricula;
	private List<Aluno> alunosList = new ArrayList<Aluno>();
	private AtividadeAcademica atividadeAcademica;
	private AtividadeAcademica atividadeAcademicaSelected;
	private List<ModalidadeAcademicaVO> modalidadeAcademicasList;
	private List<Funcionario> funcionariosList = new ArrayList<Funcionario>();
	private List<AtividadeAcademica> atividadesAcademicasList;
	private Map<String, ModalidadeAcademicaVO> modalidadeAcademicasMap = new HashMap<String, ModalidadeAcademicaVO>();
	public String listarAtividadeAcademica() {
		
	
		try {
			

			
			parametrosMatricula = ParametroMatriculaDAO.getInstance().getParametrosMatriculaSisacad();
			
			semCorrente = ParametrosMatricula.formataPeriodoLetivo(parametrosMatricula.getCdAnoOferta(),
					parametrosMatricula.getCdSemOferta());
			
			usuarioLogado = ManagedBeanHelper.recuperaBean("escopoSessaoBean", EscopoSessaoBean.class).getUsuarioCoordenadorLogado();

						
			usuarioLogado.inicializarDadosDoProfessor(parametrosMatricula);
			usuarioLogado.corrigirOfertasComHorariosRepetidos(parametrosMatricula);
			
			ManagedBeanHelper.recuperaBean("parametrosMatriculaBean", ParametrosMatriculaBean.class).setParametrosMatricula(parametrosMatricula);
			
			
			cursosList = ManagedBeanHelper.recuperaBean("coordenadorBean", CoordenadorBean.class).getListaCursos();
			
			modalidadeAcademicasList = SigadBO.getInstance().getModalidadesRest().getModalidadesAcademicas();

			for (ModalidadeAcademicaVO mo : modalidadeAcademicasList) {
				modalidadeAcademicasMap.put(mo.getCdModalidade(), mo);
			}
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (SessaoNaoEncontradaParaEntidadeFornecidaException e) {
			e.printStackTrace();
		} catch (ListaCargoVaziaException e) {
			e.printStackTrace();
		} catch (FuncionarioNaoLocalizadoOuAfastadoException e) {
			e.printStackTrace();
		} catch (MatriculaNaoLocalizadaException e) {
			e.printStackTrace();
		} catch (ProfOnlineExcepion e) {
			e.printStackTrace();
		}
		
		return "/seguro/internas/coordenador/listaAtividadeAcademica.xhtml";
	}

	@SuppressWarnings("unchecked")
	public String  findFuncionariosByCurso() {

		try {
			
			funcionariosList = 	GenericDao.findAllByNamedQueryWithParameters(Funcionario.class, "FindFuncionarios", "idCurso", idCursoSelected);
		
		} catch (NumeroAtributosDiferenteNumeroValoresException e) {
			e.printStackTrace();
		} catch (SessaoNaoEncontradaParaEntidadeFornecidaException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public void findAtividadesAcademicasByFuncionario() {
		
		
		findAtividadesAcademicasByPeriodoLetivo();


	}

	private void addDescricaoModalidades(List<AtividadeAcademica> atividadesAcademicaList) {
		
		for(AtividadeAcademica a : atividadesAcademicasList) {
			
			if(a.getCdModalidadeAcademica() != null)
			a.setDescricaoModalidadeAcademica(modalidadeAcademicasMap.get(a.getCdModalidadeAcademica()).getDescricao());
			
		}
	}
	

	@SuppressWarnings("unchecked")
	public void findAtividadesAcademicasByPeriodoLetivo() {
		String dataInicial;
		String dataFinal;
		String [] semestres = null;
		qtdHoras = 0;

		try {
			
			if(periodoLetivoSelected == null || periodoLetivoSelected.equals("")) {
				
				parametrosMatricula = ParametroMatriculaDAO.getInstance().getParametrosMatriculaSisacad();
				
				semCorrente = ParametrosMatricula.formataPeriodoLetivo(parametrosMatricula.getCdAnoOferta(),
						parametrosMatricula.getCdSemOferta());
				semestres = ParametroMatriculaDAO.getInstance().getDadas(semCorrente).split("[ - ]");
			}else {
				semestres = ParametroMatriculaDAO.getInstance().getDadas(periodoLetivoSelected).split("[ - ]");

			}
			
			dataInicial = semestres[0];
			dataFinal = semestres[2];

			atividadesAcademicasList = GenericDao.findAllByNamedQueryWithParameters(AtividadeAcademica.class,
					"FindAtividadesAcademicasByPeriodoLetivo", "idFuncionario", funcionarioSelected.getIdFuncionario(),
					"inicio", DataUtil.transformaStringEmData(dataInicial), "fim",
					DataUtil.transformaStringEmData(dataFinal));
			

			for(AtividadeAcademica a : atividadesAcademicasList) {
				
				if(a.getHrSemanais() != null)
				qtdHoras += a.getHrSemanais();
			}

			addDescricaoModalidades(atividadesAcademicasList);



		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (NumeroAtributosDiferenteNumeroValoresException e) {
			e.printStackTrace();
		} catch (SessaoNaoEncontradaParaEntidadeFornecidaException e) {
			e.printStackTrace();
		}
	}
	
	public String updateAtividadeAcademica() {
		
		System.out.println(atividadeAcademicaSelected.getId());
		return null;
	}
	
	public void save(AtividadeAcademica atividadeAcademica) {
		
		atividadeAcademica.setFuncionario(funcionarioSelected);
		
		try {
			GenericDao.save(atividadeAcademica);
			
			atividadeAcademica = new AtividadeAcademica();
			
		} catch (ViolacaoChaveHibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ValidacaoHibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SessaoNaoEncontradaParaEntidadeFornecidaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public void findAlunos(Aluno aluno) {
		
		try {
			
			alunosList = new AlunoDAO().findAlunoByMatriculaENome(aluno);
		
		} catch (SessaoNaoEncontradaParaEntidadeFornecidaException e) {
			e.printStackTrace();
		}
		
	}
	
	public String addAluno() {
		System.out.println("TESTE");
		
		return null;
	}
	
	public void prepareAtividadeAcademica() {
		atividadeAcademica = new AtividadeAcademica();
		atividadeAcademicaSelected = new AtividadeAcademica();
		atividadesAcademicasList = new ArrayList<AtividadeAcademica>();
	}
	
	public void prepareAlunosList() {
		aluno = new Aluno();
		alunoSelected = new Aluno();
		setAlunosSelectedList(new ArrayList<Aluno>());
	}
	
	public void limpar() {
		funcionarioSelected = new Funcionario();
	}
	
	public List<Funcionario> getFuncionariosList() {
		return funcionariosList;
	}

	public void setFuncionariosList(List<Funcionario> funcionariosList) {
		this.funcionariosList = funcionariosList;
	}


	public List<CursoSetor> getCursosList() {
		return cursosList;
	}


	public void setCursosList(List<CursoSetor> cursosList) {
		this.cursosList = cursosList;
	}

	public Integer getIdCursoSelected() {
		return idCursoSelected;
	}


	public void setIdCursoSelected(Integer idCursoSelected) {
		this.idCursoSelected = idCursoSelected;
	}

	public Funcionario getFuncionarioSelected() {
		return funcionarioSelected;
	}

	public void setFuncionarioSelected(Funcionario funcionarioSelected) {
		this.funcionarioSelected = funcionarioSelected;
	}
	
	

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public List<AtividadeAcademica> getAtividadesAcademicasList() {
		return atividadesAcademicasList;
	}

	public void setAtividadesAcademicasList(List<AtividadeAcademica> atividadesAcademicasList) {
		this.atividadesAcademicasList = atividadesAcademicasList;
	}

	public List<ModalidadeAcademicaVO> getModalidadeAcademicasList() {
		return modalidadeAcademicasList;
	}

	public void setModalidadeAcademicasList(List<ModalidadeAcademicaVO> modalidadeAcademicasList) {
		this.modalidadeAcademicasList = modalidadeAcademicasList;
	}

	public String getModalidadeAcademicaSelected() {
		return modalidadeAcademicaSelected;
	}

	public void setModalidadeAcademicaSelected(String modalidadeAcademicaSelected) {
		this.modalidadeAcademicaSelected = modalidadeAcademicaSelected;
	}

	public Map<String, ModalidadeAcademicaVO> getModalidadeAcademicasMap() {
		return modalidadeAcademicasMap;
	}

	public void setModalidadeAcademicasMap(Map<String, ModalidadeAcademicaVO> modalidadeAcademicasMap) {
		this.modalidadeAcademicasMap = modalidadeAcademicasMap;
	}

	public String getPeriodoLetivoSelected() {
		return periodoLetivoSelected;
	}

	public void setPeriodoLetivoSelected(String periodoLetivoSelected) {
		this.periodoLetivoSelected = periodoLetivoSelected;
	}

	public AtividadeAcademica getAtividadeAcademicaSelected() {
		return atividadeAcademicaSelected;
	}

	public void setAtividadeAcademicaSelected(AtividadeAcademica atividadeAcademicaSelected) {
		this.atividadeAcademicaSelected = atividadeAcademicaSelected;
	}

	public Integer getQtdHoras() {
		return qtdHoras;
	}

	public void setQtdHoras(Integer qtdHoras) {
		this.qtdHoras = qtdHoras;
	}

	public AtividadeAcademica getAtividadeAcademica() {
		return atividadeAcademica;
	}

	public void setAtividadeAcademica(AtividadeAcademica atividadeAcademica) {
		this.atividadeAcademica = atividadeAcademica;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public List<Aluno> getAlunosList() {
		return alunosList;
	}

	public void setAlunosList(List<Aluno> alunosList) {
		this.alunosList = alunosList;
	}

	public Aluno getAlunoSelected() {
		return alunoSelected;
	}

	public void setAlunoSelected(Aluno alunoSelected) {
		this.alunoSelected = alunoSelected;
	}

	public List<Aluno> getAlunosSelectedList() {
		return alunosSelectedList;
	}

	public void setAlunosSelectedList(List<Aluno> alunosSelectedList) {
		this.alunosSelectedList = alunosSelectedList;
	}

}
