package gcom.gui.micromedicao;
import gcom.cadastro.sistemaparametro.SistemaParametro;
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.FiltroRota;
import gcom.micromedicao.Leiturista;
import gcom.micromedicao.Rota;
import gcom.micromedicao.bean.InformarSubdivisoesDeRotaHelper;
import gcom.util.ControladorException;
import gcom.util.Util;
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 Ivan Sergio
* @date 23/02/2010
*/
public class AlterarSubdivisoesDeRotaAction extends GcomAction {
@Override
public ActionForward execute(
ActionMapping mapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
ActionForward retorno = mapping.findForward("telaSucesso");
HttpSession session = request.getSession();
Fachada fachada = Fachada.getInstancia();
List<InformarSubdivisoesDeRotaActionForm> subdivisoes =
(List<InformarSubdivisoesDeRotaActionForm>) session.getAttribute("subdivisoesDeRota");
if (subdivisoes == null || subdivisoes.size() == 0) {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Subdivisoes de Rota");
}
Integer idRotaOriginal = new Integer(subdivisoes.get(0).getIdRota());
List<InformarSubdivisoesDeRotaHelper> helpers = new ArrayList<InformarSubdivisoesDeRotaHelper>();
session.setAttribute("quadraFinalAnterior", -1);
for (InformarSubdivisoesDeRotaActionForm subdivisao : subdivisoes) {
//*******************************************************************
// Recupera os dados da Alteracao
//*******************************************************************
Integer quadraFinalAnterior = (Integer) session.getAttribute("quadraFinalAnterior");
int quadraInicial = Integer.parseInt(request.getParameter("quadra_ini_" + subdivisao.getCodigoRota()));
int quadraFinal = Integer.parseInt(request.getParameter("quadra_fim_" + subdivisao.getCodigoRota()));
Integer idLeiturista = new Integer(request.getParameter("leiturista_" + subdivisao.getCodigoRota()));
if (quadraFinal < quadraInicial) {
throw new ActionServletException("atencao.quadraInicial.maior.que.quadraFinal");
}
if (quadraFinalAnterior != null && quadraInicial <= quadraFinalAnterior) {
session.removeAttribute("quadraFinalAnterior");
throw new ActionServletException("atencao.quadraInicial.menor.que.quadraFinal.anterior");
}
session.setAttribute("quadraFinalAnterior", quadraFinal);
//*******************************************************************
InformarSubdivisoesDeRotaHelper helper = new InformarSubdivisoesDeRotaHelper();
helper.setIdRota(new Integer(subdivisao.getIdRota()));
helper.setCodigoRota(new Short(subdivisao.getCodigoRota()));
helper.setQuadraInicial(quadraInicial);
helper.setQuadraFinal(quadraFinal);
helper.setIdLeiturista(idLeiturista);
helpers.add(helper);
}
for (int i = 0; i < helpers.size() -1; i++) {
helpers.get(i).setQuadraFinal(helpers.get(i +1).getQuadraInicial() -1);
}
if (helpers.size() > 0) {
helpers.get(helpers.size() -1).setQuadraFinal(9999);
}
//*************************************************************
// Atualiza as Quadras com os intervalos informados
//*************************************************************
for (InformarSubdivisoesDeRotaHelper rotasHelper : helpers) {
FiltroRota filtroRota = new FiltroRota();
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.SETOR_COMERCIAL);
filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.ID_ROTA, rotasHelper.getIdRota()));
Rota rota = (Rota) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroRota, Rota.class.getName()));
if (rota == null) {
// Recupera a Rota pai para a verificacao do Grupo
FiltroRota filtroRotaPai = new FiltroRota();
filtroRotaPai.adicionarParametro(new ParametroSimples(FiltroRota.ID_ROTA, idRotaOriginal));
Collection pesquisa = fachada.pesquisar(filtroRotaPai, Rota.class.getName());
if (pesquisa == null || pesquisa.isEmpty()) {
throw new ControladorException("atencao.pesquisa_inexistente", null, "Rota");
}
Rota rotaPai = (Rota) Util.retonarObjetoDeColecao(pesquisa);
// Verifica de o Grupo ja foi comandado ou faturado
this.verificarComandoFaturamento(
rotaPai.getFaturamentoGrupo().getId(), rotasHelper.getCodigoRota().toString());
// Insere a Nova Rota
Integer idRota = fachada.inserirNovaSubdivisoesDeRota(
idRotaOriginal,
rotasHelper.getCodigoRota(),
rotasHelper.getIdLeiturista());
rotasHelper.setIdRota(idRota);
filtroRota = new FiltroRota();
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.SETOR_COMERCIAL);
filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.ID_ROTA, rotasHelper.getIdRota()));
rota = (Rota) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroRota, Rota.class.getName()));
}else {
// Verifica de o Grupo ja foi comandado ou faturado
this.verificarComandoFaturamento(
rota.getFaturamentoGrupo().getId(), rota.getCodigo().toString());
FiltroLeiturista filtroLeiturista = new FiltroLeiturista();
filtroLeiturista.adicionarCaminhoParaCarregamentoEntidade(FiltroLeiturista.CLIENTE);
filtroLeiturista.adicionarParametro(new ParametroSimples(FiltroLeiturista.ID, rotasHelper.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);
rota.setLeiturista(leiturista);
fachada.atualizar(rota);
}
// Atualiza o intervalo da Rota
fachada.atualizarRotaDasQuadrasNoIntervaloNumero(
rota.getId(),
rota.getSetorComercial().getId(),
rotasHelper.getQuadraInicial(),
rotasHelper.getQuadraFinal());
}
//*************************************************************
montarPaginaSucesso(request, "Altera��es nas Subdivis�es da Rota de c�digo " +
idRotaOriginal + " realizadas com sucesso.", "Informar outra subdivisao",
"exibirInformarSubdivisoesDeRotaAction.do?menu=sim");
return retorno;
}
private void verificarComandoFaturamento(Integer idGrupoFaturamento, String codigoRota) {
Fachada fachada = Fachada.getInstancia();
// Permitir somente a manutencao caso o grupo n�o foi comandado
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
Integer anoMes = sistemaParametro.getAnoMesFaturamento();
Boolean grupoComandado = fachada.verificarGrupoFaturamentoComandado(anoMes, idGrupoFaturamento);
if (grupoComandado) {
throw new ActionServletException("atencao.rota.grupo.comandado", null, codigoRota);
}
// Verifica se o grupo j� foi faturado
FiltroFaturamentoGrupo filtroFaturamentoGrupo = new FiltroFaturamentoGrupo();
filtroFaturamentoGrupo.adicionarParametro(new ParametroSimples(
FiltroFaturamentoGrupo.ID, idGrupoFaturamento));
FaturamentoGrupo faturamentoGrupo = (FaturamentoGrupo) Util.retonarObjetoDeColecao(fachada.pesquisar(
filtroFaturamentoGrupo, FaturamentoGrupo.class.getName()));
// && !sistemaParametro.getNomeAbreviadoEmpresa().equals(SistemaParametro.EMPRESA_COMPESA)
// adicionado por R�mulo Aur�lio
// solicitado por Leonardo Vieira
// Data:17/10/2010
if (faturamentoGrupo.getAnoMesReferencia() <= anoMes
&& !sistemaParametro.getNomeAbreviadoEmpresa().equals(SistemaParametro.EMPRESA_COMPESA)) {
throw new ActionServletException("atencao.rota.grupo.ja.faturado", null, codigoRota);
}
}
}