/*
*
* 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 cadplan;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import modelo.CadPlan;
import modelo.HP;
import modelo.PerioPM;
import modelo.PlPerMod;
import modelo.PlPerModAgregado;
import modelo.PlanoModelo;
import modelo.Usuario;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import service.CadPlanAppService;
import service.HPAppService;
import service.PerioPAPAppService;
import service.PerioPMAppService;
import service.PlPerModAppService;
import service.PlanoModeloAppService;
import service.UsuarioAppService;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import util.JPAUtil;
import DAO.PlPerModDAO;
import DAO.Impl.CadPlanDAOImpl;
import DAO.Impl.DeModPerDAOImpl;
import DAO.Impl.HPDAOImpl;
import DAO.Impl.ParametrosDAOImpl;
import DAO.Impl.PerioPAPDAOImpl;
import DAO.Impl.PerioPMDAOImpl;
import DAO.Impl.PlPerModDAOImpl;
import DAO.controle.FabricaDeDao;
import DAO.exception.ObjetoNaoEncontradoException;
public class TesteCadPlan {
// Variaveis globais
Usuario usuarioAdmin;
// Services
private static CadPlanAppService cadPlanService;
private static UsuarioAppService usuarioService;
private static PerioPMAppService perioPMService;
private static PlPerModAppService plPerModService;
private static PlanoModeloAppService planoModeloService;
@BeforeClass
public void setupClass(){
try {
System.out.println("-----------------------------> Startando a JPA...");
JPAUtil.JPAstartUp();
System.out.println("-----------------------------> JPA startada com sucesso!");
cadPlanService = FabricaDeAppService.getAppService(CadPlanAppService.class);
usuarioService = FabricaDeAppService.getAppService(UsuarioAppService.class);
perioPMService = FabricaDeAppService.getAppService(PerioPMAppService.class);
plPerModService = FabricaDeAppService.getAppService(PlPerModAppService.class);
planoModeloService = FabricaDeAppService.getAppService(PlanoModeloAppService.class);
} catch (Exception e) {
}
}
//@Test
public void inclui() {
CadPlan cadPlan = new CadPlan();
cadPlan.setCodPlan("c1");
cadPlan.setDescrPlan("Plano1");
try {
usuarioAdmin = usuarioService.recuperaPorLoginESenha("admin", "admin");
cadPlan.setUsuario(usuarioAdmin);
cadPlanService.inclui(cadPlan);
} catch (AplicacaoException e) {
e.getMessage();
e.printStackTrace();
}
}
// @Test
public void totalizaPlano(){
CadPlan cadPlan = null;
try {
cadPlan = cadPlanService.recuperaCadPlanComPlanosModelo("c1");
} catch (ObjetoNaoEncontradoException e) {
}
// � preciso criar um Map, pois queremos a totaliza��o de Valores por Modelo em um determinado per�odo.
Map<Integer, Double[]> mapTotalizacao = new HashMap<Integer, Double[]>();
for (PlanoModelo planoModelo : cadPlan.getPlanosModelo()) {
try {
planoModelo = planoModeloService.recuperarPlPerModsPorPlanoModelo(planoModelo);
} catch (ObjetoNaoEncontradoException e) {
}
for (PlPerMod plPerMod : planoModelo.getPlPerMods()) {
// CHAVE: PeriodoPM
Integer key = plPerMod.getPerioPM().getPeriodoPM();
// VALOR: Um array com os valores correspondentes do PlPerMod neste per�odo
Double valorVendas = plPerMod.getVendasModel();
Double valorPedidos = plPerMod.getPedidosModel();
Double valorProducao = plPerMod.getProducaoModel();
Double valorDispProjetada = plPerMod.getDispProjModel();
Double valorCobertura = plPerMod.getCoberturaModel();
// Se o per�odo atual ainda n�o consta no Map, ele � adicionado, com os valores referentes do PlPerMod atual
if (!mapTotalizacao.containsKey(key)){
Double[] valores = new Double[5];
valores[0] = valorVendas;
valores[1] = valorPedidos;
valores[2] = valorProducao;
valores[3] = valorDispProjetada;
valores[4] = valorCobertura;
mapTotalizacao.put(key, valores);
} else {
// Se o per�odo j� consta no Map, ent�o temos que adicionar os valores referentes do PlPerMod atual,
// a fim de totalizar este valor.
Double[] valores = mapTotalizacao.get(key);
valores[0] += valorVendas;
valores[1] += valorPedidos;
valores[2] += valorProducao;
valores[3] += valorDispProjetada;
valores[4] += valorCobertura;
}
}
}
// Precisamos agora converter este Map para um objeto List, pois a exibi��o na Tela (que � um ListDataModel)
// exige este tipo de estrutura de dado.
List<PlPerModAgregado> plPerModsAgregados = new ArrayList<PlPerModAgregado>();
for (int i = 1; i <= mapTotalizacao.size(); i++) {
PlPerModAgregado plPerModAgregado = new PlPerModAgregado();
Double[] valores = mapTotalizacao.get(i);
try {
plPerModAgregado.setPerioPM(perioPMService.recuperaPerioPMPorPeriodoPM(i));
plPerModAgregado.setVendasModel(valores[0]);
plPerModAgregado.setPedidosModel(valores[1]);
plPerModAgregado.setProducaoModel(valores[2]);
plPerModAgregado.setDispProjModel(valores[3]);
plPerModAgregado.setCoberturaModel(valores[4]);
} catch (AplicacaoException e) {
}
plPerModsAgregados.add(plPerModAgregado);
}
// S� PARA TESTAR E EXIBIR MESMO OS RESULTADOS... =]
for (PlPerModAgregado plPerModAgregado : plPerModsAgregados) {
System.out.println(plPerModAgregado.getPerioPM());
System.out.println("Total Vendas = " + plPerModAgregado.getVendasModel());
System.out.println("Total Pedidos = " + plPerModAgregado.getPedidosModel());
System.out.println("Total Produ��o = " + plPerModAgregado.getProducaoModel());
System.out.println("Total Disponibilidade = " + plPerModAgregado.getDispProjModel());
System.out.println("Total Cobertura = " + plPerModAgregado.getCoberturaModel());
System.out.println("");
}
}
@Test
public void testarOrdenacaoPlanoModelosEmCadPlan(){
CadPlan cadPlan = null;
try {
cadPlan = cadPlanService.recuperaCadPlanComPlanosModelo("1");
}
catch (ObjetoNaoEncontradoException e) {
}
for(PlanoModelo planoModelo : cadPlan.getPlanosModelo()){
System.out.println(planoModelo);
}
}
}