package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoProgramacao;
import gcom.atendimentopublico.ordemservico.ProgramacaoRoteiro;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.bean.ObterDadosRegistroAtendimentoHelper;
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 java.util.Date;
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 Incluir Ordem Servico Action
*
* @author Th�lio Ara�jo
*
* @date 15/08/2011
*/
public class AcompanhamentoArquivosRoteiroIncluirOrdemServicoAction extends GcomAction {
Fachada fachada = Fachada.getInstancia();
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("incluirOrdemServicoAcompanhamentoArquivosRoteiro");
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);
// [SB0005] - Incluir Ordem de Servi�o na Programa��o
this.incluirOrdemServicoProgramacao(acompanharActionForm,usuario);
httpServletRequest.setAttribute("fecharPopup", "true");
return retorno;
}
private void incluirOrdemServicoProgramacao(AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm,
Usuario usuario){
Date dataRoteiro = Util.converteStringParaDate(acompanharActionForm.getDataRoteiro());
// Colocado por Raphael Rossiter em 12/03/2007
Integer idUnidadeLotacao = new Integer(acompanharActionForm.getUnidadeLotacao());
OrdemServico os =
Fachada.getInstancia().recuperaOSPorId(new Integer(acompanharActionForm.getIdOrdemServico()));
// Verifica Existencia da Ordem de Servico
if (os == null || os.equals("")){
throw new ActionServletException("atencao.ordem_servico.inexistente");
}
ProgramacaoRoteiro programacaoRoteiro = fachada.pesquisarProgramacaoRoteiro(usuario.getUnidadeOrganizacional().getId(),dataRoteiro);
// [FS0015] - Verificar registro de atendimento e ordem de servi�o
this.pesquisarRegistroAtendimento(acompanharActionForm, usuario.getUnidadeOrganizacional().getId());
String numeroRa = acompanharActionForm.getNumeroRA();
if(numeroRa != null && !numeroRa.equals("")){
if(os.getRegistroAtendimento() == null || (os.getRegistroAtendimento().getId().intValue() != new Integer(numeroRa).intValue())){
String[] parametros = new String[2];
parametros[0] = os.getId().toString();
parametros[1] = numeroRa;
throw new ActionServletException("atencao.registro_nao_pertence_ordem_servico",null,parametros);
}
}
if(os.getRegistroAtendimento() == null){
String[] parametros = new String[2];
parametros[0] = os.getId().toString();
parametros[1] = numeroRa;
throw new ActionServletException("atencao.registro_nao_pertence_ordem_servico",null,parametros);
}
//[FS0003] - Verificar possibilidade da inclus�o da ordem de servi�o
fachada.validarInclusaoOsNaProgramacao(os, idUnidadeLotacao);
//Validar carga do trabalho
if (fachada.validarCargaTrabalhoEquipe(Util.converterStringParaInteger(acompanharActionForm.getIdEquipe()),
programacaoRoteiro.getId(),Util.converterStringParaInteger(acompanharActionForm.getIdOrdemServico()),
usuario.getUnidadeOrganizacional().getId())){
throw new ActionServletException("atencao.limite_carga_trabalho_excedido");
}
//[SB0004 - Reordena Sequencial de Programa��o - Inclus�o de Ordem de Servi�o]
short maiorSequencial = new Short(acompanharActionForm.getSequencialProgramacao());
short sequencial = new Short(acompanharActionForm.getSequencialProgramacaoPrevisto());
short sequencialRetorno = 0;
//[FS0004] - Verificar sequencial invalido
if (sequencial > maiorSequencial){
throw new ActionServletException("atencao.sequencial_programacao_maior_limite",null,""+maiorSequencial);
}else if(maiorSequencial != sequencial){
sequencialRetorno = fachada.reordenaSequencialOSProgramacao(dataRoteiro,sequencial,
Util.converterStringParaInteger(acompanharActionForm.getIdEquipe()));
}else{
sequencialRetorno = sequencial;
}
// [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(acompanharActionForm.getIdEquipe()));
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(acompanharActionForm.getIdEquipe()), dataRoteiro);
}
private void pesquisarRegistroAtendimento(AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm, Integer unidId) {
ObterDadosRegistroAtendimentoHelper obter =
fachada.obterDadosRegistroAtendimento(new Integer(
acompanharActionForm.getNumeroRA()));
if (obter.getRegistroAtendimento() != null) {
RegistroAtendimento registroAtendimento = obter.getRegistroAtendimento();
if (!registroAtendimento.getUnidadeAtual().getId().equals(unidId)){
throw new ActionServletException("atencao.registro.atendimento.nao_associado",
Integer.toString(registroAtendimento.getId()), Integer.toString(unidId));
}
if (registroAtendimento.getCodigoSituacao() == 2){
throw new ActionServletException("atencao.situacao.ra.pendente");
}
} else {
throw new ActionServletException("atencao.registro.atendimento.inexistente");
}
}
}