package br.com.centralit.citcorpore.negocio;
import java.io.File;
import java.sql.Date;
import java.util.Collection;
import java.util.Iterator;
import br.com.centralit.citcorpore.bean.ExecucaoAtividadePeriodicaDTO;
import br.com.centralit.citcorpore.bean.UploadDTO;
import br.com.centralit.citcorpore.integracao.AnexoDao;
import br.com.centralit.citcorpore.integracao.ExecucaoAtividadePeriodicaDao;
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.citged.negocio.ControleGEDService;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.CrudDAO;
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 ExecucaoAtividadePeriodicaServiceEjb extends CrudServiceImpl implements ExecucaoAtividadePeriodicaService {
private ExecucaoAtividadePeriodicaDao dao;
@Override
protected ExecucaoAtividadePeriodicaDao getDao() {
if (dao == null) {
dao = new ExecucaoAtividadePeriodicaDao();
}
return dao;
}
@Override
protected void validaCreate(final Object arg0) throws Exception {
final ExecucaoAtividadePeriodicaDTO execucaoAtividadePeriodicaDto = (ExecucaoAtividadePeriodicaDTO) arg0;
if (!execucaoAtividadePeriodicaDto.getSituacao().equals("S")) {
execucaoAtividadePeriodicaDto.setIdMotivoSuspensao(null);
execucaoAtividadePeriodicaDto.setComplementoMotivoSuspensao(null);
}
}
@Override
protected void validaUpdate(final Object arg0) throws Exception {
this.validaCreate(arg0);
}
@Override
public Collection findByIdAtividadePeriodica(final Integer idAtividadePeriodicaParm) throws Exception {
try {
return this.getDao().findByIdAtividadePeriodica(idAtividadePeriodicaParm);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public void deleteByIdAtividadePeriodica(final Integer parm) throws Exception {
try {
this.getDao().deleteByIdAtividadePeriodica(parm);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public void deleteByIdEmpregado(final Integer parm) throws Exception {
try {
this.getDao().deleteByIdEmpregado(parm);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public IDto create(IDto model) throws ServiceException, LogicException {
// Instancia Objeto controlador de transacao
final CrudDAO crudDao = this.getDao();
final AnexoDao anexoDao = new AnexoDao();
final TransactionControler tc = new TransactionControlerImpl(crudDao.getAliasDB());
try {
// Faz validacao, caso exista.
this.validaCreate(model);
// Instancia ou obtem os DAOs necessarios.
// Seta o TransactionController para os DAOs
crudDao.setTransactionControler(tc);
anexoDao.setTransactionControler(tc);
// Inicia transacao
tc.start();
// Executa operacoes pertinentes ao negocio.
model = crudDao.create(model);
final ExecucaoAtividadePeriodicaDTO execucaoAtividadeDto = (ExecucaoAtividadePeriodicaDTO) model;
this.gravaInformacoesGED(execucaoAtividadeDto.getColArquivosUpload(), 1, execucaoAtividadeDto);
// Faz commit e fecha a transacao.
tc.commit();
return model;
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
} finally {
tc.closeQuietly();
}
return model;
}
@Override
public void update(final IDto model) throws ServiceException, LogicException {
// Instancia Objeto controlador de transacao
final CrudDAO crudDao = this.getDao();
final AnexoDao anexoDao = new AnexoDao();
final TransactionControler tc = new TransactionControlerImpl(crudDao.getAliasDB());
try {
// Faz validacao, caso exista.
this.validaUpdate(model);
// Seta o TransactionController para os DAOs
crudDao.setTransactionControler(tc);
anexoDao.setTransactionControler(tc);
// Inicia transacao
tc.start();
// Executa operacoes pertinentes ao negocio.
crudDao.update(model);
final ExecucaoAtividadePeriodicaDTO execucaoAtividadeDto = (ExecucaoAtividadePeriodicaDTO) model;
this.gravaInformacoesGED(execucaoAtividadeDto.getColArquivosUpload(), 1, execucaoAtividadeDto);
// Faz commit e fecha a transacao.
tc.commit();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
} finally {
tc.closeQuietly();
}
}
@Override
public IDto restore(final IDto model) throws ServiceException, LogicException {
try {
final IDto obj = this.getDao().restore(model);
final ExecucaoAtividadePeriodicaDTO execucaoAtividadeDto = (ExecucaoAtividadePeriodicaDTO) obj;
final ControleGEDDao controleGedDao = new ControleGEDDao();
final Collection col = controleGedDao.listByIdTabelaAndID(ControleGEDDTO.TABELA_EXECUCAOATIVIDADE, execucaoAtividadeDto.getIdExecucaoAtividadePeriodica());
execucaoAtividadeDto.setColArquivosUpload(col);
return obj;
} catch (final LogicException e) {
throw new ServiceException(e);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
public void gravaInformacoesGED(final Collection colArquivosUpload, final int idEmpresa, final ExecucaoAtividadePeriodicaDTO execucaoAtividadeDto) throws Exception {
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";
}
final ControleGEDService controleGEDService = (ControleGEDService) ServiceLocator.getInstance().getService(ControleGEDService.class, null);
String pasta = "";
if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) {
pasta = controleGEDService.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.getTemporario().equalsIgnoreCase("S")) { // Se nao for temporario
continue;
}
ControleGEDDTO controleGEDDTO = new ControleGEDDTO();
controleGEDDTO.setIdTabela(ControleGEDDTO.TABELA_EXECUCAOATIVIDADE);
controleGEDDTO.setId(execucaoAtividadeDto.getIdExecucaoAtividadePeriodica());
controleGEDDTO.setDataHora(UtilDatas.getDataAtual());
controleGEDDTO.setDescricaoArquivo(uploadDTO.getDescricao());
controleGEDDTO.setExtensaoArquivo(Util.getFileExtension(uploadDTO.getNameFile()));
controleGEDDTO.setPasta(pasta);
controleGEDDTO.setNomeArquivo(uploadDTO.getNameFile());
if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S") && "S".equalsIgnoreCase(prontuarioGedInternoBancoDados)) { // Se utiliza GED
// interno e eh BD
controleGEDDTO.setPathArquivo(uploadDTO.getPath()); // Isso vai fazer a gravacao no BD. dento do create abaixo.
} else {
controleGEDDTO.setPathArquivo(null);
}
controleGEDDTO = controleGEDService.create(controleGEDDTO);
if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S") && !"S".equalsIgnoreCase(prontuarioGedInternoBancoDados)) { // Se utiliza GED
// interno e nao eh BD
if (controleGEDDTO != null) {
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();
}
} /*
* else if (!PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) { // Se
* // utiliza
* // GED
* // externo
* // FALTA IMPLEMENTAR!!!
* }
*/
}
}
@Override
public Collection findBlackoutByIdMudancaAndPeriodo(final Integer idMudanca, final Date dataInicio, final Date dataFim) throws Exception {
return this.getDao().findBlackoutByIdMudancaAndPeriodo(idMudanca, dataInicio, dataFim);
}
}