package gcom.gui.micromedicao;
import gcom.cadastro.cliente.FiltroEsferaPoder;
import gcom.cadastro.empresa.Empresa;
import gcom.cadastro.empresa.FiltroEmpresa;
import gcom.cadastro.localidade.FiltroSetorComercial;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.Quadra;
import gcom.cadastro.localidade.SetorComercial;
import gcom.fachada.Fachada;
import gcom.faturamento.FaturamentoGrupo;
import gcom.faturamento.FiltroFaturamentoGrupo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.FiltroLeiturista;
import gcom.micromedicao.Leiturista;
import gcom.micromedicao.RoteiroEmpresa;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.Filtro;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Action de exibir atulizar roteiro
* @author Francisco do Nascimento
* @created 20/09/07
*/
public class ExibirAtualizarRoteiroEmpresaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Inicializando Variaveis
ActionForward retorno = actionMapping.findForward("atualizarRoteiroEmpresa");
InserirRoteiroEmpresaActionForm form = (InserirRoteiroEmpresaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
FiltroEmpresa filtroEmpresa = new FiltroEmpresa(FiltroEsferaPoder.DESCRICAO);
filtroEmpresa.setConsultaSemLimites(true);
filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEsferaPoder.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection<Empresa> colecaoEmpresa = fachada.pesquisar(filtroEmpresa,
Empresa.class.getName());
sessao.setAttribute("colecaoEmpresa", colecaoEmpresa);
//Pesquisando grupo de faturamento
FiltroFaturamentoGrupo filtroFaturamentoGrupo = new FiltroFaturamentoGrupo();
filtroFaturamentoGrupo.setCampoOrderBy(FiltroFaturamentoGrupo.DESCRICAO_ABREVIADA);
Collection<FaturamentoGrupo> collectionFaturamentoGrupo = fachada.pesquisar(filtroFaturamentoGrupo, FaturamentoGrupo.class.getName());
//httpServletRequest.setAttribute("collectionFaturamentoGrupo", collectionFaturamentoGrupo);
sessao.setAttribute("colecaoFaturamentoGrupo", collectionFaturamentoGrupo);
//Fim de pesquisando grupo de faturamento
String idLocalidadeDigitado = form.getIdLocalidade();
String idRoteiroEmpresa = null;
if ( httpServletRequest.getParameter("reloadPage") == null ||
httpServletRequest.getParameter("reloadPage").equals("")){
//Recupera o id do Rota que vai ser atualizado
if (httpServletRequest.getParameter("idRegistroInseridoAtualizar")!= null){
idRoteiroEmpresa = httpServletRequest.getParameter("idRegistroInseridoAtualizar");
//Definindo a volta do bot�o Voltar p Filtrar Rota
sessao.setAttribute("voltar", "filtrar");
sessao.setAttribute("idRegistroAtualizacao",idRoteiroEmpresa);
}else if(httpServletRequest.getParameter("idRegistroAtualizacao") == null){
idRoteiroEmpresa = (String)sessao.getAttribute("idRegistroAtualizacao");
//Definindo a volta do bot�o Voltar p Filtrar Rota
sessao.setAttribute("voltar", "filtrar");
}else if (httpServletRequest.getParameter("idRegistroAtualizacao")!= null) {
idRoteiroEmpresa = httpServletRequest.getParameter("idRegistroAtualizacao");
//Definindo a volta do bot�o Voltar p Manter Rota
sessao.setAttribute("voltar", "manter");
sessao.setAttribute("idRegistroAtualizacao",idRoteiroEmpresa);
sessao.setAttribute("indicadorAtualizar","1");
}
exibirRoteiroEmpresa(idRoteiroEmpresa, form, fachada, sessao, httpServletRequest);
}else {
idRoteiroEmpresa = (String)sessao.getAttribute("idRegistroAtualizacao");
}
String idLocalidade = form.getIdLocalidade();
String idDigitadoEnterLeiturista = form.getIdLeiturista();
if (httpServletRequest.getParameter("desfazer") != null
&& httpServletRequest.getParameter("desfazer").equalsIgnoreCase("S")) {
//-------------- bt DESFAZER ---------------
exibirRoteiroEmpresa(idRoteiroEmpresa, form,fachada,sessao,httpServletRequest);
}
String removerSetor = httpServletRequest.getParameter("removerSetor");
Collection colecaoSetorComercial = (Collection) sessao.getAttribute("colecaoSetorComercial");
// Pesquisando Setor Comercial
if (idLocalidade != null
&& !idLocalidade.trim().equalsIgnoreCase("")) {
FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();
// Adiciona o id da localidade que est� no formul�rio para
// compor a pesquisa.
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.ID_LOCALIDADE, idLocalidade));
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.INDICADORUSO,
ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna cole��o de setor comercial
colecaoSetorComercial = fachada.pesquisar(filtroSetorComercial,
SetorComercial.class.getName());
if (colecaoSetorComercial != null && !colecaoSetorComercial.isEmpty()) {
sessao.setAttribute("colecaoSetorComercial",
colecaoSetorComercial);
sessao.setAttribute("colecaoSetoresSelecionados",
new ArrayList());
}
}
if (colecaoSetorComercial == null || colecaoSetorComercial.isEmpty()) {
sessao.setAttribute("colecaoSetorComercial", new ArrayList());
}
// Preencher lista de setores selecionados
String setoresSelecionados[] = form.getIdSetorComercialSelecionados();
Collection colecaoSetoresSelecionados = (Collection) sessao.getAttribute("colecaoSetoresSelecionados");
if (colecaoSetoresSelecionados == null){
colecaoSetoresSelecionados = new ArrayList();
sessao.setAttribute("colecaoSetoresSelecionados", colecaoSetoresSelecionados);
}
ArrayList quadras = (ArrayList) httpServletRequest.getAttribute("colecaoQuadras");
if (setoresSelecionados != null && setoresSelecionados.length > 0){
if (removerSetor != null && !removerSetor.equalsIgnoreCase("")){
for (int i = 0; i < setoresSelecionados.length; i++) {
Iterator iter = colecaoSetoresSelecionados.iterator();
while (iter.hasNext()) {
SetorComercial setor = (SetorComercial) iter.next();
if (setor.getId().intValue() == Integer.parseInt(setoresSelecionados[i])){
colecaoSetorComercial.add(setor);
colecaoSetoresSelecionados.remove(setor);
break;
}
}
}
} else {//if (carregarQuadras != null && !carregarQuadras.equals("")){
//colecaoSetoresSelecionados = new ArrayList();
for (int i = 0; i < setoresSelecionados.length; i++) {
Iterator iter = colecaoSetorComercial.iterator();
while (iter.hasNext()) {
SetorComercial setor = (SetorComercial) iter.next();
if (setor.getId().intValue() == Integer.parseInt(setoresSelecionados[i])){
colecaoSetoresSelecionados.add(setor);
colecaoSetorComercial.remove(setor);
break;
}
}
}
}
sessao.setAttribute("colecaoSetorComercial", colecaoSetorComercial);
sessao.setAttribute("colecaoSetoresSelecionados", colecaoSetoresSelecionados);
form.setIdSetorComercialSelecionados(null);
}
// if (carregarQuadras != null && !carregarQuadras.equalsIgnoreCase("")){
// Pesquisando quadras do setores comerciais selecionados
String faturGrp = form.getFaturamentoGrupo();
if (quadras == null){
quadras = new ArrayList();
}
if (faturGrp != null && !faturGrp.trim().equalsIgnoreCase("") &&
colecaoSetoresSelecionados.size() > 0 && idLocalidade != null &&
!idLocalidade.trim().equals("")){
int[] idsSetores = new int[colecaoSetoresSelecionados.size()];
int i = 0;
for (Iterator iter = colecaoSetoresSelecionados.iterator(); iter.hasNext();) {
SetorComercial setor = (SetorComercial) iter.next();
idsSetores[i++] = setor.getId().intValue();
}
Integer intFaturGrupo = new Integer(faturGrp);
// Retorna quadras
// a cole��o 'quadras' chega aqui preenchida com as quadras do roteiro empresa
// e esta pesquisa acrescentar� as quadras sem roteiro empresa
quadras.addAll(fachada.pesquisarQuadrasPorSetorComercialFaturamentoGrupo(
Integer.parseInt(idLocalidade), idsSetores, intFaturGrupo));
Collections.sort(quadras, new ComparadorQuadra());
}
sessao.setAttribute("colecaoQuadras", quadras);
// }
if (quadras == null || quadras.isEmpty()){
sessao.setAttribute("colecaoQuadras", new ArrayList());
}
//-------Parte que trata do c�digo quando o usu�rio tecla enter
if (idLocalidadeDigitado == null){
idLocalidadeDigitado = form.getIdLocalidade();
}
if (idLocalidadeDigitado != null &&
!idLocalidadeDigitado.equalsIgnoreCase("")){
if (Util.validarValorNaoNumerico(idLocalidadeDigitado)){
//Localidade n�o num�rico.
httpServletRequest.setAttribute("nomeCampo","idLocalidade");
throw new ActionServletException("atencao.nao.numerico",
null,"Localidade ");
} else {
verificaExistenciaCodLocalidade(idLocalidadeDigitado,form,
httpServletRequest,fachada);
pesquisarSetoresComerciais(Integer.parseInt(idLocalidadeDigitado), fachada, httpServletRequest);
}
}
if (idDigitadoEnterLeiturista != null &&
!idDigitadoEnterLeiturista.equalsIgnoreCase("")&&
Util.validarValorNaoNumerico(idDigitadoEnterLeiturista)){
//Leiturista n�o num�rico.
httpServletRequest.setAttribute("nomeCampo","idLeiturista");
throw new ActionServletException("atencao.nao.numerico",
null,"Leiturista ");
} else {
verificaExistenciaCodLeiturista(idDigitadoEnterLeiturista,form,
httpServletRequest,fachada);
}
//-------Fim de parte que trata do c�digo quando o usu�rio tecla enter
sessao.removeAttribute("caminhoRetornoTelaPesquisa");
// DEFINI��O QUE IR� AUXILIAR O RETORNO DOS POPUPS
sessao.setAttribute("UseCase", "ATUALIZARROTEIROEMPRESA");
return retorno;
}
private void exibirRoteiroEmpresa(String idRoteiroEmpresa,
InserirRoteiroEmpresaActionForm form,
Fachada fachada,HttpSession sessao,
HttpServletRequest httpServletRequest) {
//Cria a vari�vel que vai armazenar o roteiro a ser atualizado
RoteiroEmpresa roteiro = new RoteiroEmpresa();
roteiro.setId(Integer.parseInt(idRoteiroEmpresa));
//Cria o filtro de roteiro empresa e seta o id do roteiro para ser atualizado no filtro
//e indica quais objetos devem ser retornados pela pesquisa
Filtro filtro = roteiro.retornaFiltro();
Collection<RoteiroEmpresa> collectionRoteiro = fachada.pesquisar(filtro, RoteiroEmpresa.class.getName()) ;
//Caso a pesquisa tenha retornado o roteiro
if (collectionRoteiro != null && !collectionRoteiro.isEmpty()){
//Recupera da cole��o o roteiro que vai ser atualizado
roteiro = (RoteiroEmpresa) Util.retonarObjetoDeColecao(collectionRoteiro);
Collection<Quadra> quadras = fachada.pesquisarQuadrasPorRoteiroEmpresa(roteiro.getId());
httpServletRequest.setAttribute("colecaoQuadras", quadras);
TreeSet<String> setoresSelecionados = new TreeSet<String>();
String[] quadrasSelecionadas = new String[quadras.size()];
int i = 0;
for (Quadra quadra : quadras) {
setoresSelecionados.add(quadra.getSetorComercial().getId() + "");
quadrasSelecionadas[i++] = quadra.getId() + "";
}
String[] idSetoresSelecionados = setoresSelecionados.toArray(new String[0]);
form.setIdSetorComercialSelecionados(idSetoresSelecionados);
form.setIdQuadraAdicionar(quadrasSelecionadas);
//sessao.setAttribute("colecaoSetoresSelecionados", setoresSelecionados);
Quadra quadra = (Quadra) Util.retonarObjetoDeColecao(quadras);
//Seta no form os dados de roteiro
form.setIdLocalidade("" + quadra.getSetorComercial().getLocalidade().getId());
form.setDescricaoLocalidade("" + quadra.getSetorComercial().getLocalidade().getDescricao());
form.setFaturamentoGrupo("" + quadra.getRota().getFaturamentoGrupo().getId());
form.setEmpresa("" + roteiro.getEmpresa().getId());
form.setIdLeiturista("" + roteiro.getLeiturista().getId());
String nomeLeiturista = "";
if (roteiro.getLeiturista().getFuncionario() != null) {
nomeLeiturista = roteiro.getLeiturista().getFuncionario().getNome();
} else {
if (roteiro.getLeiturista().getCliente() != null) {
nomeLeiturista = roteiro.getLeiturista().getCliente().getNome();
}
}
httpServletRequest.setAttribute("idLeituristaEncontrado","true");
form.setNomeLeiturista(nomeLeiturista);
if ((roteiro.getIndicadorUso() != null) && (!roteiro.getIndicadorUso().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO))){
form.setIndicadorUso("" + roteiro.getIndicadorUso());
}
form.setUltimaAlteracao(Util.formatarDataComHora(roteiro.getUltimaAlteracao()));
//pesquisarSetoresComerciais(quadra.getSetorComercial().getLocalidade().getId(), fachada, httpServletRequest);
}
}
private void verificaExistenciaCodLocalidade(String idDigitadoEnterLocalidade,
InserirRoteiroEmpresaActionForm form,
HttpServletRequest httpServletRequest,
Fachada fachada) {
//Verifica se o c�digo da Localidade foi digitado
if (idDigitadoEnterLocalidade != null
&& !idDigitadoEnterLocalidade.trim().equals("")
&& Integer.parseInt(idDigitadoEnterLocalidade) > 0) {
//Recupera a localidade informada pelo usu�rio
Localidade localidadeEncontrada = fachada.pesquisarLocalidadeDigitada(new Integer(idDigitadoEnterLocalidade));
//Caso a localidade informada pelo usu�rio esteja cadastrada no sistema
//Seta os dados da localidade no form
//Caso contr�rio seta as informa��es da localidade para vazio
//e indica ao usu�rio que a localidade n�o existe
if (localidadeEncontrada != null) {
//a localidade foi encontrada
form.setIdLocalidade("" + (localidadeEncontrada.getId()));
form
.setDescricaoLocalidade(localidadeEncontrada.getDescricao());
httpServletRequest.setAttribute("idLocalidadeNaoEncontrada",
"true");
httpServletRequest.setAttribute("nomeCampo","codigoSetorComercial");
} else {
//a localidade n�o foi encontrada
form.setIdLocalidade("");
httpServletRequest.setAttribute("idLocalidadeNaoEncontrada",
"exception");
form.setDescricaoLocalidade("LOCALIDADE INEXISTENTE");
}
}
}
private void pesquisarSetoresComerciais(int idLocalidade, Fachada fachada, HttpServletRequest request){
FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();
// Adiciona o id da localidade que est� no formul�rio para
// compor a pesquisa.
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.ID_LOCALIDADE, idLocalidade));
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.INDICADORUSO,
ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna cole��o de setor comercial
Collection colecaoSetorComercial = fachada.pesquisar(filtroSetorComercial,
SetorComercial.class.getName());
if (colecaoSetorComercial != null && !colecaoSetorComercial.isEmpty()) {
request.setAttribute("colecaoSetorComercial",
colecaoSetorComercial);
request.setAttribute("colecaoSetoresSelecionados",
new ArrayList());
}
}
private void verificaExistenciaCodLeiturista(String idDigitadoEnterLeiturista,
InserirRoteiroEmpresaActionForm inserirRoteiroEmpresaActionForm,
HttpServletRequest httpServletRequest,
Fachada fachada) {
//Verifica se o c�digo do Leiturista foi digitado
if (idDigitadoEnterLeiturista != null
&& !idDigitadoEnterLeiturista.trim().equals("")
&& Integer.parseInt(idDigitadoEnterLeiturista) > 0) {
//Recupera o leiturista informado pelo usu�rio
FiltroLeiturista filtroLeiturista = new FiltroLeiturista();
filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.FUNCIONARIO);
filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.CLIENTE);
filtroLeiturista.adicionarParametro(new ParametroSimples(
FiltroLeiturista.ID, idDigitadoEnterLeiturista));
filtroLeiturista.adicionarParametro(new ParametroSimples(
FiltroLeiturista.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection leituristaEncontrado = fachada.pesquisar(filtroLeiturista,
Leiturista.class.getName());
//Caso o leiturista informado pelo usu�rio esteja cadastrado no sistema
//Seta os dados do leiturista no form
//Caso contr�rio seta as informa��es de leiturista para vazio
//e indica ao usu�rio que o leiturista n�o existe
if (leituristaEncontrado != null && leituristaEncontrado.size() > 0) {
//leiturista foi encontrado
Leiturista leiturista = (Leiturista) ((List) leituristaEncontrado).get(0);
inserirRoteiroEmpresaActionForm.setIdLeiturista("" +
leiturista.getId());
if (leiturista.getFuncionario() != null){
inserirRoteiroEmpresaActionForm.setNomeLeiturista(leiturista.getFuncionario().getNome());
} else if (leiturista.getCliente() != null){
inserirRoteiroEmpresaActionForm.setNomeLeiturista(leiturista.getCliente().getNome());
}
httpServletRequest.setAttribute("idLeituristaEncontrado","true");
httpServletRequest.setAttribute("nomeCampo","codigoSetorComercial");
} else {
//o leiturista n�o foi encontrado
inserirRoteiroEmpresaActionForm.setIdLeiturista("");
inserirRoteiroEmpresaActionForm.setNomeLeiturista("LEITURISTA INEXISTENTE");
httpServletRequest.setAttribute("nomeCampo","idLeiturista");
}
}
}
static class ComparadorQuadra implements Comparator{
public int compare(Object o1, Object o2) {
if (o1 instanceof Quadra && o2 instanceof Quadra){
Quadra q1 = (Quadra) o1;
Quadra q2 = (Quadra) o2;
if (q1.getNumeroQuadra() < q2.getNumeroQuadra()){
return -1;
} else {
return 1;
}
}
return 0;
}
}
}