package siprp.planoactuacao.print; import java.util.Date; import java.util.Vector; import siprp.planoactuacao.SingletonConstants; import com.evolute.utils.Singleton; import com.evolute.utils.arrays.Virtual2DArray; import com.evolute.utils.db.DBManager; import com.evolute.utils.db.Executer; import com.evolute.utils.sql.Expression; import com.evolute.utils.sql.Field; import com.evolute.utils.sql.Select; import com.evolute.utils.sql.Select2; public class PlanoActuacaoPrintDataProvider { private static final Object LOCK = new Object(); private static PlanoActuacaoPrintDataProvider instance = null; protected final Executer WEB_EXECUTER; protected final Executer LOCAL_EXECUTER; public PlanoActuacaoPrintDataProvider() throws Exception { DBManager WEB_DBMANAGER = ( DBManager ) Singleton.getInstance( SingletonConstants.WEB_DBMANAGER ); WEB_EXECUTER = WEB_DBMANAGER.getSharedExecuter( this ); DBManager LOCAL_DBMANAGER = ( DBManager ) Singleton.getInstance( SingletonConstants.LOCAL_DBMANAGER ); LOCAL_EXECUTER = LOCAL_DBMANAGER.getSharedExecuter( this ); } public static PlanoActuacaoPrintDataProvider getProvider() throws Exception { synchronized( LOCK ) { if( instance == null ) { instance = new PlanoActuacaoPrintDataProvider(); } } return instance; } public PlanoActuacaoToPrint getPlanoToPrint( Integer id ) throws Exception { Select select = new Select2( new String[]{ "planos_actuacao" }, new Integer[]{}, new Expression[]{}, new String[]{ "empresa_id", "nome_empresa", "estabelecimento_id", "nome_estabelecimento", "data_relatorio", "data_visita", "observacoes_dl", "observacoes_dns" }, new Field( "id" ).isEqual( id ), null, null, null, null ); Virtual2DArray array = WEB_EXECUTER.executeQuery( select ); Integer empresaId = ( Integer ) array.get( 0, 0 ); String nomeEmpresa = ( String ) array.get( 0, 1 ); Integer estabelecimentoId = ( Integer ) array.get( 0, 2 ); String nomeEstabelecimento = ( String ) array.get( 0, 3 ); Integer logoId = getLogotipoIdForEmpresaId( empresaId ); Date dataRelatorio = ( Date ) array.get( 0, 4 ); Date dataVisita = ( Date ) array.get( 0, 5 ); String observacoesDl = ( String ) array.get( 0, 6 ); String observacoesDns = ( String ) array.get( 0, 7 ); EmpresaToPrint empresa = new EmpresaToPrint( nomeEmpresa, "http://apdp/siprp/auchan_jumbo_lado.jpg", nomeEstabelecimento ); PlanoActuacaoToPrint plano = new PlanoActuacaoToPrint( empresa, dataRelatorio != null ? new DataToPrint( "data-relatorio", dataRelatorio ) : null, dataVisita != null ? new DataToPrint( "data-hs", dataVisita ) : null, getLegislacaoAplicavel( empresaId, estabelecimentoId ), getAreasToPrintByPlanoId( id ), observacoesDl, observacoesDns ); return plano; } public Integer getLogotipoIdForEmpresaId( Integer empresaId ) throws Exception { Select select = new Select2( new String[]{ "empresas" }, new Integer[]{}, new Expression[]{}, new String[]{ "empresa_logo_id" }, new Field( "id" ).isEqual( empresaId ), null, null, null, null ); Virtual2DArray array = LOCAL_EXECUTER.executeQuery( select ); return ( Integer ) array.get( 0, 0 ); } public LegislacaoAplicavelToPrint getLegislacaoAplicavel( Integer empresaId, Integer estabelecimentoId ) throws Exception { LegislacaoAplicavelToPrint legislacao = new LegislacaoAplicavelToPrint( new Vector() ); return legislacao; } public Vector getAreasToPrintByPlanoId( Integer planoId ) throws Exception { Vector areas = new Vector(); Select select = new Select2( new String[]{ "plano_areas" }, new Integer[]{}, new Expression[]{}, new String[]{ "id", "descricao" }, new Field( "plano_id" ).isEqual( planoId ), new String[]{ "id" }, null, null, null ); Virtual2DArray array = WEB_EXECUTER.executeQuery( select ); for( int n = 0; n < array.columnLength(); n++ ) { Integer areaId = ( Integer ) array.get( n, 0 ); String areaDescricao = ( String ) array.get( n, 1 ); areas.add( new AreaToPrint( areaDescricao, getRiscosToPrintByAreaId( areaId ) ) ); } return areas; } public Vector getRiscosToPrintByAreaId( Integer areaId ) throws Exception { Vector riscos = new Vector(); Select select = new Select2( new String[]{ "plano_riscos" }, new Integer[]{}, new Expression[]{}, new String[]{ "id", "descricao", "valor", "responsavel_execucao", "recursos_necessarios", "data_inicio", "data_fim", "parecer_dl", "parecer_dns", "verificacao_siprp"}, new Field( "area_id" ).isEqual( areaId ).and( new Field( "activo" ).isEqual( "y" ) ), new String[]{ "id" }, null, null, null ); Virtual2DArray array = WEB_EXECUTER.executeQuery( select ); for( int n = 0; n < array.columnLength(); n++ ) { Integer id = ( Integer ) array.get( n, 0 ); String descricao = ( String ) array.get( n, 1 ); Integer valor = ( Integer ) array.get( n, 2 ); String responsavelExecucao = ( String ) array.get( n, 3 ); String recursosNecessarios = ( String ) array.get( n, 4 ); Date dataInicio = ( Date ) array.get( n, 5 ); Date dataFim = ( Date ) array.get( n, 6 ); String parecerDl = ( String ) array.get( n, 7 ); String parecerDns = ( String ) array.get( n, 8 ); String verificacaoSiprp = ( String ) array.get( n, 9 ); riscos.add( new RiscoToPrint( descricao, valor, getMedidasToPrintByRiscoId( id ), responsavelExecucao, recursosNecessarios, dataInicio != null ? new DataToPrint( "data-prevista-inicio", dataInicio ) : null, dataFim != null ? new DataToPrint( "data-prevista-conclusao", dataFim ) : null, parecerDl, parecerDns, verificacaoSiprp ) ); } return riscos; } public Vector getMedidasToPrintByRiscoId( Integer riscoId ) throws Exception { Vector medidas = new Vector(); Select select = new Select2( new String[]{ "plano_medidas" }, new Integer[]{}, new Expression[]{}, new String[]{ "id", "descricao" }, new Field( "risco_id" ).isEqual( riscoId ), new String[]{ "id" }, null, null, null ); Virtual2DArray array = WEB_EXECUTER.executeQuery( select ); for( int n = 0; n < array.columnLength(); n++ ) { Integer id = ( Integer ) array.get( n, 0 ); String descricao = ( String ) array.get( n, 1 ); medidas.add( new MedidaToPrint( descricao, getPostosToPrintByMedidaId( id ) ) ); } return medidas; } public Vector getPostosToPrintByMedidaId( Integer medidaId ) throws Exception { Vector postos = new Vector(); Select select = new Select2( new String[]{ "plano_postos_trabalho" }, new Integer[]{}, new Expression[]{}, new String[]{ "id", "descricao" }, new Field( "medida_id" ).isEqual( medidaId ), new String[]{ "id" }, null, null, null ); Virtual2DArray array = WEB_EXECUTER.executeQuery( select ); for( int n = 0; n < array.columnLength(); n++ ) { String descricao = ( String ) array.get( n, 1 ); postos.add( new PostoToPrint( descricao ) ); } return postos; } }