package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.ArquivoTextoAcompanhamentoServico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoProgramacao;
import gcom.atendimentopublico.ordemservico.ProgramacaoRoteiro;
import gcom.atendimentopublico.ordemservico.bean.AcompanhamentoArquivosRoteiroHelper;
import gcom.atendimentopublico.ordemservico.bean.OSProgramacaoAcompanhamentoServicoHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.SituacaoTransmissaoLeitura;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
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;
/**
* [UC1199] � Acompanhamento Arquivos Roteiro Remanejar Ordem Servico Action
*
* @author Th�lio Ara�jo
*
* @date 22/08/2011
*/
public class AcompanhamentoArquivosRoteiroRemanejarOrdemServicoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("remanejarEquipeOSAction");
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
// Form
AcompanharRoteiroProgramacaoOrdemServicoActionForm
acompanharActionForm = (AcompanharRoteiroProgramacaoOrdemServicoActionForm) actionForm;
// Precisa pegar a unidade do usuario do login que esta na sessao
Integer idUnidadeLotacao = usuario.getUnidadeOrganizacional().getId();
Date dataRoteiro = Util.converteStringParaDate(acompanharActionForm.getDataProgramacao());
acompanharActionForm.setDataRoteiro(Util.formatarData(dataRoteiro));
acompanharActionForm.setUnidadeLotacao(""+idUnidadeLotacao);
this.remanejaOrdemServico(acompanharActionForm,usuario,sessao);
httpServletRequest.setAttribute("fecharPopup", "true");
return retorno;
}
private void remanejaOrdemServico(AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm,
Usuario usuario, HttpSession sessao){
Fachada fachada = Fachada.getInstancia();
Date dataRoteiro = Util.converteStringParaDate(acompanharActionForm.getDataRoteiro());
Integer equipeRemanejada = new Integer(acompanharActionForm.getIdEquipePrincipal());
Integer equipeAtual = new Integer(acompanharActionForm.getIdEquipeAtual());
Integer idOrdemServico = new Integer(acompanharActionForm.getIdOrdemServico());
Collection colecaoAcompanhamentoArquivosRoteiro =
(Collection) sessao.getAttribute("colecaoAcompanhamentoArquivosRoteiro");
//[FS0010] - Verificar sele��o do arquivo finalizado para equipe remanejada
ArquivoTextoAcompanhamentoServico arquivoTextoAcompanhamentoServico =
fachada.pesquisarArquivoTextoAcompanhamentoServicoEquipe(equipeRemanejada, dataRoteiro);
if (arquivoTextoAcompanhamentoServico != null && !arquivoTextoAcompanhamentoServico.equals(null)) {
if (arquivoTextoAcompanhamentoServico.getSituacaoTransmissaoLeitura().getId().equals(SituacaoTransmissaoLeitura.TRANSMITIDO)){
throw new ActionServletException("atencao.nao_possivel.incluir_situacao_finalizado");
}
}
ProgramacaoRoteiro programacaoRoteiro = fachada.pesquisarProgramacaoRoteiro(usuario.getUnidadeOrganizacional().getId(),dataRoteiro);
if (fachada.validarCargaTrabalhoEquipe(equipeRemanejada,programacaoRoteiro.getId(),idOrdemServico,usuario.getUnidadeOrganizacional().getId())){
throw new ActionServletException("atencao.limite_carga_trabalho_excedido");
}
// Usa o mesmo metodo de alocar equipe
fachada.alocaEquipeParaOs(idOrdemServico,dataRoteiro,equipeAtual, true, Util.converterStringParaInteger(acompanharActionForm.getIdAcompanhamentoArquivosRoteiro()));
// [SB0011] - Incluir Programa��o
OrdemServicoProgramacao ordemServicoProgramacao = new OrdemServicoProgramacao();
OrdemServico ordemServico = new OrdemServico();
ordemServico.setId(new Integer(acompanharActionForm.getIdOrdemServico()));
ordemServicoProgramacao.setProgramacaoRoteiro(programacaoRoteiro);
ordemServicoProgramacao.setOrdemServico(ordemServico);
Equipe equipe = new Equipe();
equipe.setId(new Integer(equipeRemanejada));
OrdemServicoProgramacao ordemServicoProgramacaoRemanejada = Fachada.getInstancia().pesquisarOSProgramacaoAtivaComDataRoteiroIdEquipe(
idOrdemServico, dataRoteiro, equipeAtual);
//[SB0004 - Reordena Sequencial de Programa��o - Inclus�o de Ordem de Servi�o]
short maiorSequencial = this.retornaUltimoSequencial(Integer.toString(equipe.getId()), colecaoAcompanhamentoArquivosRoteiro);
short sequencial = ordemServicoProgramacaoRemanejada.getNnSequencialProgramacao();
short sequencialRetorno = 0;
//[FS0004] - Verificar sequencial invalido
if (sequencial > maiorSequencial+1){
sequencial = (short)ConstantesSistema.NUMERO_NAO_INFORMADO;
}else if(maiorSequencial+1 != sequencial){
sequencialRetorno = fachada.reordenaSequencialOSProgramacao(dataRoteiro,sequencial,
equipe.getId());
}else{
sequencialRetorno = sequencial;
}
ordemServicoProgramacao.setEquipe(equipe);
ordemServicoProgramacao.setUsuarioProgramacao(usuario);
ordemServicoProgramacao.setUsuarioFechamento(null);
ordemServicoProgramacao.setOsProgramNaoEncerMotivo(null);
ordemServicoProgramacao.setNnSequencialProgramacao(sequencialRetorno);
ordemServicoProgramacao.setIndicadorAtivo(ConstantesSistema.SIM);
ordemServicoProgramacao.setIndicadorEquipePrincipal(ConstantesSistema.SIM);
ordemServicoProgramacao.setUltimaAlteracao(new Date());
ordemServicoProgramacao.setSituacaoFechamento(null);
fachada.incluirOrdemServicoProgramacao(ordemServicoProgramacao, usuario);
fachada.inserirOrdemProgramacoAcompanhamentoServico(new Integer(ordemServicoProgramacao.getEquipe().getId()), dataRoteiro);
}
private short retornaUltimoSequencial(String idEquipe, Collection colecaoAcompanhamentoArquivosRoteiro){
short valorSequencial = 0;
if (colecaoAcompanhamentoArquivosRoteiro != null && !colecaoAcompanhamentoArquivosRoteiro.isEmpty()){
Iterator itDadosAcompanhamentoArquivosRoteiroHelper = colecaoAcompanhamentoArquivosRoteiro.iterator();
while (itDadosAcompanhamentoArquivosRoteiroHelper.hasNext()){
AcompanhamentoArquivosRoteiroHelper acompanhamentoArquivosRoteiroHelper = (AcompanhamentoArquivosRoteiroHelper) itDadosAcompanhamentoArquivosRoteiroHelper.next();
if (acompanhamentoArquivosRoteiroHelper.getIdEquipe().equals(idEquipe)){
Collection osProgramacaoAcompServicoHelper = acompanhamentoArquivosRoteiroHelper.getOsProgramacaoAcompServicoHelper();
Iterator iter = osProgramacaoAcompServicoHelper.iterator();
while (iter.hasNext()) {
OSProgramacaoAcompanhamentoServicoHelper helper = (OSProgramacaoAcompanhamentoServicoHelper) iter.next();
if(valorSequencial < Short.parseShort(helper.getNnSequencialProgramacao())){
valorSequencial = Short.parseShort(helper.getNnSequencialProgramacao());
}
}
}
}
}
return valorSequencial;
}
}