/* * * Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute - Graduate School and Research in Engineering. * See the file license.txt for copyright permission. * */ package actions; import java.io.Serializable; import java.util.Date; import java.util.List; import javax.faces.event.ValueChangeEvent; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import modelo.PerioPAP; import modelo.PerioPM; import service.PerioPAPAppService; import service.PerioPMAppService; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import util.DataUtil; import util.SelectOneDataModel; public class PerioPAPActions extends BaseActions implements Serializable { private static final long serialVersionUID = 1L; // Paginas public final String PAGINA_LIST = "listPerioPAP"; public final String PAGINA_SHOW = "showPerioPAP"; public final String PAGINA_EDIT = "editPerioPAP"; public final String PAGINA_EDITAGREGADOR = "editAgregador"; // Services private static PerioPMAppService perioPMService; private static PerioPAPAppService perioPAPService; // Variaveis de Tela private int agregadorDePerioPMs; private int numPeriodosPM; private PerioPAP perioPAPCorrente; // Componentes de Controle private SelectOneDataModel<PerioPM> comboPerioPMsInicial; private SelectOneDataModel<PerioPM> comboPerioPMsFinal; private DataModel listaPerioPAP; public PerioPAPActions(){ try { perioPMService = FabricaDeAppService.getAppService(PerioPMAppService.class); perioPAPService = FabricaDeAppService.getAppService(PerioPAPAppService.class); } catch (Exception e) { } agregadorDePerioPMs = 1; } /** * Usado na edi��o. * � necessario atribuir a listaPerioPAP, comboPerioPMsInicial e comboPerioPMsFinal null, para for�ar * o novo get dos mesmos. * @return */ public String cancela() { listaPerioPAP = null; comboPerioPMsInicial = null; comboPerioPMsFinal = null; return PAGINA_LIST; } /** * M�todo usado na exibi��o de um periopap * * @return String */ public String mostra() { perioPAPCorrente = (PerioPAP) listaPerioPAP.getRowData(); return PAGINA_SHOW; } /** * Recebe a lista do bean e insere na requisi��o o PerioPAP selecionado * na pagina "list" * Obtem os campos calculados periodoPM inicial e final desse perioPAP, dataInicial, dataFinal, numDiasUteis. * Todos a partir do perioPM. * Retorna "PAGINA_EDIT" e vai para a pagina "edit" onde � chamado o metodo altera() * para confirmar a edicao. * @return */ public String preparaAlteracao() { if (sessaoUsuarioCorrente.isAdministrador() || sessaoUsuarioCorrente.isGestor()){ perioPAPCorrente = (PerioPAP) listaPerioPAP.getRowData(); //Obtem PeriodoPM inicial e final desse PerioPAP PerioPM perioPMInicial = perioPAPService.obtemPrimeiroPerioPMdoPerioPAP(perioPAPCorrente); //Atribui valores atuais para os campos calculados perioPAPCorrente.setPeriodoPMInic(perioPMInicial.getPeriodoPM()); perioPAPCorrente.setDataInicial(perioPMInicial.getDataInicial()); PerioPM perioPMFinal = perioPAPService.obtemUltimoPerioPMdoPerioPAP(perioPAPCorrente); perioPAPCorrente.setPeriodoPMFinal(perioPMFinal.getPeriodoPM()); perioPAPCorrente.setDataFinal(perioPMFinal.getDataFinal()); perioPAPCorrente.setNumDiasUteis( perioPMService.calculaTotalDiasUteisIntervalo(perioPMInicial, perioPMFinal)); } else { error("erro.FALTA_DE_PRIVILEGIO"); return PAGINA_LIST; } return PAGINA_EDIT; } /** * Recupera os perioPMs inicial e final, editados nas comboBoxs. * Atribui valores para os campos calculados: dataInicial, dataFinal. * Faz criticas para nao permitir dataFinal anterior a dataInicial, ou periodoPMfinal anterior ao periodoPMInicial * E altera o perioPAPCorrente. * * @return */ public String altera() { //� preciso fazer essas atribuicoes apenas para essas 2 variaveis, pois elas sao as unicas alteradas na edicao, atraves das comboBoxs. //Os demais campos calculados ja sao atualizados pelos gets e sets na hora do request. PerioPM perioPMInicial = comboPerioPMsInicial.getObjetoSelecionado(); perioPAPCorrente.setPeriodoPMInic(perioPMInicial.getPeriodoPM()); PerioPM perioPMFinal = comboPerioPMsFinal.getObjetoSelecionado(); perioPAPCorrente.setPeriodoPMFinal(perioPMFinal.getPeriodoPM()); perioPAPCorrente.setDataInicial(perioPMInicial.getDataInicial()); perioPAPCorrente.setDataFinal(perioPMFinal.getDataFinal()); //conversao necessaria para utilizar o validador Date dataInicial = perioPAPCorrente.getDataInicial().getTime(); Date dataFinal = perioPAPCorrente.getDataFinal().getTime(); //Faz valida��o de data verificando se datafinal � anterior a dataInicial if (DataUtil.validacaoDatasInicialEFinal(dataInicial, dataFinal) ){ //Essa critica foi feita como medida de seguran�a. //pois a critica anterior impediria esta (se o perioPM estiver com as criticas corretas) if(perioPMInicial.getPeriodoPM() > perioPMFinal.getPeriodoPM()){ error("perioPAP.PERIOPM_FINAL_ANTERIOR"); return PAGINA_EDIT; } else { perioPAPService.altera(perioPAPCorrente); info("perioPAP.SUCESSO_ALTERACAO"); listaPerioPAP = null; comboPerioPMsInicial = null; comboPerioPMsFinal = null; return PAGINA_LIST; } } else { error("perioPAP.DATA_FINAL_ANTERIOR"); return PAGINA_EDIT; } } /** * Reecalcula os perioPAPs em funcao dos perioPMs, fazendo 1x1 novamente. * verifica se existem periopaps cadastrados * verifica se usuario tem acesso a essa fun��o - ou seja verifica se � * Admin ou gestor * * @return */ public String reinicializaPerioPAPs(){ List<PerioPAP> ListaDePeriodosPAP = perioPAPService.recuperaListaDePerioPAPs(); //verifica se tem perioPAPs cadastradosao //nao precisa verificar se existe perioPM pois se existir periopap � pq existe periopm if (!ListaDePeriodosPAP.isEmpty()) { if (sessaoUsuarioCorrente.isAdministrador() || sessaoUsuarioCorrente.isGestor()){ perioPAPService.reinicializaPerioPAPs(); listaPerioPAP = null; return PAGINA_LIST; } else { error("erro.FALTA_DE_PRIVILEGIO"); return PAGINA_LIST; } }else { error("perioPAP.PERIODOS_INEXISTENTES"); return PAGINA_LIST; } } /** * Verifica se tem periodos cadastrados * Verifica se o usuario tem acesso a essa opera��o * Direciona para a pagina de edicao do agregador * * @return */ public String preparaAgrupaPerioPMs(){ List<PerioPAP> ListaDePeriodosPAP = perioPAPService.recuperaListaDePerioPAPs(); //verifica se tem perioPAPs cadastrados //nao precisa verificar se existe perioPM pois se existir periopap � pq existe periopm if (!ListaDePeriodosPAP.isEmpty()) { if (sessaoUsuarioCorrente.isAdministrador() || sessaoUsuarioCorrente.isGestor()){ return PAGINA_EDITAGREGADOR; } else { error("erro.FALTA_DE_PRIVILEGIO"); return PAGINA_LIST; } }else { error("perioPAP.PERIODOS_INEXISTENTES"); return PAGINA_LIST; } } /** * Torna editavel o numero de periodos PM que o usuario deseja agregar * verifica se o nume � divisivel pelo total de periodos PM cadastrados * e agrega os Periodos PM usando o agregador editado * * @return */ public String agrupaPerioPMs(){ int numPerioPMs = perioPMService.recuperaListaDePerioPMs().size(); if(numPerioPMs % agregadorDePerioPMs != 0){ error("perioPAP.AGREGADOR_INCORRETO"); return PAGINA_EDITAGREGADOR; } perioPAPService.agrupaPerioPAPs(agregadorDePerioPMs); listaPerioPAP = null; return PAGINA_LIST; } /** * Metodo que � executado no momento em que a comboBox de periodoPMFinal do perioPAP � alterado. * Deve ser usado em paralelo com o valueChangeListener e o rerender dos campos calculados na view. * * Recalcula a dataFinal e o NumDiasUteis que sao mostrados na tela. * Essas alteracoes ainda nao sao feitas em arquivo, por isso nao adianta usar o get de * variaveis como perioPAPCorrente. * * @param evento */ public void calculaDataFinalENumDiasUteis (ValueChangeEvent evento){ //Recupera a label que esta selecionada na combobox e a poem na string novoPeriodoPM String novoPeriodoPM = (String)evento.getNewValue(); //Substitui o trecho da string que contem "Periodo - " por vazio //deixando assim na string apenas o numero do periodoPM novoPeriodoPM = novoPeriodoPM.replace("Periodo - ", ""); PerioPM novoPerioPM = null; try{ novoPerioPM = perioPMService.recuperaPerioPMPorPeriodoPM(Integer.valueOf(novoPeriodoPM)); } catch(AplicacaoException e){ } //recupera um novo intervalo de perioPMs usando como periodo final o novo valor da combo box List<PerioPM> novoIntervaloDePerioPMs = perioPMService.recuperaIntervaloDePerioPMs(perioPAPCorrente.getPeriodoPMInic(), novoPerioPM.getPeriodoPM()); //calcula o total de dias uteis apartir do novo intervalo de perioPMs Double numDiasUteis = perioPAPService.calculaTotalDiasUteis(novoIntervaloDePerioPMs); perioPAPCorrente.setDataFinal(novoPerioPM.getDataFinal()); perioPAPCorrente.setNumDiasUteis(numDiasUteis); } // ================================== M�todos get() e set() ================================== // public int getNumPeriodosPM() { return perioPMService.recuperaListaDePerioPMs().size(); } public void setNumPeriodosPM(int numPeriodosPM) { this.numPeriodosPM = numPeriodosPM; } public int getAgregadorDePerioPMs() { return agregadorDePerioPMs; } public void setAgregadorDePerioPMs(int agregadorDePerioPMs) { this.agregadorDePerioPMs = agregadorDePerioPMs; } /** * M�todo que cria a Combobox de PerioPMInicial que lista os perioPMs cadastrados no sistema. * * @author felipe */ public SelectOneDataModel<PerioPM> getComboPerioPMsInicial() { PerioPM perioPMInic = null; if (comboPerioPMsInicial == null){ //Verifica se existe perioPAP corrente, //se existir atribui valor da comboBox para o perioPMInic do mesmo. if(perioPAPCorrente == null){ comboPerioPMsInicial = SelectOneDataModel.criaSemTextoInicial(perioPMService.recuperaListaPaginadaDePerioPMs()); } else{ perioPMInic = perioPAPService.obtemPrimeiroPerioPMdoPerioPAP(perioPAPCorrente); comboPerioPMsInicial = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(perioPMService.recuperaListaPaginadaDePerioPMs(),perioPMInic); } } return comboPerioPMsInicial; } public void setComboPerioPMsInicial(SelectOneDataModel<PerioPM> comboPerioPMsInicial) { this.comboPerioPMsInicial = comboPerioPMsInicial; } /** * M�todo que cria a Combobox de PerioPMFinal que lista os perioPMs cadastrados no sistema. * * @author felipe */ public SelectOneDataModel<PerioPM> getComboPerioPMsFinal() { PerioPM perioPMfinal=null; if (comboPerioPMsFinal == null){ //Verifica se existe perioPAP corrente, //se existir atribui valor da comboBox para o perioPMfinal do mesmo. if(perioPAPCorrente == null){ comboPerioPMsFinal = SelectOneDataModel.criaSemTextoInicial(perioPMService.recuperaListaPaginadaDePerioPMs()); } else{ perioPMfinal = perioPAPService.obtemUltimoPerioPMdoPerioPAP(perioPAPCorrente); comboPerioPMsFinal = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(perioPMService.recuperaListaPaginadaDePerioPMs(),perioPMfinal); } } return comboPerioPMsFinal; } public void setComboPerioPMsFInal(SelectOneDataModel<PerioPM> comboPerioPMsFinal) { this.comboPerioPMsFinal = comboPerioPMsFinal; } public PerioPAP getPerioPAPCorrente() { return perioPAPCorrente; } public DataModel getListaPerioPAP() { if (listaPerioPAP == null){ listaPerioPAP = new ListDataModel(perioPAPService.recuperaListaPaginadaDePerioPAPs()); } return listaPerioPAP; } public void setPerioPAPCorrente(PerioPAP perioPAPCorrente) { this.perioPAPCorrente = perioPAPCorrente; } public void setListaPerioPAP(DataModel listaPerioPAP) { this.listaPerioPAP = listaPerioPAP; } }