/* * * 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 service; import java.util.List; import modelo.CadPlan; import modelo.CapacDia; import modelo.CapacRec; import modelo.DeFamPer; import modelo.DeModPer; import modelo.Familia; import modelo.HP; import modelo.Modelo; import modelo.Parametros; import modelo.PerioPAP; import modelo.PerioPM; import modelo.Recurso; import service.anotacao.Transacional; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import DAO.CadPlanDAO; import DAO.CapacDiaDAO; import DAO.CapacRecDAO; import DAO.DeFamPerDAO; import DAO.DeModPerDAO; import DAO.FamiliaDAO; import DAO.HPDAO; import DAO.ModeloDAO; import DAO.ParametrosDAO; import DAO.PerioPAPDAO; import DAO.PerioPMDAO; import DAO.RecursoDAO; import DAO.Impl.CadPlanDAOImpl; import DAO.Impl.CapacDiaDAOImpl; import DAO.Impl.CapacRecDAOImpl; import DAO.Impl.DeFamPerDAOImpl; import DAO.Impl.DeModPerDAOImpl; import DAO.Impl.FamiliaDAOImpl; import DAO.Impl.HPDAOImpl; import DAO.Impl.ModeloDAOImpl; import DAO.Impl.ParametrosDAOImpl; import DAO.Impl.PerioPAPDAOImpl; import DAO.Impl.PerioPMDAOImpl; import DAO.Impl.RecursoDAOImpl; import DAO.controle.FabricaDeDao; import DAO.exception.ObjetoNaoEncontradoException; public class HPAppService { // DAOs private static HPDAO hpDAO; private static CadPlanDAO cadPlanDAO; private static ParametrosDAO parametrosDAO; private static DeModPerDAO deModPerDAO; private static DeFamPerDAO deFamPerDAO; private static ModeloDAO modeloDAO; private static FamiliaDAO familiaDAO; private static PerioPMDAO perioPMDAO; private static PerioPAPDAO perioPAPDAO; private static CapacDiaDAO capacDiaDAO; private static CapacRecDAO capacRecDAO; private static RecursoDAO recursoDAO; // Services private static ParametrosAppService parametrosService; private static CapacRecAppService capacRecService; private static CapacDiaAppService capacDiaService; private static DeModPerAppService deModPerService; // private static DeFamPerAppService deFamPerService; @SuppressWarnings("unchecked") public HPAppService() { try { // DAO hpDAO = FabricaDeDao.getDao(HPDAOImpl.class); cadPlanDAO = FabricaDeDao.getDao(CadPlanDAOImpl.class); parametrosDAO = FabricaDeDao.getDao(ParametrosDAOImpl.class); deModPerDAO = FabricaDeDao.getDao(DeModPerDAOImpl.class); deFamPerDAO = FabricaDeDao.getDao(DeFamPerDAOImpl.class); modeloDAO = FabricaDeDao.getDao(ModeloDAOImpl.class); familiaDAO = FabricaDeDao.getDao(FamiliaDAOImpl.class); perioPMDAO = FabricaDeDao.getDao(PerioPMDAOImpl.class); perioPAPDAO = FabricaDeDao.getDao(PerioPAPDAOImpl.class); capacRecDAO = FabricaDeDao.getDao(CapacRecDAOImpl.class); capacDiaDAO = FabricaDeDao.getDao(CapacDiaDAOImpl.class); recursoDAO = FabricaDeDao.getDao(RecursoDAOImpl.class); // Service capacDiaService = FabricaDeAppService.getAppService(CapacDiaAppService.class); capacRecService = FabricaDeAppService.getAppService(CapacRecAppService.class); parametrosService = FabricaDeAppService.getAppService(ParametrosAppService.class); deModPerService = FabricaDeAppService.getAppService(DeModPerAppService.class); // deFamPerService = FabricaDeAppService.getAppService(DeFamPerAppService.class); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } /** * Esta opcao executa uma serie de procedimentos que visam atualizar os * arquivos que s�o guiados pelos Periodos definidos no sistema, com os novos * periodos modificados pelo usuario. Sao atualizados os arquivos: DeModPer, * DeFamPer, CapacDia e CapacRec, e sao excluidos os arquivos CadPlan, PlPerMod * e PlPerFam porque ao iniciar um novo ciclo de planejamento nao tem sentido deixar * os planos cadastrados usados para gerar os Planos Vigentes no ciclo de planejamento anterior. * Uma vez acionada esta opcao he alterado o flag InicPlanejamento do arquivo Parametro para Inicializado. * * * @throws AplicacaoException * @author felipe.arruda */ @Transacional public void iniciaPlanejamento() throws AplicacaoException { DeModPer demanda = null; // tirar do comentario quando fizer defamper DeFamPer deFamPer = null; List<PerioPAP> intervaloPeriodosDeFamPer = null; List<PerioPM> intervaloPeriodosDeModPer = null; List<Modelo> modelos = modeloDAO.recuperaListaDeModelos(); List<Familia> familias = familiaDAO.recuperaListaDeFamilias(); List<DeModPer> demandas = deModPerDAO.recuperaListaDeDemandaModeloPeriodo(); // FAZER!!!!!!!!!!!!!!!!!!! // List<DeFamPer> ListaDeDeFamPers = deFamPerDAO.recuperaListaDeDeFamPer(); //Fazer busca no DeFamPer E TIRAR DE COMENTARIO List<CadPlan> planos = cadPlanDAO.recuperaListaDeCadPlan(); List<CapacDia> listaCapacDia = capacDiaDAO.recuperaListaDeCapacDias(); List<CapacRec> listaCapacRec = capacRecDAO.recuperaListaDeCapacRecs(); List<Recurso> listaDeRecursos = recursoDAO.recuperaListaDeRecursos(); // 0) Verificar se o Planejamento j� se encontra Iniciado Parametros parametro = parametrosDAO.recuperaListaDeParametros().get(0); if (parametro.isInicPlanejamento()){ throw new AplicacaoException("hp.PLANEJAMENTO_JA_INICIADO"); } // 1) Verificar se existem Per�odos cadastrados no Sistema if (perioPMDAO.recuperaListaDePerioPMs().isEmpty()){ throw new AplicacaoException("perioPM.PERIODOS_INEXISTENTES"); } // 2) Verificacao relativa a HP // a) Verificar se existe um HP cadastrado List<HP> hpBD = hpDAO.recuperaListaDeHP(); if (hpBD.isEmpty()){ throw new AplicacaoException("hp.NAO_CADASTRADO"); } // b) Verificar se existem intervalos correspondentes as Demandas (Familia e Modelo) HP hp = hpBD.get(0); if ((hp.getPerioPMInicDemMod() != null) && (hp.getPerioPMFinalDemMod() != null) && (hp.getPerioPAPInicDemFam() != null) && (hp.getPerioPAPFinalDemFam() != null)){ //monta lista com periopaps relativos ao intervalo do HP intervaloPeriodosDeFamPer = perioPAPDAO.recuperaIntervaloDePerioPAPs (hp.getPerioPAPInicDemFam().getPeriodoPAP(), hp.getPerioPAPFinalDemFam().getPeriodoPAP()); intervaloPeriodosDeModPer = perioPMDAO.recuperaIntervaloDePerioPMs (hp.getPerioPMInicDemMod().getPeriodoPM(), hp.getPerioPMFinalDemMod().getPeriodoPM()); } else { throw new AplicacaoException("hp.DEMANDAS_NAO_INICIALIZADAS"); } //c) Verifica se o intervalo do PMP(Data Inicial do Primeiro Periodo, e Data Final do Ultimo Periodo) � igual ao intervalo do PAP //se n�o for impede o usuario de inicializar o HP if (hp.getPerioPMInicPMP().getDataFinal().equals(hp.getPerioPAPFinalPAP())){ throw new AplicacaoException("hp.INTERVALO_PMP_INCOMPATIVEL_INTERVALO_PAP"); } // 3) Setar o parametro 'InicPlanejamento' como TRUE, ou seja Inicializado parametro.setInicPlanejamento(true); parametrosDAO.altera(parametro); // 4) ATUALIZAR OS REGISTROS DE DeModPer //percorre lista de perioPM e verifica se esta faltando //algum registro de DeModPer para cada periodo em questao, //e inclui um deModPer com valor zerado para o mesmo. for (PerioPM perioPM : intervaloPeriodosDeModPer) { for (Modelo modelo : modelos) { //tenta encontrar o deModPer relativo ao periodo e ao modelo em questao, //se ele nao existir cria um novo zerado. try { demanda = deModPerDAO.recuperaDeModPerPorPeriodoEModelo(perioPM, modelo); } catch (ObjetoNaoEncontradoException e) { demanda = new DeModPer(modelo, perioPM); deModPerService.inclui(demanda); } } } // 5) ATUALIZAR OS REGISTROS DE DeFamPer DeFamPerAppService deFamPerService = null; try { deFamPerService = FabricaDeAppService .getAppService(DeFamPerAppService.class); } catch (Exception e) { e.printStackTrace(); System.exit(1); } //percorre lista de perioPAP e verifica se esta faltando //algum registro de DeFamPer para cada periodo em questao, //e inclui um DeFamPer com valor zerado para o mesmo. for (PerioPAP perioPAP : intervaloPeriodosDeFamPer) { for (Familia familia : familias) { //tenta encontrar o deFamPer relativo ao periodo e a familia em questao, //se ele nao existir cria um novo zerado. try { deFamPer = deFamPerDAO.recuperaDeFamPerPorPerioPAPEFamilia(perioPAP, familia); } catch (ObjetoNaoEncontradoException e) { deFamPer = new DeFamPer(familia, perioPAP); // deFamPerService.inclui(deFamPer); //deve totalizar nesse motmento deFamPerService.incluiTotalizandoDeModPer(deFamPer); } } } // 6) Excluir todos os registros de CadPlan do sistema // Exclui em cascata os registros de planoModelo e PlPerMod relativos a cada plano. for (CadPlan plano : planos) { CadPlan cadPlanBD = null; try { cadPlanBD = cadPlanDAO.getPorId(plano.getId()); } catch (ObjetoNaoEncontradoException e) { } cadPlanDAO.exclui(cadPlanBD); } // 7) Excluir OS REGISTROS DE PlPerFam // // ---------> Ainda nao implementado, pois aguarda a conclusao de PlPerFam <--------- //Obtem lista com perioPMs dentro do HP cadastrado para o Plano Mestre List<PerioPM> listaPerioPMsHP = perioPMDAO.recuperaIntervaloDePerioPMs(hp.getPerioPMInicPMP().getPeriodoPM(), hp.getPerioPMFinalPMP().getPeriodoPM()); // 9) ATUALIZAR OS REGISTROS DE CapacRec //percorre lista de periodoPM e verifica se esta faltando //algum registro de CapacRec para cada periodo em questao, //e inclui um CapacRec com valor zerado para o mesmo. CapacRec capacRec = null; for (PerioPM perioPM : listaPerioPMsHP) { for (Recurso recurso : listaDeRecursos ){ //tenta encontrar o capacRec relativo ao periodo e ao recurso em questao, //se ele nao existir cria um novo zerado. try { capacRec = capacRecDAO.recuperaCapacRecPorRecursoEPerioPM(recurso, perioPM); } catch (ObjetoNaoEncontradoException e) { capacRec = new CapacRec(); capacRec.setRecurso(recurso); capacRec.setPerioPM(perioPM); capacRecService.inclui(capacRec); } } } // // 10) ATUALIZAR OS REGISTROS DE CapacDia //percorre lista de periodoPM e verifica se esta faltando //algum registro de CapacDia para cada periodo em questao, //e inclui um CapacDia com valor zerado para o mesmo. CapacDia capacDia = null; for (PerioPM perioPM : listaPerioPMsHP) { //tenta encontrar o capacDia relativo ao periodo em questao, //se ele nao existir cria um novo zerado. try { capacDia = capacDiaDAO.recuperaCapacDiaPorPerioPM(perioPM); } catch (ObjetoNaoEncontradoException e) { capacDia = new CapacDia(); capacDia.setPerioPM(perioPM); capacDiaService.inclui(capacDia); } } } @Transacional public void inclui(HP hp) throws AplicacaoException { Parametros parametro = parametrosDAO.recuperaListaDeParametros().get(0); parametro.setInicPlanejamento(false); parametrosDAO.altera(parametro); hpDAO.inclui(hp); } @Transacional public void altera(HP hp) { Parametros parametro = parametrosDAO.recuperaListaDeParametros().get(0); parametro.setInicPlanejamento(false); parametrosDAO.altera(parametro); hpDAO.altera(hp); } @Transacional public void exclui(HP hp) throws AplicacaoException { HP hpBD = null; try { hpBD = hpDAO.getPorIdComLock(hp.getId()); } catch (ObjetoNaoEncontradoException e) { } hpDAO.exclui(hpBD); } public List<HP> recuperaListaDeHP(){ return hpDAO.recuperaListaDeHP(); } }