Pessoal,
estou dando manutencação em um sistema, e notei algo estranho , estou debugando o codigo para entender melhor o que o sistema faz , e por exemplo coloquei um breakpoint na linha (return itemAtual1)
public ItemOrcamentoHelper getItemAtual1() {
return itemAtual1;
}
e percebi que ele entra nesta rotina por exemplo 3 vezes, antes de apresentar a tela , alguem ja passou por isso ???
segue abaixo meu jspx e minha classe ManterItemOrcamentoMB
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:cqa="http://www.cqa.com.br"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:f="http://java.sun.com/jsf/core"
version="2.0">
<ui:composition>
<h:form id="itensOrcamentoForm">
<div style="display: none">
<h:commandButton value="#{messages['botao.salvar']}" action="#{ManterItemOrcamentoMB.confirmar}"
styleClass="saveButton mainButton" />
</div>
<a4j:keepAlive beanName="ManterItemOrcamentoMB" />
<a4j:keepAlive beanName="ManterOrcamentoMB" />
<a4j:log/>
<fieldset>
<ul>
<li class="tabOrcamento">
<rich:dataTable styleClass="richDataTable" rowClasses="lineOdd,lineEven" rowKeyVar="indice"
rendered="#{ManterItemOrcamentoMB.itens.rowCount > 0}" value="#{ManterItemOrcamentoMB.itens}"
var="itemOrcamento">
<f:facet name="header">
<rich:columnGroup>
<rich:column width="5%">
<h:outputText value="#{messages['label.numero']}" />
</rich:column>
<rich:column style="width:50%">
<h:outputText value="#{messages['label.descricao']}" />
</rich:column>
<rich:column style="width:20%">
<h:outputText value="#{messages['label.matriz']}" />
</rich:column>
<rich:column style="width:10%"/>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{indice + 1}" />
</rich:column>
<rich:column>
<h:outputText value="#{itemOrcamento.descricao}" />
</rich:column>
<rich:column>
<h:outputText value="#{itemOrcamento.matriz.nome}" />
</rich:column>
<rich:column>
<div class="collCenter coll100">
<h:commandLink action="#{ManterItemOrcamentoMB.alterarItemOrcamento}"
styleClass="imgLink" title="#{messages['botao.alterar']}">
<h:graphicImage url="/assets/images/edit-content.png" />
</h:commandLink>
<h:commandLink action="#{ManterItemOrcamentoMB.excluirItemOrcamento}"
styleClass="imgLink" title="#{messages['botao.excluir']}">
<h:graphicImage url="/assets/images/helper-reset.png" />
</h:commandLink>
</div>
</rich:column>
</rich:dataTable>
</li>
<li>
<rich:panel>
<f:facet name="header">
<h:outputText value="#{messages['label.itemOrcamento']}" />
</f:facet>
<ul>
<li class="sentenceInput required">
<h:outputLabel value="#{messages['label.descricao']}" />
<h:inputText styleClass="sentenceInput" value="#{ManterItemOrcamentoMB.itemAtual.descricao}"
maxlength="100" />
</li>
<li class="noWrap required spaceRight">
<h:outputLabel value="#{messages['label.matriz']}" />
<h:inputText value="#{ManterItemOrcamentoMB.matriz.nome}" readonly="true" size="60"/>
<h:commandLink action="#{ManterItemOrcamentoMB.consultarMatriz}"
styleClass="imgLink" title="#{messages['botao.consultar']}">
<h:graphicImage url="/assets/images/search-button.png" />
</h:commandLink>
</li>
<li class="required noWrap">
<h:outputLabel value="#{messages['label.tipoAmostra']}" />
<h:selectOneMenu id="tipoAmostra" value="#{ManterItemOrcamentoMB.itemAtual.tipoAmostra}"
converter="#{ManterItemOrcamentoMB.tipoAmostraConverter}">
<f:selectItems value="#{ManterItemOrcamentoMB.tipoAmostraItems}" />
<a4j:support ajaxSingle="true" event="onchange" reRender="panelTotal" />
</h:selectOneMenu>
</li>
<li class="required noWrap">
<h:outputLabel value="#{messages['label.numeroAmostras']}" />
<h:inputText id="numAmostras" value="#{ManterItemOrcamentoMB.itemAtual1.numeroAmostras}"
maxlength="3" converter="IntegerConverter">
<f:attribute name="fieldLabel" value="#{messages['label.numeroAmostras']}" />
<a4j:support event="onchange" reRender="panelTotal" />
</h:inputText>
</li>
<li class="panelEspecificacoes">
<h:outputLabel value="#{messages['label.especificacao']}" />
<rich:panel id="panelEspecificacoes">
<h:dataTable value="#{ManterItemOrcamentoMB.especificacoes}" var="especificacao">
<h:column>
<h:selectBooleanCheckbox value="#{especificacao.selecionado}">
<a4j:support event="onclick" ajaxSingle="true"
action="#{ManterItemOrcamentoMB.selecionarEspecificacao}"
reRender="panelEspecificacoes, panelAnalises,
totalEnsaiosContratados, panelPerguntas, panelTotal" />
</h:selectBooleanCheckbox>
</h:column>
<h:column>
<h:outputText value="#{especificacao.objeto.nome}" />
</h:column>
</h:dataTable>
</rich:panel>
</li>
<li id="panelAnalisesContainer">
<rich:panel id="panelAnalises">
<f:facet name="header">
<h:outputText value="#{messages['label.analisesSeremExecutadas']}" />
</f:facet>
<ul>
<li class="noWrap spaceRight funtionalGroup">
<h:outputLabel value="#{messages['label.ensaio']}" />
<h:inputText value="#{ManterItemOrcamentoMB.filtro.nomeEnsaio}" />
<h:outputLabel style="margin-left:10px" value="#{messages['label.grupoFuncional']}" />
<h:selectOneMenu value="#{ManterItemOrcamentoMB.filtro.grupoFuncional}"
converter="#{ManterItemOrcamentoMB.grupoFuncionalConverter}">
<f:selectItems value="#{ManterItemOrcamentoMB.gruposFuncionais}" />
</h:selectOneMenu>
</li>
<li>
<h:outputLabel style="margin-top:5px" for="somenteSelecionados"
value="#{messages['label.exibirSomenteSelecionados']}" />
<h:selectBooleanCheckbox id="somenteSelecionados"
value="#{ManterItemOrcamentoMB.filtro.exibirSomenteSelecionados}" />
<a4j:commandButton style="margin-left:195px;" styleClass="filtersButton inlineButton"
action="#{ManterItemOrcamentoMB.executarFiltro}" reRender="analises, panelAnalises"
value="#{messages['botao.filtrar']}" />
</li>
<li>
<a4j:commandButton style="background-color: transparent; border: none;"
styleClass="removeButton inlineButton" action="#{ManterItemOrcamentoMB.desmarcarTodos}"
reRender="analises, panelAnalises" value="#{messages['botao.desmarcarTodos']}"
title="#{messages['botao.desmarcarTodos']}" />
<rich:dataTable rows="100" styleClass="richDataTable" rowClasses="lineOdd,lineEven"
footerClass="paginador" rendered="#{ManterItemOrcamentoMB.analisesExibidas.rowCount > 0}"
value="#{ManterItemOrcamentoMB.analisesExibidas}" var="analise" id="analises">
<f:facet name="header">
<rich:columnGroup>
<rich:column/>
<rich:column>
<h:outputText value="#{messages['label.ensaios']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.metodos']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.unidade']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.LD']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.LQ']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.preco']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.prazo']}" />
</rich:column>
<rich:column>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column styleClass="collCenter" width="15">
<h:selectBooleanCheckbox value="#{analise.selecionado}" id="checkSelecionarAnalise"
disabled="#{analise.ensaiosAlocados}">
<a4j:support ajaxSingle="true" action="#{ManterItemOrcamentoMB.selecionarAnalise}"
event="onclick" reRender="totalEnsaiosContratados, panelTotal, MsgAnalisePanel" />
</h:selectBooleanCheckbox>
</rich:column>
<rich:column>
<h:outputText value="#{analise.ensaio.nome}" />
</rich:column>
<rich:column>
<h:selectOneMenu value="#{analise.metodo}" disabled="#{analise.ensaiosAlocados}"
converter="#{ManterItemOrcamentoMB.metodosConverter}">
<t:selectItems value="#{analise.metodosDisponiveis}" var="metodo"
itemLabel="#{metodo.nome}" itemValue="#{metodo}" />
<a4j:support action="#{ManterItemOrcamentoMB.trocarMetodo}"
ajaxSingle="true" event="onchange" reRender="panelAnalises, panelTotal" />
</h:selectOneMenu>
</rich:column>
<rich:column>
<h:selectOneMenu value="#{analise.unidade}" disabled="#{analise.ensaiosAlocados}"
converter="#{ManterItemOrcamentoMB.unidadeConverter}">
<t:selectItems value="#{analise.unidade.grupo.unidades}" var="unidade"
itemLabel="#{unidade.descricao}" itemValue="#{unidade}" />
<a4j:support ajaxSingle="true" event="onchange" reRender="panelAnalises, panelTotal" />
</h:selectOneMenu>
</rich:column>
<rich:column>
<h:outputText value="#{analise.ld}" />
</rich:column>
<rich:column>
<h:outputText value="#{analise.lq}" />
</rich:column>
<rich:column>
<h:outputText value="#{analise.preco}" />
</rich:column>
<rich:column>
<h:outputText value="#{analise.prazo}" />
</rich:column>
<rich:column width="20" styleClass="collCenter">
<a4j:commandButton reRender="panelAnalises" ajaxSingle="true"
action="#{ManterItemOrcamentoMB.copiarAnalise}" title="#{messages['botao.copiar']}"
value="" styleClass="btCopiar" />
</rich:column>
<f:facet name="footer">
<rich:datascroller ajaxSingle="true" for="analises" />
</f:facet>
</rich:dataTable>
</li>
</ul>
</rich:panel>
<a4j:outputPanel id="totalEnsaiosContratados">
<ul>
<li class="noWrap spaceRight sentenceLabel labelTotal">
<h:outputLabel value="#{messages['label.precoTotalEnsaiosContratados']}" />
<h:inputText styleClass="readOnly" readonly="true" id="totalAnalisesContratadas"
value="#{ManterItemOrcamentoMB.itemAtual1.totalPorAmostra}" />
</li>
<li class="readOnly labelTotal">
<h:outputLabel value="#{messages['label.prazoTotalAnalise']}" />
<h:inputText styleClass="readOnly" readonly="true" id="prazoTotalAnalise"
value="#{ManterItemOrcamentoMB.prazoItemOrcamento}" />
</li>
</ul>
</a4j:outputPanel>
</li>
<li>
<rich:panel id="panelPerguntas">
<rich:dataTable id="perguntas" styleClass="richDataTable" rowClasses="lineOdd,lineEven"
rendered="#{ManterItemOrcamentoMB.exibirQuestoes}"
value="#{ManterItemOrcamentoMB.itemAtual.questionario.respostas}" var="resposta">
<f:facet name="header">
<rich:columnGroup>
<rich:column width="50%">
<h:outputText value="#{messages['label.pergunta']}" />
</rich:column>
<rich:column>
<h:outputText value="#{messages['label.resposta']}" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText rendered="#{resposta.pergunta.respostaObrigatoria}"
style="color:#CC0000;margin-right:5px;" value="*" />
<h:outputText value="#{resposta.pergunta.texto}" />
</rich:column>
<rich:column>
<h:inputText value="#{resposta.texto}" style="width:98%" maxlength="255" />
</rich:column>
</rich:dataTable>
</rich:panel>
</li>
<li>
<rich:panel id="itensOrcamentoPanelAjusteFinanceiro" rendered="#{ManterItemOrcamentoMB.exibirPainelAjusteFinanceiro}">
<f:facet name="header">
<h:outputText value="#{messages['label.descontoAcrescimo']}" />
</f:facet>
<ul>
<li class="noWrap">
<h:selectOneMenu value="#{ManterItemOrcamentoMB.itemAtual.ajusteFinanceiro.tipoAjusteFinanceiro}">
<f:selectItems value="#{ManterOrcamentoMB.tiposAjusteFinanceiro}" />
<a4j:support ajaxSingle="true" event="onchange" reRender="panelTotal" />
</h:selectOneMenu>
<h:inputText style="margin-left:5px; font-size:17px;"
value="#{ManterItemOrcamentoMB.itemAtual.ajusteFinanceiro.taxa}"
converter="ajusteFinanceiroConverter">
<a4j:support ajaxSingle="true" event="onchange" reRender="panelTotal" />
</h:inputText><span class="fakeSpace" />
<h:selectOneMenu value="#{ManterItemOrcamentoMB.itemAtual.ajusteFinanceiro.unidadeAjusteFinanceiro}">
<f:selectItems value="#{ManterOrcamentoMB.unidadesAjusteFinanceiro}" />
<a4j:support ajaxSingle="true" event="onchange" reRender="panelTotal" />
</h:selectOneMenu>
</li>
</ul>
</rich:panel>
</li>
<li>
<rich:panel id="panelTotal">
<f:facet name="header">
<h:outputText value="#{messages['label.totalizacoes']}" />
</f:facet>
<ul>
<li class="sentenceLabel noWrap labelTotal">
<h:outputLabel value="#{messages['label.totalPorAmostra']}" />
<h:inputText value="#{ManterItemOrcamentoMB.itemAtual1.totalPorAmostra}"
readonly="true" styleClass="readOnly" />
</li>
<li class="sentenceLabel labelTotal">
<h:outputLabel value="#{messages['label.totalPara']} #{ManterItemOrcamentoMB.itemAtual.numeroAmostras} #{messages['label.amostras']}" />
<h:inputText value="#{ManterItemOrcamentoMB.itemAtual1.total}" readonly="true" styleClass="readOnly" />
</li>
</ul>
</rich:panel>
</li>
<li class="textAreaObservaction">
<h:outputLabel value="#{messages['label.observacoes']}" />
<h:inputTextarea styleClass="textAreaLarge textObservacao" value="#{ManterItemOrcamentoMB.itemAtual.observacao}" />
</li>
</ul>
</rich:panel>
</li>
</ul>
<div class="buttons">
<h:commandButton value="#{messages['botao.salvar']}" action="#{ManterItemOrcamentoMB.confirmar}"
styleClass="saveButton mainButton" />
<h:commandButton value="#{messages['botao.novo']}" action="#{ManterItemOrcamentoMB.novoItem}"
styleClass="addButton" />
</div>
</fieldset>
</h:form>
</ui:composition>
</jsp:root>
************************************
package br.com.cqa.lims.web.orcamento;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import br.com.cqa.lims.analise.Analise;
import br.com.cqa.lims.analise.AnaliseContratada;
import br.com.cqa.lims.analise.AnaliseServiceLocal;
import br.com.cqa.lims.analise.EnsaioServiceLocal;
import br.com.cqa.lims.analise.Especificacao;
import br.com.cqa.lims.analise.GrupoFuncional;
import br.com.cqa.lims.analise.Matriz;
import br.com.cqa.lims.analise.TipoAmostra;
import br.com.cqa.lims.analise.questionario.Pergunta;
import br.com.cqa.lims.analise.questionario.Questionario;
import br.com.cqa.lims.coleta.orcamento.ItemOrcamentoColetavel;
import br.com.cqa.lims.financeiro.AjusteFinanceiro;
import br.com.cqa.lims.financeiro.TipoAjusteFinanceiro;
import br.com.cqa.lims.financeiro.UnidadeAjusteFinanceiro;
import br.com.cqa.lims.orcamento.AnaliseDuplicadaException;
import br.com.cqa.lims.orcamento.ItemOrcamento;
import br.com.cqa.lims.orcamento.Orcamento;
import br.com.cqa.lims.orcamento.OrcamentoServiceLocal;
import br.com.cqa.lims.util.StringUtil;
import br.com.cqa.lims.validation.CampoInvalido;
import br.com.cqa.lims.validation.CampoInvalido.Motivo;
import br.com.cqa.lims.web.analise.GrupoFuncionalConverter;
import br.com.cqa.lims.web.analise.MatrizConverter;
import br.com.cqa.lims.web.analise.MetodoConverter;
import br.com.cqa.lims.web.analise.TipoAmostraConverter;
import br.com.cqa.lims.web.analise.unidade.UnidadeConverter;
import br.com.cqa.lims.web.matriz.ConsultarMatrizMB;
import br.com.cqa.lims.web.orcamento.helper.AnaliseItem;
import br.com.cqa.lims.web.orcamento.helper.AnaliseItemComparator;
import br.com.cqa.lims.web.orcamento.helper.AnaliseItemHelper;
import br.com.cqa.lims.web.orcamento.helper.ItemOrcamentoHelper;
import br.com.cqa.lims.web.orcamento.helper.FiltroAnalise;
import br.com.cqa.lims.web.utils.CallbackableMB;
import br.com.cqa.lims.web.utils.ConfirmarOperacaoMB;
import br.com.cqa.lims.web.utils.FacesUtils;
import br.com.cqa.lims.web.utils.ObjetoSelecionavel;
import br.com.cqa.lims.web.utils.OperacaoConfirmavel;
import br.com.cqa.lims.web.utils.PageMB;
import br.com.cqa.lims.web.utils.ValidationUtils;
import br.com.dextra.web.menu.MenuMB;
import br.com.cqa.lims.orcamento.ItemOrcamentoServiceBean;
import br.com.cqa.lims.orcamento.PrecoPorMetodoServiceBean;
import br.com.cqa.lims.orcamento.PrecoPorMetodoServiceLocal;
public class ManterItemOrcamentoMB implements PageMB, OperacaoConfirmavel,
CallbackableMB {
private static final long serialVersionUID = 4902643748803576282L;
private static final Logger LOG = LoggerFactory
.getLogger(ManterItemOrcamentoMB.class);
@EJB(name = "OrcamentoServiceBean/local")
private OrcamentoServiceLocal orcamentoService;
@EJB(name = "EnsaioServiceBean/local")
private EnsaioServiceLocal ensaioService;
@EJB(name = "AnaliseServiceBean/local")
private AnaliseServiceLocal analiseService;
@EJB(name = "PrecoPorMetodoServiceBean/local")
private PrecoPorMetodoServiceLocal precopormetodoservice;
private Orcamento orcamento;
private ItemOrcamento itemorcamento;
private ItemOrcamento itemAtual = new ItemOrcamentoColetavel();
private ItemOrcamentoHelper itemAtual1 = new ItemOrcamentoHelper(this.getItemAtual());
// private ItemOrcamentoHelper itemAtual1 = new ItemOrcamentoHelper(itemorcamento);
private Matriz matriz;
private List<SelectItem> tipoAmostraItems;
private List<SelectItem> gruposFuncionais = new ArrayList<SelectItem>();
private ListDataModel itens;
// Analises que estao sendo exibidas no momento
private ListDataModel analisesExibidas = new ListDataModel(
new ArrayList<AnaliseItem>());
// Agrupa todas as analises, inclusive as com especificacao
private List<AnaliseItem> todasAnalises = new ArrayList<AnaliseItem>();
// Mantem isolado as analises que possuem especificacao
private List<AnaliseItem> analisesComEspecificacao = new ArrayList<AnaliseItem>();
private ListDataModel especificacoes = new ListDataModel(
Collections.EMPTY_LIST);
private FiltroAnalise filtro = new FiltroAnalise();
private GrupoFuncional filtroGrupoFuncional;
private GrupoFuncionalConverter grupoFuncionalConverter = new GrupoFuncionalConverter();
private MatrizConverter matrizConverter = new MatrizConverter();
private TipoAmostraConverter tipoAmostraConverter = new TipoAmostraConverter();
private MetodoConverter metodosConverter = new MetodoConverter();
private UnidadeConverter unidadeConverter = new UnidadeConverter();
private boolean alteracao = false;
private ManterOrcamentoMB manterOrcamentoMB = FacesUtils
.findManagedBean(ManterOrcamentoMB.class);
private int indiceItemAlterado;
public void alterarItemOrcamento() {
ItemOrcamento item = (ItemOrcamento) itens.getRowData();
this.indiceItemAlterado = orcamento.getIndiceItem(item);
this.prepararAlteracaoItem();
}
@SuppressWarnings("unchecked")
public void confirmar() {
List<CampoInvalido> camposInvalidos = new ArrayList<CampoInvalido>();
if (StringUtil.isEmpty(itemAtual.getDescricao())) {
camposInvalidos.add(new CampoInvalido("descricao", Motivo.NOTNULL));
}
if (this.matriz == null) {
camposInvalidos.add(new CampoInvalido("matriz", Motivo.NOTNULL));
}
if (itemAtual.getTipoAmostra() == null) {
camposInvalidos
.add(new CampoInvalido("tipoAmostra", Motivo.NOTNULL));
}
if (itemAtual.getNumeroAmostras() == null
|| itemAtual.getNumeroAmostras().intValue() <= 0) {
camposInvalidos.add(new CampoInvalido("numeroAmostras",
Motivo.VALOR_MENOR_IGUAL_ZERO));
}
camposInvalidos.addAll(itemAtual.validar());
ValidationUtils.adicionaErrosNegocio(camposInvalidos, FacesContext
.getCurrentInstance());
if (camposInvalidos.isEmpty()) {
List<AnaliseItem> listaOrdenada = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
Collections.sort(listaOrdenada, new AnaliseItemComparator());
this.analisesExibidas.setWrappedData(listaOrdenada);
manterOrcamentoMB = FacesUtils
.findManagedBean(ManterOrcamentoMB.class);
int prazoOrcamento = Integer.parseInt(manterOrcamentoMB.getPrazo());
if (!manterOrcamentoMB.isPrazoOrcamentoAlterado()
&& itemAtual.getPrazo() > prazoOrcamento) {
manterOrcamentoMB.setPrazo(itemAtual.getPrazo() + "");
}
if (this.alteracao) {
FacesUtils
.addSucessMessage("sucesso.manterItemOrcamento.alterar");
orcamento.removerItem(indiceItemAlterado);
orcamento.adicionarItem(indiceItemAlterado, itemAtual);
this.limpar();
} else {
FacesUtils
.addSucessMessage("sucesso.manterItemOrcamento.incluir");
orcamento.adicionarItem(itemAtual);
this.limpar();
}
}
}
@SuppressWarnings("unchecked")
public void copiarAnalise() {
AnaliseItem analiseSelecionavel = (AnaliseItem) this.analisesExibidas
.getRowData();
AnaliseContratada analise = analiseSelecionavel.getAnaliseContratada();
List<AnaliseItem> analisesSelecionaveis = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
AnaliseItem novoAnaliseItem = AnaliseItemHelper.criarAnaliseItem(
itemAtual, analise.clone());
int index = analisesSelecionaveis.indexOf(analiseSelecionavel) + 1;
analisesSelecionaveis.add(index, novoAnaliseItem);
}
@SuppressWarnings("unchecked")
public void desmarcarTodos() {
List<AnaliseItem> analisesAtuais = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
for (AnaliseItem analiseItem : analisesAtuais) {
if (analiseItem.isSelecionado()) {
analiseItem.deselecionar();
this.analisesComEspecificacao.remove(analiseItem);
}
}
}
public void excluirItemOrcamento() {
itemAtual = (ItemOrcamento) itens.getRowData();
if (itemAtual.getId() != null) {
itemAtual = orcamentoService
.carregarAnalisesComExecucoesDoItemDeOrcamento(itemAtual);
}
if (!itemAtual.isRemocaoPermitida()) {
FacesUtils.addError("erro.excluirItemOrcamento.amostraAlocada");
itemAtual = new ItemOrcamentoColetavel();
} else {
this.forwardConfirmacao();
}
}
@SuppressWarnings("unchecked")
public void executarFiltro() {
List<AnaliseItem> analisesExibidas = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
if (!filtro.isPreenchido()) {
analisesExibidas.clear();
analisesExibidas.addAll(this.todasAnalises);
} else {
List<AnaliseItem> analisesFiltradas = filtro
.aplicarA(todasAnalises);
Collections.sort(analisesFiltradas, new AnaliseItemComparator());
analisesExibidas.clear();
analisesExibidas.addAll(analisesFiltradas);
}
}
public void forwardConfirmacao() {
ConfirmarOperacaoMB confirmarOperacaoMB = FacesUtils
.findManagedBean(ConfirmarOperacaoMB.class);
confirmarOperacaoMB.setOperacaoConfirmavel(this);
confirmarOperacaoMB.setPerguntaConfirmacao(FacesUtils
.getMessage("pergunta.confirmacao.remocao.itemOrcamento"));
confirmarOperacaoMB.setUrlRetorno(this.getUrl());
FacesUtils.renderPage(confirmarOperacaoMB.getUrl());
}
public ListDataModel getAnalisesExibidas() {
return this.analisesExibidas;
}
public ListDataModel getEspecificacoes() {
return especificacoes;
}
public FiltroAnalise getFiltro() {
return filtro;
}
public GrupoFuncional getFiltroGrupoFuncional() {
return filtroGrupoFuncional;
}
public GrupoFuncionalConverter getGrupoFuncionalConverter() {
return grupoFuncionalConverter;
}
public List<SelectItem> getGruposFuncionais() {
return gruposFuncionais;
}
public ItemOrcamento getItemAtual() {
return itemAtual;
}
public ItemOrcamentoHelper getItemAtual1() {
return itemAtual1;
}
public Integer getPrazoItemOrcamento() {
Integer prazoItem = itemAtual.getPrazo();
int prazoOrcamento = Integer.parseInt(manterOrcamentoMB.getPrazo());
if (!manterOrcamentoMB.isPrazoOrcamentoAlterado()) {
return prazoItem;
} else {
if (prazoItem > prazoOrcamento) {
return prazoOrcamento;
}
return prazoItem;
}
}
public ListDataModel getItens() {
return itens;
}
public Matriz getMatriz() {
return matriz;
}
public MatrizConverter getMatrizConverter() {
return matrizConverter;
}
public MetodoConverter getMetodosConverter() {
return metodosConverter;
}
public Orcamento getOrcamento() {
return orcamento;
}
public TipoAmostraConverter getTipoAmostraConverter() {
return tipoAmostraConverter;
}
public List<SelectItem> getTipoAmostraItems() {
return tipoAmostraItems;
}
public UnidadeConverter getUnidadeConverter() {
return unidadeConverter;
}
public String getUrl() {
return new String("/pages/orcamento/manter.jspx");
}
@PostConstruct
public void initialize() {
this.orcamento = manterOrcamentoMB.getOrcamento();
itens = new ListDataModel(orcamento.getItemsOrcamento());
tipoAmostraItems = new ArrayList<SelectItem>();
tipoAmostraItems.add(FacesUtils.getEmptySelectItem());
SortedSet<GrupoFuncional> todosGruposFuncionais = ensaioService
.buscarTodosGruposFuncionais();
this.gruposFuncionais.add(FacesUtils.getEmptySelectItem());
for (GrupoFuncional grupoFuncional : todosGruposFuncionais) {
this.gruposFuncionais.add(new SelectItem(grupoFuncional,
grupoFuncional.getSigla()));
}
// caso o ajuste financeiro do item nao tenha valores definidos (para um
// novo item de orcamento, por exemplo), seta com valores default
AjusteFinanceiro ajusteFinanceiro = this.itemAtual
.getAjusteFinanceiro();
if (ajusteFinanceiro.getTipoAjusteFinanceiro() == null) {
ajusteFinanceiro
.setTipoAjusteFinanceiro(TipoAjusteFinanceiro.DESCONTO);
}
if (ajusteFinanceiro.getUnidadeAjusteFinanceiro() == null) {
ajusteFinanceiro
.setUnidadeAjusteFinanceiro(UnidadeAjusteFinanceiro.PORCENTAGEM);
}
}
public boolean isAlteracao() {
return this.alteracao;
}
public boolean isExibirPainelAjusteFinanceiro() {
MenuMB menuMb = FacesUtils.findManagedBean(MenuMB.class);
return menuMb.getUsuarioLogado().podeAcessarFuncionalidade(
"ajusteFinanceiroItemOrcamento");
}
public boolean isExibirQuestoes() {
return !this.itemAtual.getQuestionario().getRespostas().isEmpty();
}
public void novoItem() {
this.limpar();
}
public void selecionarAnalise() {
AnaliseItem analiseSelecionada = (AnaliseItem) this.analisesExibidas
.getRowData();
// Quando esta selecionando, eh necessario reconsultar a analise pois o
// metodo pode ter sido modificado pelo usuario
// Quando esta desmarcando, o proprio objeto AnaliseItem remove a
// analise do item atual
if (analiseSelecionada.isSelecionado()) {
Analise analiseConsultada = analiseService.consultarAnalise(
analiseSelecionada.getEnsaio(), analiseSelecionada
.getMetodo(), analiseSelecionada.getMatriz());
try {
analiseSelecionada
.selecionarAnalise(new AnaliseContratada(
analiseConsultada, analiseConsultada
.getUnidadePadrao()));
} catch (AnaliseDuplicadaException e) {
FacesUtils.addWarn("checkSelecionarAnalise",
"erro.selecionarAnalise.duplicado");
}
}
// Ao desmarcar analise, se ela estiver relacionada a especificacao, eh
// necessario removela da lista de analisesComEspecificacao
else {
analiseSelecionada.deselecionar();
if (analiseSelecionada.possueEspecificacao()) {
analisesComEspecificacao.remove(analiseSelecionada);
itemAtual.removerAnaliseContratada(analiseSelecionada
.getAnaliseContratada());
}
}
}
@SuppressWarnings("unchecked")
public void selecionarEspecificacao() {
ObjetoSelecionavel<Especificacao> especificacaoSelecionada = (ObjetoSelecionavel<Especificacao>) especificacoes
.getRowData();
if (!especificacaoSelecionada.isSelecionado()) {
itemAtual.deselecionarEspecificacao(especificacaoSelecionada
.getObjeto(), getMatriz());
for (Iterator<AnaliseItem> it = analisesComEspecificacao.iterator(); it
.hasNext();) {
AnaliseItem item = it.next();
if (item.getAnalisesEspecificadas().size() == 1
&& item.getAnalisesEspecificadas().get(0)
.getEspecificacao().equals(
especificacaoSelecionada.getObjeto())) {
item.deselecionar();
it.remove();
}
}
Collections.sort(todasAnalises, new AnaliseItemComparator());
List<AnaliseItem> analisesFiltradas = filtro
.aplicarA(todasAnalises);
List<AnaliseItem> analisesExibidas = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
analisesExibidas.clear();
analisesExibidas.addAll(analisesFiltradas);
} else {
List<Pergunta> perguntasEspecificacao = orcamentoService
.consultarPerguntasOrcamento(getMatriz(),
especificacaoSelecionada.getObjeto());
itemAtual.getQuestionario().adicionarPerguntas(
perguntasEspecificacao);
List<AnaliseItem> novosItemsDeEspecificacao = AnaliseItemHelper
.adicionarAnaliseItemPorEspecificacao(
especificacaoSelecionada.getObjeto(), itemAtual,
analisesComEspecificacao, this.getMatriz());
todasAnalises.removeAll(analisesComEspecificacao);
analisesComEspecificacao.addAll(novosItemsDeEspecificacao);
todasAnalises.addAll(0, analisesComEspecificacao);
Collections.sort(todasAnalises, new AnaliseItemComparator());
List<AnaliseItem> analisesFiltradas = filtro
.aplicarA(todasAnalises);
List<AnaliseItem> analisesExibidas = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
analisesExibidas.clear();
analisesExibidas.addAll(analisesFiltradas);
}
}
public void selecionarMatriz() {
if (matriz == null) {
this.analisesExibidas = new ListDataModel(
new ArrayList<AnaliseItem>());
this.especificacoes = new ListDataModel();
this.todasAnalises = new ArrayList<AnaliseItem>();
itemAtual.getQuestionario().limparPerguntasMatriz();
itemAtual.setQuestionario(new Questionario());
itemAtual.setNumeroAmostras(0);
itemAtual.limparAnalisesContratadas();
tipoAmostraItems.add(FacesUtils.getEmptySelectItem());
this.analisesComEspecificacao.clear();
return;
}
// Remove todas as antigas analisesContratada
this.itemAtual.getAnalisesContratadas().clear();
// Prepara os elementos da tela que dependem da matriz
this.carregarElementosConformeMatrizSelecionada();
}
public void setAnalises(ListDataModel configuracaoesEnsaio) {
this.analisesExibidas = configuracaoesEnsaio;
}
public void setEspecificacoes(ListDataModel especificacoes) {
this.especificacoes = especificacoes;
}
public void setFiltro(FiltroAnalise filtro) {
this.filtro = filtro;
}
public void setFiltroGrupoFuncional(GrupoFuncional filtroGrupoFuncional) {
this.filtroGrupoFuncional = filtroGrupoFuncional;
}
public void setGruposFuncionais(List<SelectItem> gruposFuncionais) {
this.gruposFuncionais = gruposFuncionais;
}
public void setItemAtual(ItemOrcamento itemAtual) {
this.itemAtual = itemAtual;
}
public void setItemAtual1(ItemOrcamentoHelper itemAtual1) {
// public void setItemAtual1(PrecoPorMetodoServiceBean itemAtual1) {
this.itemAtual1 = itemAtual1;
}
public void setItens(ListDataModel itens) {
this.itens = itens;
}
public void setMatriz(Matriz matriz) {
this.matriz = matriz;
}
public void setOperacaoConfirmada(boolean operacaoConfirmada) {
if (operacaoConfirmada) {
orcamento.removerItem(itemAtual);
this.limpar();
FacesUtils.addSucessMessage("sucesso.manterItemOrcamento.remover");
} else {
itemAtual = new ItemOrcamentoColetavel();
FacesUtils.renderPage(this.getUrl());
}
}
public void setOrcamento(Orcamento orcamento) {
this.orcamento = orcamento;
}
public void setTipoAmostraItems(List<SelectItem> tipoAmostraItems) {
this.tipoAmostraItems = tipoAmostraItems;
}
public void trocarMetodo() {
AnaliseItem analiseAtual = (AnaliseItem) this.analisesExibidas
.getRowData();
Analise analiseNova = analiseService.consultarAnalise(analiseAtual
.getEnsaio(), analiseAtual.getMetodo(), analiseAtual
.getMatriz());
AnaliseContratada analiseContratada = new AnaliseContratada(
analiseNova, analiseNova.getUnidadePadrao());
try {
if (analiseAtual.isSelecionado()) {
analiseAtual.alterarAnalise(analiseContratada);
} else {
analiseAtual.selecionarAnalise(analiseContratada);
}
} catch (AnaliseDuplicadaException e) {
FacesUtils.addWarn("checkSelecionarAnalise",
"erro.selecionarAnalise.duplicado");
}
}
@SuppressWarnings("unchecked")
private void carregarAnalisesSelecionadas() {
List<AnaliseContratada> analisesContratadas = itemAtual
.getAnalisesContratadas();
for (AnaliseContratada analiseContratada : analisesContratadas) {
AnaliseItem analiseExistente = AnaliseItemHelper.criarAnaliseItem(
itemAtual, analiseContratada);
analiseExistente.setEnsaiosAlocados(analiseContratada
.possuePeloMenosUmEnsaioComExecucaoIniciada());
analiseExistente.setSelecionado(true);
if (analiseContratada.isEspecificada()) {
analiseExistente.setAnalisesEspecificadas(analiseContratada
.getAnalisesEspecificadas());
analisesComEspecificacao.add(analiseExistente);
} else {
todasAnalises.add(analiseExistente);
}
}
todasAnalises.addAll(0, analisesComEspecificacao);
Collections.sort(todasAnalises, new AnaliseItemComparator());
List<AnaliseItem> analisesExibidas = (List<AnaliseItem>) this.analisesExibidas
.getWrappedData();
analisesExibidas.clear();
analisesExibidas.addAll(todasAnalises);
}
private void carregarElementosConformeMatrizSelecionada() {
this.matriz = ensaioService.carregaTiposAmostra(this.matriz);
tipoAmostraItems = new ArrayList<SelectItem>();
tipoAmostraItems.add(FacesUtils.getEmptySelectItem());
for (TipoAmostra tipoAmostra : matriz.getTiposAmostra()) {
tipoAmostraItems.add(new SelectItem(tipoAmostra, tipoAmostra
.getNome()));
}
ArrayList<ObjetoSelecionavel<Especificacao>> especs = new ArrayList<ObjetoSelecionavel<Especificacao>>();
Set<Especificacao> especificacoesDaMatriz = analiseService
.buscarEspecificacoesPorMatriz(matriz);
for (Especificacao especificacao : especificacoesDaMatriz) {
ObjetoSelecionavel<Especificacao> objSelecionavel = new ObjetoSelecionavel<Especificacao>(
especificacao);
especs.add(objSelecionavel);
}
this.especificacoes = new ListDataModel(especs);
this.todasAnalises = new ArrayList<AnaliseItem>();
// log para investigação de problemas da CR#173
LOG.debug("Realizando busca de análises para matriz ({}) {}", matriz
.getId(), matriz.getNome());
Set<Analise> analisesConsultadas = analiseService
.buscarAnalisesPadraoPorMatriz(matriz);
for (Analise analise : analisesConsultadas) {
AnaliseContratada analiseContratada = new AnaliseContratada(analise);
AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(
itemAtual, analiseContratada);
this.todasAnalises.add(analiseItem);
// log para investigação de problemas da CR#173
LOG.debug("[MATRIZ {} - {}] Método: {} - {} | Ensaio: {} - {}",
new Object[] { matriz.getId(), matriz.getNome(),
analiseItem.getMetodo().getId(),
analiseItem.getMetodo().getNome(),
analiseItem.getEnsaio().getId(),
analiseItem.getEnsaio().getNome() });
}
Collections.sort(this.todasAnalises, new AnaliseItemComparator());
this.analisesExibidas = new ListDataModel(new ArrayList<AnaliseItem>(
this.todasAnalises));
List<Pergunta> perguntas = orcamentoService
.consultarPerguntasOrcamento(matriz, null);
if (!this.alteracao) {
Questionario questionario = itemAtual.getQuestionario();
questionario.limparPerguntasMatriz();
questionario.adicionarPerguntas(perguntas);
}
}
@SuppressWarnings("unchecked")
private void limpar() {
this.itemAtual = new ItemOrcamentoColetavel();
this.alteracao = false;
this.matriz = null;
this.tipoAmostraItems = new ArrayList<SelectItem>();
this.tipoAmostraItems.add(FacesUtils.getEmptySelectItem());
((List) this.especificacoes.getWrappedData()).clear();
((List) this.analisesExibidas.getWrappedData()).clear();
this.analisesComEspecificacao.clear();
this.filtro = new FiltroAnalise();
}
private void prepararAlteracaoItem() {
this.alteracao = true;
this.analisesComEspecificacao.clear();
this.itemAtual = orcamento.getItemsOrcamento().get(indiceItemAlterado);
this.matriz = this.itemAtual.getMatriz();
if (itemAtual.getId() != null) {
this.itemAtual = orcamentoService
.carregarRelacionamentosItem(itemAtual);
}
this.carregarElementosConformeMatrizSelecionada();
this.carregarAnalisesSelecionadas();
this.selecionarEspecificacoesParaAlteracao();
}
@SuppressWarnings("unchecked")
private void selecionarEspecificacoesParaAlteracao() {
List<ObjetoSelecionavel<Especificacao>> especificacoesSelecionaveis = (List<ObjetoSelecionavel<Especificacao>>) this.especificacoes
.getWrappedData();
for (ObjetoSelecionavel<Especificacao> especificacaoSelecionavel : especificacoesSelecionaveis) {
if (itemAtual.getEspecificacoes().contains(
especificacaoSelecionavel.getObjeto())) {
especificacaoSelecionavel.setSelecionado(true);
}
}
}
public void consultarMatriz() {
this.auxilioPreenchimentoMatriz();
}
private void auxilioPreenchimentoMatriz() {
ConsultarMatrizMB consultarMatrizMB = FacesUtils
.findManagedBean(ConsultarMatrizMB.class);
consultarMatrizMB.setAuxilioPreenchimento(true);
consultarMatrizMB.setMbRetorno(this);
FacesUtils.renderPage(consultarMatrizMB.getUrl());
}
public void setObjetoSelecionado(Object objetoSelecionado) {
this.matriz = (Matriz) objetoSelecionado;
this.selecionarMatriz();
}
}