You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
4.6 KiB

package siprp.database.cayenne.objects;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import leaf.OrderedMap;
import siprp.database.cayenne.objects.auto._TrabalhadoresEcds;
import siprp.medicina.MedicinaConstants;
public class TrabalhadoresEcds extends _TrabalhadoresEcds implements MedicinaConstants
{
private static final long serialVersionUID = 1L;
public String getDataString()
{
return getData() == null ? "(sem data definida)" : sdf.format( getData() );
}
public String getEstadoString()
{
return isNew() ? isNewMessage : (getEstado() == null || getEstado() >= ESTADOS_EXAME_STR.length ? "" : ESTADOS_EXAME_STR[getEstado()]);
}
public HashMap<Integer, String> getEstados()
{
HashMap<Integer, String> result = new HashMap<Integer, String>();
for( int i = 0; i < ESTADOS_EXAME_STR.length; ++i )
{
if( ESTADOS_EXAME_STR[i] != null )
{
result.put( new Integer( i ), ESTADOS_EXAME_STR[i] );
}
}
return result;
}
@Override
public String toString()
{
return getDataString() + ": " + getEstadoString();
}
public OrderedMap<PrtGruposProtocolo> getGruposExamesForPerfil()
{
OrderedMap<PrtGruposProtocolo> grupos = new OrderedMap<PrtGruposProtocolo>();
List<Integer> estadosSoFar = new ArrayList<Integer>();
Trabalhadores trabalhador = this.getToTrabalhadores();
Integer perfil = trabalhador.getPerfil();
if( perfil != null )
{
Empresas empresa = trabalhador.getToEstabelecimentos().getToEmpresas();
List<PrtElementosProtocolo> ecdsPerfil = (List<PrtElementosProtocolo>) empresa.getPrtElementosProtocoloArray();
for( PrtElementosProtocolo ecdPerfil : ecdsPerfil )
{
if( perfil.equals( ecdPerfil.getNumeroPerfil() ) )
{
PrtTiposElementosProtocolo ecd = ecdPerfil.getToPrtTiposElementosProtocolo();
if( ecd != null )
{
PrtGruposProtocolo grupoEcd = ecd.getToPrtGruposProtocolo();
if( grupoEcd != null )
{
String descricao = grupoEcd.getDescricao();
if( descricao != null && !grupos.containsKey( grupoEcd ) )
{
grupos.putLast( grupoEcd, descricao );
Integer estado = getEstadoForGrupoEcd( grupoEcd );
grupos.putLast( grupoEcd, estado != null ? MedicinaConstants.ESTADOS_EXAME_STR[estado] : " " );
if( !estadosSoFar.contains( estado ) )
{
estadosSoFar.add( estado );
}
}
}
}
}
}
}
if( estadosSoFar.size() == 1 )
{
if( estadosSoFar.contains( new Integer( ESTADO_ANULADO ) ) || estadosSoFar.contains( new Integer( ESTADO_REALIZADO ) ) )
{
setEstado( ESTADO_REALIZADO );
}
else if( estadosSoFar.contains( new Integer( ESTADO_POR_REALIZAR ) ) )
{
setEstado( ESTADO_POR_REALIZAR );
}
else
{
setEstado( ESTADO_POR_MARCAR );
}
}
else if( estadosSoFar.size() == 2 )
{
if( estadosSoFar.contains( new Integer( ESTADO_ANULADO ) ) && estadosSoFar.contains( new Integer( ESTADO_REALIZADO ) ) )
{
setEstado( ESTADO_REALIZADO );
}
else if( estadosSoFar.contains( new Integer( ESTADO_POR_MARCAR ) ) )
{
setEstado( ESTADO_POR_MARCAR );
}
else if( estadosSoFar.contains( new Integer( ESTADO_ANULADO ) ) || estadosSoFar.contains( new Integer( ESTADO_REALIZADO ) ) )
{
setEstado( ESTADO_PARCIALMENTE_REALIZADO );
}
else
{
setEstado( ESTADO_POR_REALIZAR );
}
}
else
{
if( estadosSoFar.contains( new Integer( ESTADO_POR_MARCAR ) ) )
{
setEstado( ESTADO_POR_MARCAR );
}
else if( estadosSoFar.contains( new Integer( ESTADO_ANULADO ) ) && estadosSoFar.contains( new Integer( ESTADO_REALIZADO ) ) )
{
setEstado( ESTADO_PARCIALMENTE_REALIZADO );
}
else
{
setEstado( ESTADO_POR_REALIZAR );
}
}
grupos.order();
return grupos;
}
private Integer getEstadoForGrupoEcd( PrtGruposProtocolo grupoEcd )
{
Integer estado = null;
List<TrabalhadoresEcdsDatas> marcacoes = getTrabalhadoresEcdsDatasArray();
if( marcacoes != null )
{
for( TrabalhadoresEcdsDatas marcacao : marcacoes )
{
List<TrabalhadoresEcd> ecds = marcacao.getTrabalhadoresEcdArray();
for( TrabalhadoresEcd ecd : ecds )
{
if( ecd.getToPrtTiposElementosProtocolo().getToPrtGruposProtocolo().equals( grupoEcd ) )
{
if( new Integer( ESTADO_REALIZADO ).equals( ecd.getEstado() ) || new Integer( ESTADO_ANULADO ).equals( ecd.getEstado() ) )
{
return ecd.getEstado();
}
else if( new Integer( ESTADO_POR_REALIZAR ).equals( ecd.getEstado() ) )
{
estado = ecd.getEstado();
break;
}
}
}
}
}
return estado == null ? ESTADO_POR_MARCAR : estado;
}
}