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 getEstados() { HashMap result = new HashMap(); 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 getGruposExamesForPerfil() { OrderedMap grupos = new OrderedMap(); List estadosSoFar = new ArrayList(); Trabalhadores trabalhador = this.getToTrabalhadores(); Integer perfil = trabalhador.getPerfil(); if( perfil != null ) { Empresas empresa = trabalhador.getToEstabelecimentos().getToEmpresas(); List ecdsPerfil = (List) 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 marcacoes = getTrabalhadoresEcdsDatasArray(); if( marcacoes != null ) { for( TrabalhadoresEcdsDatas marcacao : marcacoes ) { List 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; } }