diff --git a/trunk/SIPRPSoft/src/siprp/pesquisas/PesquisasProvider.java b/trunk/SIPRPSoft/src/siprp/pesquisas/PesquisasProvider.java index 632d8b18..fcc3e2bd 100644 --- a/trunk/SIPRPSoft/src/siprp/pesquisas/PesquisasProvider.java +++ b/trunk/SIPRPSoft/src/siprp/pesquisas/PesquisasProvider.java @@ -6,18 +6,28 @@ package siprp.pesquisas; -import java.util.*; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Vector; -import com.evolute.utils.*; -import com.evolute.utils.arrays.*; -import com.evolute.utils.data.*; -import com.evolute.utils.db.*; -import com.evolute.utils.db.keyretrievers.*; -import com.evolute.utils.metadb.*; -import com.evolute.utils.sql.*; -import com.evolute.utils.sql.expression.*; +import siprp.data.EmpresaData; +import siprp.data.Marcacao; +import siprp.data.MarcacaoTrabalhadorData; +import siprp.data.TrabalhadorData; -import siprp.data.*; +import com.evolute.utils.Singleton; +import com.evolute.utils.arrays.Virtual2DArray; +import com.evolute.utils.data.IDObject; +import com.evolute.utils.data.MappableObject; +import com.evolute.utils.db.DBManager; +import com.evolute.utils.db.Executer; +import com.evolute.utils.metadb.MetaProvider; +import com.evolute.utils.sql.Expression; +import com.evolute.utils.sql.Field; +import com.evolute.utils.sql.Select; +import com.evolute.utils.sql.Select2; +import com.evolute.utils.sql.expression.Par; /** * * @author fpalma @@ -639,10 +649,86 @@ System.out.println( "SELECT: " + select ); return contagens; } + public HashMap countExamesComplementaresEmpresaNovosProtocolos( Integer empresaId, int ano ) + throws Exception + { + HashMap> perfis = new HashMap>(); + HashMap contagens = null; + + Select select = + new Select2( new String[]{ "prt_elementos_protocolo", "prt_tipos_elementos_protocolo", "prt_grupos_protocolo" }, + new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, + new Expression[]{ + new Field( "prt_elementos_protocolo.tipo_elemento_protocolo_id" ).isEqual( new Field( "prt_tipos_elementos_protocolo.id" ) ), + new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ).isEqual( new Field( "prt_grupos_protocolo.id" ) ), + }, + new String[]{ "DISTINCT prt_elementos_protocolo.numero_perfil", "prt_grupos_protocolo.descricao" }, + new Field( "prt_elementos_protocolo.empresa_id" ).isEqual( empresaId ), + null, + null, + null, + null ); + Virtual2DArray array = executer.executeQuery( select ); + for( int n = 0; n < array.columnLength(); n++ ) + { + Integer perfil = ( Integer ) array.get( n, 0 ); + String tipo = ( String ) array.get( n, 1 ); + if( !perfis.containsKey( perfil ) ) + { + perfis.put( perfil, new Vector() ); + } + perfis.get( perfil ).add( tipo ); + } + + if( perfis.size() > 0 ) + { + contagens = new HashMap(); + select = new Select2( + new String[]{"trabalhadores", "marcacoes_trabalhador", "empresas"}, + new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, + new Expression[]{ + new Field( "marcacoes_trabalhador.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ), + new Field( "trabalhadores.estabelecimentos_id" ).isEqual( new Field( "estabelecimentos.id" ) ), + }, + new String[]{"COUNT(marcacoes_trabalhador.id)", TrabalhadorData.PERFIL }, + new Field( "estabelecimentos.id.empresa_id" ).isEqual( empresaId ).and( + new Field( MarcacaoTrabalhadorData.TIPO ).isEqual( new Integer( MarcacaoTrabalhadorData.TIPO_EXAMES ) ) ).and( + new Field( "YEAR( marcacoes_trabalhador.data ) " ).isEqual( new Integer( ano ) ).and( + new Field( Marcacao.REALIZADA ).isEqual( "y" ) ) ), + null, + new String[]{ TrabalhadorData.PERFIL }, + null, + null ); + array = executer.executeQuery( select ); + for( int n = 0; n < array.columnLength(); n++ ) + { + Integer perfil = (Integer)array.get( n, 1 ); + Integer count = ( ( Number ) array.get( n, 0 ) ).intValue(); + if( perfil == null ) + { + continue; + } + Vector tipos = perfis.get( perfil ); + for( String tipo : tipos ) + { + if( !contagens.containsKey( tipo ) ) + { + contagens.put( tipo, count ); + } + else + { + contagens.put( tipo, contagens.get( tipo ) + count ); + } + } + } + } + return contagens; + } + public int []countExamesComplementaresEstabelecimento( Integer estabelecimentoID, int ano ) throws Exception { - int contagens[]; + int contagens[] = null; Select select; select = new Select( new String[]{"estabelecimentos", "empresas"}, new String[]{ "empresas.perfil_1", "empresas.perfil_2" }, @@ -748,4 +834,89 @@ System.out.println( "SELECT: " + select ); } return contagens; } + + + public HashMap countExamesComplementaresEstabelecimentoNovosProtocolos( Integer estabelecimentoID, int ano ) + throws Exception + { + HashMap> perfis = new HashMap>(); + HashMap contagens = null; + Select select = + new Select2( new String[]{ "estabelecimentos" }, + new Integer[]{}, + new Expression[]{}, + new String[]{ "empresa_id" }, + new Field( "id" ).isEqual( estabelecimentoID ), + null, + null, + null, + null ); + Virtual2DArray array = executer.executeQuery( select ); + Integer empresaId = ( Integer ) array.get( 0, 0 ); + select = + new Select2( new String[]{ "prt_elementos_protocolo", "prt_tipos_elementos_protocolo", "prt_grupos_protocolo" }, + new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, + new Expression[]{ + new Field( "prt_elementos_protocolo.tipo_elemento_protocolo_id" ).isEqual( new Field( "prt_tipos_elementos_protocolo.id" ) ), + new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ).isEqual( new Field( "prt_grupos_protocolo.id" ) ), + }, + new String[]{ "DISTINCT prt_elementos_protocolo.numero_perfil", "prt_grupos_protocolo.descricao" }, + new Field( "prt_elementos_protocolo.empresa_id" ).isEqual( empresaId ), + null, + null, + null, + null ); + array = executer.executeQuery( select ); + for( int n = 0; n < array.columnLength(); n++ ) + { + Integer perfil = ( Integer ) array.get( n, 0 ); + String tipo = ( String ) array.get( n, 1 ); + if( !perfis.containsKey( perfil ) ) + { + perfis.put( perfil, new Vector() ); + } + perfis.get( perfil ).add( tipo ); + } + + if( perfis.size() > 0 ) + { + contagens = new HashMap(); + select = new Select2( + new String[]{"trabalhadores", "marcacoes_trabalhador"}, + new Integer[]{ Select2.JOIN_INNER }, + new Expression[]{ new Field( "marcacoes_trabalhador.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, + new String[]{"COUNT(marcacoes_trabalhador.id)", TrabalhadorData.PERFIL }, + new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoID ).and( + new Field( MarcacaoTrabalhadorData.TIPO ).isEqual( new Integer( MarcacaoTrabalhadorData.TIPO_EXAMES ) ) ).and( + new Field( "YEAR( marcacoes_trabalhador.data ) " ).isEqual( new Integer( ano ) ).and( + new Field( Marcacao.REALIZADA ).isEqual( "y" ) ) ), + null, + new String[]{ TrabalhadorData.PERFIL }, + null, + null ); + array = executer.executeQuery( select ); + for( int n = 0; n < array.columnLength(); n++ ) + { + Integer perfil = (Integer)array.get( n, 1 ); + Integer count = ( ( Number ) array.get( n, 0 ) ).intValue(); + if( perfil == null ) + { + continue; + } + Vector tipos = perfis.get( perfil ); + for( String tipo : tipos ) + { + if( !contagens.containsKey( tipo ) ) + { + contagens.put( tipo, count ); + } + else + { + contagens.put( tipo, contagens.get( tipo ) + count ); + } + } + } + } + return contagens; + } }