package br.com.centralit.citcorpore.ajaxForms; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import br.com.centralit.citajax.html.DocumentHTML; import br.com.centralit.citajax.html.HTMLForm; import br.com.centralit.citajax.html.HTMLSelect; import br.com.centralit.citcorpore.bean.AtribuicaoSolicitacaoAtendenteDTO; import br.com.centralit.citcorpore.bean.GerenciamentoRotasDTO; import br.com.centralit.citcorpore.bean.TipoDemandaServicoDTO; import br.com.centralit.citcorpore.bean.result.GerenciamentoRotasResultDTO; import br.com.centralit.citcorpore.negocio.AtribuicaoSolicitacaoAtendenteService; import br.com.centralit.citcorpore.negocio.SolicitacaoServicoServiceForMobileV2; import br.com.centralit.citcorpore.negocio.TipoDemandaServicoService; import br.com.citframework.excecao.ServiceException; import br.com.citframework.integracao.core.Page; import br.com.citframework.integracao.core.PageRequest; import br.com.citframework.integracao.core.Pageable; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilI18N; import br.com.citframework.util.WebUtil; import com.google.gson.reflect.TypeToken; /** * Controlador para gerenciamento das rotas de atendimento * * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @since 06/10/2014 * */ public class GerenciamentoRotas extends AbstractGestaoForcaAtendimento<GerenciamentoRotasDTO, GerenciamentoRotasResultDTO> { private static final Logger LOGGER = Logger.getLogger(GerenciamentoRotas.class.getName()); private static final Type LIST_TYPE_ATRIBUICAO = new TypeToken<ArrayList<AtribuicaoSolicitacaoAtendenteDTO>>() {}.getType(); @Override public Class<GerenciamentoRotasDTO> getBeanClass() { return GerenciamentoRotasDTO.class; } @Override public void load(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { super.load(document, request, response); final HTMLForm formSolicitacao = document.getForm("formSolicitacoes"); formSolicitacao.clear(); this.loadComboTiposSolicitacao(document, request); final List<HTMLSelect> combos = new ArrayList<>(); combos.add(document.getSelectById(ID_UF)); combos.add(document.getSelectById(ID_CIDADE)); combos.add(document.getSelectById(ID_CONTRATO)); this.inicializarCombosOnLoad(combos, request); } @Override public void performSearch(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) { try { final GerenciamentoRotasDTO bean = this.normalizeDates((GerenciamentoRotasDTO) document.getBean()); final Page<GerenciamentoRotasResultDTO> page = this.getSolicitacaoServicoService().listSolicitacoesParaRoteirizacao(bean, this.getPageable(request)); final GerenciamentoRotaResultWithPaging result = new GerenciamentoRotaResultWithPaging(); result.setPage(page.getNumber()); result.setPages(page.getTotalPages()); result.setSolicitations(page.getContent()); document.executeScript(String.format(FUNC_HANDLE_SEARCH_RESULT, GSON.toJson(result))); } catch (final Exception e) { document.alert(UtilI18N.internacionaliza(request, "MSE02")); LOGGER.log(Level.WARNING, e.getMessage(), e); } document.executeScript(FUNC_WAIT_WINDOW_HIDE); } public void save(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final String jsonAtribuicoes = request.getParameter("atribuicoes"); final GerenciamentoRotasDTO bean = (GerenciamentoRotasDTO) document.getBean(); try { final List<AtribuicaoSolicitacaoAtendenteDTO> atribuicoes = this.getListAtribuicoes(jsonAtribuicoes); this.getAtribuicaoSolicitacaoService().criaAtribuicaoEmBatch(atribuicoes, bean.getDataExecucao(), WebUtil.getURLFromRequest(request) + request.getContextPath()); document.alert(UtilI18N.internacionaliza(request, "MSG05")); document.executeScript("$().clearSolicitacoesAtribuidasEMapa();"); } catch (final ServiceException e) { document.alert(UtilI18N.internacionaliza(request, "MSE02")); } catch (final Exception e) { throw e; } finally { document.executeScript(FUNC_WAIT_WINDOW_HIDE); } document.executeScript("$(\"html, body\").animate({ scrollTop : 0 }, 800);"); } @Override protected List<GerenciamentoRotasResultDTO> getListResultSearch(final DocumentHTML document, final HttpServletRequest request) throws Exception { return null; } private List<AtribuicaoSolicitacaoAtendenteDTO> getListAtribuicoes(final String jsonAtribuicoes) { return GSON.fromJson(jsonAtribuicoes, LIST_TYPE_ATRIBUICAO); } private void loadComboTiposSolicitacao(final DocumentHTML document, final HttpServletRequest request) throws Exception { final Collection<TipoDemandaServicoDTO> listTiposDemanda = this.getTipoDemandaService().listSolicitacoes(); final HTMLSelect comboTiposSolicitacao = document.getSelectById("idTipoSolicitacao"); this.inicializaCombo(comboTiposSolicitacao, request); if (listTiposDemanda != null) { comboTiposSolicitacao.addOptions(listTiposDemanda, "idTipoDemandaServico", "nomeTipoDemandaServico", null); } document.executeScript(FUNC_WAIT_WINDOW_HIDE); } private Pageable getPageable(final HttpServletRequest request) { final Integer page = Integer.parseInt(request.getParameter("page")); final Integer size = Integer.parseInt(request.getParameter("size")); return new PageRequest(page, size); } private AtribuicaoSolicitacaoAtendenteService atribuicaoSolicitacaoService; private SolicitacaoServicoServiceForMobileV2 solicitacaoServicoService; private TipoDemandaServicoService tipoDemandaService; private AtribuicaoSolicitacaoAtendenteService getAtribuicaoSolicitacaoService() throws Exception { if (atribuicaoSolicitacaoService == null) { atribuicaoSolicitacaoService = (AtribuicaoSolicitacaoAtendenteService) ServiceLocator.getInstance().getService(AtribuicaoSolicitacaoAtendenteService.class, null); } return atribuicaoSolicitacaoService; } private TipoDemandaServicoService getTipoDemandaService() throws Exception { if (tipoDemandaService == null) { tipoDemandaService = (TipoDemandaServicoService) ServiceLocator.getInstance().getService(TipoDemandaServicoService.class, null); } return tipoDemandaService; } private SolicitacaoServicoServiceForMobileV2 getSolicitacaoServicoService() throws Exception { if (solicitacaoServicoService == null) { solicitacaoServicoService = (SolicitacaoServicoServiceForMobileV2) ServiceLocator.getInstance().getService(SolicitacaoServicoServiceForMobileV2.class, null); } return solicitacaoServicoService; } @SuppressWarnings("unused") private class GerenciamentoRotaResultWithPaging { private Integer page; private Integer pages; private List<GerenciamentoRotasResultDTO> solicitations; public Integer getPage() { return page; } public void setPage(final Integer page) { this.page = page; } public Integer getPages() { return pages; } public void setPages(final Integer pages) { this.pages = pages; } public List<GerenciamentoRotasResultDTO> getSolicitations() { return solicitations; } public void setSolicitations(final List<GerenciamentoRotasResultDTO> solicitations) { this.solicitations = solicitations; } } }