package br.com.centralit.citcorpore.negocio;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import br.com.centralit.citcorpore.bean.AcordoNivelServicoDTO;
import br.com.centralit.citcorpore.bean.AcordoServicoContratoDTO;
import br.com.centralit.citcorpore.bean.ControleQuestionariosDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.ItemPedidoPortalDTO;
import br.com.centralit.citcorpore.bean.PedidoPortalDTO;
import br.com.centralit.citcorpore.bean.PortalDTO;
import br.com.centralit.citcorpore.bean.ServicoContratoDTO;
import br.com.centralit.citcorpore.bean.ServicoDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoQuestionarioDTO;
import br.com.centralit.citcorpore.bean.UploadDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.AcordoNivelServicoDao;
import br.com.centralit.citcorpore.integracao.ControleQuestionariosDao;
import br.com.centralit.citcorpore.integracao.ItemPedidoPortalDAO;
import br.com.centralit.citcorpore.integracao.PedidoPortalDAO;
import br.com.centralit.citcorpore.integracao.PortalDao;
import br.com.centralit.citcorpore.integracao.ServicoContratoDao;
import br.com.centralit.citcorpore.integracao.ServicoDao;
import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao;
import br.com.centralit.citcorpore.integracao.SolicitacaoServicoQuestionarioDao;
import br.com.centralit.citcorpore.util.CriptoUtils;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.centralit.citcorpore.util.Util;
import br.com.centralit.citged.bean.ControleGEDDTO;
import br.com.centralit.citged.integracao.ControleGEDDao;
import br.com.centralit.citquestionario.integracao.RespostaItemQuestionarioDao;
import br.com.centralit.citquestionario.negocio.RespostaItemQuestionarioServiceBean;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilStrings;
public class PortalServiceEjb extends CrudServiceImpl implements PortalService {
private PortalDao dao;
@Override
protected PortalDao getDao() {
if (dao == null) {
dao = new PortalDao();
}
return dao;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public Collection findByCondition(final Integer id) throws ServiceException, Exception {
return this.getDao().findByCondition(id);
}
@Override
@SuppressWarnings("unchecked")
public Collection<PortalDTO> findByCondition(final Integer idUsuario, final Integer idItem) throws ServiceException, Exception {
return this.getDao().findByCondition(idUsuario, idItem);
}
@Override
public Collection<PortalDTO> listByUsuario(final Integer idUsuario) throws Exception {
return this.getDao().listByUsuario(idUsuario);
}
@Override
public PedidoPortalDTO criarPedidoSolicitacao(PedidoPortalDTO pedidoPortalDTO, final UsuarioDTO usuarioDTO,
final Collection<SolicitacaoServicoQuestionarioDTO> colecaoRespQuestionario, final Collection<UploadDTO> arquivosUpados) throws ServiceException, Exception {
final SolicitacaoServicoService solicitacaoServicoService = (SolicitacaoServicoService) ServiceLocator.getInstance().getService(SolicitacaoServicoService.class, null);
new SolicitacaoServicoDao();
final PedidoPortalDAO pedidoPortalDAO = new PedidoPortalDAO();
final ItemPedidoPortalDAO itemPedidoPortalDAO = new ItemPedidoPortalDAO();
final ServicoDao servicoDao = new ServicoDao();
final ServicoContratoDao servicoContratoDao = new ServicoContratoDao();
final TransactionControler tc = new TransactionControlerImpl(pedidoPortalDAO.getAliasDB());
final List<ServicoContratoDTO> listaServicos = pedidoPortalDTO.getListaServicoContrato();
final List<SolicitacaoServicoDTO> listaSolicitacoes = new ArrayList<SolicitacaoServicoDTO>();
try {
pedidoPortalDAO.setTransactionControler(tc);
servicoDao.setTransactionControler(tc);
itemPedidoPortalDAO.setTransactionControler(tc);
tc.start();
pedidoPortalDTO = (PedidoPortalDTO) pedidoPortalDAO.create(pedidoPortalDTO);
double valorTotal = 0.0;
if (listaServicos != null) {
for (final ServicoContratoDTO servicoContratoDTO : listaServicos) {
final ServicoContratoDTO servicoContratoDTOAux = (ServicoContratoDTO) servicoContratoDao.restore(servicoContratoDTO);
SolicitacaoServicoDTO solicitacaoServicoDto = new SolicitacaoServicoDTO();
final ItemPedidoPortalDTO itemPedidoPortalDTO = new ItemPedidoPortalDTO();
valorTotal += servicoContratoDTO.getValorServico() == null ? 0.0 : servicoContratoDTO.getValorServico();
solicitacaoServicoDto.setDescricao(UtilStrings.getParameter(servicoContratoDTO.getDescricao() + "<br>"
+ (!servicoContratoDTO.getObservacaoPortal().equalsIgnoreCase("undefined") ? servicoContratoDTO.getObservacaoPortal() : "")));
/* Solicita��o */
solicitacaoServicoDto.setIdContrato(servicoContratoDTOAux.getIdContrato());
solicitacaoServicoDto.setIdServico(servicoContratoDTOAux.getIdServico());
solicitacaoServicoDto.setEnviaEmailCriacao("S");
/* Restaurando o tipo demanda servi�o */
ServicoDTO servicoDto = new ServicoDTO();
servicoDto.setIdServico(servicoContratoDTOAux.getIdServico());
servicoDto = (ServicoDTO) servicoDao.restore(servicoDto);
solicitacaoServicoDto.setIdTipoDemandaServico(servicoDto.getIdTipoDemandaServico());
if (servicoContratoDTOAux.getIdGrupoExecutor() != null) {
solicitacaoServicoDto.setIdGrupoAtual(servicoContratoDTOAux.getIdGrupoExecutor());
}
this.setarValoresPadrao(solicitacaoServicoDto, usuarioDTO);
this.relacionaImpactoUrgencia(solicitacaoServicoDto);
solicitacaoServicoDto = (SolicitacaoServicoDTO) solicitacaoServicoService.create(solicitacaoServicoDto, tc, true, true, true);
if (arquivosUpados != null && arquivosUpados.size() > 0) {
final Integer idEmpresa = 1;
this.gravaInformacoesGED(arquivosUpados, idEmpresa, solicitacaoServicoDto, null, solicitacaoServicoDto.getIdServico());
}
/*
* Para tratar a iniciativa 483, foi adicionado o vinculo de questionario com a solicita��o de servico dentro do portal
* "colecaoRespQuestionario" parametro recuperado da sess�o.
*/
if (colecaoRespQuestionario != null && colecaoRespQuestionario.size() > 0) {
for (final SolicitacaoServicoQuestionarioDTO soQuestionarioDTO : colecaoRespQuestionario) {
if (soQuestionarioDTO.getIdServico().equals(servicoContratoDTO.getIdServico())) {
solicitacaoServicoDto.setSolicitacaoServicoQuestionarioDTO(soQuestionarioDTO);
this.atualizaInformacoesQuestionario(solicitacaoServicoDto, tc);
}
}
}
listaSolicitacoes.add(solicitacaoServicoDto);
itemPedidoPortalDTO.setIdPedidoPortal(pedidoPortalDTO.getIdPedidoPortal());;
itemPedidoPortalDTO.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
itemPedidoPortalDTO.setValor(servicoContratoDTO.getValorServico() == null ? 0.0 : servicoContratoDTO.getValorServico());
itemPedidoPortalDAO.create(itemPedidoPortalDTO);
}
}
/* Pedido */
pedidoPortalDTO.setPrecoTotal(valorTotal);
pedidoPortalDAO.update(pedidoPortalDTO);
pedidoPortalDTO.setListaSolicitacoes(listaSolicitacoes);
tc.commit();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
throw new ServiceException(e);
} finally {
try {
tc.close();
} catch (final PersistenceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return pedidoPortalDTO;
}
private void setarValoresPadrao(final SolicitacaoServicoDTO solicitacaoServicoDto, final UsuarioDTO usuario) throws Exception {
final EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null);
final String ORIGEM = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.ORIGEM_PADRAO_SOLICITACAO, "");
final Integer idOrigem = ORIGEM.trim().equalsIgnoreCase("") ? 0 : Integer.valueOf(ORIGEM.trim());
/* Inicializa��es obrigat�rias */
solicitacaoServicoDto.setIdOrigem(idOrigem);
solicitacaoServicoDto.setSituacao("EmAndamento");
solicitacaoServicoDto.setRegistroexecucao("");
solicitacaoServicoDto.setIdSolicitante(usuario.getIdEmpregado());
/* Setando as informa��es do usu�rio */
solicitacaoServicoDto.setUsuarioDto(usuario);
solicitacaoServicoDto.setRegistradoPor(usuario.getNomeUsuario());
/* Restaurando as informa��es do empregado */
final EmpregadoDTO empregadoDto = empregadoService.restoreByIdEmpregado(usuario.getIdEmpregado());
solicitacaoServicoDto.setIdUnidade(empregadoDto.getIdUnidade());
/* Setando as informa��es de contato */
solicitacaoServicoDto.setNomecontato(empregadoDto.getNome());
solicitacaoServicoDto.setEmailcontato(empregadoDto.getEmail());
solicitacaoServicoDto.setTelefonecontato(empregadoDto.getTelefone());
}
@Override
public void relacionaImpactoUrgencia(final SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
final ServicoContratoService servicoContratoService = (ServicoContratoService) ServiceLocator.getInstance().getService(ServicoContratoService.class, null);
final ServicoContratoDTO servicoContratoDto = servicoContratoService.findByIdContratoAndIdServico(solicitacaoServicoDto.getIdContrato(),
solicitacaoServicoDto.getIdServico());
if (servicoContratoDto != null) {
final AcordoNivelServicoService acordoNivelServicoService = (AcordoNivelServicoService) ServiceLocator.getInstance().getService(AcordoNivelServicoService.class, null);
AcordoNivelServicoDTO acordoNivelServicoDto = acordoNivelServicoService.findAtivoByIdServicoContrato(servicoContratoDto.getIdServicoContrato(), "T");
if (acordoNivelServicoDto == null) {
// Se nao houver acordo especifico, ou seja, associado direto ao servicocontrato, entao busca um acordo geral que esteja vinculado ao servicocontrato.
final AcordoServicoContratoService acordoServicoContratoService = (AcordoServicoContratoService) ServiceLocator.getInstance().getService(
AcordoServicoContratoService.class, null);
final AcordoServicoContratoDTO acordoServicoContratoDTO = acordoServicoContratoService.findAtivoByIdServicoContrato(servicoContratoDto.getIdServicoContrato(), "T");
if (acordoServicoContratoDTO != null) {
// Apos achar a vinculacao do acordo com o servicocontrato, entao faz um restore do acordo de nivel de servico.
acordoNivelServicoDto = new AcordoNivelServicoDTO();
acordoNivelServicoDto.setIdAcordoNivelServico(acordoServicoContratoDTO.getIdAcordoNivelServico());
acordoNivelServicoDto = (AcordoNivelServicoDTO) new AcordoNivelServicoDao().restore(acordoNivelServicoDto);
if (acordoNivelServicoDto != null) {
if (acordoNivelServicoDto.getImpacto() != null) {
solicitacaoServicoDto.setImpacto(acordoNivelServicoDto.getImpacto());
} else {
solicitacaoServicoDto.setImpacto("B");
}
if (acordoNivelServicoDto.getUrgencia() != null) {
solicitacaoServicoDto.setUrgencia(acordoNivelServicoDto.getUrgencia());
} else {
solicitacaoServicoDto.setUrgencia("B");
}
}
}
}
} else {
solicitacaoServicoDto.setImpacto("B");
solicitacaoServicoDto.setUrgencia("B");
}
}
public void atualizaInformacoesQuestionario(final SolicitacaoServicoDTO solicitacaoServicoDto, final TransactionControler tc) throws Exception {
final ControleQuestionariosDao controleQuestionariosDao = new ControleQuestionariosDao();
final SolicitacaoServicoQuestionarioDao solicitacaoServicoQuestionarioDao = new SolicitacaoServicoQuestionarioDao();
final RespostaItemQuestionarioDao respostaItemDao = new RespostaItemQuestionarioDao();
final RespostaItemQuestionarioServiceBean respostaItemQuestionarioServiceBean = new RespostaItemQuestionarioServiceBean();
controleQuestionariosDao.setTransactionControler(tc);
solicitacaoServicoQuestionarioDao.setTransactionControler(tc);
respostaItemDao.setTransactionControler(tc);
final SolicitacaoServicoQuestionarioDTO solicitacaoServicoQuestionarioDto = solicitacaoServicoDto.getSolicitacaoServicoQuestionarioDTO();
if (solicitacaoServicoQuestionarioDto.getIdSolicitacaoQuestionario() != null && solicitacaoServicoQuestionarioDto.getIdSolicitacaoQuestionario().intValue() > 0) {
solicitacaoServicoQuestionarioDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
solicitacaoServicoQuestionarioDto.setDataHoraGrav(UtilDatas.getDataHoraAtual());
solicitacaoServicoQuestionarioDao.updateNotNull(solicitacaoServicoQuestionarioDto);
respostaItemDao.deleteByIdIdentificadorResposta(solicitacaoServicoQuestionarioDto.getIdSolicitacaoQuestionario());
respostaItemQuestionarioServiceBean.processCollection(tc, solicitacaoServicoQuestionarioDto.getColValores(), solicitacaoServicoQuestionarioDto.getColAnexos(),
solicitacaoServicoQuestionarioDto.getIdSolicitacaoQuestionario(), null);
} else {
ControleQuestionariosDTO controleQuestionariosDto = new ControleQuestionariosDTO();
controleQuestionariosDto = (ControleQuestionariosDTO) controleQuestionariosDao.create(controleQuestionariosDto);
solicitacaoServicoQuestionarioDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
solicitacaoServicoQuestionarioDto.setIdResponsavel(solicitacaoServicoDto.getUsuarioDto().getIdEmpregado());
solicitacaoServicoQuestionarioDto.setIdTarefa(solicitacaoServicoDto.getIdTarefa());
if (solicitacaoServicoQuestionarioDto.getDataQuestionario() == null) {
solicitacaoServicoQuestionarioDto.setDataQuestionario(UtilDatas.getDataAtual());
}
solicitacaoServicoQuestionarioDto.setSituacao("E");
solicitacaoServicoQuestionarioDto.setIdSolicitacaoQuestionario(controleQuestionariosDto.getIdControleQuestionario());
solicitacaoServicoQuestionarioDto.setDataHoraGrav(UtilDatas.getDataHoraAtual());
if (solicitacaoServicoQuestionarioDto.getIdQuestionario() != null && solicitacaoServicoQuestionarioDto.getIdQuestionario() != 0) {
final SolicitacaoServicoQuestionarioDTO solQuestionariosDTO = (SolicitacaoServicoQuestionarioDTO) solicitacaoServicoQuestionarioDao
.create(solicitacaoServicoQuestionarioDto);
final Integer idIdentificadorResposta = solQuestionariosDTO.getIdSolicitacaoQuestionario();
respostaItemQuestionarioServiceBean.processCollection(tc, solQuestionariosDTO.getColValores(), solQuestionariosDTO.getColAnexos(), idIdentificadorResposta, null);
}
}
}
private void gravaInformacoesGED(final Collection colArquivosUpload, final Integer idEmpresa, final SolicitacaoServicoDTO solicitacaoServicoDto, final TransactionControler tc,
final Integer idServico) throws Exception {
// Setando a transaction no GED
final ControleGEDDao controleGEDDao = new ControleGEDDao();
if (tc != null) {
controleGEDDao.setTransactionControler(tc);
}
String PRONTUARIO_GED_DIRETORIO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedDiretorio, "");
if (PRONTUARIO_GED_DIRETORIO == null || PRONTUARIO_GED_DIRETORIO.trim().equalsIgnoreCase("")) {
PRONTUARIO_GED_DIRETORIO = "";
}
if (PRONTUARIO_GED_DIRETORIO.equalsIgnoreCase("")) {
PRONTUARIO_GED_DIRETORIO = Constantes.getValue("DIRETORIO_GED");
}
if (PRONTUARIO_GED_DIRETORIO == null || PRONTUARIO_GED_DIRETORIO.equalsIgnoreCase("")) {
PRONTUARIO_GED_DIRETORIO = "/ged";
}
String PRONTUARIO_GED_INTERNO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedInterno, "S");
if (PRONTUARIO_GED_INTERNO == null) {
PRONTUARIO_GED_INTERNO = "S";
}
String prontuarioGedInternoBancoDados = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedInternoBD, "N");
if (!UtilStrings.isNotVazio(prontuarioGedInternoBancoDados)) {
prontuarioGedInternoBancoDados = "N";
}
String pasta = "";
if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) {
pasta = controleGEDDao.getProximaPastaArmazenar();
File fileDir = new File(PRONTUARIO_GED_DIRETORIO);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
fileDir = new File(PRONTUARIO_GED_DIRETORIO + "/" + idEmpresa);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
fileDir = new File(PRONTUARIO_GED_DIRETORIO + "/" + idEmpresa + "/" + pasta);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
}
for (final Iterator it = colArquivosUpload.iterator(); it.hasNext();) {
final UploadDTO uploadDTO = (UploadDTO) it.next();
if (uploadDTO.getIdLinhaPai().equals(idServico)) {
ControleGEDDTO controleGEDDTO = new ControleGEDDTO();
controleGEDDTO.setIdTabela(ControleGEDDTO.TABELA_SOLICITACAOSERVICO);
controleGEDDTO.setId(solicitacaoServicoDto.getIdSolicitacaoServico());
controleGEDDTO.setDataHora(UtilDatas.getDataAtual());
controleGEDDTO.setDescricaoArquivo(uploadDTO.getDescricao());
controleGEDDTO.setExtensaoArquivo(Util.getFileExtension(uploadDTO.getNameFile()));
controleGEDDTO.setPasta(pasta);
controleGEDDTO.setNomeArquivo(uploadDTO.getNameFile());
if (!uploadDTO.getTemporario().equalsIgnoreCase("S")) {
continue;
}
if (PRONTUARIO_GED_INTERNO.trim().equalsIgnoreCase("S") && "S".equalsIgnoreCase(prontuarioGedInternoBancoDados.trim())) { // Se
controleGEDDTO.setPathArquivo(uploadDTO.getPath());
} else {
controleGEDDTO.setPathArquivo(null);
}
controleGEDDTO = (ControleGEDDTO) controleGEDDao.create(controleGEDDTO);
if (controleGEDDTO != null) {
uploadDTO.setIdControleGED(controleGEDDTO.getIdControleGED());
}
if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S") && !"S".equalsIgnoreCase(prontuarioGedInternoBancoDados)) { // Se
if (controleGEDDTO != null) {
try {
final File arquivo = new File(PRONTUARIO_GED_DIRETORIO + "/" + idEmpresa + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + "."
+ Util.getFileExtension(uploadDTO.getNameFile()));
CriptoUtils.encryptFile(uploadDTO.getPath(), PRONTUARIO_GED_DIRETORIO + "/" + idEmpresa + "/" + pasta + "/" + controleGEDDTO.getIdControleGED()
+ ".ged", System.getProperties().get("user.dir") + Constantes.getValue("CAMINHO_CHAVE_PUBLICA"));
arquivo.delete();
} catch (final Exception e) {
}
}
}
}
}
}
@Override
public boolean existeQuestionario(final Integer idServico) throws Exception {
return this.getDao().existeQuestionario(idServico);
}
@Override
public boolean existeQuestionarioServico(final Integer idServico) throws ServiceException, Exception {
return this.getDao().existeQuestionarioServico(idServico);
}
@Override
public Integer obterIdQuestionarioServico(final Integer idServicoCatalogo) throws ServiceException {
return this.getDao().obterIdQuestionarioServico(idServicoCatalogo);
}
}