package br.com.centralit.citsmart.rest.operation; import java.util.Collection; import java.util.Map; import javax.xml.bind.JAXBException; import br.com.centralit.citcorpore.bean.EmpregadoDTO; import br.com.centralit.citcorpore.bean.ServicoContratoDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.centralit.citcorpore.negocio.ServicoContratoService; import br.com.centralit.citcorpore.negocio.SolicitacaoServicoService; import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico; import br.com.centralit.citsmart.rest.bean.RestDomainDTO; import br.com.centralit.citsmart.rest.bean.RestOperationDTO; import br.com.centralit.citsmart.rest.bean.RestSessionDTO; import br.com.centralit.citsmart.rest.schema.CtAddServiceRequest; import br.com.centralit.citsmart.rest.schema.CtAddServiceRequestResp; import br.com.centralit.citsmart.rest.schema.CtContact; import br.com.centralit.citsmart.rest.schema.CtService; import br.com.centralit.citsmart.rest.schema.CtServiceRequest; import br.com.centralit.citsmart.rest.schema.StServiceRequestPriority; import br.com.centralit.citsmart.rest.schema.StServiceRequestType; import br.com.centralit.citsmart.rest.util.RestEnum; import br.com.centralit.citsmart.rest.util.RestOperationUtil; import br.com.centralit.citsmart.rest.util.RestUtil; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilXMLDate; public class RestAddServiceRequest implements IRestOperation<CtAddServiceRequest, CtAddServiceRequestResp> { @Override public CtAddServiceRequestResp execute(final RestSessionDTO restSessionDto, final RestOperationDTO restOperationDto, final CtAddServiceRequest message) throws JAXBException { final CtAddServiceRequestResp resp = new CtAddServiceRequestResp(); final CtServiceRequest serviceRequestSource = message.getServiceRequestSource(); if (serviceRequestSource == null) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Dados da solicita��o de servi�o n�o informados")); return resp; } if (serviceRequestSource.getDescription() == null || serviceRequestSource.getDescription().trim().equals("")) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Descri��o da solicita��o de servi�o n�o informada")); return resp; } if (serviceRequestSource.getNumber() == null || serviceRequestSource.getNumber().trim().equals("")) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "N�mero da solicita��o de servi�o n�o informado")); return resp; } if (serviceRequestSource.getImpact() == null) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Impacto da solicita��o de servi�o n�o informado")); return resp; } if (serviceRequestSource.getUrgency() == null) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Urg�ncia da solicita��o de servi�o n�o informada")); return resp; } if (serviceRequestSource.getStartDateTime() == null) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Data/Hora in�cio da solicita��o de servi�o n�o informada")); return resp; } if (serviceRequestSource.getType() == null) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Tipo da solicita��o de servi�o n�o informada")); return resp; } if (serviceRequestSource.getUserID() == null) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Solicitante da solicita��o de servi�o n�o informado")); return resp; } final CtService service = serviceRequestSource.getService(); if (service == null || service.getCode() == null || service.getCode().trim().equals("")) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Servi�o n�o informado")); return resp; } SolicitacaoServicoService solicitacaoServicoService = null; try { solicitacaoServicoService = (SolicitacaoServicoService) ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, RestUtil.getUsuarioSistema(restSessionDto)); final Collection<SolicitacaoServicoDTO> col = solicitacaoServicoService.findByCodigoExterno(serviceRequestSource.getNumber()); if (col != null && !col.isEmpty()) { resp.setError(RestOperationUtil.buildError(RestEnum.INPUT_ERROR, "Solicita��o de servi�o j� cadastrada no CITSmart")); return resp; } } catch (final Exception e) { e.printStackTrace(); resp.setError(RestOperationUtil.buildError(e)); return resp; } final EmpregadoDTO empregadoDto = RestUtil.getEmpregadoByLogin(serviceRequestSource.getUserID()); if (empregadoDto == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "Dados do usu�rio n�o cadastrados")); return resp; } if (!RestUtil.getRestPermissionService(restSessionDto).allowedAccess(restSessionDto, restOperationDto)) { resp.setError(RestOperationUtil.buildError(RestEnum.PERMISSION_ERROR, "Execu��o da opera��o n�o � permitida para o usu�rio")); return resp; } final Map<String, RestDomainDTO> mapParam = RestUtil.getRestParameterService(restSessionDto).findParameters(restSessionDto, restOperationDto); if (mapParam == null || mapParam.isEmpty()) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "Par�metros da opera��o n�o cadastrados")); return resp; } final String idContratoStr = RestUtil.getRestParameterService(restSessionDto).getParamValue(mapParam, RestEnum.PARAM_CONTRACT_ID); if (idContratoStr == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "ID do contrato n�o definido")); return resp; } final String idOrigemStr = RestUtil.getRestParameterService(restSessionDto).getParamValue(mapParam, RestEnum.PARAM_ORIGIN_ID); if (idOrigemStr == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "ID da origem de atendimento n�o definido")); return resp; } String obs = "Incidente criado "; String idTipoDemandaStr = null; if (serviceRequestSource.getType().equals(StServiceRequestType.R)) { idTipoDemandaStr = RestUtil.getRestParameterService(restSessionDto).getParamValue(mapParam, RestEnum.PARAM_REQUEST_ID); obs = "Requisi��o criada "; } else { idTipoDemandaStr = RestUtil.getRestParameterService(restSessionDto).getParamValue(mapParam, RestEnum.PARAM_INCIDENT_ID); } if (idTipoDemandaStr == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "ID do tipo de demanda n�o definido")); return resp; } Integer idUnidade = restSessionDto.getDptoId(); if (idUnidade == null) { final String idUnidadeStr = RestUtil.getRestParameterService(restSessionDto).getParamValue(mapParam, RestEnum.PARAM_DEFAULT_DEPTO_ID); if (idUnidadeStr == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "ID da unidade n�o definido")); } idUnidade = new Integer(idUnidadeStr); } ServicoContratoDTO servicoContratoDto = null; try { final ServicoContratoService restSessionService = (ServicoContratoService) ServiceLocator.getInstance().getService(ServicoContratoService.class, RestUtil.getUsuarioSistema(restSessionDto)); servicoContratoDto = restSessionService.findByIdContratoAndIdServico(new Integer(idContratoStr), new Integer(service.getCode())); } catch (final Exception e1) { e1.printStackTrace(); } if (servicoContratoDto == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "Servi�o n�o associado ao contrato")); return resp; } if (servicoContratoDto.getIdGrupoExecutor() == null) { resp.setError(RestOperationUtil.buildError(RestEnum.PARAM_ERROR, "Grupo executor n�o parametrizado para o servi�o")); return resp; } String impacto = "B"; if (serviceRequestSource.getImpact().equals(StServiceRequestPriority.H)) { impacto = "A"; } else if (serviceRequestSource.getImpact().equals(StServiceRequestPriority.M)) { impacto = "M"; } String urgencia = "B"; if (serviceRequestSource.getUrgency().equals(StServiceRequestPriority.H)) { urgencia = "A"; } else if (serviceRequestSource.getImpact().equals(StServiceRequestPriority.M)) { urgencia = "M"; } SolicitacaoServicoDTO solicitacaoDto = new SolicitacaoServicoDTO(); solicitacaoDto.setUsuarioDto(restSessionDto.getUser()); solicitacaoDto.setIdContrato(new Integer(idContratoStr)); solicitacaoDto.setIdOrigem(new Integer(idOrigemStr)); solicitacaoDto.setIdServico(new Integer(service.getCode())); solicitacaoDto.setIdSolicitante(empregadoDto.getIdEmpregado()); solicitacaoDto.setIdTipoDemandaServico(new Integer(idTipoDemandaStr)); solicitacaoDto.setIdUnidade(idUnidade); solicitacaoDto.setImpacto(impacto); solicitacaoDto.setUrgencia(urgencia); solicitacaoDto.setIdGrupoNivel1(servicoContratoDto.getIdGrupoNivel1()); solicitacaoDto.setIdGrupoAtual(servicoContratoDto.getIdGrupoExecutor()); solicitacaoDto.setSituacao(SituacaoSolicitacaoServico.EmAndamento.name()); solicitacaoDto.setNomecontato(empregadoDto.getNome()); solicitacaoDto.setEmailcontato(empregadoDto.getEmail()); solicitacaoDto.setTelefonecontato(empregadoDto.getTelefone()); solicitacaoDto.setRamal(empregadoDto.getRamal()); solicitacaoDto.setEnviaEmailCriacao("S"); solicitacaoDto.setEnviaEmailAcoes("N"); solicitacaoDto.setEnviaEmailFinalizacao("S"); solicitacaoDto.setDescricao(serviceRequestSource.getDescription()); solicitacaoDto.setRegistroexecucao(""); solicitacaoDto.setCodigoExterno(serviceRequestSource.getNumber()); solicitacaoDto.setObservacao(obs + "pelo CA-SDM.\nN�mero de origem: " + serviceRequestSource.getNumber() + "\nData/hora de origem: " + serviceRequestSource.getStartDateTime()); try { solicitacaoDto = (SolicitacaoServicoDTO) solicitacaoServicoService.create(solicitacaoDto); solicitacaoDto = solicitacaoServicoService.restoreAll(solicitacaoDto.getIdSolicitacaoServico()); } catch (final Exception e) { e.printStackTrace(); resp.setError(RestOperationUtil.buildError(e)); return resp; } final CtServiceRequest serviceRequestDest = new CtServiceRequest(); final CtService serviceDest = new CtService(); final CtContact contactDest = new CtContact(); serviceRequestDest.setDescription(solicitacaoDto.getDescricao()); serviceRequestDest.setStartSLA(UtilXMLDate.toXMLGregorianCalendar(solicitacaoDto.getDataHoraInicio())); serviceRequestDest.setEndSLA(UtilXMLDate.toXMLGregorianCalendar(solicitacaoDto.getDataHoraLimite())); serviceRequestDest.setImpact(serviceRequestSource.getImpact()); serviceRequestDest.setUrgency(serviceRequestSource.getUrgency()); serviceRequestDest.setStartDateTime(UtilXMLDate.toXMLGregorianCalendar(solicitacaoDto.getDataHoraInicio())); serviceRequestDest.setNumber("" + solicitacaoDto.getIdSolicitacaoServico()); serviceRequestDest.setType(serviceRequestSource.getType()); serviceRequestDest.setGroupId(solicitacaoDto.getGrupoAtual()); serviceRequestDest.setUserID(serviceRequestSource.getUserID()); contactDest.setEmail(empregadoDto.getEmail()); contactDest.setName(empregadoDto.getNome()); contactDest.setPhoneNumber(empregadoDto.getTelefone()); contactDest.setDepartment(solicitacaoDto.getNomeUnidadeSolicitante()); serviceDest.setCode("" + solicitacaoDto.getIdServico()); serviceDest.setDescription(solicitacaoDto.getNomeServico()); serviceRequestDest.setContact(contactDest); serviceRequestDest.setService(service); resp.setServiceRequestDest(serviceRequestDest); return resp; } }