/* * HigieneDataProvider.java * * Created on February 1, 2006, 10:49 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package siprp.higiene; import java.awt.*; 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 HigieneDataProvider extends MetaProvider { public static final int ESTADO_POR_REALIZAR = 0; 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 ESTADOS_STR[] = new String[]{ "Por realizar", "", "Realizada", "Desmarcada empresa", "Desmarcada " + Singleton.getInstance( SingletonConstants.COMPANY_ACRONYM ), "Faltou" }; public static final Color CORES_TECNICOS[] = new Color[]{ Color.white, Color.red.darker(), Color.blue, Color.green.darker(), Color.yellow.darker(), Color.gray, Color.pink.darker() }; private static final Object LOCK = new Object(); private static HigieneDataProvider instance = null; private final Executer executer; /** Creates a new instance of HigieneDataProvider */ public HigieneDataProvider() 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 HigieneDataProvider(); } } return instance; } public Object[][] getAllTecnicosHST() throws Exception { Select select = new Select( new String[]{ "marcacoes_tecnicos_hst" }, new String[]{ "id", "nome", "iniciais", "identificador", "nome_plain" }, new Field( "inactivo" ).isDifferent( "y" ), new String[]{ "nome_plain" }, null ); Virtual2DArray array = executer.executeQuery( select ); return array.getObjects(); } 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 String getEmpresa( Integer empresaID ) 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 ); return ( String ) array.get( 0, 0 ); } public Object[][] getVisitasEstabelecimento( Integer estabelecimentoID ) throws Exception { Select select = new Select( new String[]{ "marcacoes_estabelecimento" }, new String[]{ "id", "data", "estado" }, new Field( "estabelecimento_id" ).isEqual( estabelecimentoID ), 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_STR[ estado ]; } return data; } public Vector[][] getMapaAnual( Integer ano ) throws Exception { String deleted = "__DELETED__"; Select select = new Select( new String[]{ "marcacoes_tecnicos_hst" }, new String[]{ "id", "nome", "iniciais", "identificador", "nome_plain" }, new Field( "inactivo" ).isDifferent( "y" ), new String[]{ "nome_plain" }, null ); Virtual2DArray array = executer.executeQuery( select ); Object tecnicosArr[][] = array.getObjects(); Hashtable tecnicos = new Hashtable(); for( int n = 0; n < tecnicosArr.length; n++ ) { tecnicos.put( tecnicosArr[ n ][ 0 ], tecnicosArr[ n ] ); } Hashtable empresas = new Hashtable(); Hashtable estabelecimentos = new Hashtable(); Hashtable empresasEstabelecimentos = new Hashtable(); Vector data[][] = new Vector[ 31 ][ 12 ]; select = new Select( new String[]{ "marcacoes_estabelecimento" }, new String[]{ "data", "estabelecimento_id", "tecnico_hst" }, new Field( "data" ).between( new Object[]{ ano + "-01-01", ano + "-12-31" } ).and( new Field( "estado" ).in( new Integer[]{ new Integer( 0 ), new Integer( 2 ) } ) ) ); array = executer.executeQuery( select ); for( int n = 0; n < array.columnLength(); n++ ) { Date dataVisita = ( Date ) array.get( n, 0 ); Integer estabelecimentoID = ( Integer ) array.get( n, 1 ); Integer tecnicoID = ( Integer ) array.get( n, 2 ); Integer empresaID = null; if( !estabelecimentos.containsKey( estabelecimentoID ) ) { Select estabelecimentoSelect = new Select( new String[]{ "estabelecimentos" }, new String[]{ "nome", "empresa_id", "inactivo" }, new Field( "id" ).isEqual( estabelecimentoID ) ); Virtual2DArray estabelecimentoArray = executer.executeQuery( estabelecimentoSelect ); if( "y".equals( estabelecimentoArray.get( 0, 2 ) ) ) { estabelecimentos.put( estabelecimentoID, deleted ); } else { estabelecimentos.put( estabelecimentoID, estabelecimentoArray.get( 0, 0 ) ); } empresaID = ( Integer ) estabelecimentoArray.get( 0, 1 ); empresasEstabelecimentos.put( estabelecimentoID, empresaID ); if( !empresas.containsKey( empresaID ) ) { Select empresaSelect = new Select( new String[]{ "empresas" }, new String[]{ "designacao_social", "inactivo" }, new Field( "id" ).isEqual( empresaID ) ); Virtual2DArray empresaArray = executer.executeQuery( empresaSelect ); if( "y".equals( empresaArray.get( 0, 1 ) ) ) { empresas.put( empresaID, deleted ); } else { empresas.put( empresaID, empresaArray.get( 0, 0 ) ); } } } String nomeEstabelecimento = ( String ) estabelecimentos.get( estabelecimentoID ); empresaID = ( Integer ) empresasEstabelecimentos.get( estabelecimentoID ); String nomeEmpresa = ( String ) empresas.get( empresaID ); String nomeTecnico = " "; Integer indiceCor = null; Color cor = null; if( tecnicoID != null ) { Object tecnico[] = ( Object[] ) tecnicos.get( tecnicoID ); nomeTecnico = ( String ) tecnico[ 1 ]; indiceCor = ( Integer ) tecnico[ 3 ]; cor = CORES_TECNICOS[ indiceCor.intValue() ]; } Calendar cal = Calendar.getInstance(); cal.setTime( dataVisita ); int dia = cal.get( Calendar.DAY_OF_MONTH ) - 1; int mes = cal.get( Calendar.MONTH ); if( data[ dia ][ mes ] == null ) { data[ dia ][ mes ] = new Vector(); data[ dia ][ mes ].add( new Object[]{ new Integer( dia + 1 ) } ); } if( nomeEmpresa != deleted && nomeEstabelecimento != deleted ) { data[ dia ][ mes ].add( new Object[]{ nomeEmpresa, nomeEstabelecimento, nomeTecnico, cor } ); } } return data; } }