package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.FiltroEquipe;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoProgramacao;
import gcom.atendimentopublico.ordemservico.bean.OSFiltroHelper;
import gcom.atendimentopublico.ordemservico.bean.OSProgramacaoHelper;
import gcom.atendimentopublico.ordemservico.bean.ObterCargaTrabalhoEquipeHelper;
import gcom.atendimentopublico.ordemservico.bean.PesquisarOrdemServicoHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class ElaborarOrdemServicoRoteiroCriteriosAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno =
actionMapping.findForward("elaborarOrdemServico");
HttpSession sessao = httpServletRequest.getSession(false);
// Form
ElaborarOrdemServicoRoteiroCriteriosActionForm
elaborarActionForm =
(ElaborarOrdemServicoRoteiroCriteriosActionForm) actionForm;
// Data do Roteiro
Date dataRoteiro = Util.converteStringParaDate(elaborarActionForm.getDataRoteiro());
// Precisa pegar a unidade do usuario do login que esta na sessao
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
Integer idUnidadeLotacao = usuario.getUnidadeOrganizacional().getId();
// Montar o objeto que ser� usado na pesquisa
PesquisarOrdemServicoHelper pesquisarOrdemServicoHelper =
this.montaPesquisarOrdemServicoHelper(elaborarActionForm);
// Pesquisa a partir do filtro
Collection<OrdemServico> colecaoOrdemServico =
Fachada.getInstancia().pesquisarOrdemServicoElaborarProgramacao(pesquisarOrdemServicoHelper);
if (colecaoOrdemServico == null || colecaoOrdemServico.isEmpty()) {
throw new ActionServletException("atencao.pesquisa.nenhum_resultado.ordem_servico");
}
// Pesquisa as equipes associadas a unidade
this.pesquisarEquipe(sessao,idUnidadeLotacao);
// Monta a colecao de OSFiltroHelper
Collection colecaoOSFiltroHelper = this.montaColecaoOSFiltroHelper(colecaoOrdemServico,dataRoteiro);
sessao.setAttribute("colecaoOSFiltroHelper", colecaoOSFiltroHelper);
elaborarActionForm.setSelecionadas(colecaoOSFiltroHelper.size());
// Monta o mapOsProgramacaoHelper com as ordens de servi�o de programa��o
this.montaOrdemServicoProgramacao(sessao,dataRoteiro,idUnidadeLotacao);
// [SB0010]-Prepara Barra de Carga de Trabalho
this.preparaBarraCargaTrabalho(sessao,dataRoteiro);
return retorno;
}
/**
* Monta o Filtro de ser� usado na consulta
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param ElaborarOrdemServicoRoteiroCriteriosActionForm
* @return PesquisarOrdemServicoHelper
*/
private PesquisarOrdemServicoHelper montaPesquisarOrdemServicoHelper(
ElaborarOrdemServicoRoteiroCriteriosActionForm elaborarActionForm){
// Unidade Lotacao
Integer idUnidadeLotacao = new Integer(elaborarActionForm.getUnidadeLotacao());
// Origem Servico
Integer origemServico = new Integer(elaborarActionForm.getOrigemServicos());
// Criterio Sele��o
Integer criterio = new Integer(elaborarActionForm.getCriterioSelecao());
// Servi�o Diagnosticado
short servicoDiagnosticado = new Short(elaborarActionForm.getServicoDiagnosticado());
// Servi�o Acompanhamento
short servicoAcompanhamento = new Short(elaborarActionForm.getServicoAcompanhamento());
//Tipo Servico
Integer[] idsTipoServicoSelecionado = (Integer[]) elaborarActionForm.getTipoServicoSelecionados();
if(idsTipoServicoSelecionado.length > 0){
if(idsTipoServicoSelecionado[0].intValue() == ConstantesSistema.NUMERO_NAO_INFORMADO){
idsTipoServicoSelecionado = null;
}
}
// Data de Atraso
Date dataAtrasoInicial = null;
Date dataAtrasoFinal = null;
String diaAtrasoInicial = elaborarActionForm.getDiaAtrasoInicial();
String diaAtrasoFinal = elaborarActionForm.getDiaAtrasoFinal();
//selecionou os dois dias
if ((diaAtrasoFinal != null && !diaAtrasoFinal.equals("")) &&
(diaAtrasoInicial != null && !diaAtrasoInicial.equals("")) ) {
Calendar calendar = Calendar.getInstance();
int dia = new Integer(diaAtrasoInicial).intValue();
calendar.add(Calendar.DAY_OF_MONTH, -dia);
dataAtrasoInicial = calendar.getTime();
dia = new Integer(diaAtrasoFinal).intValue();
calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -dia);
dataAtrasoFinal = calendar.getTime();
//selecionou somente um dos dias
}else if ((diaAtrasoFinal != null && !diaAtrasoFinal.equals("")) ||
(diaAtrasoInicial != null && !diaAtrasoInicial.equals("")) ) {
Calendar calendar = Calendar.getInstance();
int dia = ConstantesSistema.NUMERO_NAO_INFORMADO;
if(diaAtrasoInicial != null && !diaAtrasoInicial.equals("")){
dia = new Integer(diaAtrasoInicial).intValue();
}else {
dia = new Integer(diaAtrasoFinal).intValue();
}
calendar.add(Calendar.DAY_OF_MONTH, -dia);
dataAtrasoInicial = calendar.getTime();
}
// Data de Atendimento
Date dataAtendimentoInicial = null;
Date dataAtendimentoFinal = null;
if (elaborarActionForm.getPeriodoAtendimentoInicial() != null &&
!elaborarActionForm.getPeriodoAtendimentoInicial().equals("")) {
dataAtendimentoInicial =
Util.converteStringParaDate(elaborarActionForm.getPeriodoAtendimentoInicial());
dataAtendimentoFinal = null;
if (elaborarActionForm.getPeriodoAtendimentoFinal() != null &&
!elaborarActionForm.getPeriodoAtendimentoFinal().equals("")) {
dataAtendimentoFinal =
Util.converteStringParaDate(elaborarActionForm.getPeriodoAtendimentoFinal());
} else {
dataAtendimentoFinal = new Date();
}
}
// Data de Gera��o
Date dataGeracaoInicial = null;
Date dataGeracaoFinal = null;
if (elaborarActionForm.getPeriodoGeracaoInicial() != null &&
!elaborarActionForm.getPeriodoGeracaoInicial().equals("")){
dataGeracaoInicial =
Util.converteStringParaDate(elaborarActionForm.getPeriodoGeracaoInicial());
dataGeracaoFinal = null;
if (elaborarActionForm.getPeriodoGeracaoFinal() != null &&
!elaborarActionForm.getPeriodoGeracaoFinal().equals("") ) {
dataGeracaoFinal =
Util.converteStringParaDate(elaborarActionForm.getPeriodoGeracaoFinal());
} else {
dataGeracaoFinal = new Date();
}
}
// Data de Previs�o para cliente
Date dataClienteInicial = null;
Date dataClienteFinal = null;
if (elaborarActionForm.getPeriodoClienteInicial() != null &&
!elaborarActionForm.getPeriodoClienteInicial().equals("")){
dataClienteInicial =
Util.converteStringParaDate(elaborarActionForm.getPeriodoClienteInicial());
dataClienteFinal = null;
if (elaborarActionForm.getPeriodoClienteFinal() != null &&
!elaborarActionForm.getPeriodoClienteFinal().equals("") ) {
dataClienteFinal =
Util.converteStringParaDate(elaborarActionForm.getPeriodoClienteFinal());
} else {
dataClienteFinal = new Date();
}
}
// Data de Previs�o para Ag�ncia Reguladora
Date dataAgenciaInicial = null;
Date dataAgenciaFinal = null;
if (elaborarActionForm.getPeriodoAgenciaInicial() != null &&
!elaborarActionForm.getPeriodoAgenciaInicial().equals("")){
dataAgenciaInicial =
Util.converteStringParaDate(elaborarActionForm.getPeriodoAgenciaInicial());
dataAgenciaFinal = null;
if (elaborarActionForm.getPeriodoAgenciaFinal() != null &&
!elaborarActionForm.getPeriodoAgenciaFinal().equals("") ) {
dataAgenciaFinal =
Util.converteStringParaDate(elaborarActionForm.getPeriodoAgenciaFinal());
} else {
dataAgenciaFinal = new Date();
}
}
// Monta o filtro a partir das sele��es feitas na tela
PesquisarOrdemServicoHelper pesquisarOrdemServicoHelper =
new PesquisarOrdemServicoHelper();
pesquisarOrdemServicoHelper.setOrigemServico(origemServico);
pesquisarOrdemServicoHelper.setCriterioSelecao(criterio);
pesquisarOrdemServicoHelper.setServicoDiagnosticado(servicoDiagnosticado);
pesquisarOrdemServicoHelper.setServicoAcompanhamento(servicoAcompanhamento);
pesquisarOrdemServicoHelper.setTipoServicos(idsTipoServicoSelecionado);
pesquisarOrdemServicoHelper.setDataAtrasoInicial(dataAtrasoInicial);
pesquisarOrdemServicoHelper.setDataAtrasoFinal(dataAtrasoFinal);
pesquisarOrdemServicoHelper.setDataAtendimentoInicial(dataAtendimentoInicial);
pesquisarOrdemServicoHelper.setDataAtendimentoFinal(dataAtendimentoFinal);
pesquisarOrdemServicoHelper.setDataGeracaoInicial(dataGeracaoInicial);
pesquisarOrdemServicoHelper.setDataGeracaoFinal(dataGeracaoFinal);
pesquisarOrdemServicoHelper.setDataPrevisaoClienteInicial(dataClienteInicial);
pesquisarOrdemServicoHelper.setDataPrevisaoClienteFinal(dataClienteFinal);
pesquisarOrdemServicoHelper.setDataPrevisaoAgenciaInicial(dataAgenciaInicial);
pesquisarOrdemServicoHelper.setDataPrevisaoAgenciaFinal(dataAgenciaFinal);
pesquisarOrdemServicoHelper.setUnidadeLotacao(idUnidadeLotacao);
return pesquisarOrdemServicoHelper;
}
/**
* Pesquisa todas as equipes que est�o ligadas a unidade organizacional do usuario
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param sessao,id da Unidade Organizacional
* @return Collection de Equipe
*/
private void pesquisarEquipe(HttpSession sessao,Integer idUnidadeLotacao){
// Filtro para Equipe
Collection colecaoEquipes = (Collection)
sessao.getAttribute("colecaoEquipes");
if(colecaoEquipes == null){
FiltroEquipe filtroEquipe = new FiltroEquipe();
filtroEquipe.adicionarParametro(new ParametroSimples(
FiltroEquipe.ID_UNIDADE_ORGANIZACIONAL,idUnidadeLotacao));
filtroEquipe.adicionarParametro(new ParametroSimples(
FiltroEquipe.INDICADOR_USO,ConstantesSistema.SIM));
filtroEquipe.setCampoOrderBy(FiltroEquipe.NOME);
colecaoEquipes = Fachada.getInstancia().pesquisar(
filtroEquipe, Equipe.class.getName());
if (colecaoEquipes != null && !colecaoEquipes.isEmpty()) {
sessao.setAttribute("colecaoEquipes",colecaoEquipes);
} else {
throw new ActionServletException("atencao.naocadastrado",null, "Equipe");
}
}
}
/**
* Monta a colecao de OSFiltroHelper a partir da colecao de Ordem de Servico
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param colecao de ordem servico e data de roteiro
* @return Collection de OSFiltroHelper
*/
private Collection montaColecaoOSFiltroHelper(Collection<OrdemServico> colecaoOrdemServico,Date dataRoteiro) {
Collection colecaoOSFiltroHelper = new ArrayList();
OSFiltroHelper helper = null;
for (Iterator iter = colecaoOrdemServico.iterator(); iter.hasNext();) {
OrdemServico ordemServico = (OrdemServico) iter.next();
int qtdDiasCliente = ConstantesSistema.NUMERO_NAO_INFORMADO;
int qtdDiasAgencia = ConstantesSistema.NUMERO_NAO_INFORMADO;
if(ordemServico.getRegistroAtendimento() != null) {
Date dataPrevistaAtual = ordemServico.getRegistroAtendimento().getDataPrevistaAtual();
if(dataPrevistaAtual != null){
qtdDiasCliente =
Util.obterQuantidadeDiasEntreDuasDatas(dataPrevistaAtual,new Date());
}
Date dataAgenciaReguladoraPrevisaoAtual =
Fachada.getInstancia().obterDataAgenciaReguladoraPrevisaoAtual(
ordemServico.getRegistroAtendimento().getId());
if(dataAgenciaReguladoraPrevisaoAtual != null){
qtdDiasAgencia =
Util.obterQuantidadeDiasEntreDuasDatas(dataAgenciaReguladoraPrevisaoAtual,new Date());
}
}
helper = new OSFiltroHelper();
helper.setOrdemServico(ordemServico);
helper.setDataPrevisaoAtual(Util.formatarData(dataRoteiro));
if(ordemServico.getSituacao() == OrdemServico.SITUACAO_EXECUCAO_EM_ANDAMENTO.shortValue()){
helper.setSituacao(""+ordemServico.getSituacao());
}
if(qtdDiasCliente > 0){
helper.setDiasAtrasoCliente(qtdDiasCliente);
}
if(qtdDiasAgencia > 0){
helper.setDiasAtrasoAgencia(qtdDiasAgencia);
}
String endereco = Fachada.getInstancia().obterEnderecoAbreviadoOS(ordemServico.getId());
helper.setEndereco(endereco);
colecaoOSFiltroHelper.add(helper);
}
return colecaoOSFiltroHelper;
}
/**
* Monta um HashMap(nomeEquipe,Colecao de OSProgramacaoHelper) a partir
* da colecao de Ordem de Servico Programcao associado a data de roteiro
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param sessao,data do roteiro,ElaborarOrdemServicoRoteiroCriteriosActionForm
*/
private void montaOrdemServicoProgramacao(HttpSession sessao,Date dataRoteiro,Integer idUnidadeLotacao){
Collection<OrdemServicoProgramacao> colecaoOrdemServicoProgramacao =
Fachada.getInstancia().recuperaOSProgramacaoPorDataRoteiroUnidade(dataRoteiro,idUnidadeLotacao);
HashMap mapOsProgramacaoHelper = new HashMap();
HashMap mapEquipe = new HashMap();
if(colecaoOrdemServicoProgramacao != null && !colecaoOrdemServicoProgramacao.isEmpty()){
Iterator itera = colecaoOrdemServicoProgramacao.iterator();
while (itera.hasNext()) {
OrdemServicoProgramacao ordemServicoProgramacao = (OrdemServicoProgramacao) itera.next();
OrdemServico ordemServico = ordemServicoProgramacao.getOrdemServico();
Equipe equipe = ordemServicoProgramacao.getEquipe();
String chave = equipe.getNome();
OSProgramacaoHelper helper = new OSProgramacaoHelper();
int qtdDiasCliente = ConstantesSistema.NUMERO_NAO_INFORMADO;
int qtdDiasAgencia = ConstantesSistema.NUMERO_NAO_INFORMADO;
if(ordemServico.getRegistroAtendimento() != null) {
Date dataPrevistaAtual = ordemServico.getRegistroAtendimento().getDataPrevistaAtual();
if(dataPrevistaAtual != null){
qtdDiasCliente =
Util.obterQuantidadeDiasEntreDuasDatas(dataPrevistaAtual,new Date());
}
Date dataAgenciaReguladoraPrevisaoAtual =
Fachada.getInstancia().obterDataAgenciaReguladoraPrevisaoAtual(
ordemServico.getRegistroAtendimento().getId());
if(dataAgenciaReguladoraPrevisaoAtual != null){
qtdDiasAgencia =
Util.obterQuantidadeDiasEntreDuasDatas(dataAgenciaReguladoraPrevisaoAtual,new Date());
}
}
helper.setPodeRemover(false);
if(ordemServico.getSituacao() == OrdemServico.SITUACAO_EXECUCAO_EM_ANDAMENTO.shortValue()){
helper.setSituacao(""+ordemServico.getSituacao());
}
if(qtdDiasCliente > 0){
helper.setDiasAtrasoCliente(qtdDiasCliente);
}
if(qtdDiasAgencia > 0){
helper.setDiasAtrasoAgencia(qtdDiasAgencia);
}
String endereco = Fachada.getInstancia().obterEnderecoAbreviadoOS(ordemServico.getId());
helper.setEndereco(endereco);
helper.setOrdemServicoProgramacao(ordemServicoProgramacao);
if(!mapOsProgramacaoHelper.containsKey(chave)){
Collection colecaoHelper = new ArrayList();
colecaoHelper.add(helper);
mapOsProgramacaoHelper.put(chave,colecaoHelper);
}else{
Collection colecaoHelper = (ArrayList) mapOsProgramacaoHelper.get(chave);
colecaoHelper.add(helper);
mapOsProgramacaoHelper.put(chave,colecaoHelper);
}
mapEquipe.put(chave,equipe);
}
}
sessao.setAttribute("mapOsProgramacaoHelper",mapOsProgramacaoHelper);
sessao.setAttribute("mapEquipe",mapEquipe);
}
/**
* [SB00010] - Prepara Barra da Carga de Trabalho
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param sessao,data do roteiro
*/
private void preparaBarraCargaTrabalho(HttpSession sessao,Date dataRoteiro){
HashMap mapEquipeIdsOsProgramadas = new HashMap();
HashMap mapOsProgramacaoHelper = (HashMap) sessao.getAttribute("mapOsProgramacaoHelper");
Collection colecaoHelper = mapOsProgramacaoHelper.values();
Iterator itera = colecaoHelper.iterator();
while (itera.hasNext()) {
Collection colecaoOSProgramacaoHelper = (Collection) itera.next();
Iterator iteraOsProgramacao = colecaoOSProgramacaoHelper.iterator();
while (iteraOsProgramacao.hasNext()) {
OSProgramacaoHelper osProgramacaoHelper = (OSProgramacaoHelper) iteraOsProgramacao.next();
OrdemServicoProgramacao osProgramacao = osProgramacaoHelper.getOrdemServicoProgramacao();
String chaveNome = osProgramacao.getEquipe().getNome();
if(!mapEquipeIdsOsProgramadas.containsKey(chaveNome)){
Set colecaoIds = new HashSet();
colecaoIds.add(osProgramacao.getOrdemServico().getId());
mapEquipeIdsOsProgramadas.put(chaveNome,colecaoIds);
}else{
Set colecaoIds = (HashSet) mapEquipeIdsOsProgramadas.get(chaveNome);
colecaoIds.add(osProgramacao.getOrdemServico().getId());
mapEquipeIdsOsProgramadas.put(chaveNome,colecaoIds);
}
}
}
itera = mapEquipeIdsOsProgramadas.keySet().iterator();
HashMap mapEquipe =
(HashMap) sessao.getAttribute("mapEquipe");
while (itera.hasNext()) {
String key = (String) itera.next();
Collection colecaoIdsOSProgramadas = (HashSet) mapEquipeIdsOsProgramadas.get(key);
Equipe equipe = (Equipe) mapEquipe.get(key);
ObterCargaTrabalhoEquipeHelper obterCargaTrabalhoEquipeHelper =
Fachada.getInstancia().obterCargaTrabalhoEquipe(
equipe.getId(),colecaoIdsOSProgramadas,null,dataRoteiro);
BigDecimal percentualPrevista = obterCargaTrabalhoEquipeHelper.getPercentualCargaTrabalhoPrevista();
BigDecimal percentualRealizada = obterCargaTrabalhoEquipeHelper.getPercentualCargaRealizada();
String chaveSessao = key.replace(" ","");
String keyPercentualPrevista = "percentualTrabalhoPrevista"+chaveSessao;
sessao.setAttribute(keyPercentualPrevista,percentualPrevista);
String keyPercentualRealizada = "percentualTrabalhoRealizada"+chaveSessao;
sessao.setAttribute(keyPercentualRealizada,percentualRealizada);
}
}
}