package br.com.centralit.citcorpore.bpm.negocio;
import java.sql.Date;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import br.com.centralit.bpm.dto.AtribuicaoFluxoDTO;
import br.com.centralit.bpm.dto.EventoFluxoDTO;
import br.com.centralit.bpm.dto.FluxoDTO;
import br.com.centralit.bpm.dto.ItemTrabalhoFluxoDTO;
import br.com.centralit.bpm.dto.TarefaFluxoDTO;
import br.com.centralit.bpm.integracao.AtribuicaoFluxoDao;
import br.com.centralit.bpm.integracao.EventoFluxoDao;
import br.com.centralit.bpm.integracao.ItemTrabalhoFluxoDao;
import br.com.centralit.bpm.negocio.InstanciaFluxo;
import br.com.centralit.bpm.negocio.ItemTrabalho;
import br.com.centralit.bpm.negocio.Tarefa;
import br.com.centralit.bpm.util.Enumerados.TipoAtribuicao;
import br.com.centralit.citcorpore.bean.AlcadaDTO;
import br.com.centralit.citcorpore.bean.AlcadaProcessoNegocioDTO;
import br.com.centralit.citcorpore.bean.CentroResultadoDTO;
import br.com.centralit.citcorpore.bean.CotacaoItemRequisicaoDTO;
import br.com.centralit.citcorpore.bean.EmpregadoDTO;
import br.com.centralit.citcorpore.bean.EntregaItemRequisicaoDTO;
import br.com.centralit.citcorpore.bean.ExecucaoSolicitacaoDTO;
import br.com.centralit.citcorpore.bean.ItemRequisicaoProdutoDTO;
import br.com.centralit.citcorpore.bean.ParametroDTO;
import br.com.centralit.citcorpore.bean.ParecerDTO;
import br.com.centralit.citcorpore.bean.RequisicaoProdutoDTO;
import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.CentroResultadoDao;
import br.com.centralit.citcorpore.integracao.CotacaoDao;
import br.com.centralit.citcorpore.integracao.CotacaoItemRequisicaoDao;
import br.com.centralit.citcorpore.integracao.EntregaItemRequisicaoDao;
import br.com.centralit.citcorpore.integracao.ExecucaoSolicitacaoDao;
import br.com.centralit.citcorpore.integracao.ItemCotacaoDao;
import br.com.centralit.citcorpore.integracao.ItemRequisicaoProdutoDao;
import br.com.centralit.citcorpore.integracao.ParametroDao;
import br.com.centralit.citcorpore.integracao.ParecerDao;
import br.com.centralit.citcorpore.integracao.RequisicaoProdutoDao;
import br.com.centralit.citcorpore.integracao.UsuarioDao;
import br.com.centralit.citcorpore.negocio.EntregaItemRequisicaoServiceEjb;
import br.com.centralit.citcorpore.negocio.ItemRequisicaoProdutoServiceEjb;
import br.com.centralit.citcorpore.negocio.alcada.AlcadaCompras;
import br.com.centralit.citcorpore.util.Enumerados.AcaoItemRequisicaoProduto;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoCotacaoItemRequisicao;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoEntregaItemRequisicao;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoItemRequisicaoProduto;
import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.util.Reflexao;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilFormatacao;
import br.com.citframework.util.UtilStrings;
@SuppressWarnings({ "unused", "unchecked" })
public class ExecucaoRequisicaoProduto extends ExecucaoSolicitacao {
public ExecucaoRequisicaoProduto() {
super();
}
@Override
public void validaEncerramento() throws Exception {
SolicitacaoServicoDTO solicitacaoServicoDto = getSolicitacaoServicoDto();
if (solicitacaoServicoDto == null)
throw new Exception("Solicita��o de servi�o n�o encontrada");
ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao();
setTransacaoDao(itemRequisicaoProdutoDao);
Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoProdutoDao.findByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens == null || colItens.isEmpty())
return;
int qtdeItens = 0;
boolean bEncerramentoPermitido = true;
ItemCotacaoDao itemCotacaoDao = new ItemCotacaoDao();
CotacaoDao cotacaoDao = new CotacaoDao();
setTransacaoDao(itemCotacaoDao);
setTransacaoDao(cotacaoDao);
EntregaItemRequisicaoDao entregaItemDao = new EntregaItemRequisicaoDao();
setTransacaoDao(entregaItemDao);
for (ItemRequisicaoProdutoDTO itemDto : colItens) {
if (!itemDto.getTipoAtendimento().equalsIgnoreCase("C"))
continue;
if (itemDto.getIdItemCotacao() == null)
continue;
qtdeItens ++;
if (solicitacaoServicoDto.getSituacao().equalsIgnoreCase(SituacaoSolicitacaoServico.Cancelada.name())) {
bEncerramentoPermitido = false;
break;
}
Collection<EntregaItemRequisicaoDTO> colEntregas = entregaItemDao.findByIdItemRequisicaoProduto(itemDto.getIdItemRequisicaoProduto());
if (colEntregas == null || colEntregas.isEmpty()) {
bEncerramentoPermitido = false;
break;
}
double qtde = 0;
for (EntregaItemRequisicaoDTO entregaDto : colEntregas) {
if (!entregaDto.getSituacao().equals(SituacaoEntregaItemRequisicao.Aprovada.name()) && !entregaDto.getSituacao().equals(SituacaoEntregaItemRequisicao.AprovadaPrazo.name())) {
bEncerramentoPermitido = false;
break;
}
qtde += entregaDto.getQuantidadeEntregue().doubleValue();
}
if (!bEncerramentoPermitido)
break;
if (itemDto.getQtdeAprovada().doubleValue() != qtde) {
bEncerramentoPermitido = false;
break;
}
}
if (bEncerramentoPermitido && solicitacaoServicoDto.atendida() && qtdeItens > 0)
bEncerramentoPermitido = false;
if (!bEncerramentoPermitido)
throw new LogicException("Encerramento da requisi��o "+getSolicitacaoServicoDto().getIdSolicitacaoServico()+" n�o permitido. Existe pelo menos um item em processo de cota��o.");
ItemRequisicaoProdutoServiceEjb itemRequisicaoService = new ItemRequisicaoProdutoServiceEjb();
for (ItemRequisicaoProdutoDTO itemDto : colItens) {
if (itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Cancelado.name()) || itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Finalizado.name()))
continue;
itemDto.setSituacao(SituacaoItemRequisicaoProduto.Cancelado.name());
itemRequisicaoProdutoDao.updateNotNull(itemDto);
itemRequisicaoService.geraHistorico(getTransacao(), null, itemDto, AcaoItemRequisicaoProduto.Cancelamento, null, SituacaoItemRequisicaoProduto.Cancelado);
}
}
public void associaItemTrabalhoAprovacao(Tarefa tarefa) throws Exception{
CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao();
setTransacaoDao(cotacaoItemRequisicaoDao);
Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findDisponiveisAprovacaoByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens != null) {
for (CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) {
cotacaoItemRequisicaoDto.setIdItemTrabalho(tarefa.getIdItemTrabalho());
cotacaoItemRequisicaoDao.update(cotacaoItemRequisicaoDto);
}
}
}
public void associaItemTrabalhoInspecao(Tarefa tarefa) throws Exception{
EntregaItemRequisicaoDao entregaItemRequisicaoDao = new EntregaItemRequisicaoDao();
setTransacaoDao(entregaItemRequisicaoDao);
Collection<EntregaItemRequisicaoDTO> colItens = entregaItemRequisicaoDao.findDisponiveisInspecaoByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens != null) {
for (EntregaItemRequisicaoDTO inspecaoDto : colItens) {
inspecaoDto.setIdItemTrabalho(tarefa.getIdItemTrabalho());
entregaItemRequisicaoDao.update(inspecaoDto);
}
}
}
public void associaItemTrabalhoGarantia(Tarefa tarefa) throws Exception{
EntregaItemRequisicaoDao entregaItemRequisicaoDao = new EntregaItemRequisicaoDao();
setTransacaoDao(entregaItemRequisicaoDao);
Collection<EntregaItemRequisicaoDTO> colItens = entregaItemRequisicaoDao.findNaoAprovadasEDisponiveisByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens != null) {
for (EntregaItemRequisicaoDTO inspecaoDto : colItens) {
inspecaoDto.setIdItemTrabalho(tarefa.getIdItemTrabalho());
entregaItemRequisicaoDao.update(inspecaoDto);
}
}
}
public ExecucaoRequisicaoProduto(RequisicaoProdutoDTO requisicaoProdutoDto, TransactionControler tc) {
super(requisicaoProdutoDto, tc);
}
public ExecucaoRequisicaoProduto(TransactionControler tc) {
super(tc);
}
public boolean existeAprovacaoPendente() throws Exception{
CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao();
setTransacaoDao(cotacaoItemRequisicaoDao);
Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findDisponiveisAprovacaoByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
return colItens != null && colItens.size() > 0;
}
public boolean existeEntregaPendenteInspecao() throws Exception{
EntregaItemRequisicaoDao entregaItemRequisicaoDao = new EntregaItemRequisicaoDao();
setTransacaoDao(entregaItemRequisicaoDao);
Collection<EntregaItemRequisicaoDTO> colItens = entregaItemRequisicaoDao.findDisponiveisInspecaoByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
return colItens != null && colItens.size() > 0;
}
public boolean existeEntregaNaoAprovada() throws Exception{
EntregaItemRequisicaoDao entregaItemRequisicaoDao = new EntregaItemRequisicaoDao();
setTransacaoDao(entregaItemRequisicaoDao);
Collection<EntregaItemRequisicaoDTO> colItens = entregaItemRequisicaoDao.findNaoAprovadasEDisponiveisByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
return colItens != null && colItens.size() > 0;
}
public boolean existeItemPendenteValidacao() throws Exception{
ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao();
setTransacaoDao(itemRequisicaoProdutoDao);
Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoProdutoDao.findByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens == null || colItens.isEmpty())
return false;
for (ItemRequisicaoProdutoDTO itemDto : colItens) {
if (itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.AguardandoValidacao.name()))
return true;
}
return false;
}
public boolean entregaFinalizada() throws Exception{
ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao();
setTransacaoDao(itemRequisicaoProdutoDao);
Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoProdutoDao.findByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens == null || colItens.isEmpty())
return true;
for (ItemRequisicaoProdutoDTO itemDto : colItens) {
if (!itemDto.getTipoAtendimento().equalsIgnoreCase("C"))
continue;
if (itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Inviabilizado.name()))
continue;
if (itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Cancelado.name()))
continue;
if (!itemDto.getSituacao().equals(SituacaoItemRequisicaoProduto.Finalizado.name())) {
//System.out.println("####### " +getSolicitacaoServicoDto().getIdSolicitacaoServico());
return false;
}
}
ExecucaoSolicitacaoDao execucaoSolicitacaoDao = new ExecucaoSolicitacaoDao();
setTransacaoDao(execucaoSolicitacaoDao);
ExecucaoSolicitacaoDTO execucaoSolicitacaoDto = execucaoSolicitacaoDao.findBySolicitacaoServico(getSolicitacaoServicoDto());
if (execucaoSolicitacaoDto == null)
return false;
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, execucaoSolicitacaoDto.getIdInstanciaFluxo());
AtribuicaoFluxoDao atribuicaoFluxoDao = new AtribuicaoFluxoDao();
setTransacaoDao(atribuicaoFluxoDao);
Collection<AtribuicaoFluxoDTO> colAtribuicao = atribuicaoFluxoDao.findByDisponiveisByIdInstancia(execucaoSolicitacaoDto.getIdInstanciaFluxo());
if (colAtribuicao != null) {
for (AtribuicaoFluxoDTO atribuicaoFluxoDto : colAtribuicao) {
ItemTrabalho itemTrabalho = ItemTrabalho.getItemTrabalho(instanciaFluxo, atribuicaoFluxoDto.getIdItemTrabalho());
itemTrabalho.cancela(null);
}
}
EventoFluxoDao eventoFluxoDao = new EventoFluxoDao();
setTransacaoDao(eventoFluxoDao);
Collection<EventoFluxoDTO> colEventos = eventoFluxoDao.findDisponiveis(execucaoSolicitacaoDto.getIdInstanciaFluxo());
if (colEventos != null) {
for (EventoFluxoDTO eventoFluxoDto : colEventos) {
ItemTrabalho itemTrabalho = ItemTrabalho.getItemTrabalho(instanciaFluxo, eventoFluxoDto.getIdItemTrabalho());
itemTrabalho.encerra();
}
}
return true;
}
public void verificaExpiracao() throws Exception{
Date dataAtual = UtilDatas.getDataAtual();
ParametroDao parametroDao = new ParametroDao();
setTransacaoDao(parametroDao);
ParametroDTO parametroDto = parametroDao.getValue("COMPRAS", "TRATA_EXPIRACAO", new Integer(1));
if (parametroDto == null || parametroDto.getValor() == null && !parametroDto.getValor().equalsIgnoreCase("S"))
return;
if (this.requisicaoRejeitada()) {
int prazoValidacao = 15;
parametroDto = parametroDao.getValue("COMPRAS", "PRAZO_EXPIRACAO_VALIDACAO", new Integer(1));
if (parametroDto != null && parametroDto.getValor() != null && !UtilStrings.apenasNumeros(parametroDto.getValor()).equals(""))
prazoValidacao = new Integer(parametroDto.getValor()).intValue();
ExecucaoSolicitacaoDao execucaoSolicitacaoDao = new ExecucaoSolicitacaoDao();
setTransacaoDao(execucaoSolicitacaoDao);
ExecucaoSolicitacaoDTO execucaoSolicitacaoDto = execucaoSolicitacaoDao.findBySolicitacaoServico(getSolicitacaoServicoDto());
if (execucaoSolicitacaoDto == null)
return;
InstanciaFluxo instanciaFluxo = new InstanciaFluxo(this, execucaoSolicitacaoDto.getIdInstanciaFluxo());
ItemTrabalho itemTrabalho = null;
AtribuicaoFluxoDao atribuicaoFluxoDao = new AtribuicaoFluxoDao();
setTransacaoDao(atribuicaoFluxoDao);
Collection<AtribuicaoFluxoDTO> colAtribuicao = atribuicaoFluxoDao.findByDisponiveisByIdInstancia(execucaoSolicitacaoDto.getIdInstanciaFluxo());
if (colAtribuicao != null) {
for (AtribuicaoFluxoDTO atribuicaoFluxoDto : colAtribuicao) {
if (!atribuicaoFluxoDto.getTipo().equals(TipoAtribuicao.Automatica.name()))
continue;
ItemTrabalho itemTrabalhoAux = ItemTrabalho.getItemTrabalho(instanciaFluxo, atribuicaoFluxoDto.getIdItemTrabalho());
if (itemTrabalhoAux != null && itemTrabalhoAux instanceof Tarefa && itemTrabalhoAux.getElementoFluxoDto().getNome().toUpperCase().indexOf("COMPLEMENT") >= 0) {
itemTrabalho = itemTrabalhoAux;
break;
}
}
}
if (itemTrabalho == null)
return;
if (itemTrabalho.getItemTrabalhoDto().getDataHoraCriacao() != null && UtilDatas.getDiasEntreDatas(dataAtual, itemTrabalho.getItemTrabalhoDto().getDataHoraCriacao()) > prazoValidacao) {
ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao();
setTransacaoDao(itemRequisicaoProdutoDao);
boolean bCancelaTrabalho = true;
Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoProdutoDao.findByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens != null) {
ItemRequisicaoProdutoServiceEjb itemRequisicaoService = new ItemRequisicaoProdutoServiceEjb();
for (ItemRequisicaoProdutoDTO itemRequisicaoDto : colItens) {
if (itemRequisicaoDto.getIdItemCotacao() != null) {
bCancelaTrabalho = false;
break;
}
}
if (bCancelaTrabalho) {
for (ItemRequisicaoProdutoDTO itemRequisicaoDto : colItens) {
itemRequisicaoDto.setSituacao(SituacaoItemRequisicaoProduto.Cancelado.name());
itemRequisicaoProdutoDao.update(itemRequisicaoDto);
itemRequisicaoService.geraHistorico(getTransacao(), null, itemRequisicaoDto, AcaoItemRequisicaoProduto.Alteracao, "Cancelamento autom�tico por decurso de prazo", SituacaoItemRequisicaoProduto.valueOf(itemRequisicaoDto.getSituacao()));
}
}
}
if (bCancelaTrabalho) {
TarefaFluxoDTO tarefaDto = recuperaTarefa(itemTrabalho.getIdItemTrabalho());
this.cancelaTarefa(null, getSolicitacaoServicoDto(), tarefaDto, "Cancelamento autom�tico por decurso de prazo");
this.getSolicitacaoServicoDto().setNomeTarefa(tarefaDto.getElementoFluxoDto().getNome());
String destinatarios[] = new String[]{this.getSolicitacaoServicoDto().getEmailcontato()};
this.enviaEmail("ReqProdTarefaCanc", destinatarios);
}
}
}else{
EntregaItemRequisicaoDao entregaItemRequisicaoDao = new EntregaItemRequisicaoDao();
setTransacaoDao(entregaItemRequisicaoDao);
Collection<EntregaItemRequisicaoDTO> colItens = entregaItemRequisicaoDao.findInspecaoByIdSolicitacaoServico(getSolicitacaoServicoDto().getIdSolicitacaoServico());
if (colItens != null && colItens.size() > 0) {
EntregaItemRequisicaoServiceEjb entregaService = new EntregaItemRequisicaoServiceEjb();
int prazoInspecao = 7;
parametroDto = parametroDao.getValue("COMPRAS", "PRAZO_EXPIRACAO_INSPECAO", new Integer(1));
if (parametroDto != null && parametroDto.getValor() != null && !UtilStrings.apenasNumeros(parametroDto.getValor()).equals(""))
prazoInspecao = new Integer(parametroDto.getValor()).intValue();
int expirados = 0;
HashMap<String, TarefaFluxoDTO> mapItensTrabaho = new HashMap<String, TarefaFluxoDTO>();
for (EntregaItemRequisicaoDTO entregaItemDto : colItens) {
if (entregaItemDto.getIdItemTrabalho() == null)
continue;
TarefaFluxoDTO tarefaDto = mapItensTrabaho.get(""+entregaItemDto.getIdItemTrabalho());
if (tarefaDto == null) {
tarefaDto = this.recuperaTarefa(entregaItemDto.getIdItemTrabalho());
if (tarefaDto == null)
continue;
mapItensTrabaho.put(""+entregaItemDto.getIdItemTrabalho(), tarefaDto);
}
if (UtilDatas.getDiasEntreDatas(dataAtual, tarefaDto.getDataHoraCriacao()) > prazoInspecao) {
expirados ++;
entregaService.finalizaDecursoPrazo(entregaItemDto, this.getTransacao());
}
}
if (expirados == 0)
return;
for (TarefaFluxoDTO tarefaDto: mapItensTrabaho.values()) {
this.cancelaTarefa(null, getSolicitacaoServicoDto(), tarefaDto, "Cancelamento autom�tico por decurso de prazo");
this.getSolicitacaoServicoDto().setNomeTarefa(tarefaDto.getElementoFluxoDto().getNome());
String destinatarios[] = new String[]{this.getSolicitacaoServicoDto().getEmailcontato()};
this.enviaEmail("ReqProdTarefaCanc", destinatarios);
}
}
}
}
public boolean requisicaoRejeitada() throws Exception{
RequisicaoProdutoDTO requisicaoDto = recuperaRequisicaoProduto();
return requisicaoDto.getRejeitada() != null && requisicaoDto.getRejeitada().equalsIgnoreCase("S");
}
public boolean existeItemAlterado() throws Exception{
RequisicaoProdutoDTO requisicaoDto = recuperaRequisicaoProduto();
return requisicaoDto.getItemAlterado() != null && requisicaoDto.getItemAlterado().equalsIgnoreCase("S");
}
public boolean exigeAutorizacao() throws Exception{
RequisicaoProdutoDTO requisicaoDto = recuperaRequisicaoProduto();
return exigeAutorizacao(requisicaoDto);
}
public boolean exigeNovaAprovacao() throws Exception{
RequisicaoProdutoDTO requisicaoDto = recuperaRequisicaoProduto();
return requisicaoDto.getExigeNovaAprovacao() != null && requisicaoDto.getExigeNovaAprovacao().equalsIgnoreCase("S");
}
public boolean exigeAutorizacao(RequisicaoProdutoDTO requisicaoProdutoDto) throws Exception{
RequisicaoProdutoDTO requisicaoAuxDto = recuperaRequisicaoProduto();
AlcadaDTO alcadaDto = recuperaAlcada(requisicaoAuxDto);
if (alcadaDto != null) {
boolean result = false;
if (alcadaDto.getColResponsaveis() != null) {
result = true;
for (EmpregadoDTO empregadoDto: alcadaDto.getColResponsaveis()) {
if (getSolicitacaoServicoDto().getIdSolicitante().intValue() == empregadoDto.getIdEmpregado().intValue()) {
result = false;
break;
}
}
}
return result;
}else
return false;
}
public StringBuilder recuperaLoginAutorizadores() throws Exception{
RequisicaoProdutoDTO requisicaoDto = recuperaRequisicaoProduto();
return recuperaLoginAutorizadores(requisicaoDto);
}
public StringBuilder recuperaLoginAutorizadores(RequisicaoProdutoDTO requisicaoProdutoDto) throws Exception{
StringBuilder result = new StringBuilder();
AlcadaDTO alcadaDto = recuperaAlcada(requisicaoProdutoDto);
if (alcadaDto != null && alcadaDto.getColResponsaveis() != null) {
int i = 0;
UsuarioDao usuarioDao = new UsuarioDao();
setTransacaoDao(usuarioDao);
for (EmpregadoDTO empregadoDto: alcadaDto.getColResponsaveis()) {
UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(empregadoDto.getIdEmpregado());
if (usuarioDto != null) {
if (i > 0)
result.append(";");
result.append(usuarioDto.getLogin());
i++;
}
}
}
if (result.length() == 0)
throw new LogicException("N�o foi encontrado nenhum autorizador da requisi��o");
return result;
}
public AlcadaDTO recuperaAlcada(RequisicaoProdutoDTO requisicaoProdutoDto) throws Exception {
return new AlcadaCompras().determinaAlcada(requisicaoProdutoDto, recuperaCentroCusto(requisicaoProdutoDto), getTransacao());
}
public RequisicaoProdutoDTO recuperaRequisicaoProduto() throws Exception{
RequisicaoProdutoDao requisicaoDao = new RequisicaoProdutoDao();
setTransacaoDao(requisicaoDao);
SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto();
RequisicaoProdutoDTO requisicaoDto = new RequisicaoProdutoDTO();
requisicaoDto.setIdSolicitacaoServico(solicitacaoDto.getIdSolicitacaoServico());
requisicaoDto = (RequisicaoProdutoDTO) requisicaoDao.restore(requisicaoDto);
Reflexao.copyPropertyValues(solicitacaoDto, requisicaoDto);
return requisicaoDto;
}
public CentroResultadoDTO recuperaCentroCusto(RequisicaoProdutoDTO requisicaoProdutoDto) throws Exception {
CentroResultadoDTO centroCustoDto = new CentroResultadoDTO();
centroCustoDto.setIdCentroResultado(requisicaoProdutoDto.getIdCentroCusto());
CentroResultadoDao centroResultadoDao = new CentroResultadoDao();
setTransacaoDao(centroResultadoDao);
return (CentroResultadoDTO) centroResultadoDao.restore(centroCustoDto);
}
@Override
public InstanciaFluxo inicia() throws Exception {
return super.inicia();
}
@Override
public InstanciaFluxo inicia(FluxoDTO fluxoDto, Integer idFase) throws Exception {
String idGrupo = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_REQ_PRODUTOS, null);
if (idGrupo == null || idGrupo.trim().equals(""))
throw new Exception("Grupo padr�o de requisi��o de produtos n�o parametrizado");
getSolicitacaoServicoDto().setIdGrupoAtual(new Integer(idGrupo.trim()));
return super.inicia(fluxoDto,idFase);
}
@Override
public void mapObjetoNegocio(Map<String, Object> map) throws Exception {
super.mapObjetoNegocio(map);
}
@Override
public void executaEvento(EventoFluxoDTO eventoFluxoDto) throws Exception {
super.executaEvento(eventoFluxoDto);
}
@Override
public void complementaInformacoesEmail(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
super.complementaInformacoesEmail(solicitacaoServicoDto);
StringBuilder strItens = new StringBuilder();
RequisicaoProdutoDTO requisicaoDto = recuperaRequisicaoProduto();
if (requisicaoDto.getFinalidade().equals("C"))
strItens.append("<b>Finalidade: </b>Atendimento ao cliente<br>");
else
strItens.append("<b>Finalidade: </b>Uso interno<br>");
strItens.append("<b>Centro de custo: </b>"+requisicaoDto.getCentroCusto()+"<br>");
strItens.append("<b>Projeto: </b>"+requisicaoDto.getProjeto()+"<br>");
ItemRequisicaoProdutoDao itemRequisicaoProdutoDao = new ItemRequisicaoProdutoDao();
setTransacaoDao(itemRequisicaoProdutoDao);
Collection<ItemRequisicaoProdutoDTO> colItens = itemRequisicaoProdutoDao.findByIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico());
if (colItens != null) {
strItens.append("<br>");
strItens.append("<table width='100%'>");
strItens.append(" <tr>");
strItens.append(" <th><b>ITENS</b></th>");
strItens.append(" </tr>");
strItens.append("</table>");
strItens.append("<table width='100%' border='1' style='padding: 5px 5px 5px 5px'>");
strItens.append(" <tr>");
strItens.append(" <th width='30%'><b>Descri��o</b></th>");
strItens.append(" <th><b>Especifica��es</b></th>");
strItens.append(" <th><b>Qtde</b></th>");
strItens.append(" <th width='15%'><b>Situa��o atual</b></th>");
strItens.append(" </tr>");
for (ItemRequisicaoProdutoDTO itemDto : colItens) {
strItens.append(" <tr>");
strItens.append(" <td>"+itemDto.getDescricaoItem()+"</td>");
strItens.append(" <td>"+UtilStrings.nullToVazio(itemDto.getEspecificacoes())+"</td>");
strItens.append(" <td>"+UtilFormatacao.formatDouble(itemDto.getQtdeAprovada(),2)+"</td>");
strItens.append(" <td>"+itemDto.getDescrSituacao()+"</td>");
strItens.append(" </tr>");
}
strItens.append("</table>");
}
solicitacaoServicoDto.setInformacoesComplementaresHTML(strItens.toString());
}
@Override
public boolean permiteAprovacaoAlcada(AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto, SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
if (alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado().intValue() == solicitacaoServicoDto.getIdSolicitante().intValue()) {
alcadaProcessoNegocioDto.setComplementoRejeicao("Aprovador n�o pode ser o solicitante");
return false;
}
String idGrupoCompras = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_REQ_PRODUTOS, null);
if (idGrupoCompras == null || idGrupoCompras.trim().equals(""))
throw new Exception("Grupo padr�o de requisi��o de produtos n�o parametrizado");
if (alcadaProcessoNegocioDto.getMapGruposEmpregado().get(idGrupoCompras.trim()) != null) {
alcadaProcessoNegocioDto.setComplementoRejeicao("Aprovador n�o pode pertencer ao grupo respons�vel por compras");
return false;
}
return true;
}
@Override
public void calculaValorAprovadoAnual(CentroResultadoDTO centroResultadoDto, int anoRef, TransactionControler tc) throws Exception {
if (tc != null)
setTransacao(tc);
valorAnualUsoInterno = 0.0;
valorAnualAtendCliente = 0.0;
CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao();
setTransacaoDao(cotacaoItemRequisicaoDao);
Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findAprovadasByIdCentroResultado(centroResultadoDto.getIdCentroResultado());
if (colItens != null) {
ParecerDao parecerDao = new ParecerDao();
setTransacaoDao(parecerDao);
ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao();
setTransacaoDao(itemTrabalhoFluxoDao);
for (CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) {
double valor = 0;
if (cotacaoItemRequisicaoDto.getValorTotal() == null)
continue;
if (cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && cotacaoItemRequisicaoDto.getIdItemTrabalho() != null) {
ItemTrabalhoFluxoDTO itemTrabalhoDto = new ItemTrabalhoFluxoDTO();
itemTrabalhoDto.setIdItemTrabalho(cotacaoItemRequisicaoDto.getIdItemTrabalho());
itemTrabalhoDto = (ItemTrabalhoFluxoDTO) itemTrabalhoFluxoDao.restore(itemTrabalhoDto);
if (itemTrabalhoDto != null && itemTrabalhoDto.getDataHoraFinalizacao() != null) {
Date dataAux = new Date(itemTrabalhoDto.getDataHoraFinalizacao().getTime());
int ano = UtilDatas.getYear(dataAux);
if (ano == anoRef)
valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue();
}
}else if (cotacaoItemRequisicaoDto.getIdParecerAutorizacao() != null) {
ParecerDTO parecerDto = new ParecerDTO();
parecerDto.setIdParecer(cotacaoItemRequisicaoDto.getIdParecerAutorizacao());
parecerDto = (ParecerDTO) parecerDao.restore(parecerDto);
if (parecerDto != null) {
Date dataAux = new Date(parecerDto.getDataHoraParecer().getTime());
int ano = UtilDatas.getYear(dataAux);
if (ano == anoRef)
valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue();
}
}
if (valor > 0) {
if (cotacaoItemRequisicaoDto.getFinalidade().equalsIgnoreCase("I"))
valorAnualUsoInterno += valor;
else
valorAnualAtendCliente += valor;
}
}
}
}
@Override
public void calculaValorAprovadoMensal(CentroResultadoDTO centroResultadoDto, int mesRef, int anoRef, TransactionControler tc) throws Exception {
if (tc != null)
setTransacao(tc);
valorMensalUsoInterno = 0.0;
valorMensalAtendCliente = 0.0;
CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao();
setTransacaoDao(cotacaoItemRequisicaoDao);
Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findAprovadasByIdCentroResultado(centroResultadoDto.getIdCentroResultado());
if (colItens != null) {
ParecerDao parecerDao = new ParecerDao();
setTransacaoDao(parecerDao);
ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao();
setTransacaoDao(itemTrabalhoFluxoDao);
for (CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) {
double valor = 0;
if (cotacaoItemRequisicaoDto.getValorTotal() == null)
continue;
if (cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && cotacaoItemRequisicaoDto.getIdItemTrabalho() != null) {
ItemTrabalhoFluxoDTO itemTrabalhoDto = new ItemTrabalhoFluxoDTO();
itemTrabalhoDto.setIdItemTrabalho(cotacaoItemRequisicaoDto.getIdItemTrabalho());
itemTrabalhoDto = (ItemTrabalhoFluxoDTO) itemTrabalhoFluxoDao.restore(itemTrabalhoDto);
if (itemTrabalhoDto != null && itemTrabalhoDto.getDataHoraFinalizacao() != null) {
Date dataAux = new Date(itemTrabalhoDto.getDataHoraFinalizacao().getTime());
int mes = UtilDatas.getMonth(dataAux);
int ano = UtilDatas.getYear(dataAux);
if (mes == mesRef && ano == anoRef)
valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue();
}
}else if (cotacaoItemRequisicaoDto.getIdParecerAutorizacao() != null) {
ParecerDTO parecerDto = new ParecerDTO();
parecerDto.setIdParecer(cotacaoItemRequisicaoDto.getIdParecerAutorizacao());
parecerDto = (ParecerDTO) parecerDao.restore(parecerDto);
if (parecerDto != null) {
Date dataAux = new Date(parecerDto.getDataHoraParecer().getTime());
int mes = UtilDatas.getMonth(dataAux);
int ano = UtilDatas.getYear(dataAux);
if (mes == mesRef && ano == anoRef)
valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue();
}
}
if (valor > 0) {
if (cotacaoItemRequisicaoDto.getFinalidade().equalsIgnoreCase("I"))
valorMensalUsoInterno += valor;
else
valorMensalAtendCliente += valor;
}
}
}
}
@Override
public double calculaValorAprovado(SolicitacaoServicoDTO solicitacaoServicoDto, TransactionControler tc) throws Exception {
double valor = 0.0;
setObjetoNegocioDto(solicitacaoServicoDto);
CotacaoItemRequisicaoDao cotacaoItemRequisicaoDao = new CotacaoItemRequisicaoDao();
setTransacaoDao(cotacaoItemRequisicaoDao);
ItemRequisicaoProdutoDao itemRequisicaoDao = new ItemRequisicaoProdutoDao();
setTransacaoDao(itemRequisicaoDao);
Collection<CotacaoItemRequisicaoDTO> colItens = cotacaoItemRequisicaoDao.findByIdRequisicaoProduto(solicitacaoServicoDto.getIdSolicitacaoServico());
if (colItens != null) {
ItemTrabalhoFluxoDao itemTrabalhoFluxoDao = new ItemTrabalhoFluxoDao();
setTransacaoDao(itemTrabalhoFluxoDao);
ParecerDao parecerDao = new ParecerDao();
setTransacaoDao(parecerDao);
for (CotacaoItemRequisicaoDTO cotacaoItemRequisicaoDto : colItens) {
if (!cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && !cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.PreAprovado.name())) {
continue;
}
if (cotacaoItemRequisicaoDto.getValorTotal() == null) {
continue;
}
ItemRequisicaoProdutoDTO itemDto = new ItemRequisicaoProdutoDTO();
itemDto.setIdItemRequisicaoProduto(cotacaoItemRequisicaoDto.getIdItemRequisicaoProduto());
itemDto = (ItemRequisicaoProdutoDTO) itemRequisicaoDao.restore(itemDto);
if (itemDto == null || itemDto.getSituacao() == null || itemDto.getSituacao().equalsIgnoreCase(SituacaoItemRequisicaoProduto.Cancelado.name())) {
continue;
}
if (cotacaoItemRequisicaoDto.getSituacao().equals(SituacaoCotacaoItemRequisicao.Aprovado.name()) && cotacaoItemRequisicaoDto.getIdItemTrabalho() != null) {
ItemTrabalhoFluxoDTO itemTrabalhoDto = new ItemTrabalhoFluxoDTO();
itemTrabalhoDto.setIdItemTrabalho(cotacaoItemRequisicaoDto.getIdItemTrabalho());
itemTrabalhoDto = (ItemTrabalhoFluxoDTO) itemTrabalhoFluxoDao.restore(itemTrabalhoDto);
valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue();
}else{
if (itemDto.getIdParecerAutorizacao() != null) {
ParecerDTO parecerDto = new ParecerDTO();
parecerDto.setIdParecer(itemDto.getIdParecerAutorizacao());
parecerDto = (ParecerDTO) parecerDao.restore(parecerDto);
if (parecerDto != null) {
valor += cotacaoItemRequisicaoDto.getValorTotal().doubleValue();
}
}
}
}
}
return valor;
}
@Override
public boolean isAtendimentoCliente(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception {
setObjetoNegocioDto(solicitacaoServicoDto);
RequisicaoProdutoDTO requisicaoProdutoDto = recuperaRequisicaoProduto();
return requisicaoProdutoDto != null && requisicaoProdutoDto.getFinalidade() != null && requisicaoProdutoDto.getFinalidade().trim().equals("C");
}
}