/*
*
* 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.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import modelo.PerioPAP;
import modelo.PerioPM;
import modelo.TipoUsuario;
import org.jboss.util.NotImplementedException;
import actions.controle.SessaoDoUsuario;
import service.PerioPAPAppService;
import service.PerioPMAppService;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import util.DataUtil;
public class PerioPMActions extends BaseActions implements Serializable {
// Paginas
public final String PAGINA_LIST = "listPerioPM";
public final String PAGINA_NEW = "newPerioPM";
public final String PAGINA_SHOW = "showPerioPM";
public final String PAGINA_EDIT = "editPerioPM";
// Services
private static PerioPMAppService perioPMService;
private static PerioPAPAppService perioPAPService;
// Variaveis de Tela
private PerioPM perioPMCorrente;
private Date dataInicial;
private Date dataFinal;
private int periodoPMAtual;
private boolean dataInicialHabilitada = false;
private int opcaoExclusao;
// Componentes de Controle
private DataModel listaPerioPM;
public PerioPMActions(){
try {
perioPMService = FabricaDeAppService.getAppService(PerioPMAppService.class);
perioPAPService = FabricaDeAppService.getAppService(PerioPAPAppService.class);
} catch (Exception e) {
}
}
public String preparaInclusao() {
if (sessaoUsuarioCorrente.isAdministrador() || sessaoUsuarioCorrente.isGestor()){
perioPMCorrente = new PerioPM();
List<PerioPM> periodos = perioPMService.recuperaListaDePerioPMs();
if (!periodos.isEmpty()){
PerioPM ultimoPeriodo = periodos.get(periodos.size() - 1);
Calendar ultimaData = ultimoPeriodo.getDataFinal();
ultimaData.add(Calendar.DAY_OF_MONTH, 1);
dataInicial = ultimaData.getTime();
periodoPMAtual = ultimoPeriodo.getPeriodoPM() + 1;
dataInicialHabilitada = true;
} else {
periodoPMAtual = 1;
dataInicial = null;
}
dataFinal = null;
return PAGINA_NEW;
} else {
error("erro.FALTA_DE_PRIVILEGIO");
return PAGINA_LIST;
}
}
/**
* inclui PerioPAP e imediatamente Inclui PerioPM equivalente usando o PeriodoPM = a PeriodoPAP
* � preciso incluir primeiro o PerioPAP apesar da inclusao ser feita no PerioPM pois
* o PerioPAP � o lado um da relacao 1 para muitos.
*
* Verifica antes se datas Iniciais e finais do perioPM
* @return
*/
public String inclui() {
if (!DataUtil.validacaoDatasInicialEFinal(dataInicial, dataFinal)){
error("perioPM.DATA_FINAL_ANTERIOR");
return PAGINA_NEW;
}
perioPMCorrente.setDataInicial(DataUtil.dateToCalendar(dataInicial));
perioPMCorrente.setDataFinal(DataUtil.dateToCalendar(dataFinal));
perioPMCorrente.setPeriodoPM(periodoPMAtual);
try {
//Incluindo usando o service do PAP, que por sua vez ira incluir o perioPAP.
//Depois ele ira chamar o service do perioPM que ira incluir o perio PM
perioPAPService.incluiComPerioPM(perioPMCorrente);
} catch (AplicacaoException e) {
error(e.getMessage());
return PAGINA_NEW;
}
info("perioPM.SUCESSO_INCLUSAO");
listaPerioPM = null;
return PAGINA_LIST;
}
/**
* Recebe a lista do bean e insere na secao o PerioPM selecionado
* na pagina "list"
* Retorna "editPerioPM" e vai para a pagina "edit" onde � chamado o metodo altera()
* para confirmar a edicao.
* @return
*/
public String preparaAlteracao() {
if (sessaoUsuarioCorrente.isAdministrador() || sessaoUsuarioCorrente.isGestor()){
perioPMCorrente = (PerioPM) listaPerioPM.getRowData();
dataInicial = perioPMCorrente.getDataInicial().getTime();
dataFinal = perioPMCorrente.getDataFinal().getTime();
dataInicial = perioPMCorrente.getDataInicial().getTime();
dataFinal = perioPMCorrente.getDataFinal().getTime();
return PAGINA_EDIT;
} else {
error("erro.FALTA_DE_PRIVILEGIO");
return PAGINA_LIST;
}
}
public String altera() {
perioPMCorrente.setDataInicial(DataUtil.dateToCalendar(dataInicial));
perioPMCorrente.setDataFinal(DataUtil.dateToCalendar(dataFinal));
if (DataUtil.validacaoDatasInicialEFinal(dataInicial, dataFinal)){
perioPMService.altera(perioPMCorrente);
info("perioPM.SUCESSO_ALTERACAO");
listaPerioPM = null;
return PAGINA_LIST;
} else {
error("perioPM.DATA_FINAL_ANTERIOR");
return PAGINA_EDIT;
}
}
public String exclui() {
if (sessaoUsuarioCorrente.isAdministrador() || sessaoUsuarioCorrente.isGestor()){
if (perioPMService.recuperaListaDePerioPMs().isEmpty()){
error("perioPM.PERIODOS_INEXISTENTES");
return PAGINA_LIST;
}
try {
perioPMService.excluirPrimeiroUltimoOuTodos(opcaoExclusao);
} catch (AplicacaoException e) {
error(e.getMessage());
return PAGINA_LIST;
}
info("perioPM.SUCESSO_EXCLUSAO");
listaPerioPM = null;
} else {
error("erro.FALTA_DE_PRIVILEGIO");
}
return PAGINA_LIST;
}
public String cancelar() {
listaPerioPM = null;
return PAGINA_LIST;
}
public String mostra() {
perioPMCorrente = (PerioPM) listaPerioPM.getRowData();
return PAGINA_SHOW;
}
public String geraRelatorioPdf() {
throw new NotImplementedException("metodo imprimir");
}
// ================================== M�todos get() e set() ================================== //
public Date getDataInicial() {
return dataInicial;
}
public Date getDataFinal() {
return dataFinal;
}
public void setDataInicial(Date dataInicial) {
this.dataInicial = dataInicial;
}
public void setDataFinal(Date dataFinal) {
this.dataFinal = dataFinal;
}
public PerioPM getPerioPMCorrente() {
return perioPMCorrente;
}
public DataModel getListaPerioPM() {
if (listaPerioPM == null){
listaPerioPM = new ListDataModel(perioPMService.recuperaListaPaginadaDePerioPMs());
}
return listaPerioPM;
}
public void setPerioPMCorrente(PerioPM perioPMCorrente) {
this.perioPMCorrente = perioPMCorrente;
}
public void setListaPerioPM(DataModel listaPerioPM) {
this.listaPerioPM = listaPerioPM;
}
public void setDataInicialHabilitada(boolean dataInicialHabilitada) {
this.dataInicialHabilitada = dataInicialHabilitada;
}
public boolean isDataInicialHabilitada() {
return dataInicialHabilitada;
}
public void setPeriodoPMAtual(int periodoPMAtual) {
this.periodoPMAtual = periodoPMAtual;
}
public int getPeriodoPMAtual() {
return periodoPMAtual;
}
public void setOpcaoExclusao(int opcaoExclusao) {
this.opcaoExclusao = opcaoExclusao;
}
public int getOpcaoExclusao() {
return opcaoExclusao;
}
}