forked from Coded/SIPRP
				
			
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							360 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							360 lines
						
					
					
						
							12 KiB
						
					
					
				/*
 | 
						|
 * MedicinaDataProvider.java
 | 
						|
 *
 | 
						|
 * Created on January 29, 2006, 12:27 AM
 | 
						|
 *
 | 
						|
 * To change this template, choose Tools | Template Manager
 | 
						|
 * and open the template in the editor.
 | 
						|
 */
 | 
						|
 | 
						|
package siprp.medicina;
 | 
						|
 | 
						|
import java.util.*;
 | 
						|
 | 
						|
import com.evolute.utils.*;
 | 
						|
import com.evolute.utils.arrays.*;
 | 
						|
import com.evolute.utils.data.*;
 | 
						|
import com.evolute.utils.db.*;
 | 
						|
import com.evolute.utils.metadb.*;
 | 
						|
import com.evolute.utils.sql.*;
 | 
						|
import com.evolute.utils.strings.*;
 | 
						|
import com.evolute.utils.tables.*;
 | 
						|
 | 
						|
import siprp.*;
 | 
						|
import siprp.data.*;
 | 
						|
/**
 | 
						|
 *
 | 
						|
 * @author fpalma
 | 
						|
 */
 | 
						|
public class MedicinaDataProvider extends MetaProvider
 | 
						|
		implements MedicinaConstants
 | 
						|
{
 | 
						|
	public static final int  ESTADO_POR_REALIZAR = 0;
 | 
						|
	public static final int  ESTADO_PARCIALMENTE_REALIZADO = 1;
 | 
						|
	public static final int  ESTADO_REALIZADO = 2;
 | 
						|
	public static final int  ESTADO_DESMARCADO_TRABALHADOR = 3;
 | 
						|
	public static final int  ESTADO_DESMARCADO_EMPRESA = 4;
 | 
						|
	public static final int  ESTADO_FALTOU = 5;
 | 
						|
 | 
						|
	public static final String TIPOS_CONSULTAS[] = 
 | 
						|
		new String[]{ "", "Admiss\u00e3o", "Peri\u00f3dico", "Ocasional", "", "Peri\u00f3dico inicial" };
 | 
						|
	
 | 
						|
	public static final String  ESTADOS_EXAME_STR[] = 
 | 
						|
			new String[]{ "Por realizar", "Parcialmente realizado", "Realizado",
 | 
						|
							"Desmarcado trabalhador", 
 | 
						|
							"Desmarcado " + Singleton.getInstance( SingletonConstants.COMPANY_ACRONYM ),
 | 
						|
							"Faltou" };
 | 
						|
	
 | 
						|
	public static final String  ESTADOS_CONSULTA_STR[] = 
 | 
						|
			new String[]{ "Por realizar", "Parcialmente realizada", "Realizada",
 | 
						|
							"Desmarcada trabalhador", 
 | 
						|
							"Desmarcada " + Singleton.getInstance( SingletonConstants.COMPANY_ACRONYM ),
 | 
						|
							"Faltou" };
 | 
						|
	
 | 
						|
	private static final Object LOCK = new Object();
 | 
						|
	private static MedicinaDataProvider instance = null;
 | 
						|
	private final Executer executer;
 | 
						|
	
 | 
						|
	/** Creates a new instance of MedicinaDataProvider */
 | 
						|
	public MedicinaDataProvider()
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER /*SingletonConstants.DBMANAGER*/ );
 | 
						|
		executer = dbm.getSharedExecuter( this );
 | 
						|
	}
 | 
						|
	
 | 
						|
	public static MetaProvider getProvider()
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		synchronized( LOCK )
 | 
						|
		{
 | 
						|
			if( instance == null )
 | 
						|
			{
 | 
						|
				instance = new MedicinaDataProvider();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return instance;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public String []getEmpresaEstabelecimento( Integer empresaID, Integer estabelecimentoID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		String nomes[] = new String[ 2 ];
 | 
						|
		Select select = new Select( new String[]{ "empresas" }, 
 | 
						|
									new String[]{ "designacao_social" },
 | 
						|
									new Field( "id" ).isEqual( empresaID ) );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		nomes[ 0 ] = ( String ) array.get( 0, 0 );
 | 
						|
		
 | 
						|
		select = new Select( new String[]{ "estabelecimentos" }, 
 | 
						|
									new String[]{ "nome" },
 | 
						|
									new Field( "id" ).isEqual( estabelecimentoID ) );
 | 
						|
		array = executer.executeQuery( select );
 | 
						|
		nomes[ 1 ] = ( String ) array.get( 0, 0 );
 | 
						|
		
 | 
						|
		return nomes;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public IDObject[] getDetalhesValidosTrabalhador( Integer empresaID, Integer trabalhadorID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select = 
 | 
						|
				new Select( new String[]{ "trabalhadores" },
 | 
						|
							new String[]{ "perfil" },
 | 
						|
							new Field( "id" ).isEqual( trabalhadorID ) );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		Integer perfil = ( Integer ) array.get( 0, 0 );
 | 
						|
		if( perfil == null )
 | 
						|
		{
 | 
						|
			return new IDObject[ 0 ];
 | 
						|
		}
 | 
						|
		select = 
 | 
						|
			new Select( new String[]{ "prt_elementos_protocolo", "prt_tipos_elementos_protocolo",
 | 
						|
										"prt_grupos_protocolo" },
 | 
						|
						new String[]{ "prt_grupos_protocolo.id" , "prt_grupos_protocolo.descricao", 
 | 
						|
										"prt_grupos_protocolo.ordem"},
 | 
						|
						new Field( "prt_elementos_protocolo.empresa_id" ).isEqual( empresaID ).and(
 | 
						|
						new Field( "prt_elementos_protocolo.tipo_elemento_protocolo_id" ).isEqual( 
 | 
						|
							new Field( "prt_tipos_elementos_protocolo.id" ) ) ).and(
 | 
						|
						new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ).isEqual( 
 | 
						|
							new Field( "prt_grupos_protocolo.id" ) ) ).and(
 | 
						|
						new Field( "prt_elementos_protocolo.numero_perfil" ).isEqual( perfil ) ),
 | 
						|
						new String[]{ "prt_grupos_protocolo.ordem" },
 | 
						|
						null );
 | 
						|
		array = executer.executeQuery( select );
 | 
						|
		Vector detalhes = new Vector();
 | 
						|
		Integer oldID = null;
 | 
						|
		for( int n = 0; n < array.columnLength(); n++ )
 | 
						|
		{
 | 
						|
			Integer id = ( Integer ) array.get( n, 0 );
 | 
						|
			if( id.equals( oldID ) )
 | 
						|
			{
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
			oldID = id;
 | 
						|
			String descricao = ( String ) array.get( n, 1 );
 | 
						|
			detalhes.add( new MappableObject( id, descricao ) );
 | 
						|
		}
 | 
						|
		return ( IDObject[] ) detalhes.toArray( new IDObject[ detalhes.size() ] );
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void setDetalhesRealziadosForMarcacao( Integer marcacaoID, Integer detalhes[] )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Delete delete = 
 | 
						|
				new Delete( "marcacoes_grupos_realizados",
 | 
						|
							new Field( "marcacao_trabalhador_id" ).isEqual( marcacaoID ) );
 | 
						|
		executer.executeQuery( delete );
 | 
						|
		Insert insert =
 | 
						|
				new Insert( "marcacoes_grupos_realizados",
 | 
						|
							new Assignment[]{ 
 | 
						|
								new Assignment( new Field( "marcacao_trabalhador_id" ), marcacaoID ),
 | 
						|
								new Assignment( new Field( "grupo_protocolo_id" ), detalhes ) } );
 | 
						|
		executer.executeQuery( insert, null );
 | 
						|
	}
 | 
						|
	
 | 
						|
	public Integer[] getDetalhesRealizadosForMarcacao( Integer marcacaoID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select = 
 | 
						|
				new Select( new String[]{ "marcacoes_grupos_realizados" },
 | 
						|
							new String[]{ "grupo_protocolo_id" },
 | 
						|
							new Field( "marcacao_trabalhador_id" ).isEqual( marcacaoID ) );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		Integer ids[] = new Integer[ array.columnLength() ];
 | 
						|
		for( int n = 0; n < ids.length; n++ )
 | 
						|
		{
 | 
						|
			ids[ n ] = ( Integer ) array.get( n, 0 );
 | 
						|
		}
 | 
						|
		return ids;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void deleteDetalhesRealziadosForMarcacao( Integer marcacaoID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Delete delete = 
 | 
						|
				new Delete( "marcacoes_grupos_realizados",
 | 
						|
							new Field( "marcacao_trabalhador_id" ).isEqual( marcacaoID ) );
 | 
						|
		executer.executeQuery( delete );
 | 
						|
	}
 | 
						|
	
 | 
						|
	public Object[][] getExamesTrabalhador( Integer trabalhadorID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select = 
 | 
						|
				new Select( new String[]{ "marcacoes_trabalhador" },
 | 
						|
							new String[]{ "id", "data", "estado" },
 | 
						|
							new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
 | 
						|
							new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES ) ) ),
 | 
						|
							new String[]{ "data desc" },
 | 
						|
							null );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		Object data[][] = array.getObjects();
 | 
						|
		for( int n = 0; n < data.length; n++ )
 | 
						|
		{
 | 
						|
			int estado = ( ( Integer ) data[ n ][ 2 ] ).intValue();
 | 
						|
			data[ n ][ 2 ] = ESTADOS_EXAME_STR[ estado ];
 | 
						|
		}
 | 
						|
		return data;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public Object[][] getConsultasTrabalhador( Integer trabalhadorID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select = 
 | 
						|
				new Select( new String[]{ "marcacoes_trabalhador" },
 | 
						|
							new String[]{ "id", "data", "estado" },
 | 
						|
							new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
 | 
						|
							new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) ) ),
 | 
						|
							new String[]{ "data desc" },
 | 
						|
							null );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		Object data[][] = array.getObjects();
 | 
						|
		for( int n = 0; n < data.length; n++ )
 | 
						|
		{
 | 
						|
			int estado = ( ( Integer ) data[ n ][ 2 ] ).intValue();
 | 
						|
			data[ n ][ 2 ] = ESTADOS_CONSULTA_STR[ estado ];
 | 
						|
		}
 | 
						|
 | 
						|
		return data;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public ColumnizedMappable[] getAllEmpresas()
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select =
 | 
						|
				new Select( new String[]{ "empresas" },
 | 
						|
							new String[]{ "id", "designacao_social", "designacao_social_plain" },
 | 
						|
							new Field( "inactivo" ).isDifferent( "y" ),
 | 
						|
							new String[]{ "designacao_social_plain" },
 | 
						|
							null );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		ColumnizedMappable empresas[] = new ColumnizedMappable[ array.columnLength() ];
 | 
						|
		for( int n = 0; n < empresas.length; n++ )
 | 
						|
		{
 | 
						|
			Integer id = ( Integer ) array.get( n, 0 );
 | 
						|
			String designacao = ( String ) array.get( n, 1 );
 | 
						|
			empresas[ n ] = new ColumnizedMappable( id, designacao );
 | 
						|
		}
 | 
						|
		return empresas;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public ColumnizedMappable[] getAllEstabelecimentosForEmpresa( Integer empresaID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select =
 | 
						|
				new Select( new String[]{ "estabelecimentos" },
 | 
						|
							new String[]{ "id", "nome", "nome_plain" },
 | 
						|
							new Field( "empresa_id" ).isEqual( empresaID ).and( 
 | 
						|
							new Field( "inactivo" ).isDifferent( "y" ) ),
 | 
						|
							new String[]{ "nome_plain" },
 | 
						|
							null );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		ColumnizedMappable estabelecimentos[] = new ColumnizedMappable[ array.columnLength() ];
 | 
						|
		for( int n = 0; n < estabelecimentos.length; n++ )
 | 
						|
		{
 | 
						|
			Integer id = ( Integer ) array.get( n, 0 );
 | 
						|
			String nome = ( String ) array.get( n, 1 );
 | 
						|
			estabelecimentos[ n ] = new ColumnizedMappable( id, nome );
 | 
						|
		}
 | 
						|
		return estabelecimentos;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public ColumnizedMappable[] getAllTrabalhadoresForEstabelecimento( Integer estabelecimentoID )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select =
 | 
						|
				new Select( new String[]{ "trabalhadores" },
 | 
						|
							new String[]{ "id", "nome", "nome_plain" },
 | 
						|
							new Field( "estabelecimento_id" ).isEqual( estabelecimentoID ).and( 
 | 
						|
							new Field( "inactivo" ).isDifferent( "y" ) ),
 | 
						|
							new String[]{ "nome_plain" },
 | 
						|
							null );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		ColumnizedMappable trabalhadores[] = new ColumnizedMappable[ array.columnLength() ];
 | 
						|
		for( int n = 0; n < trabalhadores.length; n++ )
 | 
						|
		{
 | 
						|
			Integer id = ( Integer ) array.get( n, 0 );
 | 
						|
			String nome = ( String ) array.get( n, 1 );
 | 
						|
			trabalhadores[ n ] = new ColumnizedMappable( id, nome );
 | 
						|
		}
 | 
						|
		return trabalhadores;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Devolve o identificador da consulta de um trabalhador para um dado motivo e dia.
 | 
						|
	 *
 | 
						|
	 * @param trabalhadorID o identificador do trabalhador
 | 
						|
	 * @param motivo o identificador do motivo da marcacao
 | 
						|
	 * @param data a data da marcacao
 | 
						|
	 * @return o identificador da consulta ou <code>null</code> se não houver nenhuma
 | 
						|
	 * @throws Exception se houver um erro na ligaço à Base de Dados
 | 
						|
	 */
 | 
						|
	public Integer getConsultaIDByTrabalhadorMotivoAndDate( Integer trabalhadorID, Integer motivo, Date data )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Integer motivos[];
 | 
						|
		if( motivo != null && ( motivo.intValue() == MOTIVO_PERIODICO || motivo.intValue() == MOTIVO_PERIODICO_INICIAL ) )
 | 
						|
		{
 | 
						|
			motivos = new Integer[]{ MOTIVO_PERIODICO_INTEGER, MOTIVO_PERIODICO_INICIAL_INTEGER };
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			motivos = new Integer[]{ motivo };
 | 
						|
		}
 | 
						|
		Select select = 
 | 
						|
				new Select( new String[]{ "marcacoes_trabalhador" },
 | 
						|
							new String[]{ "id" },
 | 
						|
							new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
 | 
						|
							new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) ) ).and(
 | 
						|
							new Field( "data" ).isEqual( data ) ).and(
 | 
						|
							new Field( "motivo" ).in( motivos ) ) );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		Integer id;
 | 
						|
		if( array.columnLength() == 0 || array.get( 0, 0 ) == null )
 | 
						|
		{
 | 
						|
			id = null;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			id = ( Integer ) array.get( 0, 0 );
 | 
						|
		}
 | 
						|
		return id;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Devolve o identificador da primeira consulta de um trabalhador n&ão realizada depois de um diapara um dado motivo.
 | 
						|
	 *
 | 
						|
	 * @param trabalhadorID o identificador do trabalhador
 | 
						|
	 * @param motivo o identificador do motivo da marcacao
 | 
						|
	 * @param data a data de início de procura
 | 
						|
	 * @return o identificador da consulta ou <code>null</code> se não houver nenhuma
 | 
						|
	 * @throws Exception se houver um erro na ligaço à Base de Dados
 | 
						|
	 */
 | 
						|
	public Integer getProximaConsultaIDByTrabalhadorMotivoAndDate( Integer trabalhadorID, Integer motivo, Date data )
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		Select select = 
 | 
						|
				new Select( new String[]{ "marcacoes_trabalhador" },
 | 
						|
							new String[]{ "id", "data" },
 | 
						|
							new Field( "trabalhador_id" ).isEqual( trabalhadorID ).and(
 | 
						|
							new Field( "tipo" ).isEqual( new Integer( Marcacao.TIPO_MARCACAO_TRABALHADOR_CONSULTA ) ) ).and(
 | 
						|
							new Field( "data" ).isGreater( data ) ).and(
 | 
						|
							new Field( "motivo" ).isEqual( motivo ) ).and(
 | 
						|
							new Field( "estado" ).isEqual( new Integer( 0 ) ) ),
 | 
						|
							new String[]{ "data" },
 | 
						|
							null );
 | 
						|
		Virtual2DArray array = executer.executeQuery( select );
 | 
						|
		Integer id;
 | 
						|
		if( array.columnLength() == 0 || array.get( 0, 0 ) == null )
 | 
						|
		{
 | 
						|
			id = null;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			id = ( Integer ) array.get( 0, 0 );
 | 
						|
		}
 | 
						|
		return id;
 | 
						|
	}
 | 
						|
}
 |