/* * * 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.ArrayList; import java.util.List; import modelo.DeModPer; import modelo.HP; import modelo.Modelo; import modelo.PerioPM; import br.blog.arruda.plot.Plot; import br.blog.arruda.plot.data.PlotData; import service.anotacao.Transacional; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import DAO.DeModPerDAO; import DAO.HPDAO; import DAO.PerioPMDAO; import DAO.Impl.DeModPerDAOImpl; import DAO.Impl.HPDAOImpl; import DAO.Impl.PerioPMDAOImpl; import DAO.controle.FabricaDeDao; import DAO.exception.ObjetoNaoEncontradoException; import java.lang.Math; public class DeModPerAppService { //DAOs private static DeModPerDAO deModPerDAO; private static PerioPMDAO perioPMDAO; private static HPDAO hpDAO; // Services private static DadosGraficoViewAppService dadosGraficoViewService; @SuppressWarnings("unchecked") public DeModPerAppService() { try { //DAOs deModPerDAO = FabricaDeDao.getDao(DeModPerDAOImpl.class); perioPMDAO = FabricaDeDao.getDao(PerioPMDAOImpl.class); hpDAO = FabricaDeDao.getDao(HPDAOImpl.class); // Service dadosGraficoViewService = FabricaDeAppService.getAppService(DadosGraficoViewAppService.class); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } @Transacional public void incluiDemandas(Modelo modelo) throws AplicacaoException { DeModPer demanda = null; int periodoInicial; int periodoFinal; List<HP> hp = hpDAO.recuperaListaDeHP(); if (hp.isEmpty()){ throw new AplicacaoException("hp.NAO_CADASTRADO"); } HP hpCorrente = hp.get(0); try { periodoInicial = hpCorrente.getPerioPMInicDemMod().getPeriodoPM(); periodoFinal = hpCorrente.getPerioPMFinalDemMod().getPeriodoPM(); } catch (NullPointerException ex){ throw new AplicacaoException("hp.PERIODO_DEMANDA_NAO_CADASTRADO"); } List<PerioPM> periodos = perioPMDAO.recuperaIntervaloDePerioPMs(periodoInicial, periodoFinal); for (PerioPM perioPM : periodos) { demanda = new DeModPer(modelo, perioPM); deModPerDAO.inclui(demanda); } } /** * Devolve o valor maximo para demanda a partir da tabela deModPer. * Atencao: Se nao estiver usando para inclusao, deve usar o metodo alternativo que * esta em PlPerMod que devolve a demanda a partir do proprio PlPerMod. * @param modelo * @param perioPM * @param hpDB * @return */ @Transacional public Double obtemDemandaMaxProxPeriodo(Modelo modelo, PerioPM perioPM, HP hpDB) { Double demandaMaxProxPeriodo = 0.0; if (perioPM.getPeriodoPM() >= hpDB.getPerioPMFinalPMP().getPeriodoPM()){ perioPM = hpDB.getPerioPMFinalPMP(); } else{ //Recupera o proximo perioPM try { perioPM = perioPMDAO.recuperaPerioPMPorPeriodoPM(perioPM.getPeriodoPM()+1); } catch (ObjetoNaoEncontradoException e) { } } try { DeModPer deModPerCorrente = deModPerDAO.recuperaDeModPerPorPeriodoEModelo(perioPM, modelo); demandaMaxProxPeriodo = Math.max(deModPerCorrente.getVendasProjetadasModelo(),deModPerCorrente.getPedidosModelo()); } catch (ObjetoNaoEncontradoException e) { } return demandaMaxProxPeriodo; } public Plot gerarDadosGrafico(List<DeModPer> demandasModelo) { ArrayList<PlotData> listaDadosGrafico = new ArrayList<PlotData>(); Plot grafico = new Plot(); PlotData dado = new PlotData(); ArrayList<Double> listVendasModelo = new ArrayList<Double>(); ArrayList<Double> listPedidosModelo = new ArrayList<Double>(); ArrayList<Double> listPeriodosPM = new ArrayList<Double>(); //popula os dados que irao para os eixos. for(DeModPer deModPer : demandasModelo){ listVendasModelo.add(deModPer.getVendasProjetadasModelo()); listPedidosModelo.add(deModPer.getPedidosModelo()); listPeriodosPM.add(Double.valueOf(deModPer.getPeriodo().getPeriodoPM())); } //Cria os dados de grafico com os valores recuperados anteriormente. PlotData dadoVendasModelo = dadosGraficoViewService.gerarPlotDataEmBarras(listPeriodosPM, listVendasModelo); dadoVendasModelo.setLabel("Vendas"); listaDadosGrafico.add(dadoVendasModelo); PlotData dadoPedidosModelo = dadosGraficoViewService.gerarPlotDataEmBarras(listPeriodosPM, listPedidosModelo); dadoPedidosModelo.setLabel("Pedidos"); listaDadosGrafico.add(dadoPedidosModelo); //====seta as opcoes basicas do grafico grafico = dadosGraficoViewService.gerarPlotComLabels(listaDadosGrafico, "Periodo", "Vendas/Pedidos"); //retorna o grafico. return grafico; } public String imprimirDadosGrafico(List<DeModPer> demandasModelo) { Plot grafico = gerarDadosGrafico(demandasModelo); return grafico.printData(); } @Transacional public void inclui(DeModPer deModPer){ deModPerDAO.inclui(deModPer); } @Transacional public void altera(DeModPer deModPer) { deModPerDAO.altera(deModPer); } @Transacional public void exclui(DeModPer deModPer){ DeModPer deModPerBD = null; try { deModPerBD = deModPerDAO.getPorIdComLock(deModPer.getIdDeModPer()); } catch (ObjetoNaoEncontradoException e) { } deModPerDAO.exclui(deModPerBD); } public List<DeModPer> recuperaListaDeDemandaModeloPeriodo() { return deModPerDAO.recuperaListaDeDemandaModeloPeriodo(); } public List<DeModPer> recuperaListaDeDeModPerPorModelo(Modelo modelo) { return deModPerDAO.recuperaListaDeDeModPerPorModelo(modelo); } }