package br.com.centralit.citcorpore.ajaxForms; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringEscapeUtils; import br.com.centralit.citajax.html.AjaxFormAction; 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.CidadesDTO; import br.com.centralit.citcorpore.bean.ClienteDTO; import br.com.centralit.citcorpore.bean.ContratoDTO; import br.com.centralit.citcorpore.bean.ContratosUnidadesDTO; import br.com.centralit.citcorpore.bean.EnderecoDTO; import br.com.centralit.citcorpore.bean.FornecedorDTO; import br.com.centralit.citcorpore.bean.LocalidadeDTO; import br.com.centralit.citcorpore.bean.LocalidadeUnidadeDTO; import br.com.centralit.citcorpore.bean.PaisDTO; import br.com.centralit.citcorpore.bean.TipoUnidadeDTO; import br.com.centralit.citcorpore.bean.UfDTO; import br.com.centralit.citcorpore.bean.UnidadeDTO; import br.com.centralit.citcorpore.bean.UnidadesAccServicosDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.negocio.CidadesService; import br.com.centralit.citcorpore.negocio.ClienteService; import br.com.centralit.citcorpore.negocio.ContratoService; import br.com.centralit.citcorpore.negocio.ContratosUnidadesService; import br.com.centralit.citcorpore.negocio.EnderecoService; import br.com.centralit.citcorpore.negocio.FornecedorService; import br.com.centralit.citcorpore.negocio.LocalidadeService; import br.com.centralit.citcorpore.negocio.LocalidadeUnidadeService; import br.com.centralit.citcorpore.negocio.PaisServico; import br.com.centralit.citcorpore.negocio.TipoUnidadeService; import br.com.centralit.citcorpore.negocio.UfService; import br.com.centralit.citcorpore.negocio.UnidadeService; import br.com.centralit.citcorpore.negocio.UnidadesAccServicosService; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.centralit.citcorpore.util.Enumerados; import br.com.centralit.citcorpore.util.Enumerados.TipoDate; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.centralit.citcorpore.util.Util; import br.com.centralit.citcorpore.util.WebUtil; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilI18N; import br.com.citframework.util.geo.GeoUtils; @SuppressWarnings({"unchecked", "rawtypes"}) public class Unidade extends AjaxFormAction { @Override public void load(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final UsuarioDTO usuario = WebUtil.getUsuario(request); if (usuario == null) { document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada")); document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'"); return; } this.preencherComboTipoUnidade(document, request, response); this.preencherComboUnidadePai(document, request, response); document.getElementById("divListaContratos").setVisible(false); String UNIDADE_VINC_CONTRATOS = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.UNIDADE_VINC_CONTRATOS, "N"); if (UNIDADE_VINC_CONTRATOS == null) { UNIDADE_VINC_CONTRATOS = "N"; } if (UNIDADE_VINC_CONTRATOS.equalsIgnoreCase("S")) { final ContratoService contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null); final ClienteService clienteService = (ClienteService) ServiceLocator.getInstance().getService(ClienteService.class, null); final FornecedorService fornecedorService = (FornecedorService) ServiceLocator.getInstance().getService(FornecedorService.class, null); final Collection colContratos = contratoService.list(); String bufferContratos = "<b>" + UtilI18N.internacionaliza(request, "citcorpore.comum.acessoAosContratos") + ":</b> <br><table>"; if (colContratos != null) { for (final Iterator it = colContratos.iterator(); it.hasNext();) { final ContratoDTO contratoDto = (ContratoDTO) it.next(); if (contratoDto.getDeleted() == null || !contratoDto.getDeleted().equalsIgnoreCase("y")) { String nomeCliente = ""; String nomeForn = ""; ClienteDTO clienteDto = new ClienteDTO(); clienteDto.setIdCliente(contratoDto.getIdCliente()); clienteDto = (ClienteDTO) clienteService.restore(clienteDto); if (clienteDto != null) { nomeCliente = clienteDto.getNomeRazaoSocial(); } FornecedorDTO fornecedorDto = new FornecedorDTO(); fornecedorDto.setIdFornecedor(contratoDto.getIdFornecedor()); fornecedorDto = (FornecedorDTO) fornecedorService.restore(fornecedorDto); if (fornecedorDto != null) { nomeForn = fornecedorDto.getRazaoSocial(); } String situacao = ""; if (contratoDto.getSituacao().equalsIgnoreCase("A")) { situacao = UtilI18N.internacionaliza(request, "citcorpore.comum.situacaoAtiva"); } if (contratoDto.getSituacao().equalsIgnoreCase("C")) { situacao = UtilI18N.internacionaliza(request, "citcorpore.comum.situacaoCancelado"); } if (contratoDto.getSituacao().equalsIgnoreCase("F")) { situacao = UtilI18N.internacionaliza(request, "citcorpore.comum.situacaoFinalizado"); } if (contratoDto.getSituacao().equalsIgnoreCase("P")) { situacao = UtilI18N.internacionaliza(request, "citcorpore.comum.situacaoParalisado"); } bufferContratos += "<tr>"; bufferContratos += "<td>"; bufferContratos += "<input type='checkbox' name='idContrato' id='idContrato_" + contratoDto.getIdContrato() + "' value='0" + contratoDto.getIdContrato() + "' /> N�mero: " + contratoDto.getNumero() + " de " + UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, contratoDto.getDataContrato(), WebUtil.getLanguage(request)) + " (" + nomeCliente + " - " + nomeForn + ") - " + situacao; bufferContratos += "</td>"; bufferContratos += "</tr>"; } } } bufferContratos += "</table>"; document.getElementById("fldListaContratos").setInnerHTML(bufferContratos); document.getElementById("divListaContratos").setVisible(true); } document.focusInFirstActivateField(null); this.preencherComboPais(document, request, response); } /** * Preenche a combo de 'TipoUnidade' do formul�rio HTML com base na lista recuperada do banco. Obs.: Este preenchimento disconsidera itens com data final, ou seja, inativos. * DEVE haver uma combo * com id='idTipoUnidade' no documento HTML. Esse elemento ser� recuperado pelo framework e o tratamento come�a a partir dai. */ public void preencherComboTipoUnidade(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final TipoUnidadeService tipoUnidadeService = (TipoUnidadeService) ServiceLocator.getInstance().getService(TipoUnidadeService.class, null); final HTMLSelect comboTipoUnidade = document.getSelectById("idTipoUnidade"); final List<TipoUnidadeDTO> tipos = (List) tipoUnidadeService.list(); this.inicializaCombo(comboTipoUnidade, request); for (final TipoUnidadeDTO tipo : tipos) { if (tipo.getDataFim() == null) { comboTipoUnidade.addOption(tipo.getIdTipoUnidade().toString(), Util.tratarAspasSimples(Util.retiraBarraInvertida(tipo.getNomeTipoUnidade().trim()))); } } } /** * Preenche a combo de 'UnidadePai' do formul�rio HTML com base na lista recuperada do banco. Obs.: Este preenchimento disconsidera itens com data final, ou seja, inativos. * Obs2.: Ele recupera o * getBean() para verificar se h� um item ativo, se houver significa que houve restore, nesse caso, ao preencher a lista, ele disconsidera o item trazido do banco que for igual * ao item ativo para * evitar que o usu�rio possa cadastrar uma unidade sendo unidadePai dela mesma. DEVE haver uma combo com id='idTipoUnidade' no documento HTML. Esse elemento ser� recuperado * pelo framework e o * tratamento come�a a partir dai. */ public void preencherComboUnidadePai(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final HTMLSelect comboUnidadePai = document.getSelectById("idUnidadePai"); final List<UnidadeDTO> unidades = (List) this.getUnidadeService().listHierarquia(); this.inicializaCombo(comboUnidadePai, request); // getBean para saber se j� existe um bean carregado (em caso de restore) final UnidadeDTO unidadeRestore = (UnidadeDTO) document.getBean(); for (final UnidadeDTO unidade : unidades) { // se existir dataFim, est� inativo, ent�o n�o entra na combo. if (unidade.getDataFim() == null) { /* * se houver um bean carregado(restore), comparo se o item da lista do banco é igual a esse bean, se for ele n�o pode ser adicionado à lista, se n�o o usu�rio * poder� colocar a * unidade como pai dela mesma. */ if (unidadeRestore.getIdUnidade() == null || unidadeRestore.getIdUnidade().compareTo(unidade.getIdUnidade()) != 0) { comboUnidadePai.addOption(unidade.getIdUnidade().toString(), StringEscapeUtils.escapeJavaScript(unidade.getNomeNivel())); } } } } /** * Executa uma inicializa��o padr�o para as combos. Basicamente deleta todas as op�ões, caso haja, e insere aprimeira linha com o valor "-- Selecione --". * * @param componenteCombo * Componente o qual deseja inicializar com as configura�ões citadas acima. */ private void inicializaCombo(final HTMLSelect componenteCombo, final HttpServletRequest request) { componenteCombo.removeAllOptions(); componenteCombo.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione")); } public void save(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { // Obtendo o objeto contendo os dados informados no formul�rios. final UnidadeDTO unidadeDTO = (UnidadeDTO) document.getBean(); // Verificando se o DTO e o servi�o existem. if (unidadeDTO != null) { unidadeDTO.setServicos(this.getUnidadesAccServicosService().deserealizaObjetosDoRequest(request)); unidadeDTO.setListaDeLocalidade((List<LocalidadeUnidadeDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(LocalidadeUnidadeDTO.class, "localidadesSerializadas", request)); // Verificando se a unidade j� existe. if (this.getUnidadeService().jaExisteUnidadeComMesmoNome(unidadeDTO)) { // Notificando o usu�rio que a unidade j� existe. document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroJaCadastrado")); return; } Double latitude = null; Double longitude = null; if(!request.getParameter("latitude").trim().equalsIgnoreCase("")){ latitude = new Double(request.getParameter("latitude")); } if(!request.getParameter("longitude").trim().equalsIgnoreCase("")){ longitude = new Double(request.getParameter("longitude")); } if (latitude != null && longitude != null) { if (!GeoUtils.validCoordinates(latitude, longitude)) { throw new ServiceException(UtilI18N.internacionaliza(request,"rest.service.mobile.v2.invalid.coordinates")); } } unidadeDTO.setLatitude(latitude); unidadeDTO.setLongitude(longitude); // Inserindo. if (unidadeDTO.getIdUnidade() == null) { unidadeDTO.setIdEmpresa(WebUtil.getIdEmpresa(request)); this.getUnidadeService().create(unidadeDTO); document.alert(UtilI18N.internacionaliza(request, "MSG05")); } else { // Atualizando. this.getUnidadeService().update(unidadeDTO); document.alert(UtilI18N.internacionaliza(request, "MSG06")); } CITCorporeUtil.limparFormulario(document); document.executeScript("ocultaGrid()"); document.executeScript("ocultaGridLocalidade()"); } document.executeScript("deleteAllRowsLocalidade()"); document.executeScript("limpar_LOOKUP_UNIDADE()"); document.executeScript("updatePositions(defaultParams.latLng)"); } public void listaContrato(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final UnidadeDTO unidadeDTO = (UnidadeDTO) document.getBean(); String UNIDADE_VINC_CONTRATOS = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.UNIDADE_VINC_CONTRATOS, "N"); if (UNIDADE_VINC_CONTRATOS == null) { UNIDADE_VINC_CONTRATOS = "N"; } else if (UNIDADE_VINC_CONTRATOS.equalsIgnoreCase("S")) { if (unidadeDTO.getIdUnidadePai() != null) { document.getElementById("divListaContratos").setVisible(false); } else { document.getElementById("divListaContratos").setVisible(true); } } else { return; } } public void restore(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { UnidadeDTO unidade = (UnidadeDTO) document.getBean(); LocalidadeDTO localidadeDTO = new LocalidadeDTO(); EnderecoDTO enderecoDto = new EnderecoDTO(); final LocalidadeService localidadeService = (LocalidadeService) ServiceLocator.getInstance().getService(LocalidadeService.class, null); final LocalidadeUnidadeService localidadeUnidadeService = (LocalidadeUnidadeService) ServiceLocator.getInstance().getService(LocalidadeUnidadeService.class, null); unidade = (UnidadeDTO) this.getUnidadeService().restore(unidade); Collection<LocalidadeUnidadeDTO> listaIdlocalidade = new ArrayList<>(); if (unidade != null) { if (unidade.getIdEndereco() != null) { enderecoDto.setIdEndereco(unidade.getIdEndereco()); enderecoDto = (EnderecoDTO) this.getEnderecoService().restore(enderecoDto); } listaIdlocalidade = localidadeUnidadeService.listaIdLocalidades(unidade.getIdUnidade()); } this.preencherComboTipoUnidade(document, request, response); this.preencherComboUnidadePai(document, request, response); this.preencherComboPais(document, request, response); this.preencherComboUfs(document, request, response); this.preencherComboCidade(document, request, response); document.executeScript("deleteAllRows()"); document.executeScript("deleteAllRowsLocalidade()"); final HTMLForm form = CITCorporeUtil.limparFormulario(document); document.getForm("form").setValues(enderecoDto, false); if (unidade != null) { form.setValues(unidade); } if (unidade != null) { this.getUnidadeService().restaurarGridServicos(document, this.getUnidadesAccServicosService().consultarServicosAtivosPorUnidade(unidade.getIdUnidade())); if (unidade.getIdUnidadePai() == null) { String UNIDADE_VINC_CONTRATOS = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.UNIDADE_VINC_CONTRATOS, "N"); if (UNIDADE_VINC_CONTRATOS == null) { UNIDADE_VINC_CONTRATOS = "N"; } if (UNIDADE_VINC_CONTRATOS.equalsIgnoreCase("S")) { final ContratosUnidadesService contratosUnidadesService = (ContratosUnidadesService) ServiceLocator.getInstance().getService(ContratosUnidadesService.class, null); final Collection col = contratosUnidadesService.findByIdUnidade(unidade.getIdUnidade()); if (col != null && col.size() > 0) { for (final Iterator it = col.iterator(); it.hasNext();) { final ContratosUnidadesDTO contratosUnidadesDTO = (ContratosUnidadesDTO) it.next(); document.getCheckboxById("idContrato_" + contratosUnidadesDTO.getIdContrato()).setValue("0" + contratosUnidadesDTO.getIdContrato()); } } } document.getElementById("divListaContratos").setVisible(true); } else { document.getElementById("divListaContratos").setVisible(false); } } if (listaIdlocalidade != null && !listaIdlocalidade.isEmpty()) { for (final LocalidadeUnidadeDTO localidadeUnidadeDto : listaIdlocalidade) { if (localidadeUnidadeDto.getIdLocalidade() != null) { localidadeDTO.setIdLocalidade(localidadeUnidadeDto.getIdLocalidade()); localidadeDTO = (LocalidadeDTO) localidadeService.restore(localidadeDTO); document.executeScript("addLinhaTabelaLocalidade(" + localidadeDTO.getIdLocalidade() + ", '" + StringEscapeUtils.escapeJavaScript(localidadeDTO.getNomeLocalidade()) + "', " + false + ");"); } document.executeScript("exibeGridLocalidade()"); } } } /** * Metodo para exclus�o l�gica de Unidade * * @param document * @param request * @param response * @throws Exception */ public void delete(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final UnidadeDTO unidade = (UnidadeDTO) document.getBean(); unidade.setListaDeLocalidade((List<LocalidadeUnidadeDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(LocalidadeUnidadeDTO.class, "localidadesSerializadas", request)); if (unidade.getIdUnidade() != null && unidade.getIdUnidade() != 0) { this.getUnidadeService().deletarUnidade(unidade, document, request); document.executeScript("deleteAllRows()"); document.executeScript("deleteAllRowsLocalidade()"); final HTMLForm form = document.getForm("form"); form.clear(); } document.executeScript("limpar_LOOKUP_UNIDADE()"); } @Override public Class<UnidadeDTO> getBeanClass() { return UnidadeDTO.class; } /** * M�todo para excluir uma associa��o de unidade com servi�os * * @author rodrigo.oliveira * */ public void excluirAssociacaoServico(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final UnidadeDTO unidadeDTO = (UnidadeDTO) document.getBean(); final Integer idServico = !request.getParameter("servicoSerializado").isEmpty() ? Integer.parseInt(request.getParameter("servicoSerializado")) : null; final UnidadesAccServicosDTO unidadeAccServicosDTO = new UnidadesAccServicosDTO(); unidadeAccServicosDTO.setIdServico(idServico); if (idServico != null && idServico != 0) { this.getUnidadesAccServicosService().excluirAssociacaoServicosUnidade(unidadeDTO.getIdUnidade(), idServico); document.alert(UtilI18N.internacionaliza(request, "MSG07")); } } /** * Preenche combo de Pais. * * @param document * @param request * @param response * @throws Exception * @author thays.araujo */ public void preencherComboPais(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final PaisServico paisServico = (PaisServico) ServiceLocator.getInstance().getService(PaisServico.class, null); final HTMLSelect comboPais = document.getSelectById("idPais"); final List<PaisDTO> listPais = (List) paisServico.list(); this.inicializaCombo(comboPais, request); if (listPais != null) { for (final PaisDTO paisDto : listPais) { comboPais.addOption(paisDto.getIdPais().toString(), Util.tratarAspasSimples(Util.retiraBarraInvertida(paisDto.getNomePais()))); } } } /** * Preenche combo de Ufs. * * @param document * @param request * @param response * @throws Exception * @author thays.araujo */ public void preencherComboUfs(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final UnidadeDTO unidadeDTO = (UnidadeDTO) document.getBean(); EnderecoDTO enderecoDto = new EnderecoDTO(); UnidadeDTO unidade = new UnidadeDTO(); final UfDTO ufDto = new UfDTO(); final UfService ufService = (UfService) ServiceLocator.getInstance().getService(UfService.class, null); if (unidadeDTO.getIdUnidade() != null) { unidade = (UnidadeDTO) this.getUnidadeService().restore(unidadeDTO); } if (unidade.getIdEndereco() != null) { enderecoDto.setIdEndereco(unidade.getIdEndereco()); enderecoDto = (EnderecoDTO) this.getEnderecoService().restore(enderecoDto); } if (unidadeDTO.getIdPais() != null) { ufDto.setIdPais(unidadeDTO.getIdPais()); } else if (enderecoDto.getIdPais() != null) { ufDto.setIdPais(enderecoDto.getIdPais()); } final HTMLSelect comboUfs = document.getSelectById("idUf"); final List<UfDTO> listUfs = (List) ufService.listByIdPais(ufDto); this.inicializaCombo(comboUfs, request); if (listUfs != null) { for (final UfDTO uf : listUfs) { comboUfs.addOption(uf.getIdUf().toString(), uf.getNomeUf()); } } document.executeScript("janelaAguardeFechar();"); } /** * Preenche combo de Cidade. * * @param document * @param request * @param response * @throws Exception * @author thays.araujo */ public void preencherComboCidade(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final UnidadeDTO unidadeDTO = (UnidadeDTO) document.getBean(); EnderecoDTO enderecoDto = new EnderecoDTO(); UnidadeDTO unidade = new UnidadeDTO(); final CidadesDTO cidadeDto = new CidadesDTO(); if (unidadeDTO.getIdUnidade() != null) { unidade = (UnidadeDTO) this.getUnidadeService().restore(unidadeDTO); } if (unidade.getIdEndereco() != null) { enderecoDto.setIdEndereco(unidade.getIdEndereco()); enderecoDto = (EnderecoDTO) this.getEnderecoService().restore(enderecoDto); } if (unidadeDTO.getIdUf() != null) { cidadeDto.setIdUf(unidadeDTO.getIdUf()); } else if (enderecoDto.getIdUf() != null) { cidadeDto.setIdUf(enderecoDto.getIdUf()); } final HTMLSelect comboCidade = document.getSelectById("idCidade"); final List<CidadesDTO> listCidade = (List) this.getCidadesService().listByIdCidades(cidadeDto); this.inicializaCombo(comboCidade, request); if (listCidade != null) { for (final CidadesDTO cidade : listCidade) { comboCidade.addOption(cidade.getIdCidade().toString(), cidade.getNomeCidade()); } } document.executeScript("janelaAguardeFechar();"); } private CidadesService cidadesService; private EnderecoService enderecoService; private UnidadeService unidadeService; private UnidadesAccServicosService unidadesAccServicosService; private CidadesService getCidadesService() throws Exception { if (cidadesService == null) { cidadesService = (CidadesService) ServiceLocator.getInstance().getService(CidadesService.class, null); } return cidadesService; } private EnderecoService getEnderecoService() throws Exception { if (enderecoService == null) { enderecoService = (EnderecoService) ServiceLocator.getInstance().getService(EnderecoService.class, null); } return enderecoService; } private UnidadeService getUnidadeService() throws Exception { if (unidadeService == null) { unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null); } return unidadeService; } private UnidadesAccServicosService getUnidadesAccServicosService() throws Exception { if (unidadesAccServicosService == null) { unidadesAccServicosService = (UnidadesAccServicosService) ServiceLocator.getInstance().getService(UnidadesAccServicosService.class, null); } return unidadesAccServicosService; } }