package br.com.centralit.citcorpore.negocio;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import br.com.centralit.citcorpore.bean.AtividadesServicoContratoDTO;
import br.com.centralit.citcorpore.bean.ComplexidadeDTO;
import br.com.centralit.citcorpore.bean.OSDTO;
import br.com.centralit.citcorpore.bean.ServicoContratoDTO;
import br.com.centralit.citcorpore.bean.ServicoDTO;
import br.com.centralit.citcorpore.integracao.AtividadesOSDao;
import br.com.centralit.citcorpore.integracao.AtividadesServicoContratoDao;
import br.com.centralit.citcorpore.integracao.ContratoDao;
import br.com.centralit.citcorpore.integracao.OSDao;
import br.com.citframework.comparacao.ObjectSimpleComparator;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.service.CrudServiceImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilFormatacao;
import br.com.citframework.util.WebUtil;
@SuppressWarnings({"rawtypes", "unchecked"})
public class AtividadesServicoContratoServiceEjb extends CrudServiceImpl implements AtividadesServicoContratoService {
private AtividadesServicoContratoDao dao;
@Override
protected AtividadesServicoContratoDao getDao() {
if (dao == null) {
dao = new AtividadesServicoContratoDao();
}
return dao;
}
@Override
public Collection findByIdServicoContrato(final Integer parm) throws Exception {
try {
return this.getDao().findByIdServicoContrato(parm);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public void deleteByIdServicoContrato(final Integer parm) throws Exception {
try {
this.getDao().deleteByIdServicoContrato(parm);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public Collection obterAtividadesAtivasPorIdServicoContrato(final Integer idServicoContrato) throws ServiceException {
final Collection colRetorno = new ArrayList();
try {
final Collection col = this.getDao().obterAtividadesAtivasPorIdServicoContrato(idServicoContrato);
if (col != null && col.size() > 0) {
for (final Iterator it = col.iterator(); it.hasNext();) {
final AtividadesServicoContratoDTO atividadesServicoContratoDTO = (AtividadesServicoContratoDTO) it.next();
if (atividadesServicoContratoDTO.getDeleted() == null || atividadesServicoContratoDTO.getDeleted().equalsIgnoreCase("N")) {
colRetorno.add(atividadesServicoContratoDTO);
}
}
}
return colRetorno;
} catch (final Exception e) {
throw new ServiceException(e);
}
}
/**
* M�todo para atualizar a observacao de os que est�o em cria��o
*
* @param mapFields
* @throws Exception
*/
@Override
public boolean atualizaObservacao(final HashMap mapFields) throws Exception {
final String observacao = (String) mapFields.get("OBSATIVIDADE");
final String idatividadeServico = (String) mapFields.get("IDATIVIDADESERVICOCONTRATO");
final OSDao daoOs = new OSDao();
final AtividadesOSDao daoAtividade = new AtividadesOSDao();
try {
final List<OSDTO> respOs = daoOs.buscaOsEmCriacao();
return daoAtividade.atualizaObservacao(Integer.parseInt(idatividadeServico), observacao, respOs);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public String calculaFormula(final HashMap mapFields) throws Exception {
Double result = null;
// Pegando valores do par�metro recebido
final String idContratoTxt = (String) mapFields.get("IDSERVICOCONTRATO");
String horaTxt = (String) mapFields.get("HORA");
final String complexidade = (String) mapFields.get("COMPLEXIDADE");
final String quantidadeTxt = (String) mapFields.get("QUANTIDADE");
final String periodoTxt = (String) mapFields.get("PERIODO");
// Fazendo parse dos valores
Double hora = new Double(0);
Integer quantidade = new Integer(0);
final DecimalFormat df = new DecimalFormat("0.00");
if (horaTxt != null && !horaTxt.equals("")) {
horaTxt = horaTxt.replace(",", ".");
hora = Double.valueOf(horaTxt);
df.setMaximumFractionDigits(2);
df.format(hora);
}
if (quantidadeTxt != null && !quantidadeTxt.equals("")) {
quantidade = Integer.parseInt(quantidadeTxt);
}
if (periodoTxt != null && !periodoTxt.equals("")) {
Integer.parseInt(periodoTxt);
}
// Consultar valor da complexidade
if (idContratoTxt != null && !idContratoTxt.equals("") && complexidade != null && !complexidade.equals("")) {
final Integer idContrato = Integer.parseInt(idContratoTxt);
final ContratoDao contratoDao = new ContratoDao();
final Double valorComplex = contratoDao.consultaComplexidade(idContrato, complexidade);
// Calcula custo
result = hora * valorComplex * quantidade;
} else {
result = 0.0;
}
return UtilFormatacao.formatDouble(result, 2);
}
@Override
public Double calculaFormula(final AtividadesServicoContratoDTO atividadesServicoContrato) throws Exception {
Double result = null;
// Pegando valores do par�metro recebido
final Integer idServicoContrato = atividadesServicoContrato.getIdServicoContrato();
final Double hora = atividadesServicoContrato.getHora();
final String complexidade = atividadesServicoContrato.getComplexidade();
final Integer quantidade = atividadesServicoContrato.getQuantidade();
// String periodoTxt = atividadesServicoContrato.getPeriodo();
if (idServicoContrato != null && complexidade != null && !complexidade.trim().equals("")) {
final ContratoDao contratoDao = new ContratoDao();
final Double valorComplex = contratoDao.consultaComplexidade(idServicoContrato, complexidade);
if (valorComplex != null && valorComplex != 0 && hora != null && hora != 0 && quantidade != null && quantidade != 0) {
result = hora * valorComplex * quantidade;
} else {
result = 0.0;
}
} else {
result = 0.0;
}
return result;
}
@Override
public boolean verificaComplexidade(final HashMap mapFields) throws Exception {
final String idContratoTxt = (String) mapFields.get("IDSERVICOCONTRATO");
if (idContratoTxt != null) {
final Integer idContrato = Integer.parseInt(idContratoTxt);
final ContratoDao contratoDao = new ContratoDao();
final Collection listaComplexidades = contratoDao.listaComplexidadePorContrato(idContrato);
if (listaComplexidades != null && listaComplexidades.size() > 0) {
for (final Iterator it = listaComplexidades.iterator(); it.hasNext();) {
final ComplexidadeDTO complexidadeDTO = (ComplexidadeDTO) it.next();
if (complexidadeDTO.getValorComplexidade() != null) {
return true;
} else {
return false;
}
}
} else {
return false;
}
}
return false;
}
@Override
public Collection preencheComboServicoContrato(final HashMap mapFields, final String language) throws Exception {
final String idContratoTxt = (String) mapFields.get("IDCONTRATO");;
Collection colServicoContrato = new ArrayList();
if (idContratoTxt != null) {
colServicoContrato = this.obtemServicosContratoAtivos(Integer.parseInt(idContratoTxt));
if (language != null && !language.equals("")) {
mapFields.put("SERVICOCONTRATOSERIALIZADO", WebUtil.serializeObjects(colServicoContrato, language));
} else {
mapFields.put("SERVICOCONTRATOSERIALIZADO", WebUtil.serializeObjects(colServicoContrato));
}
return colServicoContrato;
}
return colServicoContrato;
}
private Collection obtemServicosContratoAtivos(final Integer idServicoContrato) throws ServiceException, Exception {
final ServicoContratoService serviceContratoService = (ServicoContratoService) ServiceLocator.getInstance().getService(ServicoContratoService.class, null);
final ServicoService servicoService = (ServicoService) ServiceLocator.getInstance().getService(ServicoService.class, null);
final Collection colServicosContrato = serviceContratoService.findByIdContrato(idServicoContrato);
final List<ServicoContratoDTO> colFinal = new ArrayList();
if (colServicosContrato != null) {
for (final Iterator it = colServicosContrato.iterator(); it.hasNext();) {
final ServicoContratoDTO servicoContratoAux = (ServicoContratoDTO) it.next();
final ServicoContratoDTO servicoContratoFinal = new ServicoContratoDTO();
if (servicoContratoAux.getDeleted() != null && !servicoContratoAux.getDeleted().equalsIgnoreCase("N")) {
continue;
}
if (servicoContratoAux.getDataFim() != null && !servicoContratoAux.getDataFim().after(UtilDatas.getDataAtual())) {
continue;
}
if (servicoContratoAux.getIdServico() != null) {
ServicoDTO servicoDto = new ServicoDTO();
servicoDto.setIdServico(servicoContratoAux.getIdServico());
servicoDto = (ServicoDTO) servicoService.restore(servicoDto);
if (servicoDto != null) {
if (servicoDto.getDeleted() != null && !servicoDto.getDeleted().equalsIgnoreCase("N")) {
continue;
}
servicoContratoFinal.setIdServicoContrato(servicoContratoAux.getIdServicoContrato());
servicoContratoFinal.setNomeServico(servicoDto.getNomeServico());
colFinal.add(servicoContratoFinal);
}
}
}
}
Collections.sort(colFinal, new ObjectSimpleComparator("getNomeServico", ObjectSimpleComparator.ASC));
return colFinal;
}
@Override
public Collection listarPorFormula() throws Exception {
return this.getDao().listarPorFormula();
}
}