package gcom.gui.micromedicao;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.FiltroLeiturista;
import gcom.micromedicao.FiltroRota;
import gcom.micromedicao.Leiturista;
import gcom.micromedicao.Rota;
import gcom.micromedicao.bean.NumeroQuadraMinimoMaximoDaRotaHelper;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroNaoNulo;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
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;
/**
* @see gcom.gui.micromedicao.InformarSubdivisoesDeRotaAction
* @see gcom.gui.micromedicao.InformarSubdivisoesDeRotaActionForm
* @see gcom.gui.micromedicao.ExibirInformarSubdivisoesDeRotaAction
*
* @author Victor Cisneiros
* @date 28/09/2008
*/
public class ExibirInformarSubdivisoesDeRotaAction extends GcomAction {
@Override
public ActionForward execute(
ActionMapping mapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Fachada fachada = Fachada.getInstancia();
ActionForward retorno = mapping.findForward("exibirInformarSubdivisoesDeRotaAction");
InformarSubdivisoesDeRotaActionForm form = (InformarSubdivisoesDeRotaActionForm) actionForm;
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
String opcao = request.getParameter("opcao");
List<InformarSubdivisoesDeRotaActionForm> subdivisoesDeRota = new ArrayList<InformarSubdivisoesDeRotaActionForm>();
if (session.getAttribute("subdivisoesDeRota") != null) {
subdivisoesDeRota = (List<InformarSubdivisoesDeRotaActionForm>) request.getSession().getAttribute("subdivisoesDeRota");
}
Boolean editable = true;
Rota rota = null;
// Pesquisa ROTA
if (form.getIdRota() != null && !form.getIdRota().trim().equals("")) {
Integer idRota = new Integer(form.getIdRota());
FiltroRota filtroRota = new FiltroRota();
filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.ID_ROTA, idRota));
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.SETOR_COMERCIAL);
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.LOCALIDADE);
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.FATURAMENTO_GRUPO);
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.EMPRESA);
Collection pesquisa = fachada.pesquisar(filtroRota, Rota.class.getName());
if (pesquisa != null && !pesquisa.isEmpty()) {
rota = (Rota) Util.retonarObjetoDeColecao(pesquisa);
Integer grupoFaturamento = rota.getFaturamentoGrupo().getId();
Integer anoMes = sistemaParametro.getAnoMesFaturamento();
// Permitir somente a subdivis�o de todas cujo grupo n�o foi comandado
Boolean grupoComandado = fachada.verificarGrupoFaturamentoComandado(anoMes, grupoFaturamento);
if (grupoComandado) {
throw new ActionServletException("atencao.rota.grupo.faturado");
}
form.setIdRota(rota.getId().toString());
form.setDescricaoRota(
rota.getEmpresa().getDescricao() + " " +
rota.getFaturamentoGrupo().getDescricaoAbreviada() + " " +
rota.getSetorComercial().getLocalidade().getId() +"." +
rota.getSetorComercial().getCodigo() + "." + rota.getCodigo());
FiltroRota filtroRotas = new FiltroRota();
filtroRotas.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.SETOR_COMERCIAL);
filtroRotas.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.LEITURISTA);
filtroRotas.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.CLIENTE);
filtroRotas.adicionarParametro(new ParametroSimples(FiltroRota.SETOR_COMERCIAL_CODIGO, rota.getSetorComercial().getCodigo()));
filtroRotas.adicionarParametro(new ParametroSimples(FiltroRota.LOCALIDADE_ID, rota.getSetorComercial().getLocalidade().getId()));
filtroRotas.adicionarParametro(new ParametroSimples(
FiltroRota.INDICADOR_USO, ConstantesSistema.SIM));
filtroRotas.setCampoOrderBy(FiltroRota.CODIGO_ROTA);
Collection<Rota> pesquisaRotas = fachada.pesquisar(filtroRotas, Rota.class.getName());
// se a rota original ja foi subdividida
if (pesquisa != null && pesquisaRotas.size() > 1) {
Collection<Integer> idsRotas = new ArrayList<Integer>();
subdivisoesDeRota.clear();
for (Rota r : pesquisaRotas) {
idsRotas.add(r.getId());
InformarSubdivisoesDeRotaActionForm af = new InformarSubdivisoesDeRotaActionForm();
af.setIdRota(r.getId().toString());
af.setCodigoRota(r.getCodigo().toString());
if(r.getLeiturista() != null){
af.setNomeLeiturista(r.getLeiturista().getCliente().getNome());
af.setIdLeiturista(r.getLeiturista().getId().toString());
}
af.setQuadraInicial("0");
af.setQuadraFinal("0");
af.setQuantidadeQuadras("0");
af.setIdGrupoFaturamento(r.getFaturamentoGrupo().getId().toString());
af.setIdCobrancaGrupo(r.getCobrancaGrupo().getId().toString());
subdivisoesDeRota.add(af);
}
Collection<NumeroQuadraMinimoMaximoDaRotaHelper> minmax =
fachada.pesquisarNumeroQuadraMininoMaximoDaRota(idsRotas);
for (InformarSubdivisoesDeRotaActionForm af : subdivisoesDeRota) {
for (NumeroQuadraMinimoMaximoDaRotaHelper numeros : minmax) {
if (new Integer(af.getIdRota()).equals(numeros.getIdRota())) {
af.setQuadraInicial(numeros.getNumeroQuadraMinimo().toString());
af.setQuadraFinal(numeros.getNumeroQuadraMaximo().toString());
af.setQuantidadeQuadras(numeros.getQuantidadeQuadras().toString());
}
}
}
editable = false;
session.setAttribute("subdivisoesDeRota", subdivisoesDeRota);
}
} else {
form.setIdRota(null);
form.setDescricaoRota("ROTA INEXISTENTE");
}
}
// Removendo subdivisao de ROTA
if (opcao != null && opcao.equals("removerSubrota")) {
int index = Integer.parseInt(request.getParameter("index"));
if (subdivisoesDeRota.size() > index) {
subdivisoesDeRota.remove(index);
}
if (subdivisoesDeRota.size() > 0) {
InformarSubdivisoesDeRotaActionForm ultimo = subdivisoesDeRota.get(subdivisoesDeRota.size() -1);
session.setAttribute("quadraFinalAnterior", new Integer(ultimo.getQuadraFinal()));
} else {
session.removeAttribute("quadraFinalAnterior");
}
}
// Adicionando subdivisao de ROTA
if (opcao != null && opcao.equals("adicionarSubrota")) {
if (rota == null) {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Rota");
}
Integer quadraFinalAnterior = (Integer) session.getAttribute("quadraFinalAnterior");
int quadraInicial = Integer.parseInt(form.getQuadraInicial());
int quadraFinal = Integer.parseInt(form.getQuadraFinal());
if (quadraFinal < quadraInicial) {
throw new ActionServletException("atencao.quadraInicial.maior.que.quadraFinal");
}
if (quadraFinalAnterior != null && quadraInicial <= quadraFinalAnterior) {
throw new ActionServletException("atencao.quadraInicial.menor.que.quadraFinal.anterior");
}
FiltroLeiturista filtroLeiturista = new FiltroLeiturista();
filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.CLIENTE);
filtroLeiturista.adicionarParametro(new ParametroSimples(FiltroLeiturista.ID, form.getIdLeiturista()));
Collection pesquisaLeiturista = fachada.pesquisar(filtroLeiturista, Leiturista.class.getName());
if (pesquisaLeiturista == null || pesquisaLeiturista.isEmpty()) {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Leiturista");
}
Leiturista leiturista = (Leiturista) Util.retonarObjetoDeColecao(pesquisaLeiturista);
InformarSubdivisoesDeRotaActionForm linha = new InformarSubdivisoesDeRotaActionForm();
linha.setIdRota(form.getIdRota());
Integer quantidade = fachada.pesqisarQuantidadeQuadrasDaRota(rota.getId(), quadraInicial, quadraFinal);
linha.setQuadraInicial(form.getQuadraInicial());
linha.setQuadraFinal(form.getQuadraFinal());
linha.setIdLeiturista(form.getIdLeiturista());
linha.setQuantidadeQuadras(quantidade.toString());
linha.setNomeLeiturista(leiturista.getCliente().getNome());
subdivisoesDeRota.add(linha);
session.setAttribute("quadraFinalAnterior", quadraFinal);
session.setAttribute("subdivisoesDeRota", subdivisoesDeRota);
}
if (opcao != null && opcao.equals("resetarSubrotas") && editable) {
session.removeAttribute("quadraFinalAnterior");
session.removeAttribute("subdivisoesDeRota");
}
if (session.getAttribute("quadraFinalAnterior") == null) {
session.setAttribute("quadraFinalAnterior", -1);
}
session.setAttribute("editable", editable);
if (subdivisoesDeRota.size() >= 10) {
session.setAttribute("limiteSubdivisoes", true);
} else {
session.setAttribute("limiteSubdivisoes", false);
}
if (rota != null && editable) {
String codigoRota = rota.getCodigo().toString();
int index = 0;
for (InformarSubdivisoesDeRotaActionForm subrota : subdivisoesDeRota) {
if (index == 0) {
subrota.setCodigoRota(codigoRota);
} else {
subrota.setCodigoRota(codigoRota + index);
}
index++;
}
}
Usuario usuario = (Usuario) request.getSession(false).getAttribute("usuarioLogado");
if (usuario.getEmpresa() == null) {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Empresa do usu�rio logado.");
}
// Pesquisa LEITURISTA
FiltroLeiturista filtroLeiturista = new FiltroLeiturista();
if (!usuario.getEmpresa().getDescricao().equals(sistemaParametro.getNomeAbreviadoEmpresa())) {
request.setAttribute("idEmpresaLeituristica", "?idEmpresaLeituristicaRecebida=" + usuario.getEmpresa().getId() + "&");
filtroLeiturista.adicionarParametro(new ParametroSimples(FiltroLeiturista.EMPRESA_ID, usuario.getEmpresa().getId()));
}
filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.CLIENTE);
//*******************************************************
// Autor: Ivan Segio
// Data: 15/07/2009
// Evita erro quando o Leiturista esta cadastrado como
// Funcionario. Foi definido que um Leiturista deve ser
// cadastrado como Cliente.
//*******************************************************
filtroLeiturista.adicionarParametro(new ParametroNaoNulo(FiltroLeiturista.CLIENTE));
//*******************************************************
filtroLeiturista.setCampoOrderBy("cliente.nome");
Collection<Leiturista> colecaoLeiturista = fachada.pesquisar(filtroLeiturista, Leiturista.class.getName());
request.setAttribute("colecaoLeiturista", colecaoLeiturista);
return retorno;
}
}