From c3b0857c455da8c7a4b74d4f62daa4570aee85d9 Mon Sep 17 00:00:00 2001 From: Diogo Neves Date: Mon, 6 Sep 2010 17:41:07 +0000 Subject: [PATCH] git-svn-id: https://svn.coded.pt/svn/SIPRP@1465 bb69d46d-e84e-40c8-a05a-06db0d633741 --- trunk/SIPRPSoft/.classpath | 2 +- trunk/SIPRPSoft/lib/shst.jar | Bin 1435568 -> 1894322 bytes .../properties/1-development/app.properties | 2 + .../properties/2-testing/app.properties | 2 + .../properties/3-production/app.properties | 2 + .../properties/4-WebApps/app.properties | 2 + trunk/SIPRPSoft/src/leaf/ui/LeafButton.java | 78 - .../src/leaf/ui/LeafCalendarDialog.java | 149 - trunk/SIPRPSoft/src/leaf/ui/LeafDialog.java | 39 - .../src/leaf/ui/LeafGradientPanel.java | 29 - .../SIPRPSoft/src/leaf/ui/LeafIconButton.java | 71 - .../SIPRPSoft/src/leaf/ui/LeafInputField.java | 631 --- trunk/SIPRPSoft/src/leaf/ui/LeafLogic.java | 106 - .../src/leaf/ui/LeafOptionDialog.java | 300 -- .../src/leaf/ui/LeafRuntimeException.java | 18 - .../SIPRPSoft/src/leaf/ui/LeafTableModel.java | 174 - .../src/leaf/ui/LeafTextAreaEditor.java | 180 - .../SIPRPSoft/src/leaf/ui/LeafTextDialog.java | 170 - trunk/SIPRPSoft/src/leaf/ui/LeafTree.java | 74 - .../src/leaf/ui/LeafUIConstants.java | 15 - trunk/SIPRPSoft/src/leaf/ui/LeafWindow.java | 940 ---- trunk/SIPRPSoft/src/leaf/ui/SimpleTable.java | 84 - .../src/leaf/ui/TreeInserterDialog.java | 323 -- trunk/SIPRPSoft/src/siprp/Main.java | 3 +- .../src/siprp/SIPRPShutdownHook.java | 39 - trunk/SIPRPSoft/src/siprp/SIPRPTracker.java | 12 +- .../siprp/higiene/gestao/AdicionarPanel.java | 131 - .../siprp/higiene/gestao/EmpresaPanel.java | 158 - .../higiene/gestao/GerirEmpresaPanel.java | 84 - .../gestao/GerirEstabelecimentosPanel.java | 148 - .../higiene/gestao/GestaoRelatorioWindow.java | 83 - .../src/siprp/higiene/gestao/GlobalPanel.java | 71 - .../higiene/gestao/SIPRPLazyLoadedPanel.java | 77 - .../src/siprp/higiene/gestao/add.png | Bin 899 -> 0 bytes .../src/siprp/higiene/gestao/delete.png | Bin 947 -> 0 bytes .../gestao/email/AdicionarEmailsPanel.java | 109 - .../AdicionarEquipamentosPanel.java | 232 - .../equipamentos/GerirEquipamentosPanel.java | 333 -- .../legislacao/AdicionarLegislacaoPanel.java | 207 - .../legislacao/GerirLegislacaoPanel.java | 499 -- .../AdicionarNormalizacaoPanel.java | 209 - .../normalizacao/GerirNormalizacaoPanel.java | 555 --- .../gestao/postos/AdicionarAreasPanel.java | 240 - .../gestao/postos/GerirAreasPanel.java | 465 -- .../gestao/riscos/AdicionarRiscosPanel.java | 310 -- .../gestao/riscos/DnDRiscosListener.java | 167 - .../gestao/riscos/GerirMedidaPanel.java | 204 - .../gestao/riscos/GerirRiscosPanel.java | 583 --- .../higiene/gestao/riscos/TreeRiscos.java | 46 - .../siprp/higiene/gestao/riscos/revert.png | Bin 936 -> 0 bytes .../src/siprp/higiene/gestao/riscos/save.png | Bin 876 -> 0 bytes .../relatorio/GerirMedidaRelatorioPanel.java | 306 -- .../relatorio/GerirMedidasRelatorioPanel.java | 526 -- .../relatorio/GerirValoresRiscoPanel.java | 336 -- .../relatorio/MedidasRiscosDeleter.java | 51 - .../MedidasRiscosDeleterController.java | 34 - .../higiene/relatorio/PanelRelatorio.java | 780 --- .../higiene/relatorio/PlanoActuacaoPanel.java | 193 - .../RelatorioHigieneSegurancaWindow.java | 246 - .../relatorio/RelatorioLegislacaoPanel.java | 117 - .../relatorio/RelatorioNormalizacaoPanel.java | 120 - .../relatorio/VerAreasRelatorioPanel.java | 202 - .../siprp/higiene/relatorio/adobe_reader.png | Bin 1647 -> 0 bytes .../src/siprp/higiene/relatorio/edit.png | Bin 928 -> 0 bytes .../higiene/relatorio/print/AreaToPrint.java | 59 - .../higiene/relatorio/print/DBConstants.java | 17 - .../higiene/relatorio/print/DataToPrint.java | 66 - .../relatorio/print/EmpresaToPrint.java | 76 - .../relatorio/print/EquipamentoToPrint.java | 27 - .../relatorio/print/EquipamentosToPrint.java | 27 - .../print/LegislacaoAplicavelToPrint.java | 53 - .../relatorio/print/MedidaToPrint.java | 30 - .../relatorio/print/NormalizacaoToPrint.java | 43 - .../higiene/relatorio/print/PostoToPrint.java | 41 - .../relatorio/print/PrintableInterface.java | 8 - .../relatorio/print/RelatorioDBInit.java | 29 - .../relatorio/print/RelatorioPDFCreator.java | 54 - .../print/RelatorioPrintDataProvider.java | 646 --- .../relatorio/print/RelatorioToPrint.java | 96 - .../higiene/relatorio/print/RiscoToPrint.java | 59 - .../relatorio/print/TecnicoHSToPrint.java | 45 - .../higiene/relatorio/print/TestPrint.java | 87 - .../higiene/relatorio/print/relatorio.xsl | 2874 ----------- .../higiene/relatorio/print/relatorio_new.xsl | 3671 -------------- .../higiene/relatorio/print/relatorio_old.xsl | 3833 -------------- .../relatorio/print/relatorio_old_2.xsl | 4391 ----------------- .../print/relatorio_old_2010-08-10.xsl | 3009 ----------- .../higiene/relatorio/print/teste_input.xml | 133 - .../higiene/relatorio/print/teste_input2.xml | 138 - .../src/siprp/higiene/relatorio/revert.png | Bin 879 -> 0 bytes .../src/siprp/higiene/relatorio/submit.png | Bin 738 -> 0 bytes .../exames/logic/RecepcaoExamesLogic.java | 76 - .../exames/ui/RecepcaoExamesWindow.java | 235 - .../locais_analise/EnviarAnalisesWindow.java | 262 - .../EnviarAnalisesWindowLogic.java | 83 - .../LocaisAnaliseDataProvider.java | 138 - .../locais_analise/LocaisAnaliseLogic.java | 50 - .../locais_analise/ReceberAnalisesWindow.java | 6 - .../locais_realizacao/FaxPrinter.java | 180 - .../LocaisRealizacaoConstants.java | 11 - .../LocaisRealizacaoDataProvider.java | 530 -- .../LocaisRealizacaoWindow.java | 730 --- .../medicina/locais_realizacao/fax_ecds.xsl | 283 -- .../locais_realizacao/fax_ecds_teste.xml | 234 - .../processo/mail/ColorChooserDialog.java | 103 - .../medicina/processo/mail/MailDialog.java | 645 --- .../medicina/processo/mail/MailSender.java | 84 - .../medicina/processo/mail/icons/Thumbs.db | Bin 29696 -> 0 bytes .../processo/mail/icons/arrow_down.png | Bin 326 -> 0 bytes .../processo/mail/icons/colorwheel.png | Bin 823 -> 0 bytes .../medicina/processo/mail/icons/copy.png | Bin 651 -> 0 bytes .../medicina/processo/mail/icons/cut.png | Bin 636 -> 0 bytes .../medicina/processo/mail/icons/delete2.png | Bin 1855 -> 0 bytes .../medicina/processo/mail/icons/font.png | Bin 692 -> 0 bytes .../processo/mail/icons/font_bigger.png | Bin 714 -> 0 bytes .../processo/mail/icons/font_smaller.png | Bin 714 -> 0 bytes .../medicina/processo/mail/icons/mail2.png | Bin 933 -> 0 bytes .../processo/mail/icons/mail_attachment.png | Bin 2230 -> 0 bytes .../medicina/processo/mail/icons/paste.png | Bin 699 -> 0 bytes .../processo/mail/icons/text_align_center.png | Bin 499 -> 0 bytes .../mail/icons/text_align_justified.png | Bin 506 -> 0 bytes .../processo/mail/icons/text_align_left.png | Bin 509 -> 0 bytes .../processo/mail/icons/text_align_right.png | Bin 496 -> 0 bytes .../processo/mail/icons/text_bold.png | Bin 570 -> 0 bytes .../processo/mail/icons/text_italics.png | Bin 554 -> 0 bytes .../processo/mail/icons/text_underlined.png | Bin 560 -> 0 bytes 126 files changed, 17 insertions(+), 34412 deletions(-) delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafButton.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafCalendarDialog.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafDialog.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafGradientPanel.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafIconButton.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafInputField.java delete mode 100755 trunk/SIPRPSoft/src/leaf/ui/LeafLogic.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafOptionDialog.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafRuntimeException.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafTableModel.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafTextAreaEditor.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafTextDialog.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafTree.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/LeafUIConstants.java delete mode 100755 trunk/SIPRPSoft/src/leaf/ui/LeafWindow.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/SimpleTable.java delete mode 100644 trunk/SIPRPSoft/src/leaf/ui/TreeInserterDialog.java delete mode 100644 trunk/SIPRPSoft/src/siprp/SIPRPShutdownHook.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/AdicionarPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/EmpresaPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEmpresaPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEstabelecimentosPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/GestaoRelatorioWindow.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/GlobalPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/SIPRPLazyLoadedPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/add.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/delete.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/email/AdicionarEmailsPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/AdicionarEquipamentosPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/GerirEquipamentosPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/AdicionarLegislacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/GerirLegislacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/AdicionarNormalizacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/GerirNormalizacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/AdicionarAreasPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/GerirAreasPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/AdicionarRiscosPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/DnDRiscosListener.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirMedidaPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirRiscosPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/TreeRiscos.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/revert.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/save.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirMedidaRelatorioPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirMedidasRelatorioPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirValoresRiscoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleter.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleterController.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/PanelRelatorio.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioHigieneSegurancaWindow.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioLegislacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioNormalizacaoPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/VerAreasRelatorioPanel.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/adobe_reader.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/edit.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/AreaToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DBConstants.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DataToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EmpresaToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentoToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentosToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/LegislacaoAplicavelToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/MedidaToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/NormalizacaoToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PostoToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PrintableInterface.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioDBInit.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPDFCreator.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPrintDataProvider.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RiscoToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TecnicoHSToPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TestPrint.java delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio.xsl delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_new.xsl delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old.xsl delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2.xsl delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2010-08-10.xsl delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input.xml delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input2.xml delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/revert.png delete mode 100644 trunk/SIPRPSoft/src/siprp/higiene/relatorio/submit.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/exames/logic/RecepcaoExamesLogic.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/exames/ui/RecepcaoExamesWindow.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindow.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindowLogic.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseDataProvider.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseLogic.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_analise/ReceberAnalisesWindow.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/FaxPrinter.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoConstants.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoDataProvider.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoWindow.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds.xsl delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds_teste.xml delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/ColorChooserDialog.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailDialog.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailSender.java delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/Thumbs.db delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/arrow_down.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/colorwheel.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/copy.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/cut.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/delete2.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/font.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/font_bigger.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/font_smaller.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/mail2.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/mail_attachment.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/paste.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_align_center.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_align_justified.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_align_left.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_align_right.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_bold.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_italics.png delete mode 100644 trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_underlined.png diff --git a/trunk/SIPRPSoft/.classpath b/trunk/SIPRPSoft/.classpath index 2ac224c0..5f021696 100644 --- a/trunk/SIPRPSoft/.classpath +++ b/trunk/SIPRPSoft/.classpath @@ -29,7 +29,6 @@ - @@ -47,5 +46,6 @@ + diff --git a/trunk/SIPRPSoft/lib/shst.jar b/trunk/SIPRPSoft/lib/shst.jar index a63c41b014269a1d16b10e77b53a299385fafed7..caef5a88c45e126329ffdd14209f478fdddd67e8 100644 GIT binary patch delta 512394 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

xgq@G)BvlI?KT7NT}TC?d}z?@Nu9 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

T`N=>OAVl^-*x!<4IuL?l%YgGN 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 QTdn>P>T1=;+2LRR2M);Ib8`k1#TgTmS-%Y>+<1 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
    @`US@;+@*PQiat)) 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 extends JPanel implements FocusListener, MouseListener, PropertyChangeListener -{ - - public static final String PROPERTY_CHANGED_CONSTANT = "LEAF_INPUT_PROPERTY_CHANGED"; - public static final String PROPERTY_CHANGED_CLICK = "LEAF_PROPERTY_CHANGED_CLICK"; - private static final long serialVersionUID = 1L; - - private static final DateFormat sdf = DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "pt", "PT" ) ); - - private static final int defaultColorDec = 20; - - private int colorDec = defaultColorDec; - - public Dimension size = null; - - private Color hot = null; - private Color cold = null; - private Color background = null; - private Color endColor = null; - private Color highLightColor = new Color( 180, 255, 180 ); - - private Object selectedOption = null; - - private boolean isEditable = false; - - private boolean isClickable = false; - - private boolean highLighted = false; - - private boolean collapseOptions = true; - - private ObjClass object = null; - - private GradientPaint outerContour = null; - private GradientPaint outerReversedContour = null; - private GradientPaint innerContour = null; - private GradientPaint innerReversedContour = null; - private GradientPaint gradient = null; - private TableLayout layout = null; - - private JComponent thiz = null; - - private List theeze = null; - - public LeafInputField() - { - super(); - setOpaque( false ); - setBorder( BorderFactory.createEmptyBorder( 3, 10, 3, 10 ) ); - setBackground( Color.WHITE ); - hot = getBackground(); - cold = new Color( hot.getRed() > colorDec ? hot.getRed() - colorDec : 0, hot.getGreen() > colorDec ? hot.getGreen() - colorDec : 0, hot.getBlue() > colorDec ? hot.getBlue() - colorDec : 0, hot.getAlpha() ); - background = cold; - setObject( null ); - } - - public boolean isCollapseOptions() - { - return collapseOptions; - } - - public void setCollapseOptions( boolean collapse ) - { - collapseOptions = collapse; - } - - private String getStringFromUser() - { - LeafTextDialog textDialog = new LeafTextDialog( getParentWindow(), this, (String) object, true ); - return textDialog.getText(); - } - - private Object getOptionFromUser() - { - if( object instanceof Map ) - { - if(((Map) object).size() > 0) - { - LeafOptionDialog optionDialog = new LeafOptionDialog( getParentWindow(), (Map) object, null ); - return optionDialog.getOption(); - } - } - else if( object instanceof OrderedMap ) - { - if(((OrderedMap) object).rows() > 0) - { - LeafOptionDialog optionDialog = new LeafOptionDialog( getParentWindow(), (OrderedMap) object, null, null, null, null ); - return optionDialog.getOption(); - } - } - return null; - } - - private Date getDateFromUser() - { - LeafCalendarDialog calendarDialog = new LeafCalendarDialog( getParentWindow() ); - return calendarDialog.getDate(); - } - - private LeafWindow getParentWindow() - { - LeafWindow result = null; - for( Container parent = this.getParent(); parent != null; parent = parent.getParent() ) - { - if( parent instanceof LeafWindow ) - { - result = (LeafWindow) parent; - } - } - return result; - } - - protected void paintComponent( Graphics g ) - { - Graphics2D g2d = (Graphics2D) g; - int width = getWidth(), height = getHeight(); - setColors( width, height ); - g2d.setPaint( outerReversedContour ); - g2d.fillRect( 15, 0, width / 4, height ); - g2d.setPaint( outerContour ); - g2d.fillRect( width / 4, 0, width, height ); - g2d.setPaint( innerReversedContour ); - g2d.fillRect( 15, 0, width / 4, height - 1 ); - g2d.setPaint( innerContour ); - g2d.fillRect( width / 4, 0, width, height - 1 ); - g2d.setPaint( gradient ); - g2d.fillRoundRect( 0, 2, width, height - 5, 15, 15 ); - super.paintComponent( g ); - } - - private void setColors( int width, int height ) - { - endColor = getGradientEndColor( background ); - outerContour = new GradientPaint( width / 4, 0, Color.GRAY, width, 0, this.getParent().getBackground() ); - outerReversedContour = new GradientPaint( 15, 0, this.getParent().getBackground(), width / 4, 0, Color.GRAY ); - innerContour = new GradientPaint( width / 4, 0, Color.LIGHT_GRAY, width, 0, this.getParent().getBackground() ); - innerReversedContour = new GradientPaint( 15, 0, this.getParent().getBackground(), width / 4, 0, Color.LIGHT_GRAY ); - gradient = new GradientPaint( 0, 0, background, width, height, endColor ); - } - - private Color getGradientEndColor( Color startColor ) - { - return getParent() != null ? getParent().getBackground() : startColor; - } - - public boolean getSelected() - { - return highLighted; - } - - public void setSelected( boolean selected ) - { - highLighted = selected; - background = selected ? highLightColor : cold; - repaint(); - } - - public void setEditable( boolean editable ) - { - isEditable = editable; - if( !editable ) - { - setMouseOver( false ); - } - setEnabled( editable ); - setObject( object, selectedOption ); - repaint(); - } - - public boolean isEditable() - { - return isEditable; - } - - public void setClickable( boolean clickable ) - { - isClickable = clickable; - if( !clickable ) - { - setMouseOver( false ); - } - repaint(); - } - - public boolean isClickable() - { - return isClickable; - } - - private void setupCollapsedPanel() - { - List values = ((OrderedMap) object).getValues( selectedOption ); - theeze = new ArrayList(); - if( values != null ) - { - double[] rows = new double[] { - TableLayout.MINIMUM - }; - double[] cols = new double[values.size() > 0 ? (values.size() * 2 - 1) : 0]; - for( int i = 0; i < cols.length; ++i ) - { - cols[i] = (i % 2 == 0) ? TableLayout.FILL : TableLayout.MINIMUM; - } - TableLayout layout = new TableLayout( cols, rows ); - layout.setHGap( 5 ); - thiz.setLayout( layout ); - for( int i = 0, a = 0; i < cols.length; ++i ) - { - JComponent comp = null; - if( i % 2 == 0 ) - { - Object value = values.get( a++ ); - comp = new JLabel( value == null ? " " : value.toString() ); - theeze.add( comp ); - } - else - { - comp = new JSeparator( JSeparator.VERTICAL ); - } - thiz.add( comp, new TableLayoutConstraints( i, 0 ) ); - } - } - } - - private void setupUncollapsedPanel() - { - theeze = new ArrayList(); - OrderedMap map = (OrderedMap) object; - double[] rows = new double[map.rows() > 0 ? (map.rows() * 2 - 1) : 0]; - double[] cols = new double[map.columns() > 0 ? (map.columns() * 2 - 1) : 0]; - for( int i = 0; i < rows.length; ++i ) - { - rows[i] = (i % 2 == 0) ? TableLayout.MINIMUM : TableLayout.MINIMUM; - } - for( int i = 0; i < cols.length; ++i ) - { - cols[i] = (i % 2 == 0) ? TableLayout.FILL : TableLayout.MINIMUM; - } - TableLayout layout = new TableLayout( cols, rows ); - layout.setHGap( 5 ); - thiz.setLayout( layout ); - - for( int i = 0, a = 0; i < rows.length; ++i ) - { - if( i % 2 == 0 ) - { - List values = map.getRow( a++ ); - for( int j = 0, b = 0; j < cols.length; ++j ) - { - JComponent comp = null; - if( j % 2 == 0 ) - { - Object value = values.get( b++ ); - - LeafInputField leaf; - if( value instanceof LeafInputField ) - { - leaf = (LeafInputField) value; - } - else - { - leaf = new LeafInputField(); - leaf.setObject( value ); - if( j > 1 ) - { - leaf.setEditable( isEditable ); - } - } - - comp = leaf; - theeze.add( comp ); - } - else - { - JSeparator sep = new JSeparator( JSeparator.VERTICAL ); - sep.setForeground( cold ); - comp = sep; - } - thiz.add( comp, new TableLayoutConstraints( j, i ) ); - } - } - else - { - JSeparator sep = new JSeparator(); - sep.setForeground( cold ); - thiz.add( sep, new TableLayoutConstraints( 0, i, cols.length - 1, i ) ); - } - } - } - - private void setSelectedObject( Object key ) - { - selectedOption = key; - if( object != null && thiz != null ) - { - if( object instanceof Map ) - { - Object value = null; - value = ((Map) object).get( selectedOption ); - String text = value == null ? " " : value.toString(); - if( thiz instanceof JTextArea ) - { - ((JTextArea) thiz).setText( text ); - } - else if( thiz instanceof JTextField ) - { - ((JTextField) thiz).setText( text ); - } - else if( thiz instanceof JLabel ) - { - ((JLabel) thiz).setText( text ); - } - } - else if( object instanceof OrderedMap ) - { - if( thiz instanceof JPanel && collapseOptions ) - { - setupCollapsedPanel(); - } - else if( thiz instanceof JPanel && !collapseOptions ) - { - setupUncollapsedPanel(); - } - } - } - } - - public Object getSelectedObject() - { - return selectedOption; - } - - public void setObject( ObjClass object, Object selected ) - { - this.selectedOption = selected; - setObject( object ); - } - - public void setObject( ObjClass object ) - { - this.object = object; - if( object != null ) - { - if( object instanceof Date ) - { - Date date = (Date) object; - String text = date.getTime() == 0 ? "" : sdf.format( object ); - thiz = isEditable ? new JLabel( text ) : new JTextArea( text ); - thiz.setEnabled( false ); - } - else if( object instanceof Map ) - { - thiz = isEditable ? new JLabel( " " ) : new JTextArea( " " ); - setSelectedObject( selectedOption ); - thiz.setEnabled( false ); - } - else if( object instanceof OrderedMap && collapseOptions ) - { - thiz = new JPanel(); - setSelectedObject( selectedOption ); - } - else if( object instanceof OrderedMap && !collapseOptions ) - { - thiz = new JPanel(); - setSelectedObject( selectedOption ); - } - else if( object instanceof LeafInputField ) - { - setObject( (ObjClass) ((LeafInputField) object).getObject(), ((LeafInputField) object).getSelectedObject() ); - } - else if( object instanceof String ) - { - JTextArea textArea = new JTextArea(); - textArea.setEditable( false ); - textArea.setText( object == null ? "" : object.toString() ); - thiz = textArea; - } - else - { - String toString = object.toString(); - if( "".equals( toString ) ) - { - toString = " "; - } - thiz = new JTextArea( toString ); - } - } - else - { - thiz = new JLabel( " " ); - } - reListen(); - reLayout(); - } - - public ObjClass getObject() - { - return this.object; - } - - private void reListen() - { - removeListeners(); - if( theeze != null && !collapseOptions && !theeze.isEmpty() ) - { - for( JComponent current : theeze ) - { - if( current instanceof LeafInputField ) - { - current.addFocusListener( (LeafInputField) current ); - current.addMouseListener( (LeafInputField) current ); - current.addPropertyChangeListener( PROPERTY_CHANGED_CONSTANT, this ); - } - } - } - else - { - thiz.addFocusListener( this ); - thiz.addMouseListener( this ); - } - } - - private void removeListeners() - { - removeListerensFrom( thiz ); - if( theeze != null ) - { - for( JComponent comp : theeze ) - { - removeListerensFrom( comp ); - } - } - } - - private void removeListerensFrom( JComponent comp ) - { - if( comp != null ) - { - FocusListener[] allFocus = thiz.getFocusListeners(); - if( allFocus != null ) - { - for( FocusListener focusListener : allFocus ) - { - comp.removeFocusListener( focusListener ); - } - } - MouseListener[] allMouse = thiz.getMouseListeners(); - if( allMouse != null ) - { - for( MouseListener mouseListener : allMouse ) - { - comp.removeMouseListener( mouseListener ); - } - } - } - } - - private void reLayout() - { - if( thiz != null ) - { - SwingUtilities.invokeLater( new Runnable() - { - @Override - public void run() - { - if( layout == null ) - { - layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.FILL - } ); - LeafInputField.this.setLayout( layout ); - } - else - { - removeAll(); - } - LeafInputField.this.add( thiz, new TableLayoutConstraints( 0, 0 ) ); - revalidate(); - repaint(); - } - } ); - size = thiz.getPreferredSize(); - thiz.setOpaque( false ); - } - } - - @Override - public void focusLost( FocusEvent e ) - { - repaint(); - } - - @Override - public void focusGained( FocusEvent e ) - { - repaint(); - } - - @Override - public void mouseReleased( MouseEvent e ) - { - } - - @Override - public void mousePressed( MouseEvent e ) - { - Object old = null; - if( object != null && isEditable ) - { - if( object instanceof Date ) - { - old = object; - ObjClass newDate = (ObjClass) getDateFromUser(); - if( newDate != null ) - { - setObject( newDate ); - firePropertyChange( PROPERTY_CHANGED_CONSTANT, old, object ); - } - } - else if( object instanceof Map && collapseOptions ) - { - old = selectedOption; - ObjClass out = (ObjClass) getOptionFromUser(); - setObject( object, out ); - firePropertyChange( PROPERTY_CHANGED_CONSTANT, old, selectedOption ); - } - else if( object instanceof OrderedMap && collapseOptions ) - { - old = selectedOption; - ObjClass out = (ObjClass) getOptionFromUser(); - setObject( object, out ); - firePropertyChange( PROPERTY_CHANGED_CONSTANT, old, object ); - } - else if( object instanceof OrderedMap && !collapseOptions ) - { - // old = selectedOption; - // ObjClass out = (ObjClass) getOptionFromUser(); - // setObject( object, out ); - // firePropertyChange( PROPERTY_CHANGED_CONSTANT, old, object ); - } - else if( object instanceof String ) - { - old = object; - setObject( (ObjClass) getStringFromUser() ); - firePropertyChange( PROPERTY_CHANGED_CONSTANT, old, object ); - } - } - if( isClickable ) - { - firePropertyChange( PROPERTY_CHANGED_CLICK, false, true ); - } - // setObject( object, selectedOption ); - } - - @Override - public void mouseExited( MouseEvent e ) - { - setMouseOver( false ); - repaint(); - } - - @Override - public void mouseEntered( MouseEvent e ) - { - setMouseOver( true ); - repaint(); - } - - @Override - public void mouseClicked( MouseEvent e ) - { - } - - private void setMouseOver( boolean mouseOver ) - { - if( mouseOver ) - { - background = (!highLighted && (isEditable || isClickable)) ? hot : background; - } - else - { - background = (!highLighted && (isEditable || isClickable)) ? cold : background; - } - } - - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - firePropertyChange( PROPERTY_CHANGED_CONSTANT, evt.getOldValue(), evt.getNewValue() ); - } -} \ No newline at end of file diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafLogic.java b/trunk/SIPRPSoft/src/leaf/ui/LeafLogic.java deleted file mode 100755 index f41714b6..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafLogic.java +++ /dev/null @@ -1,106 +0,0 @@ -package leaf.ui; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; -import java.util.List; - - -public class LeafLogic -{ - - /** - * Declares an Action - * - * @author tsimao - * - */ - @Retention(RetentionPolicy.RUNTIME) - public @interface Action - { - /** - * true - this action saves data to de database from the components - * false - this action reads from the database to the components - */ - boolean isSave(); - } - - /** - * Binds a UI method with an action - * - * @author tsimao - * - */ - @Retention(RetentionPolicy.RUNTIME) - public @interface LeafUIActionBinding - { - - /** - * The name of the action this method binds to - */ - String [] action(); - } - - /** - * Binds a logic methods with a group of actions - * - * @author tsimao - * - */ - @Retention(RetentionPolicy.RUNTIME) - public @interface LeafLogicActionBinding - { - - /** - * The name of the action this method binds to - */ - String [] actions(); - } - - @Action(isSave = false) - public static final String ACTION_STARTUP = "ACTION_STARTUP"; - - @Action(isSave = false) - public static final String ACTION_REFRESH = "ACTION_REFRESH"; - - @Action(isSave = false) - public static final String ACTION_CANCEL = "ACTION_CANCEL"; - - - private List registeredWindows = new ArrayList(); - - public void addWindow(LeafWindow window) - { - registeredWindows .add(window); - } - - public void runAction( String actionName ) - { - runAction( actionName, null ); - } - - public void runAction( String actionName, Object argument ) - { - for( LeafWindow window : registeredWindows ) - { - window.runAction( actionName, argument ); - } - } - - public void runActionLater( String actionName ) - { - for( LeafWindow window : registeredWindows ) - { - window.runActionLater( actionName ); - } - } - - public void runActionLater( String actionName, Object argument ) - { - for( LeafWindow window : registeredWindows ) - { - window.runActionLater( actionName, argument ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafOptionDialog.java b/trunk/SIPRPSoft/src/leaf/ui/LeafOptionDialog.java deleted file mode 100644 index d78e35f3..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafOptionDialog.java +++ /dev/null @@ -1,300 +0,0 @@ -package leaf.ui; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JRootPane; -import javax.swing.JScrollBar; -import javax.swing.JScrollPane; -import javax.swing.JSeparator; -import javax.swing.ScrollPaneConstants; - -import siprp.ui.SIPRPFrame; - -import com.evolute.adt.OrderedMap; - - - -public class LeafOptionDialog extends JDialog -{ - private Dimension OPTION_SIZE = new Dimension( 200, 20 ); - private Dimension BUTTON_SIZE = new Dimension( 200, 20 ); - - private int MAX_VISIBLE_OPTIONS = 20; - - private static final long serialVersionUID = 1L; - - private String CANCEL_LABEL = "Cancelar"; - - private String okLabel = null; - - private final JLabel labelMessage = new JLabel(); - - private final JPanel optionsPanel = new JPanel(); - - private final JScrollPane optionsScrollPane = new JScrollPane(); - - private boolean cancelActive = true; - - private LeafInputField submitButton = new LeafInputField(); - - private Map map = null; - - private OrderedMap orderedMap = null; - - private List selected = new ArrayList(); - - private Map mapEnabledForKey = null; - - private Map mapChosenForKey = null; - - private String message = null; - - private boolean ordered = false; - - public LeafOptionDialog( LeafWindow owner, Map map, String message) - { - super( owner ); - this.mapEnabledForKey = new HashMap(); - this.mapChosenForKey = new HashMap(); - this.message = message; - cancelActive = false; - for( KeyClass key : map.keySet() ) - { - mapEnabledForKey.put( key, true ); - } - startup( map, null ); - } - - public LeafOptionDialog( LeafWindow owner, OrderedMap orderedMap, Map chosen, Map enabled, String message, String okButton) - { - super( owner ); - ordered = true; - this.message = message; - okLabel = okButton; - cancelActive = okButton != null; - this.mapChosenForKey = chosen == null ? new HashMap() : chosen; - this.mapEnabledForKey = enabled == null ? new HashMap() : chosen; - if( chosen != null ) - { - for( KeyClass key : chosen.keySet() ) - { - Boolean isChosen = chosen.get( key ); - if( isChosen != null && isChosen ) - { - selected.add( key ); - } - } - } - startup( null, orderedMap ); - } - - private void startup( Map map, OrderedMap orderedMap ) - { - if( map == null ) - { - this.map = new HashMap(); - } - else - { - this.map = map; - } - if( orderedMap == null ) - { - this.orderedMap = new OrderedMap(); - } - else - { - this.orderedMap = orderedMap; - } - setupComponents( map == null ? orderedMap.iterator() : map.keySet().iterator(), map == null ? orderedMap.rows() : map.keySet().size(), map == null ? true : false ); - setUndecorated( true ); - setDefaultCloseOperation( SIPRPFrame.DO_NOTHING_ON_CLOSE ); - getRootPane().setWindowDecorationStyle(JRootPane.NONE); - setSize( getLayout().minimumLayoutSize( getRootPane() ) ); - setLocationRelativeTo( getParent() ); - setModal( true ); - setVisible( true ); - } - - private void setupComponents( Iterator iterator, Integer size, boolean ordered ) - { - double[] cols = new double[] { - TableLayout.PREFERRED - }; - double[] rows = new double[(message == null ? 0 : 2) + 1 + (cancelActive ? 2 : 0)]; - for( int i = 0; i < rows.length; ++i ) - { - rows[i] = TableLayout.PREFERRED; - } - TableLayout layout = new TableLayout( cols, rows ); - layout.setVGap( 3 ); - setContentPane( new LeafGradientPanel() ); - getContentPane().setLayout( layout ); - - int shift = 0; - if( message != null ) - { - labelMessage.setText( message ); - getContentPane().add( labelMessage, new TableLayoutConstraints( 0, shift++ ) ); - getContentPane().add( new JSeparator(), new TableLayoutConstraints( 0, shift++ ) ); - } - setupOptionsComponents( iterator, size ); - getContentPane().add( optionsScrollPane, new TableLayoutConstraints( 0, shift++ ) ); - if( cancelActive ) - { - getContentPane().add( new JSeparator(), new TableLayoutConstraints( 0, shift++ ) ); - submitButton.setObject( ordered ? okLabel : CANCEL_LABEL ); - submitButton.setClickable( true ); - submitButton.setPreferredSize( BUTTON_SIZE ); - getContentPane().add( submitButton, new TableLayoutConstraints( 0, shift++ ) ); - addListenerToComponent( submitButton ); - } - ((JComponent) getContentPane()).setBorder( BorderFactory.createRaisedBevelBorder() ); - } - - private void setupOptionsComponents( Iterator iterator, Integer size ) - { - int maxWidth = OPTION_SIZE.width; - double[] cols = new double[] { - TableLayout.PREFERRED - }; - double[] rows = new double[size]; - for( int i = 0; i < rows.length; ++i ) - { - rows[i] = TableLayout.PREFERRED; - } - TableLayout layout = new TableLayout( cols, rows ); - layout.setVGap( 3 ); - optionsPanel.setLayout( layout ); - KeyClass current = null; - for( int i = 0; i < size && iterator.hasNext(); ++i ) - { - current = iterator.next(); - LeafInputField component = new LeafInputField(); - Object value; - if( ordered ) - { - List values = orderedMap.getValues( current ); - value = (values == null || values.size() == 0) ? null : values.get( 0 ); - } - else - { - value = map.get( current ); - } - component.setObject( value ); - - Boolean isChosen = mapChosenForKey.get( current ); - component.setSelected( isChosen != null && isChosen ); - - Boolean isEnabled = mapEnabledForKey.get( current ); - component.setClickable( isEnabled == null || isEnabled ); - - if(component.size != null && component.size.width > maxWidth ) - { - maxWidth = component.size.width; - } - optionsPanel.add( component, new TableLayoutConstraints( 0, i ) ); - addListenerToComponent( component ); - } - - optionsScrollPane.setViewportView( optionsPanel ); - optionsScrollPane.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); - JScrollBar verticalScrollBar = optionsScrollPane.getVerticalScrollBar(); - verticalScrollBar.setUnitIncrement( (int) OPTION_SIZE.getHeight() + 3 ); - optionsScrollPane.setVerticalScrollBar( verticalScrollBar ); - optionsScrollPane.setVerticalScrollBarPolicy( size > MAX_VISIBLE_OPTIONS ? ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS : ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER ); - optionsScrollPane.setPreferredSize( new Dimension( maxWidth + 30 , size > MAX_VISIBLE_OPTIONS ? (MAX_VISIBLE_OPTIONS * ((int) (OPTION_SIZE.getHeight() + 3 )) ) : (size * ((int) (OPTION_SIZE.getHeight() + 3 )) ) )); - } - - private KeyClass getKeyForValue( Object value ) - { - if( value != null && map.containsValue( value ) ) - { - for( KeyClass key : map.keySet() ) - { - if( map.get( key ).equals( value ) ) - { - return key; - } - } - } - else if( ordered ) - { - return orderedMap.getKeyForValue( value ); - } - return null; - } - - private void addListenerToComponent( JComponent component ) - { - component.addPropertyChangeListener( new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent e ) - { - if( e.getSource() instanceof LeafInputField ) - { - LeafInputField source = (LeafInputField) e.getSource(); - if( LeafInputField.PROPERTY_CHANGED_CLICK.equals( e.getPropertyName() ) ) - { - if( !source.equals( submitButton ) ) - { - Object value = source.getObject(); - if( value != null ) - { - KeyClass key = getKeyForValue( value ); - if( selected.contains( key ) ) - { - selected.remove( key ); - source.setSelected( false ); - } - else - { - selected.add( key ); - source.setSelected( true ); - } - } - } - if( okLabel == null || source.equals( submitButton ) ) - { - close(); - } - } - } - } - - } ); - } - - public KeyClass getOption() - { - return selected.isEmpty() ? null : selected.get( 0 ); - } - - public List getSelected() - { - return selected; - } - - public void close() - { - setVisible( false ); - dispose(); - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafRuntimeException.java b/trunk/SIPRPSoft/src/leaf/ui/LeafRuntimeException.java deleted file mode 100644 index c0451e9b..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafRuntimeException.java +++ /dev/null @@ -1,18 +0,0 @@ -package leaf.ui; - -public class LeafRuntimeException extends RuntimeException -{ - private static final long serialVersionUID = 1L; - - private boolean abort = false; - - public LeafRuntimeException( boolean all ) - { - this.abort = all; - } - - public boolean isAbort() - { - return abort; - } -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafTableModel.java b/trunk/SIPRPSoft/src/leaf/ui/LeafTableModel.java deleted file mode 100644 index 66d22449..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafTableModel.java +++ /dev/null @@ -1,174 +0,0 @@ -package leaf.ui; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import com.evolute.adt.OrderedMap; -import com.evolute.utils.tables.BaseTableModel; - -public class LeafTableModel extends BaseTableModel -{ - - private static final long serialVersionUID = 1L; - - private OrderedMap map = new OrderedMap(); - - public LeafTableModel(String n[]) - { - super( n, null ); - setChangeable( false ); - } - - public void clearAll() - { - int i = map.rows(); - if( i > 0 ) - { - map.clear(); - fireTableRowsDeleted( 0, i - 1 ); - } - } - - @Override - public int innerGetRowCount() - { - return map == null ? 0 : map.rows(); - } - - @Override - public Object innerGetValueAt( int row, int col ) - { - return map.getValueAt( row, col ); - } - - @Override - public void deleteRow( int row ) - { - map.deleteRow( row ); - } - - public Object getKey( int row ) - { - Object result = null; - if( row < map.rows() ) - { - result = map.getKeyForRow( row ); - } - return result; - } - - public void setValues( Collection v ) - { - Iterator iterator = v.iterator(); - while( iterator.hasNext() ) - { - Object value = iterator.next(); - map.putLast( value, value.toString() ); - } - fireTableDataChanged(); - } - - public void setValues( OrderedMap map ) - { - this.map = (OrderedMap) map; - fireTableDataChanged(); - } - - public void order(int ... colNumber ) - { - if(colNumber != null) - { - map.order(colNumber); - fireTableDataChanged(); - } - } - - @Override - public void appendEmptyRow() - { - map.putLast( map.rows(), (Object) null ); - } - - @Override - public void innerSetValueAt( Object obj, int row, int col ) - { - if( isCellEditable( row, col ) && map.getValueAt( row, col ) != null ) - { - map.setValueAt( row, col, obj ); - } - } - - @Override - public boolean isRowEmpty( int row ) - { - List line = map.getRow( row ); - return line != null && line.size() > 0; - } - - @Override - public boolean innerIsCellEditable( int row, int col ) - { - return false; - } - - public void printContents() - { - for( int r = 0; r < getRowCount(); r++ ) - { - for( int c = 0; c < getColumnCount(); c++ ) - { - Object val = getValueAt( r, c ); - if( val != null ) - { - System.out.print( val.toString() + "\t" ); - } - } - System.out.println( "" ); - } - } - - // public void insertRowAt( Object rowObj, int row ) - // { - // values.add( row, rowObj ); - // fireTableDataChanged(); - // } - // - // public void removeRowAt( int row ) - // { - // values.remove( row ); - // fireTableDataChanged(); - // } - // - // public Object getRowAt( int row ) - // { - // return values.elementAt( row ); - // } - - // public void swapRows( int row1, int row2 ) - // { - // if( row1 == row2 || row1 < 0 || row2 < 0 || row1 >= getRowCount() || row2 - // >= getRowCount() ) - // { - // return; - // } - // // Collections.swap( values, row1, row2 ); - // Object row1Data = getRowAt( row1 ); - // Object row2Data = getRowAt( row2 ); - // if( row1 < row2 ) - // { - // removeRowAt( row2 ); - // removeRowAt( row1 ); - // insertRowAt( row2Data, row1 ); - // insertRowAt( row1Data, row2 ); - // } - // else - // { - // removeRowAt( row1 ); - // removeRowAt( row2 ); - // insertRowAt( row1Data, row2 ); - // insertRowAt( row2Data, row1 ); - // } - // } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafTextAreaEditor.java b/trunk/SIPRPSoft/src/leaf/ui/LeafTextAreaEditor.java deleted file mode 100644 index ed0db935..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafTextAreaEditor.java +++ /dev/null @@ -1,180 +0,0 @@ -package leaf.ui; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; -import javax.swing.JTextField; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.text.JTextComponent; - -import siprp.SIPRPSpellChecker; - -import com.evolute.adt.Validator; -import com.evolute.utils.ui.text.CopyPasteHandler; - - -public class LeafTextAreaEditor extends JPanel -{ - - public static final String ACTION_SAVE = "ACTION_SAVE"; - - public static final String ACTION_REVERT = "ACTION_REVERT"; - - private static final long serialVersionUID = 1L; - - private static final String ICON_NAME_SAVE = "leaf/ui/icons/save.png"; - - private static final String ICON_NAME_REVERT = "leaf/ui/icons/revert.png"; - - private final LeafButton buttonSave = LeafIconButton.createButton( ICON_NAME_SAVE ); - - private final LeafButton buttonRevert = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final JTextComponent fieldText; - - private final JScrollPane scroll; - - private final Validator validator; - - private String initialValue = ""; - - public LeafTextAreaEditor( Validator validator ) - { - - this( validator, false ); - } - - public LeafTextAreaEditor( Validator validator, boolean textField ) - { - this.validator = validator; - fieldText = textField ? new JTextField() : new JTextArea(); - scroll = new JScrollPane(fieldText); - startupComponents( textField ); - startupLayout( textField ); - placeComponents( textField ); - setupListeners(); - enableButtons( false ); - } - - public void setValue( String value ) - { - this.initialValue = value == null ? "" : value; - fieldText.setText( initialValue ); - } - - private void startupComponents( boolean textField ) - { - if( !textField ) - { - ((JTextArea) fieldText).setWrapStyleWord( true ); - ((JTextArea) fieldText).setLineWrap( true ); - } - new CopyPasteHandler(fieldText); - scroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); - buttonSave.setMargin( new Insets(0,0,0,0) ); - buttonRevert.setMargin( new Insets(0,0,0,0) ); - SIPRPSpellChecker.getInstance().attachSpellCheckToComponent( fieldText ); - } - - private void startupLayout( boolean textField ) - { - TableLayout layout; - if( !textField ) - { - layout = new TableLayout( - new double[]{ TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM }, - new double[]{ TableLayout.MINIMUM, TableLayout.FILL } ); - } - else - { - layout = new TableLayout( - new double[]{ TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM }, - new double[]{ TableLayout.MINIMUM } ); - } - this.setLayout( layout ); - } - - private void placeComponents( boolean textField ) - { - if( ! textField ) - { - this.add( scroll, new TableLayoutConstraints( 0, 1, 2, 1) ); - this.add( buttonSave, new TableLayoutConstraints( 1, 0 ) ); - this.add( buttonRevert, new TableLayoutConstraints( 2, 0 ) ); - } - else - { - this.add( fieldText, new TableLayoutConstraints( 0, 0 ) ); - this.add( buttonSave, new TableLayoutConstraints( 1, 0 ) ); - this.add( buttonRevert, new TableLayoutConstraints( 2, 0 ) ); - } - } - - private void setupListeners() - { - buttonSave.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - save(); - } - } ); - buttonRevert.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - revert(); - } - } ); - fieldText.addCaretListener( new CaretListener() - { - @Override - public void caretUpdate( CaretEvent e ) - { - enableButtons( !initialValue.equals( fieldText.getText() ) && ( validator == null || validator.isValid( fieldText.getText() ) ) ); - } - } ); - } - - private void enableButtons( boolean enable ) - { - buttonRevert.setEnabled( enable ); - buttonSave.setEnabled( enable ); - } - - private void save() - { - enableButtons( false ); - firePropertyChange( ACTION_SAVE, initialValue, fieldText.getText() ); - initialValue = fieldText.getText(); - } - - private void revert() - { - fieldText.setText( initialValue ); - enableButtons( false ); - firePropertyChange( ACTION_REVERT, fieldText.getText(), initialValue ); - } - - @Override - public void setEnabled( boolean enabled ) - { - fieldText.setEnabled( enabled ); - if( enabled ) - { - fieldText.requestFocusInWindow(); - } - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafTextDialog.java b/trunk/SIPRPSoft/src/leaf/ui/LeafTextDialog.java deleted file mode 100644 index 5364670b..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafTextDialog.java +++ /dev/null @@ -1,170 +0,0 @@ -package leaf.ui; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JPanel; -import javax.swing.JRootPane; -import javax.swing.JTextArea; - -import siprp.ui.SIPRPFrame; - -public class LeafTextDialog extends JDialog -{ - private static final long serialVersionUID = 1L; - - private static final Dimension buttonSize = new Dimension( 30, 20 ); - - private static final Dimension textSize = new Dimension( 200, 20 ); - - private static final Dimension expandedTextSize = new Dimension( 300, 200 ); - - private String text = null; - - private String defaultText = null; - - private boolean expanded = true; - - private final JTextArea textArea = new JTextArea(); - private final LeafButton expandButton = new LeafButton( "+" ); - private final LeafButton okButton = new LeafButton( "Ok" ); - private final LeafButton cancelButton = new LeafButton( "X" ); - - private TableLayout layout = null; - private TableLayout expandedLayout = null; - - /** Creates a new instance of JCalendarDialog */ - public LeafTextDialog( LeafWindow parentFrame, JComponent parent, String defaultText, boolean expanded ) - { - super( parentFrame ); - this.defaultText = defaultText == null ? "" : defaultText; - this.text = this.defaultText; - setModal( true ); - setContentPane( new LeafGradientPanel() ); - textArea.setText( text ); - expandButton.setPreferredSize( buttonSize ); - cancelButton.setPreferredSize( buttonSize ); - okButton.setPreferredSize( buttonSize ); - setupLayout(); - setUndecorated( true ); - setDefaultCloseOperation( SIPRPFrame.DO_NOTHING_ON_CLOSE ); - getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); - setLocationRelativeTo( null ); - this.expanded = expanded; - expand( expanded ); - addListeners(); - setVisible( true ); - } - - private void setupLayout() - { - double[] cols = new double[] { - TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED, TableLayout.PREFERRED - }; - double[] rows = new double[] { - TableLayout.PREFERRED - }; - layout = new TableLayout( cols, rows ); - - cols = new double[] { - TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED, TableLayout.PREFERRED - }; - rows = new double[] { - TableLayout.PREFERRED, TableLayout.FILL - }; - expandedLayout = new TableLayout( cols, rows ); - } - - private void placeComponents(boolean expand) - { - if(expand) - { - getContentPane().add( expandButton, new TableLayoutConstraints( 0, 0 ) ); - getContentPane().add( new JPanel(), new TableLayoutConstraints( 0, 1 ) ); - getContentPane().add( textArea, new TableLayoutConstraints( 1, 0,1,1 ) ); - getContentPane().add( okButton, new TableLayoutConstraints( 2, 0 ) ); - getContentPane().add( cancelButton, new TableLayoutConstraints( 3, 0 ) ); - getContentPane().add( new JPanel(), new TableLayoutConstraints( 2, 1,3,1 ) ); - } - else - { - getContentPane().add( expandButton, new TableLayoutConstraints( 0, 0 ) ); - getContentPane().add( textArea, new TableLayoutConstraints( 1, 0 ) ); - getContentPane().add( okButton, new TableLayoutConstraints( 2, 0 ) ); - getContentPane().add( cancelButton, new TableLayoutConstraints( 3, 0 ) ); - } - - ((JComponent) getContentPane()).setBorder( BorderFactory.createRaisedBevelBorder() ); - -// setSize( expand ? expandedLayout.preferredLayoutSize( this.getContentPane() ) : layout.preferredLayoutSize( this.getContentPane() ) ); - setSize( getLayout().preferredLayoutSize( getRootPane() ) ); - } - - private void setupComponents(boolean expand) - { - getContentPane().setLayout( expand ? expandedLayout : layout); - textArea.setPreferredSize( expand ? expandedTextSize : textSize ); - expandButton.setText( expand ? "-" : "+" ); - placeComponents(expand); - } - - private void expand( boolean expand ) - { - setupComponents(expand); - setResizable( expand ); - } - - private void addListeners() - { - expandButton.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - expanded = !expanded; - expand( expanded ); - } - } ); - - okButton.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - text = textArea.getText(); - close(); - } - } ); - - cancelButton.addActionListener( new ActionListener() - { - - @Override - public void actionPerformed( ActionEvent e ) - { - text = defaultText; - close(); - } - - } ); - } - - public String getText() - { - return text; - } - - public void close() - { - setVisible( false ); - dispose(); - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafTree.java b/trunk/SIPRPSoft/src/leaf/ui/LeafTree.java deleted file mode 100644 index 3059f5f6..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafTree.java +++ /dev/null @@ -1,74 +0,0 @@ -package leaf.ui; - -import java.util.Enumeration; -import java.util.LinkedList; -import java.util.List; - -import javax.swing.JTree; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreeModel; -import javax.swing.tree.TreePath; - -import com.evolute.utils.ui.trees.TreeTools; - -public class LeafTree extends JTree -{ - - private static final long serialVersionUID = 1L; - - private final List expandedNodes = new LinkedList(); - - public LeafTree(TreeModel model) - { - super(model); - } - - public void saveExpansionState() - { - expandedNodes.clear(); - TreePath treePath = new TreePath(getRoot()); - savePath( treePath ); - } - - private DefaultMutableTreeNode getRoot() - { - return (DefaultMutableTreeNode) getModel().getRoot(); - } - - private void savePath( TreePath treePath ) - { - if( treePath != null ) - { - Enumeration expanded = getExpandedDescendants(treePath); - if( expanded != null ) - { - while( expanded.hasMoreElements() ) - { - TreePath path = expanded.nextElement(); - if( path != null ) - { - Object leaf = path.getLastPathComponent(); - if( leaf instanceof DefaultMutableTreeNode ) - { - Object userObject = ((DefaultMutableTreeNode)leaf).getUserObject(); - if( userObject != null ) - { - expandedNodes.add(userObject); - } - } - } - savePath(path); - } - } - } - } - - public void loadExpansionState() - { - for( Object userObject : expandedNodes ) - { - TreeTools.expandNodeForObject( userObject, this ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafUIConstants.java b/trunk/SIPRPSoft/src/leaf/ui/LeafUIConstants.java deleted file mode 100644 index 5e4817c6..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafUIConstants.java +++ /dev/null @@ -1,15 +0,0 @@ -package leaf.ui; - -public interface LeafUIConstants -{ - public static final String ICON_NAME_CREATE = "leaf/ui/icons/create.png"; - - public static final String ICON_NAME_EDIT = "leaf/ui/icons/edit.png"; - - public static final String ICON_NAME_REMOVE = "leaf/ui/icons/delete.png"; - - public static final String ICON_NAME_SAVE = "leaf/ui/icons/save.png"; - - public static final String ICON_NAME_REVERT = "leaf/ui/icons/revert.png"; - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/LeafWindow.java b/trunk/SIPRPSoft/src/leaf/ui/LeafWindow.java deleted file mode 100755 index 64fdefb6..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/LeafWindow.java +++ /dev/null @@ -1,940 +0,0 @@ -package leaf.ui; - -import static info.clearthought.layout.TableLayoutConstants.FILL; -import static leaf.ui.LeafLogic.ACTION_CANCEL; -import static leaf.ui.LeafLogic.ACTION_STARTUP; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Cursor; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.lang.annotation.Annotation; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Queue; - -import javax.swing.BorderFactory; -import javax.swing.DefaultListSelectionModel; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTree; -import javax.swing.SwingUtilities; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.table.TableModel; - -import leaf.ui.LeafLogic.Action; -import leaf.ui.LeafLogic.LeafLogicActionBinding; -import leaf.ui.LeafLogic.LeafUIActionBinding; -import siprp.ui.SIPRPFrame; - -import com.evolute.adt.Pair; -import com.evolute.utils.tables.BaseTable; -import com.evolute.utils.tables.ColumnizedMappable; -import com.evolute.utils.tables.VectorTableModel; -import com.evolute.utils.tracker.TrackableWindow; - -public class LeafWindow extends SIPRPFrame implements TrackableWindow, ListSelectionListener, TreeSelectionListener, ActionListener, PropertyChangeListener -{ - - private static final long serialVersionUID = 1L; - - private static final int DEFAULT_HEIGHT = 480; - - private static final int DEFAULT_WIDTH = 640; - - /** - * Registers DataComponent in a list of actions - * - * @author tsimao - * - */ - @Retention(RetentionPolicy.RUNTIME) - public @interface ActionActivation - { - /** - * Array of actions to execute when a select is listened in this - * JComponent - * - * @return - */ - String[] onSelect(); - - /** - * Array of actions to execute when a change is listened in this - * JComponent - * - * @return - */ - String[] onChange(); - - } - - /** - * Binds an Object to actions - * - * @author tsimao - * - */ - @Retention(RetentionPolicy.RUNTIME) - public @interface LeafObject - { - - /** - * Actions that use this field - */ - String[] useWith(); - } - - /** - * Declares a JPanel as a leaf - * - * @author tsimao - * - */ - @Retention(RetentionPolicy.RUNTIME) - public @interface LeafPanel - { - } - - /** - * This window's logic controller - */ - private final LeafLogic logicController; - - private List subPanels = new ArrayList(); - - /** - * Actions - */ - private Map mapActionByName = new HashMap(); - - /** - * Fields - */ - private Map> mapWindowOnSelectFieldByActionName = new HashMap>(); - private Map> mapWindowOnChangeFieldByActionName = new HashMap>(); - private Map mapLeafObjectByActionName = new HashMap(); - private Map mapInstanceByField = new HashMap(); - - /** - * Methods - */ - private Map> mapWindowMethodsByActionName = new HashMap>(); - private Map mapLogicMethodByActionName = new HashMap(); - private Map mapInstanceByMethod = new HashMap(); - - /** - * Meta-info - */ - private Map mapAnnotationByObject = new HashMap(); - - /** - * Run later actions - */ - private Queue> listRunLater = new LinkedList>(); - - /** - * Creates a new LeafWindow binded with given 'logicController' - * - * @param logicController - * @throws IllegalArgumentException - * @throws IllegalAccessException - */ - public LeafWindow(LeafLogic logicController) - { - super(); - setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); - this.logicController = logicController; - if( logicController != null ) - { - logicController.addWindow( this ); - } - } - - @Override - public void open() - { - setVisible( true ); - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable() - { - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - @Override - public boolean closeIfPossible() - { - close(); - return true; - } - - @Override - public void refresh() - { - } - - /** - * Aborts current action. Aborts pending actions as well if 'all' is true - * - * @param all - */ - public void abortAction( boolean all ) - { - runGivenAction( ACTION_CANCEL, null ); - throw new LeafRuntimeException( all ); - } - - protected boolean runAction( String actionName ) - { - return runAction( actionName, null ); - } - - /** - * Returns false if an error occurred - * - * @param actionName - * @param argument - * @return - */ - protected boolean runAction( String actionName, Object argument ) - { - boolean ok = true; - if( argument == null ) - { - Field field = mapLeafObjectByActionName.get( actionName ); - if(field != null) - { - Object instance = mapInstanceByField.get( field ); - if( instance != null) - { - try - { - argument = field.get( instance ); - } catch( IllegalArgumentException e ) - { - e.printStackTrace(System.out); - } catch( IllegalAccessException e ) - { - e.printStackTrace( System.out); - } - } - } - } - try - { - runGivenAction( actionName, argument ); - } catch( LeafRuntimeException leafRuntimeException ) - { - ok = !leafRuntimeException.isAbort(); - } - if( ok ) - { - runPendingActions(); - } - else - { - listRunLater.clear(); - } - return ok; - } - - public void runActionLater( String action ) - { - runActionLater( action, null ); - } - - public void runActionLater( String action, Object argument ) - { - if( action != null && mapActionByName.containsKey( action ) ) - { - listRunLater.add( new Pair( action, argument ) ); - } - } - - /** - * Fires ACTION_STARTUP - */ - public void completeSetup() - { - try - { - loadLeafs(); - loadActions(); - loadFields(); - loadMethods(); - runAction( ACTION_STARTUP, null ); - setVisible( true ); - } catch( Exception e ) - { - e.printStackTrace( System.out ); - } - } - - public static void setupTopBottomSimpleActionsPanel(JPanel where, JPanel top, JPanel bottom) - { - TableLayout layout = new TableLayout(new double[]{TableLayout.FILL}, new double[]{TableLayout.MINIMUM, TableLayout.FILL,TableLayout.MINIMUM}); - where.setLayout( layout ); - where.add( top, new TableLayoutConstraints(0,0) ); - where.add( new JPanel(), new TableLayoutConstraints(0,1) ); - where.add( bottom, new TableLayoutConstraints(0,2) ); - } - - public static void setupSimpleDataPanel( JPanel where, String name, JComponent... field ) - { - double[] cols = new double[] { - FILL - }; - double[] rows = new double[field.length]; - for( int i = 0; i < field.length; rows[i++] = TableLayout.PREFERRED ) - ; - rows[rows.length - 1] = FILL; - TableLayout layout = new TableLayout( cols, rows ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - where.setLayout( layout ); - if( name != null ) - { - where.setBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), name ) ); - } - - for( int i = 0; i < field.length; ++i ) - { - where.add( field[i], new TableLayoutConstraints( 0, i ) ); - } - } - - private void loadLeafs() throws IllegalArgumentException, IllegalAccessException - { - Field fields[] = this.getClass().getDeclaredFields(); - if( fields != null ) - { - for( Field field : fields ) - { - if( field.getAnnotation( LeafPanel.class ) != null && field.get( this ) != null ) - { - subPanels.add( (JPanel) field.get( this ) ); - } - } - } - } - - private void loadActions() throws IllegalArgumentException, IllegalAccessException - { - Field[] allLogicFields = this.logicController.getClass().getFields(); - for( Field field : allLogicFields ) - { - Action action = field.getAnnotation( Action.class ); - if( action != null ) - { - String value = (String) field.get( this ); - if( value != null ) - { - mapActionByName.put( value, action ); - mapWindowMethodsByActionName.put( value, new ArrayList() ); - mapWindowOnSelectFieldByActionName.put( value, new ArrayList() ); - mapWindowOnChangeFieldByActionName.put( value, new ArrayList() ); - } - } - } - } - - private void loadFields( Field[] fields, Object instance ) - { - try - { - for( Field field : fields ) - { - ActionActivation componentBehaviour = field.getAnnotation( ActionActivation.class ); - if( componentBehaviour != null ) - { - String[] allChanges = componentBehaviour.onChange(); - if( allChanges != null ) - { - for( String onChange : allChanges ) - { - if( mapActionByName.containsKey( onChange ) ) - { - // valid action - mapAnnotationByObject.put( field.get( instance ), componentBehaviour ); - mapWindowOnChangeFieldByActionName.get( onChange ).add( field.get( instance ) ); - if( !mapInstanceByField.containsKey( field ) ) - { - addListenerForField( componentBehaviour, field, instance ); - mapInstanceByField.put( field, instance ); - } - } - } - } - - String[] allSelect = componentBehaviour.onSelect(); - if( allSelect != null ) - { - for( String onSelect : allSelect ) - { - if( mapActionByName.containsKey( onSelect ) ) - { - // valid action - mapAnnotationByObject.put( field.get( instance ), componentBehaviour ); - mapWindowOnSelectFieldByActionName.get( onSelect ).add( field.get( instance ) ); - if( !mapInstanceByField.containsKey( field ) ) - { - addListenerForField( componentBehaviour, field, instance ); - mapInstanceByField.put( field, instance ); - } - } - } - } - } - - LeafObject leafObject = field.getAnnotation( LeafObject.class ); - if( leafObject != null ) - { - String[] useWith = leafObject.useWith(); - if( useWith != null ) - { - for( String current : useWith ) - { - if( mapActionByName.containsKey( current ) ) - { - // valid action - mapLeafObjectByActionName.put( current, field ); - mapInstanceByField.put( field, instance ); - } - } - } - } - } - } catch( IllegalAccessException exception ) - { - exception.printStackTrace( System.out ); - } - } - - private void loadFields() - { - Field[] allFields = this.getClass().getDeclaredFields(); - if( allFields != null ) - { - loadFields( allFields, this ); - - } - allFields = logicController.getClass().getDeclaredFields(); - if( allFields != null ) - { - loadFields( allFields, logicController ); - - } - for( JPanel panel : subPanels ) - { - allFields = panel.getClass().getDeclaredFields(); - if( allFields != null ) - { - loadFields( allFields, panel ); - } - } - } - - private void loadWindowMethods( Method[] windowMethods, Object instance ) - { - for( Method method : windowMethods ) - { - LeafUIActionBinding actionBinding = method.getAnnotation( LeafUIActionBinding.class ); - if( actionBinding != null ) - { - String[] actions = actionBinding.action(); - for( String actionName : actions ) - { - if( mapActionByName.containsKey( actionName ) ) - { - // valid action - mapWindowMethodsByActionName.get( actionName ).add( method ); - - mapAnnotationByObject.put( method, actionBinding ); - mapInstanceByMethod.put( method, instance ); - } - } - } - } - } - - private void loadLogicMethods() - { - Method[] allLogicMethods = this.logicController.getClass().getDeclaredMethods(); - if( allLogicMethods != null ) - { - for( Method method : allLogicMethods ) - { - LeafLogicActionBinding actionBinding = method.getAnnotation( LeafLogicActionBinding.class ); - if( actionBinding != null ) - { - String[] actions = actionBinding.actions(); - if( actions != null ) - { - for( String actionName : actions ) - { - if( mapActionByName.containsKey( actionName ) ) - { - // valid action - mapAnnotationByObject.put( method, actionBinding ); - mapLogicMethodByActionName.put( actionName, method ); - mapInstanceByMethod.put( method, logicController ); - } - } - } - } - } - } - } - - private void loadMethods() - { - loadLogicMethods(); - - Method[] allWindowMethods = this.getClass().getDeclaredMethods(); - if( allWindowMethods != null ) - { - loadWindowMethods( allWindowMethods, this ); - } - - for( JPanel panel : subPanels ) - { - allWindowMethods = panel.getClass().getDeclaredMethods(); - if( allWindowMethods != null ) - { - loadWindowMethods( allWindowMethods, panel ); - } - } - - } - - private Object getObjectForAction( String actionName ) - { - Object result = null; - Field field = mapLeafObjectByActionName.get( actionName ); - if( field != null ) - { - Object instance = mapInstanceByField.get( field ); - if( instance != null ) - { - try - { - result = field.get( instance ); - } catch( IllegalArgumentException e ) - { - e.printStackTrace(); - } catch( IllegalAccessException e ) - { - e.printStackTrace(); - } - } - } - return result; - } - - public void runPendingActions() - { - while( listRunLater.size() > 0 ) - { - Pair p = listRunLater.poll(); - runAction( p.getLeft(), p.getRight() ); - } - } - - /** - * Executes given action - */ - private void runGivenAction( String actionName, Object argument ) - { - System.out.println( "Running: " + actionName ); - try - { - this.setCursor( Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR ) ); - if( actionName != null && mapActionByName.containsKey( actionName ) ) - { - Action action = mapActionByName.get( actionName ); - if( action.isSave() ) - { - Object windowArgument = getObjectForAction( actionName ); - if( windowArgument == null ) - { - windowArgument = argument; - } - Object logicArgument = windowArgument; - for( Method currentWindowMethod : mapWindowMethodsByActionName.get( actionName ) ) - { - Object currentLogicArgument = runWindowMethod( currentWindowMethod, windowArgument != null ? windowArgument : argument ); - logicArgument = logicArgument == null ? currentLogicArgument : logicArgument; - } - runLogicMethod( mapLogicMethodByActionName.get( actionName ), logicArgument ); - } - else - { - Object windowArgument = runLogicMethod( mapLogicMethodByActionName.get( actionName ), argument ); - for( Method currentWindowMethod : mapWindowMethodsByActionName.get( actionName ) ) - { - runWindowMethod( currentWindowMethod, windowArgument != null ? windowArgument : argument ); - } - } - } - } finally - { - this.setCursor( Cursor.getDefaultCursor() ); - } - } - - private Object runLogicMethod( Method logicMethod, Object argument ) throws LeafRuntimeException - { - Object result = null; - try - { - if( logicMethod != null ) - { - if( logicMethod.getParameterTypes().length > 0 ) - { - result = logicMethod.invoke( logicController, argument ); - } - else - { - result = logicMethod.invoke( logicController ); - } - } - } catch( IllegalArgumentException e ) - { - System.out.println("Error in: " + logicMethod.getName() ); - System.out.println("Got: " + argument + " expected: " + (logicMethod.getParameterTypes().length > 0 ? logicMethod.getParameterTypes()[0].getCanonicalName() : "(nothing)")); - e.printStackTrace( System.out ); - } catch( IllegalAccessException e ) - { - e.printStackTrace( System.out ); - } catch( InvocationTargetException e ) - { - if( e.getCause() instanceof LeafRuntimeException ) - { - throw (LeafRuntimeException) e.getCause(); - } - else - { - e.printStackTrace( System.out ); - } - } - return result; - } - - private Object runWindowMethod( Method windowMethod, Object argument ) throws LeafRuntimeException - { - Object result = null; - try - { - if( windowMethod != null ) - { - if( windowMethod.getParameterTypes().length > 0 ) - { - result = windowMethod.invoke( mapInstanceByMethod.get( windowMethod ), argument ); - } - else - { - result = windowMethod.invoke( mapInstanceByMethod.get( windowMethod ) ); - } - } - } catch( IllegalArgumentException e ) - { - System.out.println("Error in: " + windowMethod.getName() ); - System.out.println("Got: " + argument + " expected: " + (windowMethod.getParameterTypes().length > 0 ? windowMethod.getParameterTypes()[0].getCanonicalName() : "(nothing)")); - e.printStackTrace( System.out ); - } catch( IllegalAccessException e ) - { - e.printStackTrace( System.out ); - } catch( InvocationTargetException e ) - { - if( e.getCause() instanceof LeafRuntimeException ) - { - throw (LeafRuntimeException) e.getCause(); - } - else - { - e.printStackTrace( System.out ); - } - } - return result; - } - - private void addListenerForField( ActionActivation annotation, Field field, Object instance ) - { - if( instance instanceof SIPRPFrame || instance instanceof JPanel ) - { - try - { - Object value = field.get( instance ); - if( value instanceof BaseTable ) - { - ((BaseTable) value).getSelectionModel().addListSelectionListener( this ); - } - else if( value instanceof JTree ) - { - ((JTree) value).addTreeSelectionListener( this ); - } - else if( value instanceof JButton ) - { - ((JButton) value).addActionListener( this ); - } - else if( value instanceof LeafInputField ) - { - ((LeafInputField) value).addPropertyChangeListener( this ); - } - } catch( IllegalAccessException e ) - { - e.printStackTrace( System.out ); - } catch( NullPointerException e ) - { - e.printStackTrace( System.out ); - } - } - } - - private Object getArgumentListSelectionEvent( String actionName, ListSelectionEvent event ) - { - Object source = event.getSource(); - List allComponents = mapWindowOnSelectFieldByActionName.get( actionName ); - for( Object component : allComponents ) - { - if( component instanceof BaseTable && ((BaseTable) component).getSelectionModel().equals( source ) ) - { - int [] indexes = ((BaseTable) component).getSelectedRows(); - if( indexes != null && indexes.length > 0 ) - { - TableModel model = ((BaseTable) component).getModel(); - if( model instanceof VectorTableModel ) - { - if(indexes.length == 1 && indexes[0] > -1) - { - return ((ColumnizedMappable) ((VectorTableModel) model).getRowAt( indexes[0] )).getID(); - } - else - { - List allSelected = new ArrayList(); - for(int i = 0; i < indexes.length; ++i) - { - allSelected.add( ((ColumnizedMappable) ((VectorTableModel) model).getRowAt( indexes[0] )).getID() ); - } - return allSelected; - } - } - else if( model instanceof LeafTableModel ) - { - if(indexes.length == 1 && indexes[0] > -1) - { - return ((LeafTableModel) model).getKey( indexes[0] ); - } - else - { - List allSelected = new ArrayList(); - for(int i = 0; i < indexes.length; ++i) - { - allSelected.add( ((LeafTableModel) model).getKey( indexes[0] )); - } - return allSelected; - } - } - } - } - } - return null; - } - - private List getActionListSelectionEvent( ListSelectionEvent event ) - { - List result = new ArrayList(); - if( event.getSource() instanceof DefaultListSelectionModel ) - { - DefaultListSelectionModel model = (DefaultListSelectionModel) event.getSource(); - BaseTable table = null; - for( List allComponents : mapWindowOnSelectFieldByActionName.values() ) - { - // for each registered table - for( Object component : allComponents ) - { - if( component instanceof BaseTable && ((BaseTable) component).getSelectionModel().equals( model ) ) - { - table = (BaseTable) component; - } - if( table != null ) - { - break; - } - } - if( table != null ) - { - break; - } - } - Annotation an = mapAnnotationByObject.get( table ); - if( an != null && an instanceof ActionActivation ) - { - String[] actions = ((ActionActivation) an).onSelect(); - for( String actionName : actions ) - { - result.add( actionName ); - } - } - } - return result; - } - - // returns selected node - private Object getArgumentTreeSelectionEvent( String actionName, TreeSelectionEvent event ) - { - List components = mapWindowOnSelectFieldByActionName.get( actionName ); - for( Object component : components ) - { - if( component instanceof JTree && event.getPath() != null ) - { - Object[] nodes = event.getPath().getPath(); - if( nodes != null && nodes.length > 0 ) - { - return nodes[nodes.length - 1]; - } - } - } - return null; - } - - private List getActionTreeSelectionEvent( TreeSelectionEvent event ) - { - List result = new ArrayList(); - Annotation an = mapAnnotationByObject.get( event.getSource() ); - if( an != null && an instanceof ActionActivation ) - { - String[] actions = ((ActionActivation) an).onSelect(); - for( String actionName : actions ) - { - result.add( actionName ); - } - } - return result; - } - - private List getActionActionEvent( ActionEvent event ) - { - List result = new ArrayList(); - Annotation an = mapAnnotationByObject.get( event.getSource() ); - if( an != null && an instanceof ActionActivation ) - { - String[] actions = ((ActionActivation) an).onSelect(); - for( String actionName : actions ) - { - result.add( actionName ); - } - } - return result; - } - - private List getActionsForPropertyChangeEvent( PropertyChangeEvent evt ) - { - List result = new ArrayList(); - Annotation an = mapAnnotationByObject.get( evt.getSource() ); - if( an != null ) - { - if( an instanceof ActionActivation ) - { - if( evt.getSource() instanceof LeafInputField ) - { - if( LeafInputField.PROPERTY_CHANGED_CONSTANT.equals( evt.getPropertyName() ) ) - { - String[] actions = ((ActionActivation) an).onChange(); - for( String actionName : actions ) - { - result.add( actionName ); - } - } - } - } - } - return result; - } - - @Override - public void valueChanged( TreeSelectionEvent event ) - { - List actions = getActionTreeSelectionEvent( event ); - for( String action : actions ) - { - Object argument = getArgumentTreeSelectionEvent( action, event ); - if( !runAction( action, argument ) ) - { - break; - } - } - } - - /** - * Listens to ListSelectionEvents - */ - @Override - public void valueChanged( ListSelectionEvent event ) - { - if( !event.getValueIsAdjusting() ) - { - List actionNames = getActionListSelectionEvent( event ); - for( String action : actionNames ) - { - Object argument = getArgumentListSelectionEvent( action, event ); - if( !runAction( action, argument ) ) - { - break; - } - } - } - } - - @Override - public void actionPerformed( ActionEvent event ) - { - List actionNames = getActionActionEvent( event ); - if( actionNames.size() > 0 ) - { - for( int i = 1; i < actionNames.size(); ++i ) - { - runActionLater( actionNames.get( i ) ); - } - runAction( actionNames.get( 0 ) ); - } - } - - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - List actionNames = getActionsForPropertyChangeEvent( evt ); - if( actionNames.size() > 0 ) - { - for( int i = 1; i < actionNames.size(); ++i ) - { - runActionLater( actionNames.get( i ) ); - } - runAction( actionNames.get( 0 ) ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/SimpleTable.java b/trunk/SIPRPSoft/src/leaf/ui/SimpleTable.java deleted file mode 100644 index 756cbb51..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/SimpleTable.java +++ /dev/null @@ -1,84 +0,0 @@ -package leaf.ui; - -import java.util.List; -import java.util.Vector; - -import javax.swing.BorderFactory; -import javax.swing.JScrollPane; -import javax.swing.ListSelectionModel; -import javax.swing.event.ListSelectionListener; - -import com.evolute.utils.tables.BaseTable; -import com.evolute.utils.tables.VectorTableModel; - -public class SimpleTable extends JScrollPane -{ - - private static final long serialVersionUID = 1L; - - private final VectorTableModel model; - - private final BaseTable table; - - public SimpleTable( String ... columnName ) - { - model = new VectorTableModel( columnName ); - table = new BaseTable( model ); - setViewportView(table); - setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - } - - public VectorTableModel getModel() - { - return model; - } - - public BaseTable getTable() - { - return table; - } - - public void setTitle(String title) - { - setBorder(BorderFactory.createTitledBorder(title)); - } - - public void addListSelectionListener(ListSelectionListener listener){ - table.getSelectionModel().addListSelectionListener(listener); - } - - public void setRows( Vector rows ) - { - model.setValues( rows ); - } - - public ROW_CLASS getSelectedRow() - { - ROW_CLASS result = null; - int index = table.getSelectedRow(); - if( index > -1 ) - { - result = model.getRowAt( index ); - } - return result; - } - - public List getSelectedRows() - { - List result = null; - int [] index = table.getSelectedRows(); - for( int i = 0; i < index.length; ++i ) - { - result.add( model.getRowAt( index[i] ) ); - } - return result; - } - - public void clear() - { - model.clearAll(); - } - -} diff --git a/trunk/SIPRPSoft/src/leaf/ui/TreeInserterDialog.java b/trunk/SIPRPSoft/src/leaf/ui/TreeInserterDialog.java deleted file mode 100644 index a56a6283..00000000 --- a/trunk/SIPRPSoft/src/leaf/ui/TreeInserterDialog.java +++ /dev/null @@ -1,323 +0,0 @@ -package leaf.ui; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.IOException; -import java.util.Enumeration; -import java.util.LinkedList; -import java.util.List; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JScrollPane; -import javax.swing.JTree; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import com.evolute.swing.dialog.EvoDialog; -import com.evolute.utils.error.ErrorLogger; -import com.evolute.utils.images.ImageException; -import com.evolute.utils.images.ImageIconLoader; -import com.evolute.utils.ui.trees.TreeTools; - - - -public class TreeInserterDialog extends EvoDialog -{ - - private static final long serialVersionUID = 1L; - - private static final String ICON_NAME_ADD = "leaf/ui/icons/add.png"; - - private static final String ICON_NAME_REM = "leaf/ui/icons/rem.png"; - - private final DefaultMutableTreeNode newRoot = new DefaultMutableTreeNode(); - - private final DefaultTreeModel newModel = new DefaultTreeModel( newRoot ); - - private final JTree newTree = new JTree( newModel ); - - private final JScrollPane newScroll = new JScrollPane( newTree ); - - private final DefaultMutableTreeNode allRoot; - - private final DefaultTreeModel allModel; - - private final JTree allTree; - - private final JScrollPane allScroll; - - private JButton buttonAdd = null; - - private JButton buttonRemove = null; - - private final JButton buttonOK = new JButton( "OK" ); - - private final JButton buttonCancel = new JButton( "Cancelar" ); - - private static List expandedNodes = new LinkedList(); - - public TreeInserterDialog( String title, DefaultMutableTreeNode root ) - { - this.allRoot = root; - this.allModel = new DefaultTreeModel( allRoot ); - this.allTree = new JTree( allModel ); - this.allScroll = new JScrollPane( allTree ); - this.setTitle( title ); - try - { - buttonAdd = new JButton( ImageIconLoader.loadImageIcon( ICON_NAME_ADD ) ); - buttonRemove = new JButton( ImageIconLoader.loadImageIcon( ICON_NAME_REM ) ); - } - catch( ImageException e ) - { - ErrorLogger.logException( e ); - } - catch ( IOException e ) - { - ErrorLogger.logException( e ); - } - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - loadExpansionState(); - setEnabled(); - maximize(); - this.setModal( true ); - this.setVisible( true ); - } - - private void loadExpansionState() - { - TreeTools.refreshTree( allTree, allRoot, expandedNodes.isEmpty() ); - for( Object userObject : expandedNodes ) - { - TreeTools.expandNodeForObject( userObject, allTree ); - } - } - - private void startupComponents() - { - newTree.setRootVisible( false ); - newTree.getSelectionModel().setSelectionMode( TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION ); - allTree.setRootVisible( false ); - allTree.getSelectionModel().setSelectionMode( TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); - allScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); - allScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - newScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); - newScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - buttonAdd.setToolTipText( "Adicionar" ); - buttonRemove.setToolTipText( "Remover" ); - buttonAdd.setMargin( new Insets(0,0,0,0) ); - buttonRemove.setMargin( new Insets(0,0,0,0) ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( - new double[]{ TableLayout.FILL, TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM }, - new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM } - ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - getContentPane().setLayout( layout ); - } - - private void placeComponents() - { - getContentPane().add( new JLabel("Todos"), new TableLayoutConstraints( 0,0 ) ); - getContentPane().add( new JLabel("a adicionar..."), new TableLayoutConstraints( 2,0,4,0 ) ); - getContentPane().add( allScroll, new TableLayoutConstraints( 0,1,0,4 ) ); - getContentPane().add( buttonAdd, new TableLayoutConstraints( 1,1 ) ); - getContentPane().add( buttonRemove, new TableLayoutConstraints( 1,3 ) ); - getContentPane().add( newScroll, new TableLayoutConstraints( 2,1,4,3 ) ); - getContentPane().add( buttonOK, new TableLayoutConstraints( 3,4 ) ); - getContentPane().add( buttonCancel, new TableLayoutConstraints( 4,4 ) ); - } - - private void startupListeners() - { - buttonAdd.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - move( allTree, newTree ); - } - } ); - buttonRemove.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - move( newTree, allTree ); - } - } ); - buttonOK.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - ok(); - } - } ); - buttonCancel.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - cancel(); - } - } ); - allTree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener(){ - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setEnabled(); - } - } ); - newTree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener(){ - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setEnabled(); - } - } ); - } - - private void move( JTree from, JTree to ) - { - TreePath [] paths = from.getSelectionPaths(); - if( paths != null ) - { - DefaultMutableTreeNode fromRoot = (DefaultMutableTreeNode) from.getModel().getRoot(); - DefaultMutableTreeNode toRoot = (DefaultMutableTreeNode) to.getModel().getRoot(); - for( TreePath path : paths ) - { - for( int i = 1; i < path.getPathCount(); ++i ) - { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getPathComponent( i ); - DefaultMutableTreeNode parent = (DefaultMutableTreeNode) path.getPathComponent( i-1 ); - if( node != null && parent != null ) - { - DefaultMutableTreeNode exists = TreeTools.findNodeWithUserObject( node.getUserObject(), toRoot ); - if( exists == null ) - { - add(node, parent.getUserObject(), toRoot, path.getPathCount() == i + 1 ); - } - else if( i + 1 == path.getPathCount() ) - { - TreeTools.merge( exists, node ); - } - } - } - removeNode( (DefaultMutableTreeNode) path.getLastPathComponent(), fromRoot ); - } - TreeTools.refreshTree( from, fromRoot, true ); - TreeTools.refreshTree( to, toRoot, true ); - } - } - - private void removeNode( DefaultMutableTreeNode node, DefaultMutableTreeNode root ) - { - DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent(); - node.removeFromParent(); - if( parent != null && parent.getChildCount() == 0 ) - { - removeNode( parent, root ); - } - } - - private void add( DefaultMutableTreeNode node, Object parent, DefaultMutableTreeNode where, boolean fullClone ) - { - DefaultMutableTreeNode parentNode = TreeTools.findNodeWithUserObject( parent, where ); - if( parentNode == null ) - { - parentNode = where; - } - parentNode.add( fullClone ? TreeTools.cloneFullNode(node) : (DefaultMutableTreeNode) node.clone() ); - } - - private void ok() - { - close(); - } - - private void cancel() - { - newRoot.removeAllChildren(); - close(); - } - - private void close() - { - saveExpandedState(); - setVisible( false ); - } - - private void setEnabled() - { - boolean allSelected = allTree.getSelectionPath() != null; - boolean newSelected = newTree.getSelectionPath() != null; - boolean somethingToAdd = newRoot.getChildCount() > 0; - buttonAdd.setEnabled( allSelected ); - buttonRemove.setEnabled( newSelected ); - buttonOK.setEnabled( somethingToAdd ); - } - - public DefaultMutableTreeNode getResult() - { - return newRoot; - } - - private void saveExpandedState( ) - { - expandedNodes.clear(); - if( allTree != null ) - { - Object root = allTree.getModel().getRoot(); - if( root != null ) - { - savePath( new TreePath(root) ); - } - } - } - - private void savePath( TreePath treePath ) - { - if( treePath != null ) - { - Enumeration expanded = allTree.getExpandedDescendants(treePath); - if( expanded != null ) - { - while( expanded.hasMoreElements() ) - { - TreePath path = expanded.nextElement(); - if( path != null ) - { - Object leaf = path.getLastPathComponent(); - if( leaf instanceof DefaultMutableTreeNode ) - { - Object userObject = ((DefaultMutableTreeNode)leaf).getUserObject(); - if( userObject != null ) - { - expandedNodes.add(userObject); - } - } - } - savePath(path); - } - } - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/Main.java b/trunk/SIPRPSoft/src/siprp/Main.java index 5c2395c2..552077e0 100644 --- a/trunk/SIPRPSoft/src/siprp/Main.java +++ b/trunk/SIPRPSoft/src/siprp/Main.java @@ -22,6 +22,7 @@ import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.MutableTreeNode; import shst.SHSTPropertiesConstants; +import shst.SHSTShutdownHook; import shst.lembretes.LembretesDaemon; import siprp.clientes.AvisosPanel; import siprp.companydataloaders.SIPRPPropertiesLoader; @@ -77,7 +78,7 @@ public class Main implements com.evolute.utils.ui.window.Connector UIManager.put( "FormattedTextField.inactiveForeground", ColorUIResource.BLACK ); UIManager.put( "FormattedTextField.foreground", ColorUIResource.RED.darker() ); - new SIPRPShutdownHook().init(); + new SHSTShutdownHook().init(); new SIPRPUIInitializer().doInit(); diff --git a/trunk/SIPRPSoft/src/siprp/SIPRPShutdownHook.java b/trunk/SIPRPSoft/src/siprp/SIPRPShutdownHook.java deleted file mode 100644 index ef10365c..00000000 --- a/trunk/SIPRPSoft/src/siprp/SIPRPShutdownHook.java +++ /dev/null @@ -1,39 +0,0 @@ -package siprp; - -import siprp.higiene.relatorio.MedidasRiscosDeleterController; - -import com.evolute.threads.EvoShutdownHook; -import com.evolute.utils.error.ErrorLogger; - -public class SIPRPShutdownHook extends EvoShutdownHook -{ - - public SIPRPShutdownHook() - { - - } - - - public void execute() - { - MedidasRiscosDeleterController controller = MedidasRiscosDeleterController.getInstance(); - System.out.println( "\nChecking " + controller.getThreads().size() + " threads ..." ); - for ( Thread deleter : controller.getThreads() ) - { - System.out.println( "\nChecking " + deleter.getName() + " ... Running ? " + deleter.isAlive() ); - if ( deleter.isAlive() ) - { - try - { - System.out.println( "\nWaiting for <" + deleter + "> ... " ); - deleter.join(); - } - catch ( InterruptedException e ) - { - ErrorLogger.logException( e ); - } - } - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/SIPRPTracker.java b/trunk/SIPRPSoft/src/siprp/SIPRPTracker.java index b4876428..207a1798 100644 --- a/trunk/SIPRPSoft/src/siprp/SIPRPTracker.java +++ b/trunk/SIPRPSoft/src/siprp/SIPRPTracker.java @@ -15,12 +15,17 @@ import javax.swing.tree.DefaultMutableTreeNode; import shst.SHSTPropertiesConstants; import shst.SHSTTrackerInterface; import shst.cursos.CursosWindowAdapter; +import shst.higiene.gestao.GestaoRelatorioWindow; import shst.higiene.mapa.MapaHigieneWindow; import shst.higiene.marcacoes.MarcacoesHigieneInterface; import shst.higiene.marcacoes.MarcacoesHigieneWindow; +import shst.higiene.relatorio.RelatorioHigieneSegurancaWindow; import shst.lembretes.LembretesMultiWindow; import shst.medicina.MedicinaWindow; import shst.medicina.MedicinaWindowInterface; +import shst.medicina.exames.ui.RecepcaoExamesWindow; +import shst.medicina.locais_analise.EnviarAnalisesWindow; +import shst.medicina.locais_realizacao.LocaisRealizacaoWindow; import shst.medicina.multi.MultiMarcacoesWindow; import shst.medicina.presencas.RegistarPresencasWindow; import shst.medicina.prestadores.PrestadoresWindow; @@ -29,12 +34,7 @@ import siprp.companydataloaders.SIPRPPropertiesLoader; import siprp.cursos.SIPRPCursosInit; import siprp.estatistica.EstatisticaWindow; import siprp.ficha.FichaWindow; -import siprp.higiene.gestao.GestaoRelatorioWindow; -import siprp.higiene.relatorio.RelatorioHigieneSegurancaWindow; import siprp.impressaofichas.ImpressaoFichasWindow; -import siprp.medicina.exames.ui.RecepcaoExamesWindow; -import siprp.medicina.locais_analise.EnviarAnalisesWindow; -import siprp.medicina.locais_realizacao.LocaisRealizacaoWindow; import siprp.pesquisas.RelatorioAnualWindow; import com.evolute.module.cursos.CursosWindow; @@ -57,7 +57,7 @@ public class SIPRPTracker extends WindowTracker implements SHSTTrackerInterface public static final String MEDICINA_MARCACOES = "Marca\u00e7\u00f5es"; public static final String MEDICINA_MULTI_MARCACOES = MultiMarcacoesWindow.TITLE; public static final String MEDICINA_LOCAIS = "Locais de Realiza\u00e7\u00e3o"; - public static final String MEDICINA_ENVIO_ANALISES= EnviarAnalisesWindow.TITLE; + public static final String MEDICINA_ENVIO_ANALISES = EnviarAnalisesWindow.TITLE; public static final String MEDICINA_PRESENCAS = "Presen\u00e7as"; public static final String HIGIENE_SEGURANCA = "Higiene e Seguran\u00e7a"; public static final String RELATORIO_ANUAL = "Relat\u00f3rio Anual"; diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/AdicionarPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/AdicionarPanel.java deleted file mode 100644 index 172774a8..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/AdicionarPanel.java +++ /dev/null @@ -1,131 +0,0 @@ -package siprp.higiene.gestao; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; - -public abstract class AdicionarPanel extends SIPRPLazyLoadedPanel -{ - - private static final long serialVersionUID = 1L; - - private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/add.png"; - - private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/delete.png"; - - protected final LeafButton buttonAdicionar = LeafIconButton.createButton( ICON_NAME_SAVE ); - - protected final LeafButton buttonRemover = LeafIconButton.createButton( ICON_NAME_REVERT ); - - public static final String SELECTION_CHANGED = "SELECTION_CHANGED"; - - protected final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - protected final DefaultTreeModel model = new DefaultTreeModel( root ); - - protected final LeafTree tree = new LeafTree( model ); - - protected final JScrollPane scroll = new JScrollPane( tree ); - - public AdicionarPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - buttonAdicionar.setEnabled( false ); - buttonRemover.setEnabled( false ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - JPanel panel = new JPanel(); - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panel.setLayout( layout ); - panel.add( buttonAdicionar, new TableLayoutConstraints( 0, 0 ) ); - panel.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) ); - - add( panel, new TableLayoutConstraints( 0, 0 ) ); - add( scroll, new TableLayoutConstraints( 0, 1 ) ); - } - - private void startupListeners() - { - buttonAdicionar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - add(); - } - } ); - buttonRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - rem(); - } - } ); - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - Object selection = path.getLastPathComponent(); - firePropertyChange( SELECTION_CHANGED, null, selection ); - } - setEnabled(); - } - } ); - } - - protected abstract void rem(); - - protected abstract void add(); - - protected abstract void setEnabled(); - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/EmpresaPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/EmpresaPanel.java deleted file mode 100644 index f2fa218b..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/EmpresaPanel.java +++ /dev/null @@ -1,158 +0,0 @@ -package siprp.higiene.gestao; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Component; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.List; - -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JTabbedPane; - -import leaf.ui.LeafDialog; -import shst.data.outer.EmpresasData; -import shst.data.provider.MedicinaDataProvider; - -import com.evolute.utils.error.ErrorLogger; - -public class EmpresaPanel extends SIPRPLazyLoadedPanel -{ - - private static final long serialVersionUID = 1L; - - private static final String NULL_EMPRESA = "Nenhuma"; - - private final JComboBox comboEmpresa = new JComboBox(); - - private final JCheckBox checkImpressao = new JCheckBox("Imprimir tabela alargada"); - - private final GerirEmpresaPanel panelEmpresa = new GerirEmpresaPanel(); - - private final GerirEstabelecimentosPanel panelEstabelecimentos = new GerirEstabelecimentosPanel(); - - private final JTabbedPane tabs = new JTabbedPane(); - - private EmpresasData empresa = null; - - public EmpresaPanel() - { - startupListeners(); - startupComponents(); - setupLayout(); - placeComponents(); - } - - private void startupComponents() - { - List empresas = null; - try - { - MedicinaDataProvider medicinaProvider = MedicinaDataProvider.getProvider(); - empresas = medicinaProvider.getAllEmpresas(); - } - catch ( Exception e ) - { - ErrorLogger.logException( e ); - } - - if( empresas != null ) - { - comboEmpresa.addItem( NULL_EMPRESA ); - for( EmpresasData empresa : empresas ) - { - comboEmpresa.addItem( empresa ); - } - } - tabs.addTab( "Empresa", panelEmpresa ); - tabs.addTab( "Estabelecimentos", panelEstabelecimentos ); - } - - private void setupLayout() - { - double[] cols = new double[]{ - TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM - }; - double[] rows = new double[]{ - TableLayout.MINIMUM, TableLayout.FILL, - }; - TableLayout layout = new TableLayout(cols,rows); - layout.setHGap( 10 ); - layout.setVGap( 10 ); - this.setLayout( layout ); - } - - private void placeComponents() - { - this.add( new JLabel( "Empresa" ), new TableLayoutConstraints( 0, 0 ) ); - this.add( comboEmpresa, new TableLayoutConstraints( 1, 0 ) ); - this.add( checkImpressao, new TableLayoutConstraints( 2, 0 ) ); - this.add( tabs, new TableLayoutConstraints( 0, 1, 2, 1 ) ); - } - - private void setEmpresa( EmpresasData empresa ) - { - this.empresa = empresa; - checkImpressao.setSelected( empresa != null && empresa.getImprimir_tabela_alargada() != null && empresa.getImprimir_tabela_alargada() ); - } - - private void startupListeners() - { - checkImpressao.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - try - { - if( empresa != null ) - { - empresa.setImprimir_tabela_alargada( checkImpressao.isSelected() ); - empresa.save(); - } - } - catch( Exception ex ) - { - LeafDialog.error( ex ); - } - } - } ); - comboEmpresa.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - Object item = e.getItem(); - if( item != null && ItemEvent.SELECTED == e.getStateChange() ) - { - if( item instanceof EmpresasData ) - { - panelEmpresa.setEmpresa( (EmpresasData) item ); - panelEstabelecimentos.setEmpresa( (EmpresasData) item ); - EmpresaPanel.this.setEmpresa( (EmpresasData) item ); - } - else - { - panelEmpresa.setEmpresa( null ); - panelEstabelecimentos.setEmpresa( null ); - EmpresaPanel.this.setEmpresa( null ); - } - } - } - } ); - } - - @Override - protected void refresh() - { - Component c = tabs.getSelectedComponent(); - if( c instanceof SIPRPLazyLoadedPanel ) - { - ((SIPRPLazyLoadedPanel)c).init(); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEmpresaPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEmpresaPanel.java deleted file mode 100644 index d91a2e43..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEmpresaPanel.java +++ /dev/null @@ -1,84 +0,0 @@ -package siprp.higiene.gestao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import static com.evolute.utils.strings.UnicodeLatin1Map.otilde; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; - -import javax.swing.BorderFactory; - -import shst.data.outer.EmpresasData; -import siprp.higiene.gestao.email.AdicionarEmailsPanel; -import siprp.higiene.gestao.legislacao.AdicionarLegislacaoPanel; -import siprp.higiene.gestao.normalizacao.AdicionarNormalizacaoPanel; -import siprp.higiene.gestao.postos.GerirAreasPanel; -import siprp.higiene.gestao.riscos.AdicionarRiscosPanel; - -public class GerirEmpresaPanel extends SIPRPLazyLoadedPanel -{ - - private static final long serialVersionUID = 1L; - - private final GerirAreasPanel panelAreas = new GerirAreasPanel(); - private final AdicionarRiscosPanel panelRiscos = new AdicionarRiscosPanel(); - private final AdicionarEmailsPanel panelEmails = new AdicionarEmailsPanel(); - private final AdicionarLegislacaoPanel panelLegislacao = new AdicionarLegislacaoPanel(); - private final AdicionarNormalizacaoPanel panelNormalizacao = new AdicionarNormalizacaoPanel(); - - public GerirEmpresaPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - panelAreas.setBorder( BorderFactory.createTitledBorder( "Postos de trabalho" ) ); - panelRiscos.setBorder( BorderFactory.createTitledBorder( "Riscos" ) ); - panelEmails.setBorder( BorderFactory.createTitledBorder( "Emails" ) ); - panelLegislacao.setBorder( BorderFactory.createTitledBorder( "Legisla" + ccedil + atilde + "o" ) ); - panelNormalizacao.setBorder( BorderFactory.createTitledBorder( "Normaliza" + ccedil + otilde + "es" ) ); - panelEmails.setPreferredSize( new Dimension(0,150) ); - } - - private void setupLayout() - { - double [] cols = new double[]{ TableLayout.FILL, TableLayout.FILL, TableLayout.FILL, }; - double [] rows = new double[]{ TableLayout.FILL, TableLayout.FILL }; - TableLayout layout = new TableLayout( cols, rows ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - this.setLayout( layout ); - } - - private void placeComponents() - { - this.add( panelAreas, new TableLayoutConstraints( 0, 0, 0, 1 ) ); - this.add( panelRiscos, new TableLayoutConstraints( 1, 0, 1, 1 ) ); - this.add( panelLegislacao, new TableLayoutConstraints( 2, 0 ) ); - this.add( panelNormalizacao, new TableLayoutConstraints( 2, 1 ) ); - } - - private void startupListeners() - { - } - - public void setEmpresa( EmpresasData empresa ) - { - panelAreas.setEmpresa( empresa ); - panelLegislacao.setEmpresa( empresa ); - panelRiscos.setEmpresa( empresa ); - panelNormalizacao.setEmpresa( empresa ); - } - - @Override - protected void refresh() - { - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEstabelecimentosPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEstabelecimentosPanel.java deleted file mode 100644 index ebd8bdb7..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GerirEstabelecimentosPanel.java +++ /dev/null @@ -1,148 +0,0 @@ -package siprp.higiene.gestao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.BorderFactory; -import javax.swing.JComboBox; -import javax.swing.JPanel; - -import shst.data.outer.EmpresasData; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsPostoData; -import siprp.higiene.gestao.email.AdicionarEmailsPanel; -import siprp.higiene.gestao.legislacao.AdicionarLegislacaoPanel; -import siprp.higiene.gestao.normalizacao.AdicionarNormalizacaoPanel; -import siprp.higiene.gestao.postos.AdicionarAreasPanel; -import siprp.higiene.gestao.riscos.AdicionarRiscosPanel; - -public class GerirEstabelecimentosPanel extends JPanel -{ - - private static final long serialVersionUID = 1L; - - private static final String NULL_ESTABELECIMENTO = "Nenhum"; - - private final JComboBox comboEstabelecimentos = new JComboBox(); - private final JPanel panelAreasRiscos = new JPanel(); - private final AdicionarAreasPanel panelAreas = new AdicionarAreasPanel(); - private final AdicionarRiscosPanel panelRiscos = new AdicionarRiscosPanel(); - private final AdicionarEmailsPanel panelEmails = new AdicionarEmailsPanel(); - private final AdicionarLegislacaoPanel panelLegislacao = new AdicionarLegislacaoPanel(); - private final AdicionarNormalizacaoPanel panelNormalizacao = new AdicionarNormalizacaoPanel(); - - public GerirEstabelecimentosPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - panelAreasRiscos.setBorder( BorderFactory.createTitledBorder( "Riscos por posto de trabalho" ) ); - panelRiscos.setBorder( BorderFactory.createTitledBorder( "Riscos" ) ); - panelEmails.setBorder( BorderFactory.createTitledBorder( "Emails" ) ); - panelLegislacao.setBorder( BorderFactory.createTitledBorder( "Legisla" + ccedil + atilde + "o" ) ); - panelEmails.setPreferredSize( new Dimension(0,150) ); - } - - private void setupLayout() - { - double [] cols = new double[]{ TableLayout.FILL, TableLayout.FILL, TableLayout.FILL, }; - double [] rows = new double[]{ TableLayout.MINIMUM, TableLayout.FILL,TableLayout.FILL, TableLayout.PREFERRED }; - TableLayout layout = new TableLayout( cols, rows ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - this.setLayout( layout ); - - panelAreasRiscos.setLayout( new GridLayout( 1, 2 ) ); - } - - private void placeComponents() - { - panelAreasRiscos.add( panelAreas ); - panelAreasRiscos.add( panelRiscos ); - - this.add( comboEstabelecimentos, new TableLayoutConstraints( 0, 0, 2, 0 ) ); - this.add( panelAreasRiscos, new TableLayoutConstraints( 0, 1, 1, 3 ) ); - this.add( panelLegislacao, new TableLayoutConstraints( 2, 1 ) ); - this.add( panelNormalizacao, new TableLayoutConstraints( 2, 2 ) ); - this.add( panelEmails, new TableLayoutConstraints( 2, 3 ) ); - } - - private void startupListeners() - { - comboEstabelecimentos.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - if( e.getItem() != null && ItemEvent.SELECTED == e.getStateChange() ) - { - if( e.getItem() instanceof EstabelecimentosData ) - { - EstabelecimentosData estabelecimento = (EstabelecimentosData) e.getItem(); - panelAreas.setEstabelecimento( estabelecimento ); - panelEmails.setEstabelecimento( estabelecimento ); - panelLegislacao.setEstabelecimento( estabelecimento ); - panelNormalizacao.setEstabelecimento( estabelecimento ); - } - else - { - EstabelecimentosData estabelecimento = null; - panelAreas.setEstabelecimento( estabelecimento ); - panelEmails.setEstabelecimento( estabelecimento ); - panelLegislacao.setEstabelecimento( estabelecimento ); - panelNormalizacao.setEstabelecimento( estabelecimento ); - } - } - } - } ); - panelAreas.addPropertyChangeListener( AdicionarAreasPanel.SELECTION_CHANGED, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - Object obj = evt.getNewValue(); - if( obj != null && (obj instanceof HsPostoData) ) - { - panelRiscos.setPosto( (HsPostoData) obj ); - } - else - { - panelRiscos.setPosto( null ); - } - } - } ); - } - - public void setEmpresa( EmpresasData empresa ) - { - comboEstabelecimentos.removeAllItems(); - System.out.println("setEmpresa!"); - if( empresa != null ) - { - comboEstabelecimentos.addItem( NULL_ESTABELECIMENTO ); - for( EstabelecimentosData estabelecimento : empresa.fromEstabelecimentos_empresa_id() ) - { - comboEstabelecimentos.addItem( estabelecimento ); - } - if( comboEstabelecimentos.getItemCount() > 0 ) - { - comboEstabelecimentos.setSelectedIndex( 0 ); - } - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GestaoRelatorioWindow.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/GestaoRelatorioWindow.java deleted file mode 100644 index 5a81e190..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GestaoRelatorioWindow.java +++ /dev/null @@ -1,83 +0,0 @@ -package siprp.higiene.gestao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.oacute; - -import java.awt.Dimension; - -import javax.swing.JTabbedPane; -import javax.swing.SwingUtilities; - -import siprp.ui.SIPRPFrame; - -import com.evolute.utils.tracker.TrackableWindow; - -public class GestaoRelatorioWindow extends SIPRPFrame implements TrackableWindow -{ - - public static final String TITLE = "Gest" + atilde + "o de Relat" + oacute + "rio de H&S"; - - private static final Dimension SIZE = new Dimension( 1024, 700 ); - - private static final long serialVersionUID = 1L; - - private final JTabbedPane tabs = new JTabbedPane(); - - private final GlobalPanel panelGlobal = new GlobalPanel(); - - private final EmpresaPanel panelEmpresa = new EmpresaPanel(); - - public static void main( String[] args ) - { - GestaoRelatorioWindow window = new GestaoRelatorioWindow(); - window.setDefaultCloseOperation( SIPRPFrame.EXIT_ON_CLOSE ); - window.open(); - } - - public GestaoRelatorioWindow() - { - this.setTitle( TITLE ); - this.setSize( SIZE ); - this.setLocationRelativeTo( null ); - placeComponents(); - } - - private void placeComponents() - { - tabs.addTab( "Global", panelGlobal ); - tabs.addTab( "Por Empresa", panelEmpresa ); - this.setContentPane( tabs ); - } - - @Override - public void open() - { - setVisible( true ); - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable() - { - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - @Override - public boolean closeIfPossible() - { - close(); - return true; - } - - @Override - public void refresh() - { - } - - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GlobalPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/GlobalPanel.java deleted file mode 100644 index a9d94e00..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/GlobalPanel.java +++ /dev/null @@ -1,71 +0,0 @@ -package siprp.higiene.gestao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; - -import java.awt.Component; - -import javax.swing.JTabbedPane; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import siprp.higiene.gestao.equipamentos.GerirEquipamentosPanel; -import siprp.higiene.gestao.legislacao.GerirLegislacaoPanel; -import siprp.higiene.gestao.normalizacao.GerirNormalizacaoPanel; -import siprp.higiene.gestao.riscos.GerirRiscosPanel; - -public class GlobalPanel extends JTabbedPane -{ - - private static final long serialVersionUID = 1L; - - private final GerirRiscosPanel panelRiscos = new GerirRiscosPanel(); - - private final GerirLegislacaoPanel panelLegislacao = new GerirLegislacaoPanel(); - - private final GerirNormalizacaoPanel panelNormalizacao= new GerirNormalizacaoPanel(); - - private final GerirEquipamentosPanel panelEquipamentos = new GerirEquipamentosPanel(); - - public GlobalPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - panelRiscos.init(); - } - - private void startupComponents() - { - addTab( "Riscos", panelRiscos ); - addTab( "Legisla" + ccedil + atilde + "o", panelLegislacao ); - addTab( "Normaliza" + ccedil + atilde + "o", panelNormalizacao ); - addTab( "Equipamentos", panelEquipamentos ); - } - - private void setupLayout() - { - } - - private void placeComponents() - { - } - - private void startupListeners() - { - addChangeListener( new ChangeListener() - { - @Override - public void stateChanged( ChangeEvent e ) - { - Component c = getSelectedComponent(); - if( c instanceof SIPRPLazyLoadedPanel ) - { - ((SIPRPLazyLoadedPanel)c).init(); - } - } - } ); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/SIPRPLazyLoadedPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/SIPRPLazyLoadedPanel.java deleted file mode 100644 index 109e8ad3..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/SIPRPLazyLoadedPanel.java +++ /dev/null @@ -1,77 +0,0 @@ -package siprp.higiene.gestao; - -import java.awt.Cursor; - -import javax.swing.SwingUtilities; - -import com.evolute.swing.frame.EvoFrame; -import com.evolute.swing.panel.EvoPanel; -import com.evolute.utils.error.ErrorLogger; - - -public abstract class SIPRPLazyLoadedPanel extends EvoPanel -{ - - private static final long serialVersionUID = 1L; - - private boolean inited = false; - - public synchronized final void doRefresh( ) - { - Runnable run = new Runnable() - { - @Override - public void run() - { - try - { - inited = true; - EvoFrame window = EvoFrame.findParentEvoFrame( SIPRPLazyLoadedPanel.this ); - if( window != null ) - { - window.runAsynchronously( new Runnable() - { - - @Override - public void run() - { - long start = System.currentTimeMillis(); - refresh(); - System.out.println("\n\t" + SIPRPLazyLoadedPanel.this.getClass() + ": took " + ( System.currentTimeMillis() - start ) ); - } - } ); - } - else - { - try - { - setCursor( new Cursor( Cursor.WAIT_CURSOR ) ); - refresh(); - } - finally - { - setCursor( new Cursor( Cursor.DEFAULT_CURSOR ) ); - } - } - } - catch( Exception e ) - { - ErrorLogger.logException( e ); - } - } - - }; - SwingUtilities.invokeLater( run ); - } - - public final void init() - { - if( !inited ) - { - doRefresh(); - } - } - - protected abstract void refresh(); - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/add.png b/trunk/SIPRPSoft/src/siprp/higiene/gestao/add.png deleted file mode 100644 index ff55ed0cead4d965e488ef6e857fa9275e721c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmV-}1AP36P)WdKHUATc!{PH%P~GB7YQATcmHFgQ9gIUp-AF)%RoqGHAX000McNliru z)&&<0F&|D4EYJV|010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00P@d zL_t(|+D%hUPZLoTJ@ZAUv{cGhLs+2EB8rBv&_oPzLE=gg5~D8MxgeTIOo)GgjZ2Lt zE+`mxBr4H02?mX*Ary@oq!3yHp#@5@)0wuk^W}YQ2Y8c{d2{p5opbL!kHgXR6wOdE z)L7rpSLg8tO~c}L(@HEISEi6a2os3VsRF@vDBJ=06>fFN!O;B+{XTaUhZSWR2`vew zn8kKR!>{FyTsB%5!Ap$O=`_J$G{GTXZ|<2G?!F^0Yhi?@XTZl>P)K^w)SAJXl7!nY zNc)o2tJj%2e&a8(@&rr3Gc=#|otk>weOLaN_<(d_7v7x?Ob)z7|EZfuw*A1|(h~M{ z3%u9n@|JMX-ZYl5hYgm5hk~JdUDtf`yR%Sr4Te>&NHa9#Os%vxEen=uqF6M+`>SQN z;|7IK5@fOVn6J+(yYXe3r|)2i(9?DqwqQdPd4$7ZwC!Cf#T&cUF#dfNXz^SEvKTP81JsnHHDG z?vxT3rj4R*m4+jU5+tb#qU0*q zf`oC`V3}CS10?|DA}MG3qPC??Z7E9d&rTfE(I{-&MrWoMRp+Y?T=H;i3`Lui{i~(E zpP|atFw??B^VmdaF|wA^Yy)bc0JT^=lx&u_MVbQglx>6hW=0LnBTnIULQcdaB5Hkp zq#y`SgaF4ef3a?lI?~xndx+dgwn^Gp*nW=;xd2#X1#uNS*W)%GA;=G-!6ieaKk8)C zJoQPThO6{8Vg`N^c@C`pPlOr5wsRLmLI5Xll}yq{bMA&qZiGe2b9xHvnJ^Yewo>}@ z9N`;*m0=uSrg9R0#bL}Ot%Mq9c$J!&>=i=FxlBhBINvhC$4o+yDsi1PjF2JhvrFU< Z{sTHZE)<@5Hy{82002ovPDHLkV1f=Fh(iDX diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/delete.png b/trunk/SIPRPSoft/src/siprp/higiene/gestao/delete.png deleted file mode 100644 index d7cc9c683c1d205a5a2cea10fce5a7faab0ef5ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmV;k15EshP)WdKHUATc!{PH%P~GB7YQATcmHFgQ9gIUp-AF)%RoqGHAX000McNliru z)&&<0F*kdqgem|4010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00Rq2 zL_t(|+D(()Z&P&`$3N$sp03+k3Up=Y!gz@gbwGlE8WS&!n1~rhmVkGfcm)?CH)c2d z0lL&)dx2T2IgA6-WA47un@m zOWyDZW=r^|u3!{%bj)T9<0-FSsdD!z%t!!7U(h+4=9*v-eenR{1v~)|y zb)-BAlGfQE&LP@$&sQ4OG*m07@kdnNIY_W7Ew8!D<9Si+Iy>Se2(p|XIQo?`N|la%`hP|+4xn5)l8+br2$8bf<`50$DUDgh>3vP~N3xl-+~+GGLE zwsBtFi63Z~!&iwP*o6M~*@^OhJ)_*C@2P)ZKn*5P=L{?p&WrQMg4H1t&9m)%^7bkQwx)=9Qo1kn zl78U{mL%=`qL5O~XKlO_E 0 ); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/AdicionarEquipamentosPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/AdicionarEquipamentosPanel.java deleted file mode 100644 index e2bf1d73..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/AdicionarEquipamentosPanel.java +++ /dev/null @@ -1,232 +0,0 @@ -package siprp.higiene.gestao.equipamentos; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; -import leaf.ui.TreeInserterDialog; -import shst.data.outer.HsEquipamentoData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.HsRelatorioEquipamentoData; -import shst.logic.HigieneSegurancaLogic; -import shst.logic.node.EquipamentoNode; - -import com.evolute.utils.ui.trees.TreeTools; - -public class AdicionarEquipamentosPanel extends JPanel -{ - - private static final long serialVersionUID = 1L; - - public static final String SELECTION_CHANGED = "SELECTION_CHANGED"; - - private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/add.png"; - - private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/delete.png"; - - private final LeafButton buttonAdicionar = LeafIconButton.createButton( ICON_NAME_SAVE ); - - private final LeafButton buttonRemover = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - public final LeafTree tree = new LeafTree( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - private HsRelatorioData relatorio = null; - - public AdicionarEquipamentosPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - buttonAdicionar.setEnabled( false ); - buttonRemover.setEnabled( false ); - buttonAdicionar.setToolTipText( "Adicionar" ); - buttonRemover.setToolTipText( "Remover" ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - JPanel panel = new JPanel(); - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panel.setLayout( layout ); - panel.add( buttonAdicionar, new TableLayoutConstraints( 0, 0 ) ); - panel.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) ); - - add( panel, new TableLayoutConstraints( 0, 0 ) ); - add( scroll, new TableLayoutConstraints( 0, 1 ) ); - } - - private void startupListeners() - { - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setEnabled(); - TreePath path = tree.getSelectionPath(); - DefaultMutableTreeNode node = path == null ? null : (DefaultMutableTreeNode)path.getLastPathComponent(); - Object obj = node == null ? null : node.getUserObject(); - HsRelatorioEquipamentoData rel = obj == null ? null : ((obj instanceof HsRelatorioEquipamentoData) ? (HsRelatorioEquipamentoData) obj : null); - firePropertyChange( SELECTION_CHANGED, null, rel == null ? null : rel.toHs_relatorio_id() ); - } - } ); - buttonAdicionar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - add(); - } - } ); - buttonRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - rem(); - } - } ); - } - - private void add() - { - if( relatorio != null ) - { - - DefaultMutableTreeNode allEquipamentos = HigieneSegurancaLogic.getEquipamentosTree(); - TreeInserterDialog dialog = new TreeInserterDialog("Adicionar equipamento",allEquipamentos); - DefaultMutableTreeNode result = dialog.getResult(); - if( result != null ) - { - for( int i = 0; i < result.getChildCount(); ++i ) - { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) result.getChildAt( i ); - Object obj = node.getUserObject(); - if( obj instanceof HsEquipamentoData ) - { - try - { - HsEquipamentoData equipamento = (HsEquipamentoData) obj; - HsRelatorioEquipamentoData relEqui = new HsRelatorioEquipamentoData(); - relEqui.setHs_equipamento( equipamento.getId() ); - relEqui.setToHs_relatorio_id( relatorio ); - relEqui.setMarca( equipamento.getMarca() ); - relEqui.setModelo( equipamento.getModelo() ); - relEqui.setTipo( equipamento.getTipo() ); - relEqui.save(); - } - catch (Exception e) - { - LeafDialog.error( e ); - } - } - } - } - refresh(); - } - } - - private void rem() - { - try - { - TreePath path = tree.getSelectionPath(); - DefaultMutableTreeNode node = path == null ? null : (DefaultMutableTreeNode)path.getLastPathComponent(); - Object obj = node.getUserObject(); - HsRelatorioEquipamentoData rel = obj == null ? null : ((obj instanceof HsRelatorioEquipamentoData) ? (HsRelatorioEquipamentoData) obj : null); - if( rel != null && confirmDelete() ) - { - rel.delete(); - refresh(); - } - } - catch (Exception e) - { - LeafDialog.error( e ); - } - } - - private boolean confirmDelete() - { - return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog( - null, "Tem a certeza que deseja remover o equipamento seleccionado?", - "Confirmar remo" + ccedil + atilde + "o", - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null ); - } - - private void setEnabled() - { - buttonAdicionar.setEnabled( relatorio != null && relatorio.getIs_submetido() == null ); - buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); - } - - public void refresh() - { - root.removeAllChildren(); - if( relatorio != null ) - { - for( HsRelatorioEquipamentoData rel : relatorio.fromHsRelatorioEquipamento_hs_relatorio_id() ) - { - root.add( new EquipamentoNode( rel ) ); - } - } - setEnabled(); - TreeTools.refreshTree( tree, root, false ); - } - - public void setRelatorio( HsRelatorioData relatorio ) - { - this.relatorio = relatorio; - refresh(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/GerirEquipamentosPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/GerirEquipamentosPanel.java deleted file mode 100644 index d3939d6d..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/GerirEquipamentosPanel.java +++ /dev/null @@ -1,333 +0,0 @@ -package siprp.higiene.gestao.equipamentos; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Date; - -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; -import leaf.ui.LeafUIConstants; -import shst.data.outer.HsEquipamentoData; -import shst.logic.HigieneSegurancaLogic; -import siprp.higiene.gestao.SIPRPLazyLoadedPanel; - -import com.evolute.utils.ui.trees.TreeTools; - -public class GerirEquipamentosPanel extends SIPRPLazyLoadedPanel implements CaretListener, LeafUIConstants -{ - - private static final long serialVersionUID = 1L; - - private LeafIconButton buttonSaveRequesito = LeafIconButton.createButton( ICON_NAME_SAVE ); - - private LeafIconButton buttonRevertRequesito = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final JPanel panelButtons = new JPanel(); - - private final JPanel panelTree = new JPanel(); - - private final JPanel panelData = new JPanel(); - - private final JTextField textTipo = new JTextField(20); - - private final JTextField textMarca = new JTextField(20); - - private final JTextField textModelo = new JTextField(20); - - private final LeafButton buttonCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonRemover = LeafIconButton.createDefaultRemoveButton(); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - private final LeafTree tree = new LeafTree( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - public GerirEquipamentosPanel() - { - startupComponents(); - startupLayout(); - placeComponents(); - setupListeners(); - } - - private void setupListeners() - { - buttonCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criar(); - } - } ); - buttonRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - remover(); - } - } ); - buttonSaveRequesito.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - save(); - } - } ); - buttonRevertRequesito.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - revert(); - } - } ); - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath path = e.getNewLeadSelectionPath(); - if( path != null ) - { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); - Object obj = node.getUserObject(); - if( obj instanceof HsEquipamentoData ) - { - textTipo.setText( ((HsEquipamentoData)obj).getTipo() ); - textMarca.setText( ((HsEquipamentoData)obj).getMarca() ); - textModelo.setText( ((HsEquipamentoData)obj).getModelo()); - } - } - else - { - textTipo.setText( "" ); - textMarca.setText( "" ); - textModelo.setText( "" ); - } - setEnabled(); - } - } ); - textTipo.addCaretListener( this ); - textMarca.addCaretListener( this ); - textModelo.addCaretListener( this ); - } - - private void criar() - { - try - { - String tipo = JOptionPane.showInputDialog( this, "Tipo", "Criar novo equipamento", JOptionPane.QUESTION_MESSAGE ); - if( tipo != null ) - { - HsEquipamentoData equipamento = new HsEquipamentoData(); - equipamento.setTipo( tipo ); - equipamento.save(); - doRefresh(); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void remover() - { - try - { - HsEquipamentoData equipamento = getSelected(); - if( equipamento != null && confirmDelete() ) - { - equipamento.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - equipamento.save(); - doRefresh(); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private boolean confirmDelete() - { - return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog( - null, "Tem a certeza que deseja remover o equipamento seleccionado?", - "Confirmar remo" + ccedil + atilde + "o", - JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null ); - } - - private void save() - { - try - { - HsEquipamentoData equipamento = getSelected(); - if( equipamento != null ) - { - equipamento.setTipo( textTipo.getText() ); - equipamento.setMarca( textMarca.getText() ); - equipamento.setModelo( textModelo.getText() ); - equipamento.save(); - doRefresh(); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void revert() - { - HsEquipamentoData equipamento = getSelected(); - if( equipamento != null ) - { - textTipo.setText( equipamento.getTipo() ); - textMarca.setText( equipamento.getMarca() ); - textModelo.setText( equipamento.getModelo() ); - } - } - - private HsEquipamentoData getSelected() - { - Object object = getSelectedObject(); - return object == null ? null : ((object instanceof HsEquipamentoData) ? (HsEquipamentoData) object : null); - } - - private Object getSelectedObject() - { - DefaultMutableTreeNode node = getSelectedNode(); - return node == null ? null : node.getUserObject(); - } - - private DefaultMutableTreeNode getSelectedNode() - { - TreePath path = tree.getSelectionPath(); - return path == null ? null : (DefaultMutableTreeNode) path.getLastPathComponent(); - } - - private void startupComponents() - { - panelTree.setPreferredSize( new Dimension( 400, 400 ) ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void setEnabled() - { - HsEquipamentoData equipamento = getSelected(); - buttonRemover.setEnabled( equipamento != null ); - textTipo.setEnabled( equipamento != null ); - textMarca.setEnabled( equipamento != null ); - textModelo.setEnabled( equipamento != null ); - buttonSaveRequesito.setEnabled( false ); - buttonRevertRequesito.setEnabled( false ); - if( equipamento != null ) - { - boolean changed = !textTipo.getText().equals( equipamento.getTipo() ); - changed |= !textMarca.getText().equals( equipamento.getMarca() == null ? "" : equipamento.getMarca() ); - changed |= !textModelo.getText().equals( equipamento.getModelo() == null ? "" : equipamento.getModelo() ); - buttonSaveRequesito.setEnabled( changed ); - buttonRevertRequesito.setEnabled( changed ); - } - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelButtons.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.FILL,TableLayout.MINIMUM,TableLayout.MINIMUM - }, new double[] { - TableLayout.MINIMUM,TableLayout.MINIMUM,TableLayout.MINIMUM, TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelData.setLayout( layout ); - - panelTree.setLayout( new GridLayout( 1,1 ) ); - } - - private void placeComponents() - { - panelButtons.add( buttonCriar, new TableLayoutConstraints( 0, 0 ) ); - panelButtons.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) ); - - panelTree.add( scroll, new TableLayoutConstraints( 0, 0 ) ); - - panelData.add( buttonSaveRequesito, new TableLayoutConstraints( 2, 0 ) ); - panelData.add( buttonRevertRequesito, new TableLayoutConstraints( 3, 0 ) ); - panelData.add( new JLabel("Tipo"), new TableLayoutConstraints( 0, 1 ) ); - panelData.add( textTipo, new TableLayoutConstraints( 1, 1, 3, 1 ) ); - panelData.add( new JLabel("Marca"), new TableLayoutConstraints( 0, 2 ) ); - panelData.add( textMarca, new TableLayoutConstraints( 1, 2, 3, 2 ) ); - panelData.add( new JLabel("Modelo"), new TableLayoutConstraints( 0, 3 ) ); - panelData.add( textModelo, new TableLayoutConstraints( 1, 3, 3, 3 ) ); - - add( panelButtons, new TableLayoutConstraints( 0, 0 ) ); - add( panelTree, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - add( panelData, new TableLayoutConstraints( 2, 1 ) ); - } - - @Override - public void refresh() - { - root.removeAllChildren(); - TreeTools.merge( root, HigieneSegurancaLogic.getEquipamentosTree() ); - TreeTools.refreshTree( tree, root, false ); - setEnabled(); - } - - @Override - public void caretUpdate( CaretEvent e ) - { - setEnabled(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/AdicionarLegislacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/AdicionarLegislacaoPanel.java deleted file mode 100644 index e1f1ef9a..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/AdicionarLegislacaoPanel.java +++ /dev/null @@ -1,207 +0,0 @@ -package siprp.higiene.gestao.legislacao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; - -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreePath; - -import leaf.ui.LeafDialog; -import leaf.ui.TreeInserterDialog; -import shst.data.outer.EmpresasData; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsLegislacaoData; -import shst.data.outer.HsLegislacaoEmpresaData; -import shst.data.outer.HsLegislacaoEstabelecimentoData; -import shst.logic.HigieneSegurancaLogic; -import siprp.higiene.gestao.AdicionarPanel; - -import com.evolute.utils.ui.trees.TreeTools; - -public class AdicionarLegislacaoPanel extends AdicionarPanel -{ - -private static final long serialVersionUID = 1L; - - private EmpresasData empresa = null; - - private EstabelecimentosData estabelecimento = null; - - public void setEmpresa( EmpresasData empresa ) - { - this.empresa = empresa; - this.estabelecimento = null; - doRefresh(); - } - - public void setEstabelecimento( EstabelecimentosData estabelecimento ) - { - this.empresa = null; - this.estabelecimento = estabelecimento; - doRefresh(); - } - - @Override - protected void add() - { - DefaultMutableTreeNode allLegislacao = getAllLegislacao(); - removeCurrent( allLegislacao ); - TreeInserterDialog dialog = new TreeInserterDialog( "Adicionar Legisla" + ccedil + atilde + "o", allLegislacao ); - DefaultMutableTreeNode result = dialog.getResult(); - if( result != null ) - { - addResult( result ); - doRefresh(); - } - setEnabled(); - } - - private DefaultMutableTreeNode getAllLegislacao() - { - DefaultMutableTreeNode result = new DefaultMutableTreeNode(); - if( empresa != null ) - { - result = HigieneSegurancaLogic.getLegislacaoTreeForEmpresa( null ); - } - else if( estabelecimento != null ) - { - result = HigieneSegurancaLogic.getLegislacaoTreeForEmpresa( estabelecimento.toEmpresa_id() ); - } - return result; - } - - private void removeCurrent( DefaultMutableTreeNode all ) - { - if( all != null && root.getChildCount() == 2 && all.getChildCount() == 2 ) - { - DefaultMutableTreeNode geralAll = (DefaultMutableTreeNode) all.getChildAt( 0 ); - DefaultMutableTreeNode especificaAll = (DefaultMutableTreeNode) all.getChildAt( 1 ); - DefaultMutableTreeNode geralCurrent = (DefaultMutableTreeNode) root.getChildAt( 0 ); - DefaultMutableTreeNode especificaCurrent = (DefaultMutableTreeNode) root.getChildAt( 1 ); - TreeTools.remove( geralAll, geralCurrent ); - TreeTools.removeAllLeafs( especificaAll, especificaCurrent ); - } - } - - private void addResult( DefaultMutableTreeNode root ) - { - try - { - if( root != null ) - { - Object userObject = root.getUserObject(); - if( userObject instanceof HsLegislacaoData ) - { - if( empresa != null ) - { - HsLegislacaoEmpresaData rel = new HsLegislacaoEmpresaData(); - rel.setToEmpresa_id( empresa ); - rel.setToLegislacao_id( ((HsLegislacaoData) userObject ) ); - rel.save(); - } - else if( estabelecimento != null ) - { - HsLegislacaoEstabelecimentoData rel = new HsLegislacaoEstabelecimentoData(); - rel.setToEstabelecimento_id( estabelecimento ); - rel.setToLegislacao_id( ((HsLegislacaoData) userObject ) ); - rel.save(); - } - } - } - for( int i = 0; i < root.getChildCount(); ++i ) - { - DefaultMutableTreeNode child = (DefaultMutableTreeNode) root.getChildAt( i ); - addResult( child ); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - @Override - public void refresh() - { - root.removeAllChildren(); - if( empresa != null ) - { - TreeTools.merge( root, HigieneSegurancaLogic.getLegislacaoTreeForEmpresa( empresa ) ); - } - else if( estabelecimento != null ) - { - TreeTools.merge( root, HigieneSegurancaLogic.getLegislacaoTreeForEstabelecimento( estabelecimento ) ); - } - setEnabled(); - TreeTools.refreshTree( tree, root, false ); - } - - @Override - protected void setEnabled() - { - buttonAdicionar.setEnabled( empresa != null || estabelecimento != null ); - buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); - } - - @Override - protected void rem() - { - try - { - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); - Object obj = node.getUserObject(); - if( obj != null && (obj instanceof HsLegislacaoData) ) - { - if( empresa != null && LeafDialog.confirmDelete( false, false, "legisla" + ccedil + atilde + "o" ) ) - { - removeFromEmpresa( ((HsLegislacaoData) obj ) ); - } - else if( estabelecimento != null && LeafDialog.confirmDelete( false, false, "legisla" + ccedil + atilde + "o" ) ) - { - removeFromEstabelecimento( ((HsLegislacaoData) obj )); - } - doRefresh(); - } - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removeFromEmpresa( HsLegislacaoData legislacao ) throws Exception - { - if( legislacao != null && empresa != null ) - { - for( HsLegislacaoEmpresaData rel : empresa.fromHsLegislacaoEmpresa_empresa_id() ) - { - if( legislacao.equals( rel.toLegislacao_id() ) ) - { - rel.delete(); - break; - } - } - } - } - - private void removeFromEstabelecimento( HsLegislacaoData legislacao ) throws Exception - { - if( legislacao != null && estabelecimento != null ) - { - for( HsLegislacaoEstabelecimentoData rel : estabelecimento.fromHsLegislacaoEstabelecimento_estabelecimento_id() ) - { - if( legislacao.equals( rel.toLegislacao_id() ) ) - { - rel.delete(); - break; - } - } - - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/GerirLegislacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/GerirLegislacaoPanel.java deleted file mode 100644 index e09bd6b3..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/legislacao/GerirLegislacaoPanel.java +++ /dev/null @@ -1,499 +0,0 @@ -package siprp.higiene.gestao.legislacao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import static com.evolute.utils.strings.UnicodeLatin1Map.iacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.GridLayout; -import java.awt.LayoutManager; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Date; - -import javax.swing.BorderFactory; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTextAreaEditor; -import leaf.ui.LeafTree; -import leaf.ui.LeafUIConstants; -import shst.data.outer.HsLegislacaoCategoriaData; -import shst.data.outer.HsLegislacaoData; -import shst.logic.HigieneSegurancaLogic; -import siprp.higiene.gestao.SIPRPLazyLoadedPanel; - -import com.evolute.adt.Validator; -import com.evolute.utils.ui.trees.TreeTools; - -public class GerirLegislacaoPanel extends SIPRPLazyLoadedPanel implements LeafUIConstants -{ - - private static final long serialVersionUID = 1L; - - private final JPanel panelGeral = new JPanel(); - - private final JPanel panelCategorias = new JPanel(); - - private final JPanel panelButtonsGeral = new JPanel(); - - private final LeafButton buttonGeralCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonGeralRemover = LeafIconButton.createDefaultRemoveButton(); - - private final JPanel panelButtonsCategoriasCategoria = new JPanel(); - - private final LeafButton buttonCategoriaCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonCategoriaEditar = LeafIconButton.createDefaultEditButton(); - - private final LeafButton buttonCategoriaRemover = LeafIconButton.createDefaultRemoveButton(); - - private final JPanel panelButtonsCategoriasLegislacao = new JPanel(); - - private final LeafButton buttonCategoriasLegislacaoCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonCategoriasLegislacaoRemover = LeafIconButton.createDefaultRemoveButton(); - - private final DefaultMutableTreeNode rootGeral = new DefaultMutableTreeNode(); - - private final DefaultTreeModel modelGeral = new DefaultTreeModel( rootGeral ); - - private final LeafTree treeGeral = new LeafTree( modelGeral ); - - private final JScrollPane scrollGeral = new JScrollPane( treeGeral ); - - private final DefaultMutableTreeNode rootCategorias = new DefaultMutableTreeNode(); - - private final DefaultTreeModel modelCategorias = new DefaultTreeModel( rootCategorias ); - - private final LeafTree treeCategorias = new LeafTree( modelCategorias ); - - private final JScrollPane scrollCategorias = new JScrollPane( treeCategorias ); - - private HsLegislacaoData selectedLegislacaoGeral = null; - - private HsLegislacaoData selectedLegislacaoEspecifica = null; - - private HsLegislacaoCategoriaData selectedCategoria = null; - - private final LeafTextAreaEditor panelData = new LeafTextAreaEditor( new Validator() - { - @Override - public boolean isValid( String object ) - { - return true; - } - } ); - - public GerirLegislacaoPanel() - { - startupComponents(); - startupLayout(); - placeComponents(); - setupListeners(); - } - - private void startupComponents() - { - panelGeral.setBorder( BorderFactory.createTitledBorder( "Legisla" + ccedil + atilde + "o de aplica" + ccedil + atilde + "o geral" ) ); - - panelCategorias.setBorder( BorderFactory.createTitledBorder( "Legisla" + ccedil + atilde + "o espec" + iacute + "fica" ) ); - panelButtonsCategoriasCategoria.setBorder( BorderFactory.createTitledBorder( "Categoria" ) ); - panelButtonsCategoriasLegislacao.setBorder( BorderFactory.createTitledBorder( "Legisla" + ccedil + atilde + "o" ) ); - - treeCategorias.setRootVisible( false ); - treeGeral.setRootVisible( false ); - treeCategorias.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - treeGeral.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void startupLayout() - { - LayoutManager layout = new TableLayout( new double[] { - TableLayout.FILL, TableLayout.FILL - }, new double[] { - TableLayout.FILL, TableLayout.FILL - } ); - this.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - panelGeral.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - panelCategorias.setLayout( layout ); - - layout = new GridLayout( 1, 2, 5, 5 ); - panelButtonsGeral.setLayout( layout ); - - layout = new GridLayout( 1, 4, 5, 5 ); - panelButtonsCategoriasCategoria.setLayout( layout ); - - layout = new GridLayout( 1, 4, 5, 5 ); - panelButtonsCategoriasLegislacao.setLayout( layout ); - } - - private void placeComponents() - { - panelButtonsGeral.add( buttonGeralCriar ); - panelButtonsGeral.add( buttonGeralRemover ); - - panelButtonsCategoriasCategoria.add( buttonCategoriaCriar ); - panelButtonsCategoriasCategoria.add( buttonCategoriaEditar ); - panelButtonsCategoriasCategoria.add( buttonCategoriaRemover ); - panelButtonsCategoriasCategoria.add( new JPanel() ); - - panelButtonsCategoriasLegislacao.add( buttonCategoriasLegislacaoCriar ); - panelButtonsCategoriasLegislacao.add( buttonCategoriasLegislacaoRemover ); - panelButtonsCategoriasLegislacao.add( new JPanel() ); - panelButtonsCategoriasLegislacao.add( new JPanel() ); - - panelGeral.add( panelButtonsGeral, new TableLayoutConstraints( 0, 0 ) ); - panelGeral.add( scrollGeral, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - - panelCategorias.add( panelButtonsCategoriasCategoria, new TableLayoutConstraints( 0, 0 ) ); - panelCategorias.add( panelButtonsCategoriasLegislacao, new TableLayoutConstraints( 1, 0 ) ); - panelCategorias.add( scrollCategorias, new TableLayoutConstraints( 0, 1, 2, 1 ) ); - - this.add( panelGeral, new TableLayoutConstraints( 0, 0 ) ); - this.add( panelCategorias, new TableLayoutConstraints( 0, 1 ) ); - this.add( panelData, new TableLayoutConstraints( 1, 0, 1, 1 ) ); - } - - private void setupListeners() - { - treeCategorias.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath selectionPath = e.getNewLeadSelectionPath(); - if( selectionPath != null ) - { - Object last = selectionPath.getLastPathComponent(); - if( last instanceof DefaultMutableTreeNode ) - { - Object userObject = ((DefaultMutableTreeNode) last).getUserObject(); - if( userObject instanceof HsLegislacaoData ) - { - selectedLegislacaoEspecifica = (HsLegislacaoData) userObject; - } - else if( userObject instanceof HsLegislacaoCategoriaData ) - { - selectedCategoria = (HsLegislacaoCategoriaData) userObject; - } - } - treeGeral.clearSelection(); - selectedLegislacaoGeral = null; - } - else - { - selectedLegislacaoEspecifica = null; - selectedCategoria = null; - } - refreshData(); - setEnable(); - } - } ); - treeGeral.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath selectionPath = e.getNewLeadSelectionPath(); - if( selectionPath != null ) - { - Object last = selectionPath.getLastPathComponent(); - if( last instanceof DefaultMutableTreeNode ) - { - Object userObject = ((DefaultMutableTreeNode) last).getUserObject(); - if( userObject instanceof HsLegislacaoData ) - { - selectedLegislacaoGeral = (HsLegislacaoData) userObject; - } - } - treeCategorias.clearSelection(); - selectedLegislacaoEspecifica = null; - selectedCategoria = null; - } - else - { - selectedLegislacaoGeral = null; - } - refreshData(); - setEnable(); - } - } ); - panelData.addPropertyChangeListener( LeafTextAreaEditor.ACTION_SAVE, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - try - { - String newValue = (String) evt.getNewValue(); - if( selectedLegislacaoEspecifica != null ) - { - selectedLegislacaoEspecifica.setDescription( newValue ); - selectedLegislacaoEspecifica.save(); - } - else if( selectedLegislacaoGeral != null ) - { - selectedLegislacaoGeral.setDescription( newValue ); - selectedLegislacaoGeral.save(); - } - doRefresh(); - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - } ); - buttonCategoriaCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarCategoria(); - } - } ); - buttonCategoriaEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarCategoria(); - } - } ); - buttonCategoriaRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerCategoria(); - } - } ); - buttonCategoriasLegislacaoCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarCategoriaLegislacao(); - } - } ); - buttonCategoriasLegislacaoRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerCategoriaLegislacao(); - } - } ); - buttonGeralCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarGeral(); - } - } ); - buttonGeralRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerGeral(); - } - } ); - } - - private void criarCategoria() - { - try - { - String categoriaString = JOptionPane.showInputDialog( this, "Nova categoria", "" ); - if( categoriaString != null ) - { - HsLegislacaoCategoriaData novaCategoria = new HsLegislacaoCategoriaData(); - novaCategoria.setDescription( categoriaString ); - novaCategoria.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarCategoria() - { - try - { - if( selectedCategoria != null ) - { - String categoriaString = JOptionPane.showInputDialog( this, "Nova categoria", selectedCategoria.getDescription() ); - if( categoriaString != null ) - { - selectedCategoria.setDescription( categoriaString ); - selectedCategoria.save(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerCategoria() - { - try - { - if( selectedCategoria != null && LeafDialog.confirmDelete( false, false, "categoria" ) ) - { - selectedCategoria.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - selectedCategoria.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void criarCategoriaLegislacao() - { - try - { - if( selectedCategoria != null ) - { - HsLegislacaoData novaLegislacao = new HsLegislacaoData(); - novaLegislacao.setDescription( "" ); - novaLegislacao.setToCategoria_id( selectedCategoria ); - novaLegislacao.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerCategoriaLegislacao() - { - try - { - if( selectedLegislacaoEspecifica != null && LeafDialog.confirmDelete( false, false, "legisla" + ccedil + atilde + "o" ) ) - { - selectedLegislacaoEspecifica.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - selectedLegislacaoEspecifica.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerGeral() - { - try - { - if( selectedLegislacaoGeral != null && LeafDialog.confirmDelete( false, false, "legisla" + ccedil + atilde + "o" ) ) - { - selectedLegislacaoGeral.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - selectedLegislacaoGeral.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void criarGeral() - { - try - { - HsLegislacaoData legislacao = new HsLegislacaoData(); - legislacao.setDescription( "" ); - legislacao.save(); - doRefresh(); - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - @Override - public void refresh() - { - rootGeral.removeAllChildren(); - rootCategorias.removeAllChildren(); - TreeTools.merge( rootGeral, HigieneSegurancaLogic.getLegislacaoGeral() ); - TreeTools.merge( rootCategorias, HigieneSegurancaLogic.getLegislacaoEspecifica() ); - TreeTools.refreshTree( treeGeral, rootGeral, false ); - TreeTools.refreshTree( treeCategorias, rootCategorias, false ); - setEnable(); - } - - private void refreshData() - { - buttonCategoriaEditar.setEnabled( false ); - buttonCategoriaRemover.setEnabled( false ); - buttonCategoriasLegislacaoCriar.setEnabled( false ); - buttonCategoriasLegislacaoRemover.setEnabled( false ); - buttonGeralRemover.setEnabled( false ); - panelData.setEnabled( false ); - if( selectedLegislacaoEspecifica != null ) - { - panelData.setValue( selectedLegislacaoEspecifica.getDescription() ); - panelData.setEnabled( true ); - } - else if( selectedLegislacaoGeral != null ) - { - panelData.setValue( selectedLegislacaoGeral.getDescription() ); - panelData.setEnabled( true ); - } - else - { - panelData.setValue( null ); - } - if( selectedCategoria != null ) - { - buttonCategoriaEditar.setEnabled( true ); - buttonCategoriaRemover.setEnabled( true ); - } - } - - private void setEnable() - { - buttonCategoriaEditar.setEnabled( selectedCategoria != null ); - buttonCategoriaRemover.setEnabled( selectedCategoria != null ); - buttonCategoriasLegislacaoCriar.setEnabled( selectedCategoria != null ); - buttonCategoriasLegislacaoRemover.setEnabled( selectedLegislacaoEspecifica != null ); - buttonGeralRemover.setEnabled( selectedLegislacaoGeral != null ); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/AdicionarNormalizacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/AdicionarNormalizacaoPanel.java deleted file mode 100644 index 88928723..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/AdicionarNormalizacaoPanel.java +++ /dev/null @@ -1,209 +0,0 @@ -package siprp.higiene.gestao.normalizacao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; - -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreePath; - -import leaf.ui.LeafDialog; -import leaf.ui.TreeInserterDialog; -import shst.data.outer.EmpresasData; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsNormalizacaoData; -import shst.data.outer.HsNormalizacaoEmpresaData; -import shst.data.outer.HsNormalizacaoEstabelecimentoData; -import shst.logic.HigieneSegurancaLogic; -import siprp.higiene.gestao.AdicionarPanel; - -import com.evolute.utils.ui.trees.TreeTools; - -public class AdicionarNormalizacaoPanel extends AdicionarPanel -{ - - private static final long serialVersionUID = 1L; - - private EmpresasData empresa = null; - - private EstabelecimentosData estabelecimento = null; - - public void setEmpresa( EmpresasData empresa ) - { - this.empresa = empresa; - this.estabelecimento = null; - doRefresh(); - setEnabled(); - } - - public void setEstabelecimento( EstabelecimentosData estabelecimento ) - { - this.empresa = null; - this.estabelecimento = estabelecimento; - doRefresh(); - setEnabled(); - } - - @Override - protected void add() - { - DefaultMutableTreeNode allNormalizacao = getAllNormalizacao(); - removeCurrent( allNormalizacao ); - TreeInserterDialog dialog = new TreeInserterDialog( "Adicionar Normaliza" + ccedil + atilde + "o", allNormalizacao ); - DefaultMutableTreeNode result = dialog.getResult(); - if( result != null ) - { - addResult( result ); - doRefresh(); - } - setEnabled(); - } - - private DefaultMutableTreeNode getAllNormalizacao() - { - DefaultMutableTreeNode result = new DefaultMutableTreeNode(); - if( empresa != null ) - { - result = HigieneSegurancaLogic.getNormalizacaoTreeForEmpresa( null ); - } - else if( estabelecimento != null ) - { - result = HigieneSegurancaLogic.getNormalizacaoTreeForEmpresa( estabelecimento.toEmpresa_id() ); - } - return result; - } - - private void removeCurrent( DefaultMutableTreeNode all ) - { - if( all != null && root.getChildCount() == 2 && all.getChildCount() == 2 ) - { - DefaultMutableTreeNode portuguesaAll = (DefaultMutableTreeNode) all.getChildAt( 0 ); - DefaultMutableTreeNode internacionalAll = (DefaultMutableTreeNode) all.getChildAt( 1 ); - DefaultMutableTreeNode portuguesaCurrent = (DefaultMutableTreeNode) root.getChildAt( 0 ); - DefaultMutableTreeNode internacionalCurrent = (DefaultMutableTreeNode) root.getChildAt( 1 ); - TreeTools.remove( portuguesaAll, portuguesaCurrent ); - TreeTools.remove( internacionalAll, internacionalCurrent ); - } - setEnabled(); - } - - private void addResult( DefaultMutableTreeNode root ) - { - try - { - if( root != null ) - { - Object userObject = root.getUserObject(); - if( userObject instanceof HsNormalizacaoData ) - { - if( empresa != null ) - { - HsNormalizacaoEmpresaData rel = new HsNormalizacaoEmpresaData(); - rel.setToEmpresa_id( empresa ); - rel.setToNormalizacao_id( ((HsNormalizacaoData) userObject ) ); - rel.save(); - } - else if( estabelecimento != null ) - { - HsNormalizacaoEstabelecimentoData rel = new HsNormalizacaoEstabelecimentoData(); - rel.setToEstabelecimento_id( estabelecimento ); - rel.setToNormalizacao_id( ((HsNormalizacaoData) userObject ) ); - rel.save(); - } - } - } - for( int i = 0; i < root.getChildCount(); ++i ) - { - DefaultMutableTreeNode child = (DefaultMutableTreeNode) root.getChildAt( i ); - addResult( child ); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - @Override - public void refresh() - { - root.removeAllChildren(); - if( empresa != null) - { - TreeTools.merge( root, HigieneSegurancaLogic.getNormalizacaoTreeForEmpresa( empresa ) ); - } - if( estabelecimento != null ) - { - TreeTools.merge( root, HigieneSegurancaLogic.getNormalizacaoTreeForEstabelecimento( estabelecimento ) ); - } - TreeTools.refreshTree( tree, root, false ); - } - - @Override - protected void setEnabled() - { - buttonAdicionar.setEnabled( empresa != null || estabelecimento != null ); - buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); - } - - @Override - protected void rem() - { - try - { - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); - Object obj = node.getUserObject(); - if( obj != null && (obj instanceof HsNormalizacaoData) ) - { - if( empresa != null ) - { - removeFromEmpresa( ((HsNormalizacaoData) obj ) ); - } - else if( estabelecimento != null ) - { - removeFromEstabelecimento( ((HsNormalizacaoData) obj )); - } - doRefresh(); - } - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removeFromEmpresa( HsNormalizacaoData normalizacao ) throws Exception - { - if( normalizacao != null && empresa != null && LeafDialog.confirmDelete( false, false, "normaliza" + ccedil + atilde + "o" ) ) - { - for( HsNormalizacaoEmpresaData rel : empresa.fromHsNormalizacaoEmpresa_empresa_id() ) - { - if( normalizacao.equals( rel.toNormalizacao_id() ) ) - { - rel.delete(); - break; - } - } - } - } - - private void removeFromEstabelecimento( HsNormalizacaoData normalizacao ) throws Exception - { - if( normalizacao != null && estabelecimento != null && LeafDialog.confirmDelete( false, false, "normaliza" + ccedil + atilde + "o" ) ) - { - for( HsNormalizacaoEstabelecimentoData rel : estabelecimento.fromHsNormalizacaoEstabelecimento_estabelecimento_id() ) - { - if( normalizacao.equals( rel.toNormalizacao_id() ) ) - { - rel.delete(); - break; - } - } - - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/GerirNormalizacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/GerirNormalizacaoPanel.java deleted file mode 100644 index c14441f8..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/normalizacao/GerirNormalizacaoPanel.java +++ /dev/null @@ -1,555 +0,0 @@ -package siprp.higiene.gestao.normalizacao; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import static com.evolute.utils.strings.UnicodeLatin1Map.oacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.GridLayout; -import java.awt.LayoutManager; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Date; - -import javax.swing.BorderFactory; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; -import javax.swing.JTextField; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; -import leaf.ui.LeafUIConstants; -import shst.data.outer.HsNormalizacaoData; -import shst.logic.HigieneSegurancaLogic; -import siprp.SIPRPSpellChecker; -import siprp.higiene.gestao.SIPRPLazyLoadedPanel; - -import com.evolute.utils.ui.trees.TreeTools; - -public class GerirNormalizacaoPanel extends SIPRPLazyLoadedPanel implements LeafUIConstants, CaretListener -{ - - private static final long serialVersionUID = 1L; - - private final JPanel panelPortuguesa = new JPanel(); - - private final JPanel panelInternacional = new JPanel(); - - private final JPanel panelButtonsPortuguesa = new JPanel(); - - private final LeafButton buttonPortuguesaCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonPortuguesaEditar = LeafIconButton.createDefaultEditButton(); - - private final LeafButton buttonPortuguesaRemover = LeafIconButton.createDefaultRemoveButton(); - - private final JPanel panelButtonsInternacional = new JPanel(); - - private final LeafButton buttonInternacionalCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonInternacionalEditar = LeafIconButton.createDefaultEditButton(); - - private final LeafButton buttonInternacionalRemover = LeafIconButton.createDefaultRemoveButton(); - - private final LeafButton buttonSave = LeafIconButton.createButton( ICON_NAME_SAVE ); - - private final LeafButton buttonRevert = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final DefaultMutableTreeNode rootPortuguesa = new DefaultMutableTreeNode(); - - private final DefaultTreeModel modelPortuguesa = new DefaultTreeModel( rootPortuguesa ); - - private final LeafTree treePortuguesa = new LeafTree( modelPortuguesa ); - - private final JScrollPane scrollPortuguesa = new JScrollPane( treePortuguesa ); - - private final DefaultMutableTreeNode rootInternacional = new DefaultMutableTreeNode(); - - private final DefaultTreeModel modelInternacional = new DefaultTreeModel( rootInternacional ); - - private final LeafTree treeInternacional = new LeafTree( modelInternacional ); - - private final JScrollPane scrollInternacional = new JScrollPane( treeInternacional ); - - private HsNormalizacaoData selectedPortuguesa = null; - - private HsNormalizacaoData selectedInternacional = null; - - private final JPanel panelData = new JPanel(); - - private final JTextField textCodigo = new JTextField(10); - - private final JTextArea textAreaDescricao = new JTextArea(); - - public GerirNormalizacaoPanel() - { - startupComponents(); - startupLayout(); - placeComponents(); - setupListeners(); - } - - private void startupComponents() - { - panelPortuguesa.setBorder( BorderFactory.createTitledBorder( "Normaliza" + ccedil + atilde + "o Portuguesa" ) ); - - panelInternacional.setBorder( BorderFactory.createTitledBorder( "Normaliza" + ccedil + atilde + "o Internacional" ) ); - - treeInternacional.setRootVisible( false ); - treePortuguesa.setRootVisible( false ); - treeInternacional.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - treePortuguesa.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - - textCodigo.setEnabled( false ); - - buttonSave.setEnabled( false ); - buttonRevert.setEnabled( false ); - } - - private void startupLayout() - { - LayoutManager layout = new TableLayout( new double[] { - TableLayout.FILL, TableLayout.FILL - }, new double[] { - TableLayout.FILL, TableLayout.FILL - } ); - this.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - panelPortuguesa.setLayout( layout ); - ((TableLayout) layout).setHGap( 5 ); - ((TableLayout) layout).setVGap( 5 ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - ((TableLayout) layout).setHGap( 5 ); - ((TableLayout) layout).setVGap( 5 ); - - panelInternacional.setLayout( layout ); - - layout = new GridLayout( 1, 3, 5, 5 ); - panelButtonsPortuguesa.setLayout( layout ); - - layout = new GridLayout( 1, 3, 5, 5 ); - panelButtonsInternacional.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM - }, new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - } ); - ((TableLayout) layout).setHGap( 5 ); - ((TableLayout) layout).setVGap( 5 ); - panelData.setLayout( layout ); - } - - private void placeComponents() - { - panelButtonsPortuguesa.add( buttonPortuguesaCriar ); - panelButtonsPortuguesa.add( buttonPortuguesaEditar ); - panelButtonsPortuguesa.add( buttonPortuguesaRemover ); - - panelButtonsInternacional.add( buttonInternacionalCriar ); - panelButtonsInternacional.add( buttonInternacionalEditar ); - panelButtonsInternacional.add( buttonInternacionalRemover ); - - panelPortuguesa.add( panelButtonsPortuguesa, new TableLayoutConstraints( 0, 0 ) ); - panelPortuguesa.add( scrollPortuguesa, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - - panelInternacional.add( panelButtonsInternacional, new TableLayoutConstraints( 0, 0 ) ); - panelInternacional.add( scrollInternacional, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - - panelData.add( buttonSave, new TableLayoutConstraints( 3, 0 ) ); - panelData.add( buttonRevert, new TableLayoutConstraints( 4, 0 ) ); - panelData.add( new JLabel("C" + oacute + "digo"), new TableLayoutConstraints( 0, 1 ) ); - panelData.add( textCodigo, new TableLayoutConstraints( 1, 1 ) ); - panelData.add( textAreaDescricao, new TableLayoutConstraints( 0, 2, 4, 2 ) ); - - this.add( panelPortuguesa, new TableLayoutConstraints( 0, 0 ) ); - this.add( panelInternacional, new TableLayoutConstraints( 0, 1 ) ); - this.add( panelData, new TableLayoutConstraints( 1, 0, 1, 1 ) ); - } - - private void setupListeners() - { - treeInternacional.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath selectionPath = e.getNewLeadSelectionPath(); - if( selectionPath != null ) - { - Object last = selectionPath.getLastPathComponent(); - if( last instanceof DefaultMutableTreeNode ) - { - Object userObject = ((DefaultMutableTreeNode) last).getUserObject(); - if( userObject instanceof HsNormalizacaoData ) - { - selectedInternacional = (HsNormalizacaoData) userObject; - } - } - treePortuguesa.clearSelection(); - selectedPortuguesa = null; - } - else - { - selectedInternacional = null; - } - refreshData(); - setEnable(); - } - } ); - treePortuguesa.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath selectionPath = e.getNewLeadSelectionPath(); - if( selectionPath != null ) - { - Object last = selectionPath.getLastPathComponent(); - if( last instanceof DefaultMutableTreeNode ) - { - Object userObject = ((DefaultMutableTreeNode) last).getUserObject(); - if( userObject instanceof HsNormalizacaoData ) - { - selectedPortuguesa = (HsNormalizacaoData) userObject; - } - } - treeInternacional.clearSelection(); - selectedInternacional = null; - } - else - { - selectedPortuguesa = null; - } - refreshData(); - setEnable(); - } - } ); - textCodigo.addCaretListener( this ); - textAreaDescricao.addCaretListener( this ); - SIPRPSpellChecker.getInstance().attachSpellCheckToComponent( textAreaDescricao ); - buttonPortuguesaCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarPortuguesa(); - } - } ); - buttonPortuguesaEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarPortuguesa(); - } - } ); - buttonPortuguesaRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerPortuguesa(); - } - } ); - buttonInternacionalCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarInternacional(); - } - } ); - buttonInternacionalEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarInternacional(); - } - } ); - buttonInternacionalRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerInternacional(); - } - } ); - buttonSave.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - try - { - save(); - } catch( Exception e1 ) - { - LeafDialog.error( e1 ); - } - } - } ); - buttonRevert.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - if( selectedInternacional != null ) - { - textAreaDescricao.setText( selectedInternacional.getDescricao() ); - textAreaDescricao.setEnabled( true ); - textCodigo.setText( selectedInternacional.getCodigo() ); - } - else if( selectedPortuguesa != null ) - { - textAreaDescricao.setText( selectedPortuguesa.getDescricao() ); - textAreaDescricao.setEnabled( true ); - textCodigo.setText( selectedPortuguesa.getCodigo() ); - } - else - { - textAreaDescricao.setText( "" ); - textCodigo.setText( "" ); - } - } - } ); - } - - private void save() throws Exception - { - if( selectedInternacional != null ) - { - selectedInternacional.setCodigo( textCodigo.getText() ); - selectedInternacional.setDescricao( textAreaDescricao.getText() ); - selectedInternacional.save(); - } - else if( selectedPortuguesa != null ) - { - selectedPortuguesa.setCodigo( textCodigo.getText() ); - selectedPortuguesa.setDescricao( textAreaDescricao.getText() ); - selectedPortuguesa.save(); - } - doRefresh(); - } - - private String getCodigoForNormalizacao( boolean criar, boolean portuguesa ) - { - String result = null; - if( criar ) - { - result = JOptionPane.showInputDialog( this, "C" + oacute + "digo", "Criar normaliza" + ccedil + atilde + "o" + (portuguesa ? " Portuguesa": " internacional"), JOptionPane.QUESTION_MESSAGE ); - } - else - { - result = JOptionPane.showInputDialog( this, "C" + oacute + "digo", portuguesa ? selectedPortuguesa.getCodigo() : selectedInternacional.getCodigo() ); - } - return result; - } - - private boolean isValidCodigo( String codigo ) - { - boolean result = false; - if( codigo != null ) - { - result = true; - } - return result; - } - - private void criarPortuguesa() - { - try - { - String codigo = getCodigoForNormalizacao(true,true); - if( isValidCodigo(codigo) ) - { - HsNormalizacaoData normalizacao = new HsNormalizacaoData(); - normalizacao.setDescricao( "" ); - normalizacao.setCodigo( codigo ); - normalizacao.setPortuguesa( true ); - normalizacao.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarPortuguesa() - { - try - { - if( selectedPortuguesa != null ) - { - String codigo = getCodigoForNormalizacao(false, true); - if( isValidCodigo(codigo) ) - { - selectedPortuguesa.setCodigo( codigo ); - selectedPortuguesa.save(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerPortuguesa() - { - try - { - if( selectedPortuguesa != null && LeafDialog.confirmDelete( false, false, "normaliza" + ccedil + atilde + "o" ) ) - { - selectedPortuguesa.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - selectedPortuguesa.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void criarInternacional() - { - try - { - String codigo = getCodigoForNormalizacao(true, false); - if( isValidCodigo(codigo) ) - { - HsNormalizacaoData normalizacao = new HsNormalizacaoData(); - normalizacao.setDescricao( "" ); - normalizacao.setCodigo( codigo ); - normalizacao.setPortuguesa( false ); - normalizacao.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarInternacional() - { - try - { - if( selectedInternacional != null ) - { - String codigo = getCodigoForNormalizacao(false, false); - if( isValidCodigo(codigo) ) - { - selectedInternacional.setCodigo( codigo ); - selectedInternacional.save(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerInternacional() - { - try - { - if( selectedInternacional != null && LeafDialog.confirmDelete( false, false, "normaliza" + ccedil + atilde + "o" ) ) - { - selectedInternacional.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - selectedInternacional.save(); - doRefresh(); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - @Override - public void refresh() - { - rootPortuguesa.removeAllChildren(); - rootInternacional.removeAllChildren(); - textCodigo.setText( "" ); - TreeTools.merge( rootPortuguesa, HigieneSegurancaLogic.getNormalizacaoTree( true ) ); - TreeTools.merge( rootInternacional, HigieneSegurancaLogic.getNormalizacaoTree( false ) ); - TreeTools.refreshTree( treePortuguesa, rootPortuguesa, false ); - TreeTools.refreshTree( treeInternacional, rootInternacional, false ); - setEnable(); - } - - private void refreshData() - { - buttonInternacionalRemover.setEnabled( false ); - buttonPortuguesaRemover.setEnabled( false ); - buttonInternacionalEditar.setEnabled( false ); - buttonPortuguesaEditar.setEnabled( false ); - textAreaDescricao.setEnabled( false ); - buttonSave.setEnabled( false ); - buttonRevert.setEnabled( false ); - if( selectedInternacional != null ) - { - textAreaDescricao.setText( selectedInternacional.getDescricao() ); - textAreaDescricao.setEnabled( true ); - textCodigo.setText( selectedInternacional.getCodigo() ); - textCodigo.setEnabled( true ); - } - else if( selectedPortuguesa != null ) - { - textAreaDescricao.setText( selectedPortuguesa.getDescricao() ); - textAreaDescricao.setEnabled( true ); - textCodigo.setText( selectedPortuguesa.getCodigo() ); - textCodigo.setEnabled( true ); - } - else - { - textAreaDescricao.setText( "" ); - textCodigo.setText( "" ); - } - } - - private void setEnable() - { - buttonPortuguesaEditar.setEnabled( selectedPortuguesa != null ); - buttonPortuguesaRemover.setEnabled( selectedPortuguesa != null ); - buttonInternacionalEditar.setEnabled( selectedInternacional != null ); - buttonInternacionalRemover.setEnabled( selectedInternacional != null ); - } - - @Override - public void caretUpdate( CaretEvent e ) - { - buttonSave.setEnabled( true ); - buttonRevert.setEnabled( true ); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/AdicionarAreasPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/AdicionarAreasPanel.java deleted file mode 100644 index 14249169..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/AdicionarAreasPanel.java +++ /dev/null @@ -1,240 +0,0 @@ -package siprp.higiene.gestao.postos; - -import static com.evolute.utils.strings.UnicodeLatin1Map.aacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; -import leaf.ui.TreeInserterDialog; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsPostoData; -import shst.data.outer.HsPostoEstabelecimentoData; -import shst.logic.HigieneSegurancaLogic; -import shst.logic.node.AreaNode; -import shst.logic.node.PostoNode; - -import com.evolute.utils.ui.trees.TreeTools; - -public class AdicionarAreasPanel extends JPanel -{ - - private static final long serialVersionUID = 1L; - - public static final String SELECTION_CHANGED = "SELECTION_CHANGED"; - - private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/add.png"; - - private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/delete.png"; - - protected final LeafButton buttonAdicionar = LeafIconButton.createButton( ICON_NAME_SAVE ); - - protected final LeafButton buttonRemover = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - public final LeafTree tree = new LeafTree( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - private EstabelecimentosData estabelecimento = null; - - public AdicionarAreasPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - buttonAdicionar.setEnabled( false ); - buttonRemover.setEnabled( false ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - JPanel panel = new JPanel(); - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panel.setLayout( layout ); - panel.add( buttonAdicionar, new TableLayoutConstraints( 0, 0 ) ); - panel.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) ); - - add( panel, new TableLayoutConstraints( 0, 0 ) ); - add( scroll, new TableLayoutConstraints( 0, 1 ) ); - } - - private void startupListeners() - { - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setEnabled(); - TreePath path = tree.getSelectionPath(); - Object object = path == null ? null : path.getLastPathComponent(); - HsPostoData posto = object == null ? null : ((object instanceof PostoNode) ? (HsPostoData) ((PostoNode) object).getUserObject() : null); - firePropertyChange( SELECTION_CHANGED, null, posto ); - } - } ); - buttonAdicionar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - add(); - } - } ); - buttonRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - rem(); - } - } ); - } - - private void add() - { - DefaultMutableTreeNode allPostos = HigieneSegurancaLogic.getAreasTree( estabelecimento.toEmpresa_id() ); - TreeTools.removeAll( allPostos, HigieneSegurancaLogic.getPostosTree( estabelecimento ) ); - TreeInserterDialog dialog = new TreeInserterDialog( "Adicionar Postos de Trabalho", allPostos ); - save( dialog.getResult() ); - refresh(); - } - - private void save( DefaultMutableTreeNode toadd ) - { - try - { - Object obj = toadd.getUserObject(); - if( obj instanceof HsPostoData ) - { - HsPostoEstabelecimentoData rel = new HsPostoEstabelecimentoData(); - rel.setToEstabelecimento_id( estabelecimento ); - rel.setToPosto_id( (HsPostoData) obj ); - rel.save(); - } - else - { - for( int i = 0; i < toadd.getChildCount(); ++i ) - { - save( (DefaultMutableTreeNode) toadd.getChildAt( i ) ); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void rem() - { - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - Object object = path.getLastPathComponent(); - if( ( object instanceof PostoNode ) && LeafDialog.confirmDelete( true, false, "posto" ) ) - { - HsPostoData posto = ((HsPostoData) ((PostoNode) object).getUserObject()); - remPosto( posto ); - } - else if( ( object instanceof AreaNode ) && LeafDialog.confirmDelete( false, false, aacute + "rea" ) ) - { - for( int i = 0; i < ((AreaNode) object).getChildCount(); ++i ) - { - PostoNode postoNode = (PostoNode) ((AreaNode) object).getChildAt( i ); - remPosto( (HsPostoData) postoNode.getUserObject() ); - } - } - } - refresh(); - } - - private void remPosto( HsPostoData posto ) - { - try - { - HsPostoEstabelecimentoData toDelete = null; - for( HsPostoEstabelecimentoData rel : posto.fromHsPostoEstabelecimento_posto_id() ) - { - if( rel.toEstabelecimento_id().equals( estabelecimento ) ) - { - toDelete = rel; - break; - } - } - if( toDelete != null ) - { - toDelete.delete(); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void setEnabled() - { - buttonAdicionar.setEnabled( estabelecimento != null ); - buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); - } - - public void refresh() - { - root.removeAllChildren(); - if( estabelecimento != null ) - { - TreeTools.merge( root, HigieneSegurancaLogic.getAreasTree( estabelecimento ) ); - } - setEnabled(); - TreeTools.refreshTree( tree, root, false ); - } - - public void setEstabelecimento( EstabelecimentosData estabelecimento ) - { - this.estabelecimento = estabelecimento; - refresh(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/GerirAreasPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/GerirAreasPanel.java deleted file mode 100644 index f5a4e6f0..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/postos/GerirAreasPanel.java +++ /dev/null @@ -1,465 +0,0 @@ -package siprp.higiene.gestao.postos; - -import static com.evolute.utils.strings.UnicodeLatin1Map.aacute; -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import static com.evolute.utils.strings.UnicodeLatin1Map.eacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Collections; -import java.util.Date; -import java.util.List; - -import javax.swing.BorderFactory; -import javax.swing.JCheckBox; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeNode; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; -import leaf.ui.LeafUIConstants; -import shst.data.outer.EmpresasData; -import shst.data.outer.HsAreaData; -import shst.data.outer.HsPostoData; -import shst.logic.node.AreaNode; -import shst.logic.node.PostoNode; - -import com.evolute.utils.ui.trees.TreeTools; - -public class GerirAreasPanel extends JPanel implements LeafUIConstants -{ - - private static final long serialVersionUID = 1L; - - private final JPanel panelButtons = new JPanel(); - - private final JPanel panelTree = new JPanel(); - - public final LeafButton buttonAreaCriar = LeafIconButton.createDefaultNewButton(); - - public final LeafButton buttonAreaEditar = LeafIconButton.createDefaultEditButton(); - - public final LeafButton buttonAreaRemover = LeafIconButton.createDefaultRemoveButton(); - - public final LeafButton buttonPostoCriar = LeafIconButton.createDefaultNewButton(); - - public final LeafButton buttonPostoEditar = LeafIconButton.createDefaultEditButton(); - - public final LeafButton buttonPostoRemover = LeafIconButton.createDefaultRemoveButton(); - - private final JCheckBox checkGenerico = new JCheckBox( "Gen"+eacute+"rico" ); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - public final LeafTree tree = new LeafTree( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - private EmpresasData empresa = null; - - public GerirAreasPanel() - { - startupComponents(); - startupLayout(); - placeComponents(); - setupListeners(); - } - - private void startupComponents() - { - panelButtons.setPreferredSize( new Dimension( 150, 0 ) ); - panelTree.setPreferredSize( new Dimension( 300, 0 ) ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelButtons.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelTree.setLayout( layout ); - } - - private void placeComponents() - { - JPanel panel = new JPanel(); - panel.setBorder( BorderFactory.createTitledBorder( "Area" ) ); - panel.setLayout( new GridLayout( 1, 3 ) ); - panel.add( buttonAreaCriar ); - panel.add( buttonAreaEditar ); - panel.add( buttonAreaRemover ); - panelButtons.add( panel, new TableLayoutConstraints( 0, 0 ) ); - - panel = new JPanel(); - panel.setBorder( BorderFactory.createTitledBorder( "Posto" ) ); - panel.setLayout( new GridLayout( 1, 3 ) ); - panel.add( buttonPostoCriar ); - panel.add( buttonPostoEditar ); - panel.add( buttonPostoRemover ); - panelButtons.add( panel, new TableLayoutConstraints( 1, 0 ) ); - - panelButtons.add( checkGenerico, new TableLayoutConstraints(2,0)); - - panelTree.add( scroll, new TableLayoutConstraints( 0, 0 ) ); - - add( panelButtons, new TableLayoutConstraints( 0, 0 ) ); - add( panelTree, new TableLayoutConstraints( 0, 1 ) ); - } - - private void setupListeners() - { - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setSelected(); - } - } ); - buttonAreaCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarArea(); - } - } ); - buttonAreaEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarArea(); - } - } ); - buttonAreaRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerArea(); - } - } ); - buttonPostoCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarPosto(); - } - } ); - buttonPostoEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarPosto(); - } - } ); - buttonPostoRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerPosto(); - } - } ); - checkGenerico.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - HsPostoData posto = getSelectedPosto(); - if( posto != null ) - { - posto.setIs_principal( checkGenerico.isSelected() ); - try - { - posto.save(); - } catch( Exception e1 ) - { - e1.printStackTrace(); - } - } - } - } ); - } - - private void criarArea() - { - try - { - if( empresa != null ) - { - String areaString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", "Criar nova " + aacute + "rea", JOptionPane.QUESTION_MESSAGE ); - if( areaString != null ) - { - HsAreaData area = new HsAreaData(); - area.setToEmpresa_id( empresa ); - area.setDescription( areaString ); - area.save(); - refresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarArea() - { - try - { - HsAreaData area = getSelectedArea(); - if( area != null ) - { - String areaString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", area.getDescription() ); - if( areaString != null ) - { - area.setDescription( areaString ); - area.save(); - refresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerArea() - { - HsAreaData area = getSelectedArea(); - if( area != null ) - { - List< HsPostoData > listPostos = area.fromHsPosto_area_id(); - if ( listPostos != null && listPostos.size() > 0 ) - { - JOptionPane.showMessageDialog( this, "Tem de remover todos os postos primeiro.", "Erro", JOptionPane.ERROR_MESSAGE ); - } - else if ( LeafDialog.confirmDelete( false, false, aacute + "rea") ) - { - try - { - area.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - area.save(); -// area.delete(); - refresh(); - } - catch ( Exception e ) - { - LeafDialog.error( e ); - } - } - } - } - - private void criarPosto() - { - try - { - HsAreaData area = getSelectedArea(); - if( area != null ) - { - String postoString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", "Criar novo posto de trabalho", JOptionPane.QUESTION_MESSAGE ); - if( postoString != null ) - { - HsPostoData posto = new HsPostoData(); - posto.setToArea_id( area ); - posto.setDescription( postoString ); - posto.save(); - refresh(); - } - refresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarPosto() - { - try - { - HsPostoData posto = getSelectedPosto(); - if( posto != null ) - { - String postoString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", posto.getDescription() ); - if( postoString != null ) - { - posto.setDescription( postoString ); - posto.save(); - refresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerPosto() - { - try - { - HsPostoData posto = getSelectedPosto(); - if( posto != null && LeafDialog.confirmDelete( true, false, "posto" ) ) - { - posto.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) ); - posto.save(); - refresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private HsAreaData getSelectedArea() - { - HsAreaData result = null; - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - Object leaf = path.getLastPathComponent(); - if( leaf != null ) - { - if( leaf instanceof AreaNode ) - { - result = (HsAreaData) ((AreaNode) leaf).getUserObject(); - } - else if( leaf instanceof PostoNode ) - { - result = (HsAreaData) ((HsPostoData) ((PostoNode) leaf).getUserObject()).toArea_id(); - } - } - } - return result; - } - - private HsPostoData getSelectedPosto() - { - HsPostoData result = null; - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - Object leaf = path.getLastPathComponent(); - if( leaf != null && (leaf instanceof PostoNode) ) - { - result = (HsPostoData) ((PostoNode) leaf).getUserObject(); - } - } - return result; - } - - private void setSelected() - { - TreePath path = tree.getSelectionPath(); - TreeNode node = path == null ? null : (TreeNode) path.getLastPathComponent(); - boolean areaSelected = node != null && (node instanceof AreaNode); - boolean postoSelected = node != null && (node instanceof PostoNode); - buttonPostoCriar.setEnabled( areaSelected || postoSelected ); - buttonPostoEditar.setEnabled( postoSelected ); - buttonPostoRemover.setEnabled( postoSelected ); - buttonAreaRemover.setEnabled( areaSelected ); - buttonAreaCriar.setEnabled( empresa != null ); - buttonAreaEditar.setEnabled( areaSelected ); - checkGenerico.setEnabled( postoSelected ); - boolean generico = false; - if( postoSelected && node != null) - { - HsPostoData posto = (HsPostoData) ((PostoNode) node).getUserObject(); - generico = posto != null && (posto.getIs_principal() ==null ? false : posto.getIs_principal() ); - } - checkGenerico.setSelected(generico); - } - - public void refresh() - { - root.removeAllChildren(); - if( empresa != null ) - { - List areas = empresa.fromHsArea_empresa_id(); - Collections.sort( areas ); - for( HsAreaData area : areas ) - { - addArea( area ); - } - } - setSelected(); - TreeTools.refreshTree( tree, root, false ); - } - - private void addArea( HsAreaData area ) - { - if( area != null ) - { - AreaNode areaNode = new AreaNode( area ); - for( HsPostoData posto : area.fromHsPosto_area_id() ) - { - addPosto( posto, areaNode ); - } - root.add( areaNode ); - } - } - - private void addPosto( HsPostoData posto, AreaNode areaNode ) - { - if( posto != null && posto.getDeleted_date() == null ) - { - PostoNode postoNode = new PostoNode( posto ); - areaNode.add( postoNode ); - } - } - - public void setEmpresa( EmpresasData empresa ) - { - this.empresa = empresa; - refresh(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/AdicionarRiscosPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/AdicionarRiscosPanel.java deleted file mode 100644 index abb87718..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/AdicionarRiscosPanel.java +++ /dev/null @@ -1,310 +0,0 @@ -package siprp.higiene.gestao.riscos; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Collections; -import java.util.List; - -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTree; -import leaf.ui.TreeInserterDialog; -import shst.data.object.BaseObject; -import shst.data.outer.EmpresasData; -import shst.data.outer.HsPostoData; -import shst.data.outer.HsPostoRiscoData; -import shst.data.outer.HsRiscoData; -import shst.data.outer.HsRiscoEmpresaData; -import shst.logic.HigieneSegurancaLogic; -import shst.logic.node.NodeRisco; -import siprp.higiene.gestao.SIPRPLazyLoadedPanel; - -import com.evolute.utils.ui.trees.TreeTools; - -public class AdicionarRiscosPanel extends SIPRPLazyLoadedPanel -{ - - private static final long serialVersionUID = 1L; - - public static final String SELECTION_CHANGED = "RISCOS_SELECTION_CHANGED"; - - private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/add.png"; - - private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/delete.png"; - - protected final LeafButton buttonAdicionar = LeafIconButton.createButton( ICON_NAME_SAVE ); - - protected final LeafButton buttonRemover = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - public final LeafTree tree = new LeafTree( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - private EmpresasData empresa = null; - - private HsPostoData posto = null; - - public AdicionarRiscosPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - buttonAdicionar.setEnabled( false ); - buttonRemover.setEnabled( false ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - JPanel panel = new JPanel(); - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panel.setLayout( layout ); - panel.add( buttonAdicionar, new TableLayoutConstraints( 0, 0 ) ); - panel.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) ); - - add( panel, new TableLayoutConstraints( 0, 0 ) ); - add( scroll, new TableLayoutConstraints( 0, 1 ) ); - } - - private void startupListeners() - { - buttonAdicionar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - add(); - } - } ); - buttonRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - rem(); - } - } ); - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setEnabled(); - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - Object selection = path.getLastPathComponent(); - firePropertyChange( SELECTION_CHANGED, null, selection ); - } - } - } ); - } - - private void add() - { - DefaultMutableTreeNode allRiscos = getAllRiscos(); - TreeTools.removeAll( allRiscos, getRiscosTree() ); - TreeInserterDialog dialog = new TreeInserterDialog( "Adicionar Riscos", allRiscos ); - DefaultMutableTreeNode result = dialog.getResult(); - if( result != null ) - { - addResult( result ); - doRefresh(); - } - setEnabled(); - } - - private DefaultMutableTreeNode getAllRiscos() - { - DefaultMutableTreeNode result = new DefaultMutableTreeNode(); - if( posto == null ) - { - result = HigieneSegurancaLogic.getRiscosTree(); - } - else - { - result = HigieneSegurancaLogic.getRiscosTree( posto.toArea_id().toEmpresa_id() ); - } - return result; - } - - private DefaultMutableTreeNode getRiscosTree() - { - DefaultMutableTreeNode result = new DefaultMutableTreeNode(); - for( int i = 0; i < root.getChildCount(); ++i ) - { - DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) root.getChildAt( i ); - BaseObject userObject = (BaseObject) childNode.getUserObject(); - HsRiscoData risco = null; - if( userObject instanceof HsRiscoEmpresaData ) - { - risco = ((HsRiscoEmpresaData) userObject).toRisco_id(); - } - else if( userObject instanceof HsPostoRiscoData ) - { - risco = ((HsPostoRiscoData) userObject).toRisco_id(); - } - if( risco != null ) - { - result.add( new NodeRisco( risco ) ); - } - } - return result; - } - - private void addResult( DefaultMutableTreeNode root ) - { - try - { - if( root != null ) - { - if( root instanceof NodeRisco ) - { - HsRiscoData risco = (HsRiscoData) root.getUserObject(); - if( empresa != null ) - { - HsRiscoEmpresaData rel = new HsRiscoEmpresaData(); - rel.setToEmpresa_id( empresa ); - rel.setToRisco_id( risco ); - rel.save(); - } - else if( posto != null ) - { - HsPostoRiscoData rel = new HsPostoRiscoData(); - rel.setToPosto_id( posto ); - rel.setToRisco_id( risco ); - rel.save(); - } - } - for( int i = 0; i < root.getChildCount(); ++i ) - { - DefaultMutableTreeNode child = (DefaultMutableTreeNode) root.getChildAt( i ); - addResult( child ); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void rem() - { - try - { - TreePath path = tree.getSelectionPath(); - if( path != null ) - { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); - Object obj = node.getUserObject(); - if( obj != null && LeafDialog.confirmDelete( true, false, "risco" ) ) - { - ((BaseObject) obj).delete(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void setEnabled() - { - if( empresa != null ) - { - buttonAdicionar.setEnabled( true ); - } - else if( posto != null ) - { - buttonAdicionar.setEnabled( true ); - } - else - { - buttonAdicionar.setEnabled( false ); - } - buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); - } - - @Override - public void refresh() - { - root.removeAllChildren(); - if( empresa != null ) - { - List riscos = empresa.fromHsRiscoEmpresa_empresa_id(); - Collections.sort( riscos ); - for( HsRiscoEmpresaData rel : riscos ) - { - root.add( new DefaultMutableTreeNode( rel ) ); - } - } - else if( posto != null ) - { - List riscos = posto.fromHsPostoRisco_posto_id(); - Collections.sort( riscos ); - for( HsPostoRiscoData rel : riscos ) - { - root.add( new DefaultMutableTreeNode( rel ) ); - } - } - setEnabled(); - TreeTools.refreshTree( tree, root, false ); - } - - public void setEmpresa( EmpresasData empresa ) - { - this.empresa = empresa; - this.posto = null; - doRefresh(); - } - - public void setPosto( HsPostoData posto ) - { - this.posto = posto; - this.empresa = null; - doRefresh(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/DnDRiscosListener.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/DnDRiscosListener.java deleted file mode 100644 index 1c97a9dc..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/DnDRiscosListener.java +++ /dev/null @@ -1,167 +0,0 @@ -package siprp.higiene.gestao.riscos; - -import java.awt.Point; -import java.awt.dnd.DropTargetDragEvent; -import java.awt.dnd.DropTargetDropEvent; - -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreePath; - -import shst.data.outer.HsRiscoData; -import shst.data.outer.HsRiscoMedidaData; -import shst.data.outer.HsRiscoTemaData; - -import com.evolute.entity.evo.EvoDataException; -import com.evolute.swing.tree.EvoTreeDnDListener; -import com.evolute.utils.error.ErrorLogger; - -public class DnDRiscosListener extends EvoTreeDnDListener -{ - private TreeRiscos tree; - - private boolean drag = true; - - public DnDRiscosListener( TreeRiscos tree ) - { - super( tree ); - this.tree = tree; - } - - - @Override - public void dragEnter( DropTargetDragEvent dtde ) - { - DefaultMutableTreeNode node = ( ( DefaultMutableTreeNode ) tree.getSelectionPath().getParentPath().getLastPathComponent() ); - drag = node.getUserObject() != null; - if ( ! drag ) - { - dtde.rejectDrag(); - } - } - - @Override - public void dragOver( DropTargetDragEvent dtde ) - { - super.dragOver( dtde ); - - Point pt = dtde.getLocation(); - if ( drag ) - { - TreePath sourcePath = tree.getClosestPathForLocation( pt.x, pt.y ); - Object destObject = ( ( DefaultMutableTreeNode ) sourcePath.getLastPathComponent() ).getUserObject(); - - if ( tree.getSelectedMedida() != null && ( destObject instanceof HsRiscoTemaData ) ) - { - tree.expandPath( sourcePath ); - } - } - } - - @Override - public void drop( DropTargetDropEvent dtde ) - { - Point pt = dtde.getLocation(); - TreePath destinationPath = tree.getClosestPathForLocation( pt.x, pt.y ); - - Object destinationComponent = destinationPath.getLastPathComponent(); - System.out.println( destinationPath ); - System.out.println( ); - - if( destinationComponent instanceof DefaultMutableTreeNode ) - { - System.out.println("moving node ..."); - DefaultMutableTreeNode destinationNode = ( DefaultMutableTreeNode ) destinationComponent; - Object destinationObject = destinationNode.getUserObject(); - - TreePath sourcePath = tree.getSelectionPath(); - Object sourceComponent = sourcePath.getLastPathComponent(); - - if( sourceComponent instanceof DefaultMutableTreeNode ) - { - DefaultMutableTreeNode sourceNode = ( DefaultMutableTreeNode ) sourceComponent; - Object sourceObject = sourceNode.getUserObject(); - - if( destinationObject instanceof HsRiscoTemaData ) - { // something -> tema - if ( sourceObject instanceof HsRiscoData ) - { // risco -> tema - System.out.println("\tmove risco -> tema"); - - HsRiscoTemaData destTema = ( HsRiscoTemaData ) destinationObject; - moveRisco( destinationNode, sourceNode, sourceObject, destTema ); - } - } - else if( destinationObject instanceof HsRiscoData ) - { // something -> risco - if ( sourceObject instanceof HsRiscoMedidaData ) - { // medida -> risco - System.out.println("\tmove medida -> risco"); - HsRiscoData destRisco = ( HsRiscoData ) destinationObject; - - moveMedida( destinationNode, sourceNode, sourceObject, destRisco ); - } - else if( sourceObject instanceof HsRiscoData ) - { // risco -> risco ( risco -> tema ) - System.out.println( "\tmove risco -> risco ( risco -> tema )" ); - - destinationComponent = destinationPath.getParentPath().getLastPathComponent(); - destinationNode = ( DefaultMutableTreeNode )destinationComponent; - destinationObject = destinationNode.getUserObject(); - HsRiscoTemaData destTema = ( HsRiscoTemaData ) destinationObject; - - moveRisco( destinationNode, sourceNode, sourceObject, destTema ); - } - } - else if( destinationObject instanceof HsRiscoMedidaData ) - { // something -> medida - if ( sourceObject instanceof HsRiscoMedidaData ) - { // medida -> medida ( medida -> risco ) - System.out.println( "\tmove medida -> medida parent ( risco )" ); - - destinationComponent = destinationPath.getParentPath().getLastPathComponent(); - destinationNode = ( DefaultMutableTreeNode ) destinationComponent; - destinationObject = destinationNode.getUserObject(); - HsRiscoData destRisco = ( HsRiscoData ) destinationObject; - - moveMedida( destinationNode, sourceNode, sourceObject, destRisco ); - } - } - } - } - } - - - private void moveMedida( DefaultMutableTreeNode destinationNode, DefaultMutableTreeNode sourceNode, Object sourceObject, HsRiscoData destRisco ) - { - HsRiscoMedidaData source = ( HsRiscoMedidaData ) sourceObject; - source.setToRisco_id( destRisco ); - - try - { - source.save(); - destinationNode.add( sourceNode ); - tree.updateUI(); - } - catch ( EvoDataException e ) - { - ErrorLogger.logException( e ); - } - } - - private void moveRisco( DefaultMutableTreeNode destinationNode, DefaultMutableTreeNode sourceNode, Object soruceObject, HsRiscoTemaData destTema ) - { - HsRiscoData source = ( HsRiscoData ) soruceObject; - source.setToTema_id( destTema ); - try - { - source.save(); - destinationNode.add( sourceNode ); - tree.updateUI(); - } - catch ( EvoDataException e ) - { - ErrorLogger.logException( e ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirMedidaPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirMedidaPanel.java deleted file mode 100644 index 5a2d3a01..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirMedidaPanel.java +++ /dev/null @@ -1,204 +0,0 @@ -package siprp.higiene.gestao.riscos; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.IOException; - -import javax.swing.JLabel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import shst.data.outer.HsMedidaData; -import siprp.SIPRPSpellChecker; -import siprp.higiene.gestao.SIPRPLazyLoadedPanel; - -import com.evolute.utils.error.ErrorLogger; -import com.evolute.utils.images.ImageException; -import com.evolute.utils.images.ImageIconLoader; - -public class GerirMedidaPanel extends SIPRPLazyLoadedPanel -{ - - public static final String MEDIDA_CHANGED = "MEDIDA_CHANGED"; - - private static final long serialVersionUID = 1L; - - private static final String ICON_NAME_SAVE = "leaf/ui/icons/save.png"; - - private static final String ICON_NAME_REVERT = "leaf/ui/icons/revert.png"; - - private LeafButton buttonSaveRequesito; - - private LeafButton buttonRevertRequesito; - - private final JTextArea fieldTextMedida = new JTextArea(); - - private final JScrollPane scrollMedida = new JScrollPane( fieldTextMedida ); - - private final JTextArea fieldTextRequisitosLegais = new JTextArea(); - - private final JScrollPane scrollRequesitos = new JScrollPane( fieldTextRequisitosLegais ); - - private HsMedidaData medida = null; - - public GerirMedidaPanel() - { - try - { - buttonSaveRequesito = new LeafButton( ImageIconLoader.loadImageIcon( ICON_NAME_SAVE ) ); - buttonRevertRequesito = new LeafButton( ImageIconLoader.loadImageIcon( ICON_NAME_REVERT ) ); - } - catch( ImageException e ) - { - ErrorLogger.logException( e ); - } - catch ( IOException e ) - { - ErrorLogger.logException( e ); - } - startupComponents(); - startupLayout(); - placeComponents(); - setupListeners(); - } - - private void startupComponents() - { - fieldTextMedida.setWrapStyleWord( true ); - fieldTextMedida.setLineWrap( true ); - SIPRPSpellChecker.getInstance().attachSpellCheckToComponent( fieldTextMedida ); - fieldTextRequisitosLegais.setWrapStyleWord( true ); - fieldTextRequisitosLegais.setLineWrap( true ); - SIPRPSpellChecker.getInstance().attachSpellCheckToComponent( fieldTextRequisitosLegais ); - scrollMedida.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - scrollMedida.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); - scrollRequesitos.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - scrollRequesitos.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ); - } - - private void setupListeners() - { - fieldTextRequisitosLegais.addCaretListener( new CaretListener() - { - @Override - public void caretUpdate( CaretEvent e ) - { - setEnabled(); - } - } ); - fieldTextMedida.addCaretListener( new CaretListener() - { - @Override - public void caretUpdate( CaretEvent e ) - { - setEnabled(); - } - } ); - buttonSaveRequesito.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - saveRequesito(); - } - } ); - buttonRevertRequesito.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - revertRequesito(); - } - } ); - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - add( new JLabel( "Requisitos legais" ), new TableLayoutConstraints( 0, 0 ) ); - add( buttonSaveRequesito, new TableLayoutConstraints( 1, 0 ) ); - add( buttonRevertRequesito, new TableLayoutConstraints( 2, 0 ) ); - add( scrollRequesitos, new TableLayoutConstraints( 0, 1, 2, 1 ) ); - add( new JLabel( "Medida" ), new TableLayoutConstraints( 0, 2 ) ); - add( scrollMedida, new TableLayoutConstraints( 0, 3, 2, 3 ) ); - } - - private void setEnabled() - { - boolean medidaChanged = false; - boolean requesitoChanged = false; - if( medida != null ) - { - medidaChanged = !fieldTextMedida.getText().equals( medida.getDescription() ); - requesitoChanged = !fieldTextRequisitosLegais.getText().equals( medida.getRequesitos_legais() ); - } - buttonSaveRequesito.setEnabled( requesitoChanged || medidaChanged ); - buttonRevertRequesito.setEnabled( requesitoChanged || medidaChanged ); - } - - private void saveRequesito() - { - try - { - if( medida != null ) - { - medida.setRequesitos_legais( fieldTextRequisitosLegais.getText() ); - medida.setDescription( fieldTextMedida.getText() ); - medida.save(); - doRefresh(); - } - setEnabled(); - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void revertRequesito() - { - if( medida != null ) - { - fieldTextRequisitosLegais.setText( medida.getRequesitos_legais() ); - fieldTextMedida.setText( medida.getDescription() ); - } - setEnabled(); - } - - @Override - public void refresh() - { - firePropertyChange( MEDIDA_CHANGED, null, medida ); - } - - public void setMedida( HsMedidaData medida ) - { - this.medida = medida; - fieldTextMedida.setText( medida == null ? null : medida.getDescription() ); - fieldTextRequisitosLegais.setText( medida == null ? null : medida.getRequesitos_legais() ); - setEnabled(); - } - - public HsMedidaData getMedida() - { - return this.medida; - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirRiscosPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirRiscosPanel.java deleted file mode 100644 index 62194999..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/GerirRiscosPanel.java +++ /dev/null @@ -1,583 +0,0 @@ -package siprp.higiene.gestao.riscos; - -import static com.evolute.utils.strings.UnicodeLatin1Map.aacute; -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.CardLayout; -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.List; - -import javax.swing.BorderFactory; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafUIConstants; -import shst.data.outer.HsMedidaData; -import shst.data.outer.HsRiscoData; -import shst.data.outer.HsRiscoMedidaData; -import shst.data.outer.HsRiscoTemaData; -import shst.logic.HigieneSegurancaLogic; -import siprp.higiene.gestao.SIPRPLazyLoadedPanel; - -import com.evolute.utils.ui.trees.TreeTools; - -public class GerirRiscosPanel extends SIPRPLazyLoadedPanel implements LeafUIConstants -{ - - private static final long serialVersionUID = 1L; - - private static final String PANEL_TEMA = "PANEL_TEMA"; - - private static final String PANEL_RISCO = "PANEL_RISCO"; - - private static final String PANEL_MEDIDA = "PANEL_MEDIDA"; - - private final JPanel panelButtons = new JPanel(); - - private final JPanel panelTree = new JPanel(); - - private final JPanel panelData = new JPanel(); - - private final JPanel panelDataTema = new JPanel(); - - private final JPanel panelDataRisco = new JPanel(); - - private final GerirMedidaPanel panelDataMedida = new GerirMedidaPanel(); - - private final LeafButton buttonTemaCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonTemaEditar = LeafIconButton.createDefaultEditButton(); - - private final LeafButton buttonTemaRemover = LeafIconButton.createDefaultRemoveButton(); - - private final LeafButton buttonRiscoCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonRiscoEditar = LeafIconButton.createDefaultEditButton(); - - private final LeafButton buttonRiscoRemover = LeafIconButton.createDefaultRemoveButton(); - - private final LeafButton buttonMedidaCriar = LeafIconButton.createDefaultNewButton(); - - private final LeafButton buttonMedidaRemover = LeafIconButton.createDefaultRemoveButton(); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - private final TreeRiscos tree = new TreeRiscos( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - private final CardLayout cardLayout = new CardLayout(); - - public GerirRiscosPanel() - { - startupComponents(); - startupLayout(); - placeComponents(); - setupListeners(); - } - - private void setupListeners() - { - buttonTemaCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarTema(); - } - } ); - buttonTemaEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarTema(); - } - } ); - buttonTemaRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerTema(); - } - } ); - buttonRiscoCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarRisco(); - } - } ); - buttonRiscoEditar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - editarRisco(); - } - } ); - buttonRiscoRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerRisco(); - } - } ); - buttonMedidaCriar.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - criarMedida(); - } - } ); - buttonMedidaRemover.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - removerMedida(); - } - } ); - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() - { - @Override - public void valueChanged( TreeSelectionEvent e ) - { - setEnabled(); - selectCard(); - } - } ); - panelDataMedida.addPropertyChangeListener( GerirMedidaPanel.MEDIDA_CHANGED, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - if( evt.getNewValue() != null ) - { - doRefresh(); - } - } - } ); - } - - private void criarTema() - { - try - { - String temaString = JOptionPane.showInputDialog( this, "Criar tema", "Descri" + ccedil + atilde + "o", JOptionPane.QUESTION_MESSAGE ); - if( temaString != null ) - { - HsRiscoTemaData tema = new HsRiscoTemaData(); - tema.setDescription( temaString ); - tema.save(); - doRefresh(); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarTema() - { - try - { - HsRiscoTemaData tema = getSelectedTema(); - if( tema != null ) - { - String temaString = JOptionPane.showInputDialog( this, "Editar tema", tema.getDescription() ); - if( temaString != null ) - { - tema.setDescription( temaString ); - tema.save(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerTema() - { - try - { - HsRiscoTemaData tema = getSelectedTema(); - - if ( tema != null ) - { - List< HsRiscoData > riscos = tema.fromHsRisco_tema_id(); - if ( riscos != null && riscos.size() > 0 ) - { - JOptionPane.showMessageDialog( this, "O Tema seleccionado cont\u00E9m Riscos. Tem de os remover primeiro.", "Erro", JOptionPane.ERROR_MESSAGE ); - } - else if ( LeafDialog.confirmDelete( true, false, "tema" ) ) - { - tema.delete(); - doRefresh(); - } - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void criarRisco() - { - try - { - HsRiscoTemaData tema = getSelectedTema(); - if( tema == null ) - { - HsRiscoData risco = getSelectedRisco(); - if( risco != null ) - { - tema = risco.toTema_id(); - } - else - { - HsRiscoMedidaData medida = getSelectedMedida(); - if( medida != null ) - { - tema = medida.toRisco_id().toTema_id(); - } - } - } - if( tema != null ) - { - String riscoString = JOptionPane.showInputDialog( this, "Criar risco", "Descri" + ccedil + atilde + "o", JOptionPane.QUESTION_MESSAGE ); - if( riscoString != null ) - { - HsRiscoData risco = new HsRiscoData(); - risco.setDescription( riscoString ); - risco.setToTema_id( tema ); - risco.save(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void editarRisco() - { - try - { - HsRiscoData risco = getSelectedRisco(); - if( risco != null ) - { - String riscoString = JOptionPane.showInputDialog( this, "Editar risco", risco.getDescription() ); - if( riscoString != null ) - { - risco.setDescription( riscoString ); - risco.save(); - doRefresh(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerRisco() - { - try - { - HsRiscoData risco = getSelectedRisco(); - if ( risco != null ) - { - List< HsRiscoMedidaData > medidas = risco.fromHsRiscoMedida_risco_id(); - if ( medidas != null && medidas.size() > 0 ) - { - JOptionPane.showMessageDialog( this, "O Risco seleccionado cont\u00E9m Medidas. Tem de as remover primeiro.", "Erro", JOptionPane.ERROR_MESSAGE ); - } - else if ( LeafDialog.confirmDelete( true, false, "tema" ) ) - { - risco.delete(); - doRefresh(); - } - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private boolean removerRiscoOK( HsRiscoData risco ) - { - boolean result = true; - if( risco.fromHsRiscoEmpresa_risco_id().size() > 0 ) - { - if( JOptionPane.NO_OPTION == JOptionPane.showConfirmDialog( this, "Este risco est" + aacute + " associado a uma ou mais empresas, \n tem a certeza que o deseja remover?", "Aviso", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE ) ) - { - result = false; - } - } - return result; - } - - private void criarMedida() - { - try - { - HsRiscoData risco = getSelectedRisco(); - if( risco == null ) - { - HsRiscoMedidaData medida = getSelectedMedida(); - if( medida != null ) - { - risco = medida.toRisco_id(); - } - } - if( risco != null ) - { - HsMedidaData medida = new HsMedidaData(); - medida.setDescription( "" ); - medida.setRequesitos_legais( "" ); - medida.save(); - HsRiscoMedidaData rel = new HsRiscoMedidaData(); - rel.setToRisco_id( risco ); - rel.setToMedida_id( medida ); - rel.save(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private void removerMedida() - { - try - { - HsRiscoMedidaData medida = getSelectedMedida(); - if( medida != null && LeafDialog.confirmDelete( true, false, "requisisto" ) ) - { - medida.delete(); - doRefresh(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - private HsRiscoTemaData getSelectedTema() - { - return tree.getSelectedTema(); - } - - private HsRiscoData getSelectedRisco() - { - return tree.getSelectedRisco(); - } - - private HsRiscoMedidaData getSelectedMedida() - { - return tree.getSelectedMedida(); - } - - private void startupComponents() - { - panelButtons.setPreferredSize( new Dimension( 150, 0 ) ); - panelTree.setPreferredSize( new Dimension( 600, 0 ) ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - } - - private void setEnabled() - { - HsRiscoTemaData tema = getSelectedTema(); - HsRiscoData risco = getSelectedRisco(); - HsRiscoMedidaData medida = getSelectedMedida(); - buttonMedidaCriar.setEnabled( risco != null || medida != null ); - buttonRiscoCriar.setEnabled( tema != null || risco != null || medida != null ); - - buttonTemaEditar.setEnabled( tema != null ); - buttonRiscoEditar.setEnabled( risco != null ); - - buttonMedidaRemover.setEnabled( medida != null ); - buttonRiscoRemover.setEnabled( risco != null ); - buttonTemaRemover.setEnabled( tema != null ); - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.PREFERRED, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.FILL, TableLayout.FILL, TableLayout.FILL, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelButtons.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelTree.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelDataTema.setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.FILL - }, new double[] { - TableLayout.FILL - } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - panelDataRisco.setLayout( layout ); - - panelData.setLayout( cardLayout ); - } - - private void placeComponents() - { - JPanel panel = new JPanel(); - panel.setBorder( BorderFactory.createTitledBorder( "Tema" ) ); - panel.setLayout( new GridLayout( 1, 3 ) ); - panel.add( buttonTemaCriar ); - panel.add( buttonTemaEditar ); - panel.add( buttonTemaRemover ); - panelButtons.add( panel, new TableLayoutConstraints( 0, 0 ) ); - panel = new JPanel(); - panel.setBorder( BorderFactory.createTitledBorder( "Risco" ) ); - panel.setLayout( new GridLayout( 1, 3 ) ); - panel.add( buttonRiscoCriar ); - panel.add( buttonRiscoEditar ); - panel.add( buttonRiscoRemover ); - panelButtons.add( panel, new TableLayoutConstraints( 1, 0 ) ); - panel = new JPanel(); - panel.setBorder( BorderFactory.createTitledBorder( "Requisito" ) ); - panel.setLayout( new GridLayout( 1, 3 ) ); - panel.add( buttonMedidaCriar ); - panel.add( buttonMedidaRemover ); - panel.add( new JPanel() ); - panelButtons.add( panel, new TableLayoutConstraints( 2, 0 ) ); - - panelTree.add( scroll, new TableLayoutConstraints( 0, 0 ) ); - - panelData.add( panelDataTema, PANEL_TEMA ); - panelData.add( panelDataRisco, PANEL_RISCO ); - panelData.add( panelDataMedida, PANEL_MEDIDA ); - - add( panelButtons, new TableLayoutConstraints( 0, 0 ) ); - add( panelTree, new TableLayoutConstraints( 0, 1 ) ); - add( panelData, new TableLayoutConstraints( 1, 1 ) ); - } - - private void selectCard() - { - HsRiscoTemaData tema = getSelectedTema(); - HsRiscoData risco = getSelectedRisco(); - HsRiscoMedidaData medida = getSelectedMedida(); - if( tema != null ) - { - cardLayout.show( panelData, PANEL_TEMA ); - } - else if( risco != null ) - { - cardLayout.show( panelData, PANEL_RISCO ); - } - else if( medida != null ) - { - cardLayout.show( panelData, PANEL_MEDIDA ); - panelDataMedida.setMedida( medida.toMedida_id() ); - } - } - - @Override - public void refresh() - { - TreePath selPath = tree.getSelectionPath(); - Object selObject = null; - if( selPath != null ) - { - Object selNode = selPath.getLastPathComponent(); - if( selNode != null && (selNode instanceof DefaultMutableTreeNode )) - { - selObject = ((DefaultMutableTreeNode)selNode).getUserObject(); - } - } - root.removeAllChildren(); - TreeTools.merge( root, HigieneSegurancaLogic.getRiscosTree() ); - TreeTools.refreshTree( tree, root, false ); - if( selObject != null ) - { - DefaultMutableTreeNode found = TreeTools.findNodeWithUserObject( selObject, root ); - if( found != null ) - { - TreePath selNew = TreeTools.getPathFor( found ); - if( selNew != null ) - { - tree.setSelectionPath( selNew ); - TreeTools.refreshTree( tree, found, false ); - } - } - } - setEnabled(); - } - - public void moverRisco( HsRiscoData from, DefaultMutableTreeNode to ) - { - - } - - public void moverRequisito( ) - { - - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/TreeRiscos.java b/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/TreeRiscos.java deleted file mode 100644 index fdf4262b..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/TreeRiscos.java +++ /dev/null @@ -1,46 +0,0 @@ -package siprp.higiene.gestao.riscos; - -import java.awt.dnd.DropTarget; - -import javax.swing.tree.TreeModel; - -import shst.data.outer.HsRiscoData; -import shst.data.outer.HsRiscoMedidaData; -import shst.data.outer.HsRiscoTemaData; - -import com.evolute.swing.tree.EvoDraggableTree; - -public class TreeRiscos extends EvoDraggableTree -{ - private static final long serialVersionUID = 1L; - - public TreeRiscos( TreeModel model ) - { - super( model ); - } - - @Override - public void setDropTarget() - { - setDropTarget( new DropTarget( this , new DnDRiscosListener( this ) ) ); - } - - public HsRiscoTemaData getSelectedTema() - { - Object object = getSelectedObject(); - return object == null ? null : ((object instanceof HsRiscoTemaData) ? (HsRiscoTemaData) object : null); - } - - public HsRiscoData getSelectedRisco() - { - Object object = getSelectedObject(); - return object == null ? null : ((object instanceof HsRiscoData) ? (HsRiscoData) object : null); - } - - public HsRiscoMedidaData getSelectedMedida() - { - Object object = getSelectedObject(); - return object == null ? null : ((object instanceof HsRiscoMedidaData) ? (HsRiscoMedidaData) object : null); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/revert.png b/trunk/SIPRPSoft/src/siprp/higiene/gestao/riscos/revert.png deleted file mode 100644 index bd1d011a1e5325fdf6514ffda0a81ab0d4909499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmV;Z16TZsP)WdKBJATlu^MrC3kGB7YUATc#MG&MRjHy|r8F)%Rtw}u}8000McNliru z)&&<0G9=VCmNx(Z010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00RI? zL_t(|+Er6aPZLoT{-!g10p(R5f+(m(kw}angv7W}6Cwdkkc9~vT^Ju>!GaKVXMzjk z4`4+iTU}t-foO=hP!owJN2$_3v;?@xH}~E-k9*E{&S9``2?H%o zv$j3VI;;EGvT_%)S!DcyzY(8zb~30;J@>;;Y6?N$wPAJ-ncJ=XmLpBCn7%{#QY-f8VOcXUrP!=oio1z>9pNbqD#=M?Gc z8rZ`PMXq$B*CC3*_Y&M>wrxbh3ODMV)&|!+bAO}+p%wBSp>VR~l^*c;fWM@hh=Iwe z;OgqwhR|l`Y*hUb)es~HGW+aU=_q&iVIN+M1B>4PEB&sd6z1k=Zvn0h0cS4*RkeWk zC!m>&;sIXzl)-P(jB!kfqaU^PCRQK08m-gxQ>u<`{knSlBRdXI;yD5$Yp8Yxc#iaBHy zW{2&HGAd987#btvc1mFq__YWWIf*VASo2VnGGyXMRdu6!jW|8jD))^RWdKueATc)}PH%P~GB7YQATc>QF*iCiHXti7F)%Pez_sxJ000McNliru z)&&<0F*kdqgem|4010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00P8G zL_t(|+D((oYZFlv#=m>#{b-Xk??}{Ai>0V2by4W1APC(lbWwML8yD(McY+`V(UpII z3lSH(bJ>M1iY~gS;0r|y+NLqqP%24mGReJjJu_)+2fj@1+O z-3z8ZKQ)9vFhrLSJ&0ZpJyIv=f-8YnpIcabofP)Y+QZJ$m3wsT50}mMO?-T(yTL9d zCMJpH1WJ=@UpLY-HLix@nKxpx{|jQfHhQa4bmlGZ*qXc&-D+ z7`okVOb`=E2`L4f(P;!3)s*I^jK_kA2G1l z_`S6i6GUZ1=UghOT+C3J3S5iG)V_hDg=yLhFt?Dm1P@I6V$!|C4z2h2$hcWl z7-&Oz9`r&6!`U24N5|uF)+_6P;U}zUJe~bndQQ 0 ) - { - if( confirm( "Tem a certeza que deseja remover a selec" + ccedil + atilde + "o?\n - " + paths.length + " risco(s)/medida(s)" ) ) - { - runAsynchronously( new Runnable() - { - @Override - public void run() - { - for( TreePath path : paths ) - { - if ( !rem( path ) ) - { - break; - } - } - doRefresh(); - } - } ); - } - } - } - - private boolean rem( TreePath path ) - { - boolean outcome = false; - try - { - if( path != null ) - { - Object selection = path.getLastPathComponent(); - if( selection instanceof MedidaRelatorioNode ) - { - HsRelatorioPostoMedidaData rel = selection == null ? null : (HsRelatorioPostoMedidaData) ((MedidaRelatorioNode) selection).getUserObject(); - if( rel != null ) - { - HsRelatorioMedidaData medidaData = rel.toMedida_id(); - medidaData.delete(); - rel.delete(); - outcome = true; - } - } - else if( selection instanceof RiscoRelatorioNode ) - { - HsRelatorioPostoRiscoData rel = (HsRelatorioPostoRiscoData) ((RiscoRelatorioNode)selection).getUserObject(); - if( rel != null ) - { - HsRelatorioRiscoData riscoData = rel.toRisco_id(); - MedidasRiscosDeleterController.getInstance().delete( new MedidasRiscosDeleter( riscoData ) ); - riscoData.delete(); - rel.delete(); - outcome = true; - } - } - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - return outcome; - } - - private void setEnabled() - { - boolean add = false; - boolean rem = false; - if( posto != null ) - { - if( posto.toArea_id() != null && posto.toArea_id().toRelatorio_id() != null && posto.toArea_id().toRelatorio_id().getIs_submetido() == null ) - { - add = true; - rem = true; - } - } - buttonAdicionar.setEnabled( add ); - buttonRemover.setEnabled( rem && ( getSelectedMedida() != null || getSelectedRisco() != null ) ); - } - - @Override - public void refresh() - { - root.removeAllChildren(); - - if( posto != null ) - { - try - { - List objects = HigieneSegurancaLogic.getRelatorioMedidasForPosto( posto ); - RiscoRelatorioNode riscoNode = null; - for( EvoJoinObject evoJoinObject : objects ) - { - HsRelatorioPostoRiscoData postoRisco = evoJoinObject.getObject( HsRelatorioPostoRiscoData.class ); - HsRelatorioPostoMedidaData postoMedida = evoJoinObject.getObject( HsRelatorioPostoMedidaData.class ); - if( riscoNode == null || ! postoRisco.equals( ( HsRelatorioPostoRiscoData ) riscoNode.getUserObject() ) ) - { - riscoNode = new RiscoRelatorioNode( postoRisco ); - root.add( riscoNode ); - } - if( postoMedida != null && postoMedida.toMedida_id().getDeleted_date() == null ) - { - riscoNode.add( new MedidaRelatorioNode( postoMedida ) ); - } - } - } - catch ( Exception e ) - { - ErrorLogger.logExceptionAndShow( e ); - } - } - - TreeTools.sort( root, new Comparator() - { - @Override - public int compare( DefaultMutableTreeNode o1, DefaultMutableTreeNode o2 ) - { - Integer result = null; - if( (o1 instanceof RiscoRelatorioNode) && o2 instanceof RiscoRelatorioNode ) - { - HsRelatorioPostoRiscoData risco1 = (HsRelatorioPostoRiscoData) o1.getUserObject(); - HsRelatorioPostoRiscoData risco2 = (HsRelatorioPostoRiscoData) o2.getUserObject(); - if( risco1 != null ) - { - return risco1.compareTo( risco2 == null ? null : risco2 ); - } - } - return result == null ? o1.toString().compareTo( o2.toString() ) : result; - } - }); - - TreeTools.refreshTree( tree, root, false ); - if( selectedMedida != null ) - { - selectMedida(); - } - - setEnabled(); - } - - private void selectMedida( ) - { - DefaultMutableTreeNode node = TreeTools.findNodeWithUserObject( selectedMedida, root ); - if( node != null ) - { - TreePath path = TreeTools.getPathFor( node ); - if( path != null ) - { - tree.setSelectionPath( path ); - } - } - else - { - selectedMedida = null; - } - } - - public void setPosto( HsRelatorioPostoData posto ) - { - this.posto = posto; - this.selectedMedida = null; - doRefresh(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirValoresRiscoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirValoresRiscoPanel.java deleted file mode 100644 index b8bfccab..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirValoresRiscoPanel.java +++ /dev/null @@ -1,336 +0,0 @@ -package siprp.higiene.relatorio; - -import static com.evolute.utils.strings.UnicodeLatin1Map.aacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.ButtonGroup; -import javax.swing.JComboBox; -import javax.swing.JFormattedTextField; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import shst.data.outer.HsRelatorioPostoRiscoData; -import shst.data.outer.HsRelatorioRiscoValorQualitativoData; -import shst.logic.HigieneSegurancaLogic; - -import com.evolute.utils.documents.IntegerDocument; - -public class GerirValoresRiscoPanel extends JPanel implements ActionListener, CaretListener -{ - - private static final long serialVersionUID = 1L; - - private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/riscos/save.png"; - - private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/riscos/revert.png"; - - public static final String VALUE_CHANGED = "VALUE_CHANGED"; - - private final JRadioButton radioValorQuantitativo = new JRadioButton(); - - private final JRadioButton radioValorQualitativo = new JRadioButton(); - - private final JFormattedTextField textSeveridade = new JFormattedTextField(); - - private final JFormattedTextField textProbabilidade = new JFormattedTextField(); - - private final JComboBox comboValorQualitativo = new JComboBox(); - - private final LeafButton buttonSave = LeafIconButton.createButton( ICON_NAME_SAVE ); - - private final LeafButton buttonRevert = LeafIconButton.createButton( ICON_NAME_REVERT ); - - private final ButtonGroup bg = new ButtonGroup(); - - private HsRelatorioPostoRiscoData valoresRisco = null; - - public GerirValoresRiscoPanel() - { - startupListeners(); - startupComponents(); - startupLayout(); - placeComponents(); - loadValoresQualitativos(); - } - - private void startupListeners() - { - radioValorQualitativo.addActionListener( this ); - radioValorQuantitativo.addActionListener( this ); - comboValorQualitativo.addActionListener( this ); - textProbabilidade.addCaretListener( this ); - textSeveridade.addCaretListener( this ); - buttonSave.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - save(); - } - } ); - buttonRevert.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - refresh(); - } - } ); - - } - - private void startupComponents() - { - textSeveridade.setPreferredSize( new Dimension( 30, 0 ) ); - textSeveridade.setDocument( new IntegerDocument( 1, false ) ); - textProbabilidade.setPreferredSize( new Dimension( 30, 0 ) ); - textProbabilidade.setDocument( new IntegerDocument( 1, false ) ); - buttonSave.setEnabled( false ); - buttonRevert.setEnabled( false ); - bg.add( radioValorQualitativo ); - bg.add( radioValorQuantitativo ); - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM - } ); - layout.setVGap( 5 ); - layout.setHGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setVGap( 5 ); - layout.setHGap( 5 ); - JPanel panel = new JPanel(); - panel.setLayout( layout ); - panel.add( buttonSave, new TableLayoutConstraints( 1, 0 ) ); - panel.add( buttonRevert, new TableLayoutConstraints( 2, 0 ) ); - - add( panel, new TableLayoutConstraints( 1, 0, 6, 0 ) ); - add( radioValorQuantitativo, new TableLayoutConstraints( 0, 1 ) ); - add( new JLabel( "Severidade" ), new TableLayoutConstraints( 1, 1 ) ); - add( textSeveridade, new TableLayoutConstraints( 2, 1 ) ); - add( new JLabel( "Probabilidade" ), new TableLayoutConstraints( 4, 1 ) ); - add( textProbabilidade, new TableLayoutConstraints( 5, 1 ) ); - add( radioValorQualitativo, new TableLayoutConstraints( 0, 2 ) ); - add( comboValorQualitativo, new TableLayoutConstraints( 1, 2, 5, 2 ) ); - } - - private void loadValoresQualitativos() - { - comboValorQualitativo.removeAllItems(); - for( HsRelatorioRiscoValorQualitativoData valor : HigieneSegurancaLogic.getAllValoresQualitativos() ) - { - comboValorQualitativo.addItem( valor ); - } - } - - void refresh() - { - if( valoresRisco != null ) - { - boolean qualitativo = valoresRisco.toValor_qualitativo_id() != null; - radioValorQuantitativo.setSelected( !qualitativo ); - radioValorQualitativo.setSelected( qualitativo ); - String severidade = (valoresRisco.getSeveridade() == null ? null : valoresRisco.getSeveridade() + ""); - String probabilidade = (valoresRisco.getProbabilidade() == null ? null : valoresRisco.getProbabilidade() + ""); - textSeveridade.setText( severidade ); - textProbabilidade.setText( probabilidade ); - if( valoresRisco.toValor_qualitativo_id() != null ) - { - comboValorQualitativo.setSelectedItem( valoresRisco.toValor_qualitativo_id() ); - } -// else -// { -// comboValorQualitativo.setSelectedIndex( -1 ); -// } - } - else - { - bg.clearSelection(); - textSeveridade.setText( null ); - textProbabilidade.setText( null ); -// comboValorQualitativo.setSelectedIndex( -1 ); - } - } - - private void setEnabled() - { - if( isEnabled() ) - { - textProbabilidade.setEnabled( valoresRisco != null && radioValorQuantitativo.isSelected() ); - textSeveridade.setEnabled( valoresRisco != null && radioValorQuantitativo.isSelected() ); - radioValorQualitativo.setEnabled( valoresRisco != null ); - radioValorQuantitativo.setEnabled( valoresRisco != null ); - comboValorQualitativo.setEnabled( valoresRisco != null && radioValorQualitativo.isSelected() ); - if( valoresRisco != null ) - { - boolean changes = false; - boolean wasQual = valoresRisco.toValor_qualitativo_id() != null; - boolean isQual = radioValorQualitativo.isSelected(); - if( !isQual ) - { - changes = wasQual; - if( !changes ) - { - boolean probChanged = false; - boolean sevChanged = false; - String prob = textProbabilidade.getText(); - String sev = textSeveridade.getText(); - if( prob == null ) - { - probChanged = valoresRisco.getProbabilidade() != null; - } - else - { - probChanged = !prob.equals( valoresRisco.getProbabilidade() == null ? "" : valoresRisco.getProbabilidade() + "" ); - } - if( sev == null ) - { - sevChanged = valoresRisco.getSeveridade() != null; - } - else - { - sevChanged = !sev.equals( valoresRisco.getSeveridade() == null ? "" : valoresRisco.getSeveridade() + "" ); - } - changes = probChanged || sevChanged; - } - } - else - { - changes = !wasQual; - if( !changes ) - { - changes = !comboValorQualitativo.getSelectedItem().equals( valoresRisco.toValor_qualitativo_id() ); - } - } - buttonSave.setEnabled( changes ); - buttonRevert.setEnabled( changes ); - } - } - else - { - buttonRevert.setEnabled( false ); - buttonSave.setEnabled( false ); - radioValorQualitativo.setEnabled( false ); - radioValorQuantitativo.setEnabled( false ); - comboValorQualitativo.setEnabled( false ); - textProbabilidade.setEnabled( false ); - textSeveridade.setEnabled( false ); - } - } - - public void setRelatorioPostoRisco( HsRelatorioPostoRiscoData rel ) - { - this.valoresRisco = rel; - refresh(); - setEnabled(); - } - - private void error( boolean probabilidade ) - { - JOptionPane.showMessageDialog( this, "Valor inv" + aacute + "lido para " + (probabilidade ? "'Probabilidade'" : "'Severidade'") + ".", "Erro", JOptionPane.ERROR_MESSAGE, null ); - } - - private void save() - { - try - { - if( valoresRisco != null ) - { - if( radioValorQualitativo.isSelected() ) - { - valoresRisco.setToValor_qualitativo_id( (HsRelatorioRiscoValorQualitativoData) comboValorQualitativo.getSelectedItem() ); - valoresRisco.setProbabilidade( null ); - valoresRisco.setSeveridade( null ); - } - else - { - valoresRisco.setToValor_qualitativo_id( null ); - Integer probabilidade = null; - Integer severidade = null; - boolean ok = true; - if( textProbabilidade.getText() != null && !textProbabilidade.getText().trim().equals( "" ) ) - { - try - { - probabilidade = new Integer( textProbabilidade.getText() ); - } catch( NumberFormatException e1 ) - { - ok = false; - } - if( !ok || !HigieneSegurancaLogic.isProbabilidadeValida( probabilidade ) ) - { - error( true ); - } - } - if( textSeveridade.getText() != null && !textSeveridade.getText().trim().equals( "" ) ) - { - if( ok ) - { - try - { - severidade = new Integer( textSeveridade.getText() ); - } catch( NumberFormatException e2 ) - { - ok = false; - } - if( !ok || !HigieneSegurancaLogic.isSeveridadeValida( severidade ) ) - { - error( false ); - } - } - } - boolean pvalid = HigieneSegurancaLogic.isProbabilidadeValida( probabilidade ); - boolean svalid = HigieneSegurancaLogic.isSeveridadeValida( severidade ); - - valoresRisco.setProbabilidade( pvalid && svalid ? probabilidade : null ); - valoresRisco.setSeveridade( pvalid && svalid ? severidade : null ); - } - valoresRisco.save(); - firePropertyChange( VALUE_CHANGED, null, valoresRisco ); - refresh(); - setEnabled(); - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - - @Override - public void caretUpdate( CaretEvent e ) - { - setEnabled(); - } - - @Override - public void actionPerformed( ActionEvent e ) - { - setEnabled(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleter.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleter.java deleted file mode 100644 index b4fd1e8a..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleter.java +++ /dev/null @@ -1,51 +0,0 @@ -package siprp.higiene.relatorio; - -import shst.data.outer.HsRelatorioMedidaData; -import shst.data.outer.HsRelatorioPostoMedidaData; -import shst.data.outer.HsRelatorioRiscoData; - -import com.evolute.utils.error.ErrorLogger; - - -public class MedidasRiscosDeleter implements Runnable -{ - private HsRelatorioRiscoData riscoData; - - private String name; - - public MedidasRiscosDeleter( HsRelatorioRiscoData riscoData ) - { - this.riscoData = riscoData; - - setName( "Delete Medidas from Risco - " + riscoData ); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public void run() - { - try - { - for( HsRelatorioMedidaData medida : riscoData.fromHsRelatorioMedida_risco_id() ) - { - for ( HsRelatorioPostoMedidaData relMedida : medida.fromHsRelatorioPostoMedida_medida_id() ) - { - relMedida.delete(); - } - medida.delete(); - } - } - catch ( Exception e ) - { - ErrorLogger.logException( e ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleterController.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleterController.java deleted file mode 100644 index cdb0be80..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/MedidasRiscosDeleterController.java +++ /dev/null @@ -1,34 +0,0 @@ -package siprp.higiene.relatorio; - -import java.util.Vector; - -public class MedidasRiscosDeleterController -{ - private static MedidasRiscosDeleterController INSTANCE = null; - - private final Vector threads = new Vector(); - - public static synchronized MedidasRiscosDeleterController getInstance() - { - if ( INSTANCE == null ) - { - INSTANCE = new MedidasRiscosDeleterController(); - } - return INSTANCE; - } - - public Vector getThreads() - { - return threads; - } - - public void delete( MedidasRiscosDeleter thread ) - { - Thread t = new Thread( thread ); - t.setName( thread.getName() ); - t.setDaemon( false ); - t.start(); - getThreads().add( t ); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PanelRelatorio.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PanelRelatorio.java deleted file mode 100644 index 3d16d78f..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PanelRelatorio.java +++ /dev/null @@ -1,780 +0,0 @@ -package siprp.higiene.relatorio; - -import static com.evolute.utils.strings.UnicodeLatin1Map.aacute; -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import static com.evolute.utils.strings.UnicodeLatin1Map.eacute; -import static com.evolute.utils.strings.UnicodeLatin1Map.iacute; -import static com.evolute.utils.strings.UnicodeLatin1Map.oacute; -import static com.evolute.utils.strings.UnicodeLatin1Map.otilde; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.EventObject; -import java.util.List; -import java.util.Vector; - -import javax.swing.BorderFactory; -import javax.swing.ButtonGroup; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JTabbedPane; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import leaf.ui.LeafButton; -import leaf.ui.LeafDialog; -import leaf.ui.LeafIconButton; -import leaf.ui.LeafTextAreaEditor; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsEmailEstabelecimentoData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.MarcacoesEstabelecimentoData; -import shst.data.outer.MarcacoesTecnicosHstData; -import shst.logic.HigieneSegurancaLogic; -import siprp.higiene.gestao.equipamentos.AdicionarEquipamentosPanel; -import siprp.higiene.relatorio.print.RelatorioPDFCreator; -import siprp.medicina.processo.mail.MailDialog; -import siprp.medicina.processo.mail.MailSender; -import siprp.planoactuacao.print.PlanoActuacaoPDFCreator; -import siprp.ui.SIPRPFrame; - -import com.evolute.adt.Validator; -import com.evolute.swing.frame.EvoFrame; -import com.evolute.utils.error.ErrorLogger; -import com.evolute.utils.ui.calendar.JCalendarPanel; - -public class PanelRelatorio extends JPanel implements CaretListener, ChangeListener, ActionListener -{ - - private static final long serialVersionUID = 1L; - - private static final int MAX_NOME_ESTABELECIMENTO_ON_FILENAME = 10; - - private static final String DEFAULT_FUNCIONARIOS_TEXT = "A empresa supracitada possui ? funcionários, sendo que ? destes exercem actividades na zona de produtos frescos."; - - private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/riscos/save.png"; - public static final String ICON_NAME_REVERT = "siprp/higiene/gestao/riscos/revert.png"; - public static final String ICON_NAME_SUBMIT = "siprp/higiene/relatorio/submit.png"; - public static final String ICON_NAME_PDF = "siprp/higiene/relatorio/adobe_reader.png"; - public static final String ICON_NAME_UNDO = "siprp/higiene/relatorio/revert.png"; - - private final JCalendarPanel dataRelatorio = new JCalendarPanel( null ); - - private final JRadioButton radioInicial = new JRadioButton( "Inicial" ); - private final JRadioButton radioPeriodica = new JRadioButton( "Peri" + oacute + "dica" ); - - private final JTextField fieldTecnico = new JTextField(); - - private final JTextField fieldTecnicoSuperior = new JTextField(); - - private final JPanel panelAcompanhantes = new JPanel(); - - private final JTextField fieldNome1 = new JTextField(); - private final JTextField fieldNome2 = new JTextField(); - - private final JTextField fieldFuncao1 = new JTextField(); - private final JTextField fieldFuncao2 = new JTextField(); - - private final LeafIconButton buttonSave = LeafIconButton.createButton( ICON_NAME_SAVE ); - private final LeafIconButton buttonRevertText = LeafIconButton.createButton( ICON_NAME_REVERT ); - private final LeafIconButton buttonSubmit = LeafIconButton.createButton( "Submeter", ICON_NAME_SUBMIT ); - private final LeafIconButton buttonPdfPlano = LeafIconButton.createButton( "Plano de actua" + ccedil + atilde + "o", ICON_NAME_PDF ); - private final LeafIconButton buttonPdfRelatorio = LeafIconButton.createButton( "Relat" + oacute + "rio", ICON_NAME_PDF ); - private final LeafButton buttonRevertPlano = LeafIconButton.createButton( "Recarregar", ICON_NAME_UNDO ); - - private final JTabbedPane tabsRelatorio = new JTabbedPane(); - - private final AdicionarEquipamentosPanel panelEquipamentos = new AdicionarEquipamentosPanel(); - - private final LeafTextAreaEditor panelFuncionarios = new LeafTextAreaEditor( new Validator() - { - @Override - public boolean isValid( String text ) - { - return !DEFAULT_FUNCIONARIOS_TEXT.equals( text ); - } - }); - - private final JTabbedPane tabsPlanoActuacao = new JTabbedPane(); - - private final PlanoActuacaoPanel panelPlano = new PlanoActuacaoPanel(); - - private final RelatorioLegislacaoPanel panelLegislacao = new RelatorioLegislacaoPanel(); - - private final RelatorioNormalizacaoPanel panelNormalizacao = new RelatorioNormalizacaoPanel(); - - ButtonGroup bg = new ButtonGroup(); - - private HsRelatorioData relatorio = null; - - public PanelRelatorio() - { - setupListeners(); - startupComponents(); - startupLayout(); - placeComponents(); - } - - private void startupComponents() - { - dataRelatorio.setPreferredSize( new Dimension( 150, 0 ) ); - panelEquipamentos.setPreferredSize( new Dimension( 400, 0 ) ); - bg.add( radioInicial ); - bg.add( radioPeriodica ); - panelAcompanhantes.setBorder( BorderFactory.createTitledBorder( "Pessoas que acompanharam" ) ); - tabsRelatorio.addTab( "Funcion" + aacute + "rios", panelFuncionarios ); - tabsRelatorio.addTab( "Equipamentos de medi"+ccedil+atilde+"o", panelEquipamentos ); - tabsPlanoActuacao.addTab( "Plano de actua" + ccedil + atilde + "o", panelPlano ); - tabsPlanoActuacao.addTab( "Legisla" + ccedil + atilde + "o", panelLegislacao ); - tabsPlanoActuacao.addTab( "Normaliza" + ccedil + atilde + "o", panelNormalizacao ); - buttonSave.setToolTipText( "Guardar" ); - buttonRevertText.setToolTipText( "Reverter" ); - buttonRevertPlano.setToolTipText( "Carregar dados do estabelecimento" ); - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.PREFERRED - }, new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL - } ); - layout.setVGap( 5 ); - layout.setHGap( 5 ); - setLayout( layout ); - - layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.FILL - }, new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM - } ); - layout.setVGap( 5 ); - layout.setHGap( 5 ); - panelAcompanhantes.setLayout( layout ); - } - - private void placeComponents() - { - panelAcompanhantes.add( new JLabel( "Nome" ), new TableLayoutConstraints( 0, 0 ) ); - panelAcompanhantes.add( fieldNome1, new TableLayoutConstraints( 1, 0 ) ); - panelAcompanhantes.add( new JLabel( "Fun" + ccedil + atilde + "o" ), new TableLayoutConstraints( 2, 0 ) ); - panelAcompanhantes.add( fieldFuncao1, new TableLayoutConstraints( 3, 0 ) ); - panelAcompanhantes.add( new JLabel( "Nome" ), new TableLayoutConstraints( 0, 1 ) ); - panelAcompanhantes.add( fieldNome2, new TableLayoutConstraints( 1, 1 ) ); - panelAcompanhantes.add( new JLabel( "Fun" + ccedil + atilde + "o" ), new TableLayoutConstraints( 2, 1 ) ); - panelAcompanhantes.add( fieldFuncao2, new TableLayoutConstraints( 3, 1 ) ); - - TableLayout layout = new TableLayout( new double[] { - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL, - TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, - TableLayout.MINIMUM, TableLayout.MINIMUM - }, new double[] { - TableLayout.MINIMUM - } ); - layout.setVGap( 5 ); - layout.setHGap( 5 ); - JPanel panel = new JPanel(); - panel.setLayout( layout ); - - panel.add( buttonSave, new TableLayoutConstraints( 0, 0 ) ); - panel.add( buttonRevertText, new TableLayoutConstraints( 1, 0 ) ); - panel.add( buttonPdfRelatorio, new TableLayoutConstraints( 3, 0 ) ); - panel.add( buttonPdfPlano, new TableLayoutConstraints( 4, 0 ) ); - panel.add( buttonRevertPlano, new TableLayoutConstraints( 5, 0 ) ); - panel.add( buttonSubmit, new TableLayoutConstraints( 6, 0 ) ); - - add( panel, new TableLayoutConstraints( 0, 0, 7, 0 ) ); - add( new JLabel( "Data do relat" + oacute + "rio" ), new TableLayoutConstraints( 0, 1, 2, 1 ) ); - add( dataRelatorio, new TableLayoutConstraints( 3, 1 ) ); - JLabel labelAvaliacao = new JLabel( "Avalia" + ccedil + atilde + "o" ); - labelAvaliacao.setHorizontalAlignment( JLabel.RIGHT ); - add( labelAvaliacao , new TableLayoutConstraints( 4, 1 ) ); - add( radioInicial, new TableLayoutConstraints( 5, 1 ) ); - add( radioPeriodica, new TableLayoutConstraints( 6, 1 ) ); - add( new JLabel( "T" + eacute + "cnico de H.S." ), new TableLayoutConstraints( 0, 2, 2, 2 ) ); - add( fieldTecnico, new TableLayoutConstraints( 3, 2, 6, 2 ) ); - add( new JLabel( "T" + eacute + "cnico Superior de H.S." ), new TableLayoutConstraints( 0, 3, 2, 3 ) ); - add( fieldTecnicoSuperior, new TableLayoutConstraints( 3, 3, 6, 3 ) ); - add( tabsRelatorio, new TableLayoutConstraints( 7, 1, 7, 4 ) ); - add( panelAcompanhantes, new TableLayoutConstraints( 0, 4, 6, 4 ) ); - add( tabsPlanoActuacao, new TableLayoutConstraints( 0, 5, 7, 5 ) ); - } - - private void setupListeners() - { - fieldFuncao1.addCaretListener( this ); - fieldFuncao2.addCaretListener( this ); - fieldNome1.addCaretListener( this ); - fieldNome2.addCaretListener( this ); - dataRelatorio.addChangeListener( this ); - radioInicial.addActionListener( this ); - radioPeriodica.addActionListener( this ); - buttonSave.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - save(); - } - } ); - buttonRevertText.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - revert(); - } - } ); - buttonSubmit.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - if( isValidEmail() || JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(null, "Emails n" + atilde + "o preenchidos para este estabelecimento!\nContinuar?", "Aviso", JOptionPane.YES_NO_OPTION ) ) - { - if( isValidPlano() && confirmSubmit() ) - { - submit(); - } - } - } - } ); - buttonPdfPlano.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - pdf(true); - } - } ); - buttonPdfRelatorio.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - pdf(false); - } - } ); - buttonRevertPlano.addActionListener( new ActionListener() - { - @Override - public void actionPerformed( ActionEvent e ) - { - revert(true); - } - } ); - panelFuncionarios.addPropertyChangeListener( LeafTextAreaEditor.ACTION_SAVE, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - try - { - String text = (String) evt.getNewValue(); - if( text != null && relatorio != null ) - { - text = text.trim(); - if( text.length() == 0 ) - { - text = null; - } - else if( text.equals( DEFAULT_FUNCIONARIOS_TEXT ) ) - { - text = null; - } - } - relatorio.setFuncionarios( text ); - relatorio.save(); - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - } - } ); - } - - protected void revert( boolean ask ) - { - if( relatorio != null ) - { -// try -// { -// setCursor( new Cursor( Cursor.WAIT_CURSOR ) ); - int ret = ask == false ? JOptionPane.YES_OPTION : JOptionPane.showConfirmDialog( this, "Todas as altera" + ccedil + otilde + "es ao plano de actua" + ccedil + atilde + "o ser" + atilde + "o perdidas\nTem a certeza?","Carregar dados do estabelecimento",JOptionPane.YES_NO_OPTION); - if( JOptionPane.YES_OPTION == ret ) - { - EvoFrame.findParentEvoFrame( this ).runAsynchronously( new Runnable() { - - @Override - public void run() - { - HigieneSegurancaLogic.reverterRelatorio(relatorio); - SwingUtilities.invokeLater( new Runnable() { - - @Override - public void run() - { - if( relatorio != null ) - { - try - { - relatorio.save(); - } - catch( Exception e ) - { - ErrorLogger.logException(e); - } - } - setRelatorio( relatorio, false ); - } - }); - } - }); - } -// } -// finally -// { -// setCursor( new Cursor( Cursor.DEFAULT_CURSOR ) ); -// } - } - } - - private boolean isValidEmail() - { - boolean result = false; - List emails = relatorio.toMarcacao_id().toEstabelecimento_id().fromHsEmailEstabelecimento_estabelecimento_id(); - result = emails != null && emails.size() > 0; - return result; - } - - private boolean isValidPlano() - { - boolean result = false; - result = panelPlano.isValidPlano(); - if( !result ) - { - JOptionPane.showMessageDialog( null, "Todos os riscos devem ser preenchidos antes da submiss"+ atilde + "o do plano de actua" + ccedil + atilde+ "o!", "Erro", JOptionPane.ERROR_MESSAGE, null ); - } - return result; - } - - private boolean confirmSubmit() - { - return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog( null, "Ao submeter o Plano de Actua"+ccedil+atilde+"o n"+atilde+"o ser"+aacute+" mais poss"+iacute+"vel alter"+aacute+"-lo. Deseja continuar?" ); - } - - private void submit() - { - try - { - setCursor(new Cursor(Cursor.WAIT_CURSOR)); - if( relatorio != null ) - { - if( sendMail( relatorio ) ) - { - refresh(); - relatorio.setIs_submetido( new java.sql.Timestamp( new Date().getTime() ) ); - relatorio.save(); - setRelatorio( relatorio, false ); - } - else - { - JOptionPane.showMessageDialog( this, "Erro ao enviar o email, o plano n"+atilde+"o ser"+aacute+" submetido." ); - } - } - } - catch( Exception e ) - { - LeafDialog.error(e); - refresh(); - } - finally - { - setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - } - } - - private boolean confirmDelete( File file ) - { - boolean result = false; - result = JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog( this, "Ficheiro j" + aacute + " existente, deseja substituir?", "Aviso", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null ); - return result; - } - - private void pdf(boolean plano) - { - try - { - setCursor( new Cursor(Cursor.WAIT_CURSOR) ); - byte [] pdf = null; - if( plano ) - { - PlanoActuacaoPDFCreator creator = new PlanoActuacaoPDFCreator(); - pdf = creator.createPDF( relatorio.getId(), false ); - } - else - { - RelatorioPDFCreator creator = new RelatorioPDFCreator(); - pdf = creator.createPDF( relatorio.getId() ); - } - if( !printToFile( pdf ) ) - { - throw new Exception( "ERRO: NULL " + ( plano ? "p " : "r " ) + relatorio.getId() ); - } - } - catch( Exception e ) - { - LeafDialog.error( e ); - } - finally - { - setCursor( new Cursor(Cursor.DEFAULT_CURSOR) ); - } - } - - private boolean printToFile( byte [] pdf ) throws IOException - { - - if( pdf != null ) - { - JFileChooser fileChooser = new JFileChooser( ); - if( fileChooser.showSaveDialog( this ) == JFileChooser.APPROVE_OPTION ) - { - File file = fileChooser.getSelectedFile(); - String path = file.getAbsolutePath(); - if( !path.toUpperCase().endsWith( ".PDF" ) ) - { - path += ".pdf"; - file = new File( path ); - } - if( file != null ) - { - if( file.exists() && confirmDelete( file ) ) - { - file.delete(); - } - FileOutputStream a = new FileOutputStream(file); - a.write( pdf ); - a.close(); - } - } - } - return pdf != null; - } - - private SIPRPFrame getFrame( ) - { - Component comp = this; - SIPRPFrame frame = null; - while( comp != null ) - { - if( comp.getParent() instanceof RelatorioHigieneSegurancaWindow ) - { - frame = (RelatorioHigieneSegurancaWindow) comp.getParent(); - break; - } - comp = comp.getParent(); - } - return frame; - } - - private boolean sendMail( HsRelatorioData relatorio ) throws Exception - { - boolean result = false; - List rels = relatorio.toMarcacao_id().toEstabelecimento_id().fromHsEmailEstabelecimento_estabelecimento_id(); - String to = ""; - String bcc = ""; - for( HsEmailEstabelecimentoData rel : rels ) - { - if( to.isEmpty() ) - { - to += rel.toEmail_id().getEmail(); - } - else - { - bcc += rel.toEmail_id().getEmail() + ", "; - } - } - if(bcc.endsWith( ", " )) - { - bcc = bcc.substring( 0, bcc.length() - 2 ); - } - if( to.length() > 0 ) - { - String nomeEstabelecimento = relatorio.toMarcacao_id().toEstabelecimento_id().getNome(); - MarcacoesTecnicosHstData tecnico = relatorio.toMarcacao_id().toTecnico_hst(); - String nomeTecnico = tecnico == null ? "" : tecnico.getNome(); - Date dataVisita = relatorio.toMarcacao_id().getData(); - String dataVisitaString = new SimpleDateFormat("dd/MM/yyyy").format( dataVisita ); - String subject = "Relat" + oacute + "rio da Avalia" + ccedil + atilde + "o de Riscos Laborais e Plano de Actua" + ccedil + atilde + "o de " + nomeEstabelecimento + " - auditoria de " + dataVisitaString; - String body = "

    Exmos. Senhores" + - "
    " + - "
    " + - "
    " + - "Junto enviamos o relat" + oacute + "rio de avalia" + ccedil + atilde + "o de riscos laborais e " + - "respectivo plano de actua" + ccedil + atilde + "o da auditoria realizada no dia " + - dataVisitaString + - " ao vosso estabelecimento de(o) " + - nomeEstabelecimento + - ". Aconselhamos que tenham em conta as n" + atilde + "o conformidades indicadas " + - "nestes documentos e que preencham o plano de actua" + ccedil + atilde + "o por forma a " + - "auxiliar-vos na planifica" + ccedil + atilde + "o das medidas correctivas e para poderem " + - "apresent" + aacute + "-los em caso de inspec" + ccedil + atilde + "o da ACT – Autoridade para as Condi" + ccedil + otilde + "es do Trabalho." + - "
    " + - "
    " + - "
    " + - "Caso pretendam o nosso apoio ou necessitem de qualquer esclarecimento, contactem-nos, por favor, atrav" + eacute + "s do telefone (+351) 213 504 540." + - "
    " + - "
    " + - "
    " + - "Com os melhores cumprimentos, " + - "
    " + - "
    " + - "
    " + - nomeTecnico + - "
    " + - "SIPRP - Sociedade Ib" + eacute + "rica de Preven" + ccedil + atilde + "o de Riscos Profissionais " + - "
    " + - "Atrium Saldanha - Pra" + ccedil + "a Duque de Saldanha, 1 - 9º G - 1050-094 Lisboa " + - "
    " + - "Telefone: (+351) 213 504 540 " + - "
    " + - "Fax: (+351) 213 504 549 " + - "
    " + - "E-mail: geral@siprp.pt " + - "
    " + - "URL: www.siprp.com " + - "
    " + - "
    " + - "
    " + - "Esta " + eacute + " uma mensagem gerada automaticamente pelo nosso sistema, por favor n" + atilde + "o responda.

    "; - MailDialog md = new MailDialog( getFrame(), to, bcc, subject, body, getRelatoriosTemp(relatorio), MailSender.from ); - result = md.wasSent(); - } - return result; - } - - private String getShortNameForEstabelecimento( EstabelecimentosData estabelecimento ) - { - String result = null; - String nome = estabelecimento.getNome_plain(); - if( nome != null ) - { - result = nome.trim(); - if( result.length() > MAX_NOME_ESTABELECIMENTO_ON_FILENAME ) - { - String [] tokens = result.split( " " ); - if( tokens != null && tokens.length > 2 ) - { - result = ""; - for ( String token : tokens ) - { - result += token == null ? "" : token; - } - } - } - } - return result; - } - - private Vector getRelatoriosTemp(HsRelatorioData relatorio) throws Exception - { - Vector result = new Vector(); - byte[] relatorioPDF = new RelatorioPDFCreator().createPDF( relatorio.getId() ); - byte[] planoPDF = new PlanoActuacaoPDFCreator().createPDF( relatorio.getId(), false ); - if( relatorioPDF != null ) - { - String data = relatorio.toMarcacao_id().getData_relatorio() == null ? "" : HsRelatorioData.DATE_FORMAT.format( relatorio.getData() ); - String estabelecimento = getShortNameForEstabelecimento(relatorio.toMarcacao_id().toEstabelecimento_id() ); - File relat = File.createTempFile("Relatorio - " + estabelecimento + " - " + data, ".pdf"); - if( relat != null ) - { - FileOutputStream fos = new FileOutputStream(relat); - fos.write(relatorioPDF); - fos.close(); - result.add( relat ); - } - } - if( planoPDF != null ) - { - String data = relatorio.toMarcacao_id().getData_relatorio() == null ? "" : HsRelatorioData.DATE_FORMAT.format( relatorio.getData() ); - String estabelecimento = relatorio.toMarcacao_id().toEstabelecimento_id().getNome_plain(); - File plan = File.createTempFile("Plano de actuacao - " + estabelecimento + " - " + data, ".pdf"); - if( plan != null ) - { - FileOutputStream fos = new FileOutputStream(plan); - fos.write(planoPDF); - fos.close(); - result.add( plan ); - } - } - return result; - } - - private void save() - { - try - { - if( relatorio != null ) - { - relatorio.setData( dataRelatorio.getDate() ); - relatorio.setAvaliacao_inicial( radioInicial.isSelected() ); - } - relatorio.setAcompanhante1( fieldNome1.getText() ); - relatorio.setAcompanhante2( fieldNome2.getText() ); - - relatorio.setFuncao_acompanhante1(fieldFuncao1.getText()); - relatorio.setFuncao_acompanhante2(fieldFuncao2.getText()); - relatorio.save(); - refresh(); - buttonRevertText.setEnabled( false ); - buttonSave.setEnabled( false ); - } catch( Exception e ) - { - LeafDialog.error(e); - } - } - - private void revert() - { - refresh(); - buttonRevertText.setEnabled( false ); - buttonSave.setEnabled( false ); - } - - private void refresh() - { - dataRelatorio.setDate( relatorio == null ? null : relatorio.getData() ); - if( relatorio == null || relatorio.getAvaliacao_inicial() == null ) - { - bg.clearSelection(); - } - else - { - radioInicial.setSelected( relatorio.getAvaliacao_inicial() ); - radioPeriodica.setSelected( !relatorio.getAvaliacao_inicial() ); - } - String tecnicoName = null; - if(relatorio != null) - { - MarcacoesEstabelecimentoData marcacao = relatorio.toMarcacao_id(); - if( marcacao != null ) - { - MarcacoesTecnicosHstData tecnico = marcacao.toTecnico_hst(); - if( tecnico != null ) - { - tecnicoName = tecnico.getNome(); - } - } - } - fieldTecnico.setText( tecnicoName ); - String tecnicoSuperiorName = null; - if( relatorio != null ) - { - MarcacoesEstabelecimentoData marcacao = relatorio.toMarcacao_id(); - if( marcacao != null ) - { - MarcacoesTecnicosHstData tecnico = marcacao.toTecnico_superior_hst(); - if( tecnico != null ) - { - tecnicoSuperiorName = tecnico.getNome(); - } - } - } - fieldTecnicoSuperior.setText( tecnicoSuperiorName ); - fieldNome1.setText( relatorio == null ? null : relatorio.getAcompanhante1() ); - fieldNome2.setText( relatorio == null ? null : relatorio.getAcompanhante2() ); - fieldFuncao1.setText( relatorio == null ? null : relatorio.getFuncao_acompanhante1() ); - fieldFuncao2.setText( relatorio == null ? null : relatorio.getFuncao_acompanhante2() ); - } - - private void setEnabled() - { - boolean enabled = relatorio != null && relatorio.getIs_submetido() == null; - dataRelatorio.setEnabled( enabled ); - radioInicial.setEnabled( enabled );; - radioPeriodica.setEnabled( enabled ); - fieldTecnico.setEnabled( false ); - fieldTecnicoSuperior.setEnabled( false ); - fieldNome1.setEnabled( enabled ); - fieldNome2.setEnabled( enabled ); - fieldFuncao1.setEnabled( enabled ); - fieldFuncao2.setEnabled( enabled ); - buttonSubmit.setEnabled( enabled ); - buttonPdfPlano.setEnabled( relatorio != null ); - buttonPdfRelatorio.setEnabled( relatorio != null ); - buttonRevertPlano.setEnabled( enabled ); - panelFuncionarios.setEnabled( enabled ); - } - - public void setRelatorio( HsRelatorioData relatorio,boolean create ) - { - this.relatorio = relatorio; - buttonSave.setEnabled( false ); - buttonRevertText.setEnabled( false ); - panelEquipamentos.setRelatorio( relatorio ); - panelPlano.setRelatorio( relatorio ); - panelLegislacao.setRelatorio( relatorio ); - panelNormalizacao.setRelatorio( relatorio ); - panelFuncionarios.setValue( relatorio == null ? null : ( relatorio.getFuncionarios() == null ? DEFAULT_FUNCIONARIOS_TEXT : relatorio.getFuncionarios() ) ); - if( create ) - { - this.revert(false); - } - refresh(); - setEnabled(); - } - - private void updated( EventObject e ) - { - Object source = e.getSource(); - if( source instanceof Component ) - { - if( ( (Component) source).isEnabled() ) - { - buttonSave.setEnabled( true ); - buttonRevertText.setEnabled( true ); - } - } - } - - @Override - public void caretUpdate( CaretEvent e ) - { - updated(e); - } - - @Override - public void stateChanged( ChangeEvent e ) - { - updated(e); - } - - @Override - public void actionPerformed( ActionEvent e ) - { - updated(e); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java deleted file mode 100644 index d468458f..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java +++ /dev/null @@ -1,193 +0,0 @@ -package siprp.higiene.relatorio; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.CardLayout; -import java.awt.Dimension; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.BorderFactory; -import javax.swing.JPanel; - -import shst.data.outer.HsRelatorioAreaData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.HsRelatorioPostoData; -import shst.data.outer.HsRelatorioPostoMedidaData; -import shst.data.outer.HsRelatorioPostoRiscoData; -import shst.logic.HigieneSegurancaLogic; - -public class PlanoActuacaoPanel extends JPanel -{ - - private static final long serialVersionUID = 1L; - - private static final String RISCO_PANEL = "RISCO_PANEL"; - - private static final String MEDIDA_PANEL = "MEDIDA_PANEL"; - - private static final String EMPTY_PANEL = "EMPTY_PANEL"; - - private final VerAreasRelatorioPanel areas = new VerAreasRelatorioPanel(); - - private final GerirMedidasRelatorioPanel riscos = new GerirMedidasRelatorioPanel(); - - private final GerirValoresRiscoPanel valoresRisco = new GerirValoresRiscoPanel(); - - private final GerirMedidaRelatorioPanel valoresMedida = new GerirMedidaRelatorioPanel(); - - private final JPanel emptyPanel = new JPanel(); - - private final JPanel valoresPanel = new JPanel(); - - private final CardLayout cards = new CardLayout(); - - private HsRelatorioData relatorio = null; - - public PlanoActuacaoPanel() - { - startupListeners(); - startupComponents(); - startupLayout(); - placeComponents(); - cards.show( valoresPanel, EMPTY_PANEL ); - } - - private void startupListeners() - { - areas.addPropertyChangeListener( VerAreasRelatorioPanel.SELECTION_CHANGED, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - if( evt.getNewValue() instanceof HsRelatorioPostoData ) - { - riscos.setPosto( (HsRelatorioPostoData) evt.getNewValue() ); - } - else - { - riscos.setPosto( null ); - } - } - } ); - riscos.addPropertyChangeListener( GerirMedidasRelatorioPanel.SELECTION_CHANGED, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - if( evt.getNewValue() instanceof HsRelatorioPostoRiscoData ) - { - cards.show( valoresPanel, RISCO_PANEL ); - valoresRisco.setRelatorioPostoRisco( (HsRelatorioPostoRiscoData) evt.getNewValue() ); - } - else if( evt.getNewValue() instanceof HsRelatorioPostoMedidaData ) - { - cards.show( valoresPanel, MEDIDA_PANEL ); - valoresMedida.setMedida( (HsRelatorioPostoMedidaData) evt.getNewValue() ); - } - else - { - cards.show( valoresPanel, EMPTY_PANEL ); - valoresRisco.setRelatorioPostoRisco( null ); - valoresMedida.setMedida( null ); - } - } - } ); - valoresRisco.addPropertyChangeListener( GerirValoresRiscoPanel.VALUE_CHANGED, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - riscos.repaint(); - areas.repaint(); - } - } ); - valoresMedida.addPropertyChangeListener( GerirMedidaRelatorioPanel.MEDIDA_CHANGED, new PropertyChangeListener() - { - @Override - public void propertyChange( PropertyChangeEvent evt ) - { - riscos.refresh(); - } - } ); - } - - private void startupComponents() - { - riscos.setBorder( BorderFactory.createTitledBorder( "Riscos" ) ); - areas.setBorder( BorderFactory.createTitledBorder( "Postos de trabalho" ) ); - areas.setPreferredSize( new Dimension(250,0) ); - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( - new double[]{ TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL, TableLayout.FILL }, - new double[]{ TableLayout.MINIMUM, TableLayout.FILL } - ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - valoresPanel.setLayout(cards); - } - - private void placeComponents() - { - valoresPanel.add( valoresRisco, RISCO_PANEL ); - valoresPanel.add( valoresMedida, MEDIDA_PANEL ); - valoresPanel.add( emptyPanel, EMPTY_PANEL ); - add( areas, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - add( riscos, new TableLayoutConstraints( 2, 1 ) ); - add( valoresPanel, new TableLayoutConstraints( 3, 1 ) ); - } - - public void setRelatorio( HsRelatorioData relatorio ) - { - this.relatorio = relatorio; - areas.setRelatorio( relatorio ); - riscos.setPosto( null ); - valoresRisco.setRelatorioPostoRisco( null ); - valoresRisco.setEnabled( relatorio != null && relatorio.getIs_submetido() == null ); - valoresMedida.setMedida( null ); - valoresMedida.setEnabled( relatorio != null && relatorio.getIs_submetido() == null ); - } - - public boolean isValidPlano() - { - boolean result = true; - if( relatorio != null ) - { - for( HsRelatorioAreaData area : relatorio.fromHsRelatorioArea_relatorio_id() ) - { - for( HsRelatorioPostoData posto : area.fromHsRelatorioPosto_area_id() ) - { - for( HsRelatorioPostoRiscoData relRisco : posto.fromHsRelatorioPostoRisco_posto_id() ) - { - boolean preenchido = relRisco.toValor_qualitativo_id() != null; - if( !preenchido ) - { - preenchido = HigieneSegurancaLogic.isProbabilidadeValida( relRisco.getProbabilidade() ) && HigieneSegurancaLogic.isSeveridadeValida( relRisco.getSeveridade() ); - } - if( !preenchido ) - { - result = false; - break; - } - } - if( !result ) - { - break; - } - } - if( !result ) - { - break; - } - } - } - return result; - } - -} - diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioHigieneSegurancaWindow.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioHigieneSegurancaWindow.java deleted file mode 100644 index 895190be..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioHigieneSegurancaWindow.java +++ /dev/null @@ -1,246 +0,0 @@ -package siprp.higiene.relatorio; - -import static com.evolute.utils.strings.UnicodeLatin1Map.oacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Color; -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Date; -import java.util.List; - -import javax.swing.BorderFactory; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.SwingUtilities; - -import leaf.ui.LeafDialog; -import shst.data.outer.EmpresasData; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.MarcacoesEstabelecimentoData; -import shst.logic.HigieneSegurancaLogic; -import siprp.ui.SIPRPFrame; - -import com.evolute.utils.tracker.TrackableWindow; - -public class RelatorioHigieneSegurancaWindow extends SIPRPFrame implements TrackableWindow -{ - private static final long serialVersionUID = 1L; - - public static final Color COLOR_RISCO_OK = new Color(200,255,200); - - public static final Color COLOR_RISCO_OK_SEL = new Color(140,240,140); - - public static final Color COLOR_MEDIDA_OK = new Color(200,230,255); - - public static final Color COLOR_MEDIDA_OK_SEL = new Color(160,190,255); - - public static final String TITLE = "Relat" + oacute + "rios de H&S"; - - public static final Dimension SIZE = new Dimension( 1024, 700 ); - - private final JComboBox comboEmpresas = new JComboBox(); - - private final JComboBox comboEstabelecimentos = new JComboBox(); - - private final JComboBox comboVisitas = new JComboBox(); - - private final PanelRelatorio panelRelatorio = new PanelRelatorio(); - - public RelatorioHigieneSegurancaWindow() - { - setupListeners(); - startupComponents(); - startupLayout(); - placeComponents(); - setTitle( TITLE ); - setSize( SIZE ); - setLocationRelativeTo( null ); - } - - private void startupComponents() - { - panelRelatorio.setBorder( BorderFactory.createTitledBorder( "Relat" + oacute + "rio" ) ); - for( EmpresasData empresa : HigieneSegurancaLogic.getAllEmpresas() ) - { - comboEmpresas.addItem( empresa ); - } - } - - private void startupLayout() - { - TableLayout layout = new TableLayout( - new double[]{ TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.FILL }, - new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL } - ); - layout.setVGap( 5 ); - layout.setHGap( 5 ); - getContentPane().setLayout( layout ); - } - - private void placeComponents() - { - Container pane = getContentPane(); - pane.add( new JLabel("Empresa"), new TableLayoutConstraints( 0, 0 ) ); - pane.add( comboEmpresas, new TableLayoutConstraints( 1, 0, 3, 0 ) ); - pane.add( new JLabel("Estabelecimento"), new TableLayoutConstraints( 0, 1 ) ); - pane.add( comboEstabelecimentos, new TableLayoutConstraints( 1, 1 ) ); - pane.add( new JLabel("Visita"), new TableLayoutConstraints( 2, 1 ) ); - pane.add( comboVisitas, new TableLayoutConstraints( 3, 1 ) ); - pane.add( panelRelatorio, new TableLayoutConstraints(0,2,3,2)); - } - - private void setupListeners() - { - comboEmpresas.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - if( e.getStateChange() == ItemEvent.SELECTED ) - { - fillEstabelecimentos( (EmpresasData) e.getItem() ); - } - } - } ); - comboEstabelecimentos.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - if( e.getStateChange() == ItemEvent.SELECTED ) - { - fillVisitas( (EstabelecimentosData) e.getItem() ); - } - } - } ); - comboVisitas.addItemListener( new ItemListener() - { - @Override - public void itemStateChanged( ItemEvent e ) - { - if( e.getStateChange() == ItemEvent.SELECTED ) - { - fillRelatorio( (MarcacoesEstabelecimentoData) e.getItem() ); - } - } - } ); - - } - - private void fillEstabelecimentos( EmpresasData empresa ) - { - comboEstabelecimentos.removeAllItems(); - if( empresa != null ) - { - for( EstabelecimentosData estabelecimento : empresa.fromEstabelecimentos_empresa_id() ) - { - comboEstabelecimentos.addItem( estabelecimento ); - } - } - } - - private void fillVisitas( EstabelecimentosData estabelecimento ) - { - comboVisitas.removeAllItems(); - if( estabelecimento != null ) - { - for( MarcacoesEstabelecimentoData visita : estabelecimento.fromMarcacoesEstabelecimento_estabelecimento_id() ) - { - if( "y".equals( visita.getRealizada() ) ) - { - comboVisitas.addItem( visita ); - } - } - } - } - - private void fillRelatorio( MarcacoesEstabelecimentoData visita ) - { - try - { - setCursor( new Cursor( Cursor.WAIT_CURSOR ) ); - boolean carregarDadosEstabelecimento = false; -// panelRelatorio.setRelatorio( null, carregarDadosEstabelecimento ); - if( visita != null ) - { - HsRelatorioData relatorio = null; - List< HsRelatorioData > relatorios = visita.fromHsRelatorio_marcacao_id(); - Date data = null; - for( HsRelatorioData current : relatorios ) - { - boolean newest = data == null ? true : ( data.before( current.getData() ) ); - if( newest ) - { - data = current.getData(); - relatorio = current; - } - } - if( relatorio == null ) - { - relatorio = new HsRelatorioData(); - relatorio.setData( new Date() ); - relatorio.setToMarcacao_id( visita ); - relatorio.save(); - carregarDadosEstabelecimento = true; - } - panelRelatorio.setRelatorio( relatorio, carregarDadosEstabelecimento );; - } - else - { - panelRelatorio.setRelatorio( null, carregarDadosEstabelecimento ); - } - } - catch( Exception e ) - { - LeafDialog.error(e); - } - finally - { - setCursor( new Cursor( Cursor.DEFAULT_CURSOR ) ); - } - } - - @Override - public void open() - { - setVisible( true ); - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable() - { - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - @Override - public boolean closeIfPossible() - { - close(); - return true; - } - - @Override - public void refresh() - { - - } - - public static void main( String[] args ) - { - RelatorioHigieneSegurancaWindow window = new RelatorioHigieneSegurancaWindow(); - window.setVisible( true ); - window.setDefaultCloseOperation( SIPRPFrame.EXIT_ON_CLOSE ); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioLegislacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioLegislacaoPanel.java deleted file mode 100644 index a2d5dd48..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioLegislacaoPanel.java +++ /dev/null @@ -1,117 +0,0 @@ -package siprp.higiene.relatorio; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Collections; -import java.util.List; -import java.util.Vector; - -import javax.swing.JButton; - -import leaf.ui.SimpleTable; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.HsRelatorioLegislacaoData; -import shst.data.outer.MarcacoesEstabelecimentoData; -import shst.logic.HigieneSegurancaLogic; - -import com.evolute.swing.panel.EvoPanel; -import com.evolute.utils.error.ErrorLogger; -import com.evolute.utils.tables.ColumnizedObjectArray; - -public class RelatorioLegislacaoPanel extends EvoPanel -{ - private static final long serialVersionUID = 1L; - - private final JButton revert = new JButton("Reverter"); - - private HsRelatorioData relatorio = null; - - private final SimpleTable table = new SimpleTable( "Categoria", "Legisla" + ccedil + atilde + "o" ); - - public RelatorioLegislacaoPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - } - - private void startupComponents() - { - table.getTable().fixColumnWidth(0,200); - revert.addActionListener( new ActionListener() - { - - @Override - public void actionPerformed( ActionEvent e ) - { - runAsynchronously( new Runnable() - { - @Override - public void run() - { - if( relatorio != null ) - { - MarcacoesEstabelecimentoData marcacao = relatorio.toMarcacao_id(); - if( marcacao != null ) - { - EstabelecimentosData estabelecimento = marcacao.toEstabelecimento_id(); - if( estabelecimento != null ) - { - try - { - HigieneSegurancaLogic.reverterLegislacao( relatorio, estabelecimento, true ); - } catch( Exception e1 ) - { - ErrorLogger.logException( e1 ); - } - } - } - refresh(); - } - } - } ); - } - } ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( new double[]{ TableLayout.MINIMUM, TableLayout.FILL }, new double[]{ TableLayout.MINIMUM, TableLayout.FILL } ); - this.setLayout( layout ); - } - - private void placeComponents() - { - this.add( table, new TableLayoutConstraints( 0, 1,1,1 ) ); - this.add( revert, new TableLayoutConstraints( 0, 0 ) ); - } - - public void setRelatorio( HsRelatorioData relatorio ) - { - this.relatorio = relatorio; - refresh(); - } - - private void refresh() - { - table.clear(); - if( relatorio != null ) - { - List legislacoes = relatorio.fromHsRelatorioLegislacao_hs_relatorio_id(); - Collections.sort( legislacoes ); - Vector rows = new Vector(); - for( HsRelatorioLegislacaoData legislacao : legislacoes ) - { - rows.add( new ColumnizedObjectArray( new Object[]{ legislacao, legislacao.getCategoria(), legislacao.getDescricao() }, true ) ); - } - table.setRows( rows ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioNormalizacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioNormalizacaoPanel.java deleted file mode 100644 index 4b6b0889..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/RelatorioNormalizacaoPanel.java +++ /dev/null @@ -1,120 +0,0 @@ -package siprp.higiene.relatorio; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import static com.evolute.utils.strings.UnicodeLatin1Map.oacute; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Collections; -import java.util.List; -import java.util.Vector; - -import javax.swing.JButton; - -import leaf.ui.SimpleTable; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.HsRelatorioNormalizacaoData; -import shst.data.outer.MarcacoesEstabelecimentoData; -import shst.logic.HigieneSegurancaLogic; - -import com.evolute.swing.panel.EvoPanel; -import com.evolute.utils.error.ErrorLogger; -import com.evolute.utils.tables.ColumnizedObjectArray; - -public class RelatorioNormalizacaoPanel extends EvoPanel -{ - - private static final long serialVersionUID = 1L; - - private HsRelatorioData relatorio = null; - - private final JButton revert = new JButton("Reverter"); - - private final SimpleTable table = new SimpleTable( "C" + oacute + "digo", "Normaliza" + ccedil + atilde + "o", "" ); - - public RelatorioNormalizacaoPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - } - - private void startupComponents() - { - table.getTable().fixColumnWidth(0,50); - table.getTable().fixColumnWidth(2,100); - revert.addActionListener( new ActionListener() - { - - @Override - public void actionPerformed( ActionEvent e ) - { - runAsynchronously( new Runnable() - { - @Override - public void run() - { - if( relatorio != null ) - { - MarcacoesEstabelecimentoData marcacao = relatorio.toMarcacao_id(); - if( marcacao != null ) - { - EstabelecimentosData estabelecimento = marcacao.toEstabelecimento_id(); - if( estabelecimento != null ) - { - try - { - HigieneSegurancaLogic.reverterNormalizacao( relatorio, estabelecimento, true ); - } catch( Exception e1 ) - { - ErrorLogger.logException( e1 ); - } - } - } - refresh(); - } - } - } ); - } - } ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( new double[]{ TableLayout.MINIMUM, TableLayout.FILL }, new double[]{ TableLayout.MINIMUM, TableLayout.FILL } ); - this.setLayout( layout ); - } - - private void placeComponents() - { - this.add( table, new TableLayoutConstraints( 0, 1,1,1 ) ); - this.add( revert, new TableLayoutConstraints( 0, 0 ) ); - } - - public void setRelatorio( HsRelatorioData relatorio ) - { - this.relatorio = relatorio; - refresh(); - } - - private void refresh() - { - table.clear(); - if( relatorio != null ) - { - List normalizacoes = relatorio.fromHsRelatorioNormalizacao_hs_relatorio_id(); - Collections.sort( normalizacoes ); - Vector rows = new Vector(); - for( HsRelatorioNormalizacaoData normalizacao : normalizacoes ) - { - rows.add( new ColumnizedObjectArray( new Object[]{ normalizacao, normalizacao.getCodigo(), normalizacao.getDescricao(), normalizacao.getPortuguesa() ? "Portuguesa" : "Internacional" }, true ) ); - } - table.setRows( rows ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/VerAreasRelatorioPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/VerAreasRelatorioPanel.java deleted file mode 100644 index e6d9bfa8..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/VerAreasRelatorioPanel.java +++ /dev/null @@ -1,202 +0,0 @@ -package siprp.higiene.relatorio; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Color; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTree; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import leaf.ui.LeafTree; -import shst.data.outer.HsRelatorioAreaData; -import shst.data.outer.HsRelatorioData; -import shst.data.outer.HsRelatorioPostoData; -import shst.data.outer.HsRelatorioPostoRiscoData; -import shst.logic.HigieneSegurancaLogic; -import shst.logic.node.PostoRelatorioNode; - -import com.evolute.utils.error.ErrorLogger; -import com.evolute.utils.images.ImageIconLoader; -import com.evolute.utils.ui.trees.TreeTools; - -public class VerAreasRelatorioPanel extends JPanel -{ - - private static final long serialVersionUID = 1L; - - public static final String SELECTION_CHANGED = "SELECTION_CHANGED"; - - private final JButton buttonEdit = new JButton( "Editar Nome", ImageIconLoader.loadImageIconSilent( "siprp/higiene/relatorio/edit.png" ) ); - - private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - private final DefaultTreeModel model = new DefaultTreeModel( root ); - - public final LeafTree tree = new LeafTree( model ); - - private final JScrollPane scroll = new JScrollPane( tree ); - - private HsRelatorioData relatorio = null; - - private DefaultMutableTreeNode selectedNode = null; - - public VerAreasRelatorioPanel() - { - startupComponents(); - setupLayout(); - placeComponents(); - startupListeners(); - } - - private void startupComponents() - { - buttonEdit.setEnabled( false ); - tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); - tree.setCellRenderer(new DefaultTreeCellRenderer() - { - - private static final long serialVersionUID = 1L; - - @Override - public Component getTreeCellRendererComponent( JTree pTree, Object pValue, boolean pIsSelected, boolean pIsExpanded, boolean pIsLeaf, int pRow, boolean pHasFocus ) - { - super.getTreeCellRendererComponent( pTree, pValue, pIsSelected, pIsExpanded, pIsLeaf, pRow, pHasFocus ); - boolean highlight= false; - Color highColor = null; - Color lowColor = null; - if( pValue instanceof PostoRelatorioNode ) - { - Object userObject = ((PostoRelatorioNode)pValue).getUserObject(); - if( userObject instanceof HsRelatorioPostoData ) - { - HsRelatorioPostoData posto = (HsRelatorioPostoData) userObject; - boolean allOk = true; - for( HsRelatorioPostoRiscoData rel : posto.fromHsRelatorioPostoRisco_posto_id() ) - { - if( rel.toRisco_id().getDeleted_date() == null ) - { - allOk &= HigieneSegurancaLogic.isRelatorioRiscoPreenchido( rel ); - } - } - highColor = RelatorioHigieneSegurancaWindow.COLOR_RISCO_OK_SEL; - lowColor = RelatorioHigieneSegurancaWindow.COLOR_RISCO_OK; - highlight = allOk; - } - } - if( highlight ) - { - setOpaque( true ); - setBackground( pIsSelected ? highColor : lowColor ); - } - else - { - setOpaque( false ); - } - return this; - } - } ); - TreeTools.registerTreeKeepExpandState( tree ); - } - - private void setupLayout() - { - TableLayout layout = new TableLayout( - new double[]{ TableLayout.MINIMUM, TableLayout.FILL }, - new double[]{ TableLayout.MINIMUM, TableLayout.FILL } - ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - setLayout( layout ); - } - - private void placeComponents() - { - add( buttonEdit, new TableLayoutConstraints( 0, 0 ) ); - add( scroll, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - } - - private void startupListeners() - { - - tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener(){ - @Override - public void valueChanged( TreeSelectionEvent e ) - { - TreePath path = tree.getSelectionPath(); - Object object = path == null ? null : path.getLastPathComponent(); - HsRelatorioPostoData posto = object == null ? null : ( (object instanceof PostoRelatorioNode) ? (HsRelatorioPostoData) ((PostoRelatorioNode) object).getUserObject() : null); - selectedNode = (object instanceof DefaultMutableTreeNode) ? (DefaultMutableTreeNode) object : null; - buttonEdit.setEnabled( selectedNode != null ); - firePropertyChange( SELECTION_CHANGED, null, posto ); - } - } ); - - buttonEdit.addActionListener( new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - Object object = selectedNode == null ? null : selectedNode.getUserObject(); - if( object != null ) - { - String title = "Editar nome"; - String result = (String) JOptionPane.showInputDialog( VerAreasRelatorioPanel.this, "", title, JOptionPane.QUESTION_MESSAGE, null, null, object.toString() ); - if( result != null && ! result.trim().isEmpty() ) - { - try - { - if( object instanceof HsRelatorioAreaData ) - { - ( ( HsRelatorioAreaData ) object ).setDescription( result ); - ( ( HsRelatorioAreaData ) object ).save(); - refresh(); - } - else if( object instanceof HsRelatorioPostoData ) - { - ( ( HsRelatorioPostoData ) object ).setDescription( result ); - ( ( HsRelatorioPostoData ) object ).save(); - refresh(); - } - } - catch( Exception ex ) - { - ErrorLogger.logException( ex ); - } - } - } - } - } ); - } - - public void refresh() - { - root.removeAllChildren(); - if( relatorio != null ) - { - TreeTools.merge( root, HigieneSegurancaLogic.getAreasRelatorioTree( relatorio ) ); - } - TreeTools.refreshTree( tree, root, false ); - } - - public void setRelatorio( HsRelatorioData relatorio ) - { - this.relatorio = relatorio; - refresh(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/adobe_reader.png b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/adobe_reader.png deleted file mode 100644 index 613bda100675185fb0cde7dea5f77e9633a20599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647 zcmV-#29WuQP)#J-Ff%<_Sz5l7d)QN zXC6;=tI)N~wQOI?3_qQ87B97TDz|dWH5CFt%mxWb2(%pp2!Iyid7cMtofJtCMBP#) zRS3I*h=-D)>bCk0Xfa*+{6 zfY+2$Ie{;yi{RxBcOdc(0RsPg-DWPqk6(Rm?m-ZUZsR=XA^H^Uv_rI9`lJu^8cC8Q zFlNR{oIvbfpLq6(XF=|ze4X+&7z0*^)d7YsAIJw_3~-v$U^u3iF+QS|Rxpoqg)T69 zF+qK9kCd^24Fp4FQZD77cH+VXRz2NxgLy(U(LhfSuXsUbxNF_D;B4}yd(%O4-duNc z9cZhlrW&H#Ng@ff4*KZ_tx?*g9rXWD!A8&qaS;MzJCE{Tg7)yBxWx@27q_?t@^>sO zkTS*?1Jg?uSzwstkOR_lzvq4rINo;!T|tQMaV&Q%hx^}JpIV=ScG2dsc|fyEo3w%U z4jb7F+9#y)185h>l+&O`F=Y_!;lt7(4G>fhz#mV8tu6)_0P7EY#aCc9OQSS`;R>t| ztcOIuqtHKOswcK|4(v^`QSrc1R}Z9Wo$4 z1$$_wjL8@{57A36$g=4Gl8X-?n15uLVK5_dK`wyR;K+7lgE^jXDB%#qCT9#}3_!TF z`(F1X7$qt}#eg=*L6(8xRmuDe^dC!+YzKW0zhfU+OQt1alG#KUv)bp;`YsKDrAgmk#~P zHwA->zImnVWr(cyZ}zW-=nkIdDAL@La6Zu^i01a@cZ#@uW3m?u9^+ ztfj2kYY)L*_JTSo8)O5}Z;RL>u;5_+7x`a+%jT)@RKUOD&efi)h4GZYGl3N#Yi(J! z??BF|0wQ2-C6*UJPN;fig4NFg-UT^ftkqY7wS`}E9;_CAL=k8sk}Ds9J(wn834`33 zww}e)f4*`2a^B@UFplYUdL2x>HkdKE7^KG5YO4paXqF*BlQ+o(X;Z84fUIOIZjdWv z@I6SO)B;G4dPyAxtDIj*5Hug#_z>)&%krYUNV=r5hBYATB~S9;UQSvY$7I0R3tsVW5Kw4g*(tME(Y{li%mPVlmiCq)n|NE+$*maX?*)dgV*B(P8E3WdKcYAT}URYjhwoFfcP9FfckXFgh?eAS*C2Fffw<8#Vv{00(qQO+^RR z1s4r5J8~1q0RR9132;bRa{vGe@Bjb`@Bu=sG?)MY00d`2O+f$vv5yP9!^r6N6UrrPJM2e^+-^v+LKdcFfJq z-f~@@5kky!&VRYCnIz1RxW3Y#`~whl|CRv>rS+@^F&uXzEREP zQca#$Jq)m;zAyGmQsji9D5p1VZc@81p4r>xq;Bpy&>k-@TWwLz+VK|nL;||h(z54h z`*y$n)1Vb8W^=H73C&wtn<^DYSZ1}POZ}H{@c4$LRA&718>saO)BK zxoHf13k5QNf&+_C;~1uCLy>^BF&{BQ$D_wTv3=+y&NX!7?x`Uplk1~lV3382zf9uX zH8it=d<9TUADSoQ%C#=++TDSI39MK^jiSor%Lsv0Ci%Wwa%~6EV4Hi8>*CWnxMqnwcBQul6Kx)Ap|2+A9W@bD+KR>oeyVd_@ z;CW7dbY#jJ86L@ujE&Ca7Q2`7xt|qXFZlGi%&=U)h~N>e)dDO`Z8vdxCV7~#gGJWz#UG?$+0000 -{ - protected String designacao; - protected Vector postos; - protected Integer ordem; - protected boolean temGenerico; - - public AreaToPrint( String designacao, Vector postos, Integer ordem, boolean temGenerico ) - { - super(); - this.designacao = designacao; - this.postos = postos; - this.ordem = ordem; - this.temGenerico = temGenerico; - } - - @Override - public Element toJdomElement() throws Exception - { - Element areaElement = new Element( "area" ); - Element designacaoElement = new Element( "designacao" ); - designacaoElement.setText( designacao ); - areaElement.addContent( designacaoElement ); - for( PostoToPrint posto : postos ) - { - areaElement.addContent( posto.toJdomElement() ); - } - return areaElement; - } - - @Override - public int compareTo(Object o) - { - if( o instanceof AreaToPrint ) - { - if( temGenerico && !( ( AreaToPrint ) o ).temGenerico ) - { - return -1; - } - else if( !temGenerico && ( ( AreaToPrint ) o ).temGenerico ) - { - return 1; - } - if( ordem != null ) - { - return ( ( ( AreaToPrint ) o ).ordem == null ) ? -1 : ordem.compareTo( ( ( AreaToPrint ) o ).ordem ); - } - } - return 0; - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DBConstants.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DBConstants.java deleted file mode 100644 index 06e1a1fa..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DBConstants.java +++ /dev/null @@ -1,17 +0,0 @@ -package siprp.higiene.relatorio.print; - -public interface DBConstants -{ - -// public static final String LOCAL_URL = "jdbc:postgresql://localhost:5436/siprp_local_3"; -//// public static final String LOCAL_URL = "jdbc:postgresql://storage/siprp_local"; -// public static final String LOCAL_USER = "postgres"; -//// public static final String LOCAL_PASSWORD = "Typein"; -// public static final String LOCAL_PASSWORD = null; - - public static final String LOCAL_URL = "jdbc:postgresql://www.evolute.pt:5436/siprp_local_3"; - public static final String LOCAL_USER = "postgres"; - public static final String LOCAL_PASSWORD = "Typein"; - - public static final String LOCAL_DBMANAGER = "LOCAL DBMANAGER"; -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DataToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DataToPrint.java deleted file mode 100644 index b921677b..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/DataToPrint.java +++ /dev/null @@ -1,66 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Calendar; -import java.util.Date; - -import org.jdom.Element; - -import com.evolute.utils.date.DateUtils; - -public class DataToPrint - implements PrintableInterface -{ - protected String tag; - protected Date data; - - public DataToPrint( String tag, Date data ) - { - super(); - this.tag = tag; - this.data = data; - } - - @Override - public Element toJdomElement() throws Exception - { - Element dataElement = new Element( tag ); - Calendar cal = Calendar.getInstance(); - cal.setTime( data ); - int ano = cal.get( Calendar.YEAR ); - int mes = cal.get( Calendar.MONTH ); - int dia = cal.get( Calendar.DAY_OF_MONTH ); - Element anoElement = new Element( "ano" ); - anoElement.setText( "" + ano ); - dataElement.addContent( anoElement ); - Element mesElement = new Element( "mes" ); - mesElement.setText( "" + ( mes + 1 ) ); - dataElement.addContent( mesElement ); - Element mesExtensoElement = new Element( "mes-extenso" ); - mesExtensoElement.setText( DateUtils.MONTHS_FULL_PT[ mes ] ); - dataElement.addContent( mesExtensoElement ); - Element diaElement = new Element( "dia" ); - diaElement.setText( "" + dia ); - dataElement.addContent( diaElement ); - return dataElement; - } - - public String getTag() - { - return tag; - } - - public void setTag( String tag ) - { - this.tag = tag; - } - - public Date getData() - { - return data; - } - - public void setData( Date data ) - { - this.data = data; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EmpresaToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EmpresaToPrint.java deleted file mode 100644 index 3786ebd9..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EmpresaToPrint.java +++ /dev/null @@ -1,76 +0,0 @@ -package siprp.higiene.relatorio.print; - -import org.jdom.Element; - -public class EmpresaToPrint - implements PrintableInterface -{ - protected String designacaoSocial; - protected String logotipo; - protected String estabelecimento; - protected String actividade; - protected String nomeAcompanhante; - protected String funcaoAcompanhante; - protected String nomeAcompanhante2; - protected String funcaoAcompanhante2; - protected String morada; - - public EmpresaToPrint( String designacaoSocial, String logotipo, - String estabelecimento, String actividade, String nomeAcompanhante, - String funcaoAcompanhante, String nomeAcompanhante2, - String funcaoAcompanhante2, String morada ) - { - super(); - this.designacaoSocial = designacaoSocial; - this.logotipo = logotipo; - this.estabelecimento = estabelecimento; - this.actividade = actividade; - this.nomeAcompanhante = nomeAcompanhante; - this.funcaoAcompanhante = funcaoAcompanhante; - this.nomeAcompanhante2 = nomeAcompanhante2; - this.funcaoAcompanhante2 = funcaoAcompanhante2; - this.morada = morada; - } - - - @Override - public Element toJdomElement() throws Exception - { - Element empresaElement = new Element( "empresa" ); - Element designacaoSocialElement = new Element( "designacao-social" ); - designacaoSocialElement.setText( designacaoSocial ); - empresaElement.addContent( designacaoSocialElement ); - Element logotipoElement = new Element( "logotipo" ); - logotipoElement.setText( logotipo ); - empresaElement.addContent( logotipoElement ); - Element estabelecimentoElement = new Element( "estabelecimento" ); - estabelecimentoElement.setText( estabelecimento ); - empresaElement.addContent( estabelecimentoElement ); - Element actividadeElement = new Element( "actividade" ); - actividadeElement.setText( actividade ); - empresaElement.addContent( actividadeElement ); - Element nomeAcompanhanteElement = new Element( "nome-acompanhante" ); - nomeAcompanhanteElement.setText( nomeAcompanhante ); - empresaElement.addContent( nomeAcompanhanteElement ); - Element funcaoAcompanhanteElement = new Element( "funcao-acompanhante" ); - funcaoAcompanhanteElement.setText( funcaoAcompanhante ); - empresaElement.addContent( funcaoAcompanhanteElement ); - if( nomeAcompanhante2 != null && nomeAcompanhante2.trim().length() > 0 ) - { - Element nomeAcompanhante2Element = new Element( "nome-acompanhante2" ); - nomeAcompanhante2Element.setText( nomeAcompanhante2 ); - empresaElement.addContent( nomeAcompanhante2Element ); - Element funcaoAcompanhante2Element = new Element( "funcao-acompanhante2" ); - funcaoAcompanhante2Element.setText( funcaoAcompanhante2 ); - empresaElement.addContent( funcaoAcompanhante2Element ); - } - if( morada != null ) - { - Element moradaElement = new Element( "morada" ); - moradaElement.setText( morada ); - empresaElement.addContent( moradaElement ); - } - return empresaElement; - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentoToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentoToPrint.java deleted file mode 100644 index bd2785b4..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentoToPrint.java +++ /dev/null @@ -1,27 +0,0 @@ -package siprp.higiene.relatorio.print; - -import org.jdom.Element; - -public class EquipamentoToPrint - implements PrintableInterface -{ - protected String tipo; - protected String marca; - protected String modelo; - - public EquipamentoToPrint( String tipo, String marca, String modelo ) - { - super(); - this.tipo = tipo; - this.marca = marca; - this.modelo = modelo; - } - - @Override - public Element toJdomElement() throws Exception - { - Element equipamentoElement = new Element( "equipamento" ); - equipamentoElement.setText( tipo + " (" + marca + " " + modelo + ")" ); - return equipamentoElement; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentosToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentosToPrint.java deleted file mode 100644 index 7323db41..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/EquipamentosToPrint.java +++ /dev/null @@ -1,27 +0,0 @@ -package siprp.higiene.relatorio.print; - -import org.jdom.Element; - -public class EquipamentosToPrint - implements PrintableInterface -{ - protected EquipamentoToPrint equipamentos[]; - - public EquipamentosToPrint( EquipamentoToPrint[] equipamentos ) - { - super(); - this.equipamentos = equipamentos; - } - - @Override - public Element toJdomElement() - throws Exception - { - Element equipamentosElement = new Element( "equipamentos" ); - for( EquipamentoToPrint equipamento : equipamentos ) - { - equipamentosElement.addContent( equipamento.toJdomElement() ); - } - return equipamentosElement; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/LegislacaoAplicavelToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/LegislacaoAplicavelToPrint.java deleted file mode 100644 index 3861186d..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/LegislacaoAplicavelToPrint.java +++ /dev/null @@ -1,53 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Vector; - -import org.jdom.Element; - -public class LegislacaoAplicavelToPrint - implements PrintableInterface -{ - protected Vector diplomasGerais; - protected String[] nomesGruposEspecificos; - protected Vector[] diplomasEspecificos; - - public LegislacaoAplicavelToPrint( Vector diplomasGerais, - String[] nomesGruposEspecificos, Vector[] diplomasEspecificos ) - { - super(); - this.diplomasGerais = diplomasGerais; - this.nomesGruposEspecificos = nomesGruposEspecificos; - this.diplomasEspecificos = diplomasEspecificos; - } - - @Override - public Element toJdomElement() throws Exception - { - Element legislacaoAplicavelElement = new Element( "legislacao-aplicavel" ); - Element legislacaoGeralElement = new Element( "legislacao-geral" ); - for( String diploma : diplomasGerais ) - { - Element diplomaElement = new Element( "diploma" ); - diplomaElement.setText( diploma ); - legislacaoGeralElement.addContent( diplomaElement ); - } - legislacaoAplicavelElement.addContent( legislacaoGeralElement ); - - for( int e = 0; e < nomesGruposEspecificos.length; e++ ) - { - Element legislacaoEspecificaElement = new Element( "legislacao-especifica" ); - Element designacaoElement = new Element( "designacao" ); - designacaoElement.setText( nomesGruposEspecificos[ e ] ); - legislacaoEspecificaElement.addContent( designacaoElement ); - for( String diploma : diplomasEspecificos[ e ] ) - { - Element diplomaElement = new Element( "diploma" ); - diplomaElement.setText( diploma ); - legislacaoEspecificaElement.addContent( diplomaElement ); - } - legislacaoAplicavelElement.addContent( legislacaoEspecificaElement ); - } - return legislacaoAplicavelElement; - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/MedidaToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/MedidaToPrint.java deleted file mode 100644 index 374aecd6..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/MedidaToPrint.java +++ /dev/null @@ -1,30 +0,0 @@ -package siprp.higiene.relatorio.print; - -import org.jdom.Element; - -public class MedidaToPrint - implements PrintableInterface -{ - protected String requisitosLegais; - protected String descricao; - - public MedidaToPrint( String requisitosLegais, String descricao ) - { - super(); - this.requisitosLegais = requisitosLegais; - this.descricao = descricao; - } - - @Override - public Element toJdomElement() throws Exception - { - Element medidaElement = new Element( "medida" ); - Element requisitosLegaisElement = new Element( "requisitos-legais" ); - requisitosLegaisElement.setText( requisitosLegais ); - medidaElement.addContent( requisitosLegaisElement ); - Element descricaoElement = new Element( "descricao" ); - descricaoElement.setText( descricao ); - medidaElement.addContent( descricaoElement ); - return medidaElement; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/NormalizacaoToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/NormalizacaoToPrint.java deleted file mode 100644 index c3746d1d..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/NormalizacaoToPrint.java +++ /dev/null @@ -1,43 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Vector; - -import org.jdom.Element; - -public class NormalizacaoToPrint - implements PrintableInterface -{ - protected Vector normasPortuguesas; - protected Vector normasInternacionais; - - public NormalizacaoToPrint( Vector normasPortuguesas, Vector normasInternacionais ) - { - super(); - this.normasPortuguesas = normasPortuguesas; - this.normasInternacionais = normasInternacionais; - } - - @Override - public Element toJdomElement() throws Exception - { - Element normalizacaoElement = new Element( "normalizacao-aplicavel" ); - Element portuguesaElement = new Element( "normalizacao-portuguesa" ); - addNormas( portuguesaElement, normasPortuguesas ); - normalizacaoElement.addContent( portuguesaElement ); - Element internacionalElement = new Element( "normalizacao-internacional" ); - addNormas( internacionalElement, normasInternacionais ); - normalizacaoElement.addContent( internacionalElement ); - return normalizacaoElement; - } - - protected void addNormas( Element element, Vector normas ) - { - for( String norma : normas ) - { - Element normaElement = new Element( "norma" ); - normaElement.setText( norma ); - element.addContent( normaElement ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PostoToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PostoToPrint.java deleted file mode 100644 index f8762d9a..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PostoToPrint.java +++ /dev/null @@ -1,41 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Vector; - -import org.jdom.Element; - - -public class PostoToPrint - implements PrintableInterface -{ - protected String designacao; - protected Vector riscos; - protected boolean generico; - - public PostoToPrint( String designacao, Vector riscos, boolean generico ) - { - this.designacao = designacao; - this.riscos = riscos; - this.generico = generico; - } - - @Override - public Element toJdomElement() - throws Exception - { - Element postoElement = new Element( "posto" ); - Element designacaoElement = new Element( "designacao" ); - designacaoElement.setText( designacao ); - postoElement.addContent( designacaoElement ); - for( RiscoToPrint risco : riscos ) - { - postoElement.addContent( risco.toJdomElement() ); - } - return postoElement; - } - - public boolean isGenerico() - { - return generico; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PrintableInterface.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PrintableInterface.java deleted file mode 100644 index 3e21c8a4..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/PrintableInterface.java +++ /dev/null @@ -1,8 +0,0 @@ -package siprp.higiene.relatorio.print; - -import org.jdom.Element; - -public interface PrintableInterface -{ - public Element toJdomElement() throws Exception; -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioDBInit.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioDBInit.java deleted file mode 100644 index b06320cd..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioDBInit.java +++ /dev/null @@ -1,29 +0,0 @@ -package siprp.higiene.relatorio.print; - -import com.evolute.utils.Singleton; -import com.evolute.utils.db.keyretrievers.PostgresqlAutoKeyRetriever; -import com.evolute.utils.sql.Insert; -import com.evolute.utils.strings.UnicodeChecker; - -public class RelatorioDBInit -{ - public static void initDB() - throws Exception - { -// if( web ) -// { -// String url = DBConstants.LOCAL_URL; -// String user = DBConstants.LOCAL_USER; -// String pwd = DBConstants.LOCAL_PASSWORD; -// DBManager localManager = new JDBCManager( url, user, pwd, 10, 8, 8, null ); -// Singleton.setInstance( DBConstants.LOCAL_DBMANAGER, localManager ); -// } -// else -// { - Singleton.setInstance( DBConstants.LOCAL_DBMANAGER, Singleton.getInstance( Singleton.DEFAULT_DBMANAGER ) ); -// } - - Insert.setDefaultKeyRetriever( PostgresqlAutoKeyRetriever.RETRIEVER ); - UnicodeChecker.setUseDoubleSlash( true ); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPDFCreator.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPDFCreator.java deleted file mode 100644 index be2e3e21..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPDFCreator.java +++ /dev/null @@ -1,54 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; - -import org.jdom.Document; -import org.jdom.output.Format; -import org.jdom.output.XMLOutputter; - -import shst.util.fop.PDFCreator; -import siprp.Main; - -import com.evolute.utils.xml.XSLTransformer; - - -public class RelatorioPDFCreator -{ - - public byte[] createPDF( Integer relatorioId ) throws Exception - { - RelatorioToPrint relatorio = RelatorioPrintDataProvider.getProvider().getRelatorioToPrint( relatorioId ); - Document foDoc = new Document( relatorio.toJdomElement() ); - XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); - ByteArrayOutputStream foBaos = new ByteArrayOutputStream(); -// FileOutputStream fos = new FileOutputStream("/home/jneto/a.xml"); - outputter.output( foDoc, foBaos ); -// outputter.output( foDoc, fos ); - -// System.out.println( new String( foBaos.toByteArray() ) ); - byte fo[] = applyTemplate( - getClass().getClassLoader().getResourceAsStream( "siprp/higiene/relatorio/print/relatorio.xsl" ), - new ByteArrayInputStream( foBaos.toByteArray() ) - ); -// System.out.println( new String( fo ) ); - - - //FIXME: FOP COPIADO - PDFCreator.setUserConfig(Main.fopConfigFile); - PDFCreator pdfCreator = PDFCreator.getPDFCreator(); - - - byte pdf[] = pdfCreator.createPdfFromFo( fo ); - return pdf; - } - - public byte[] applyTemplate( InputStream xsl, InputStream dataStream ) throws Exception - { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - XSLTransformer.getXSLTransformer().transform( dataStream, xsl, baos ); - return baos.toByteArray(); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPrintDataProvider.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPrintDataProvider.java deleted file mode 100644 index b86fc00d..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioPrintDataProvider.java +++ /dev/null @@ -1,646 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.Vector; - -import siprp.planoactuacao.db.DBConstants; - -import com.evolute.utils.Singleton; -import com.evolute.utils.arrays.Virtual2DArray; -import com.evolute.utils.data.Mappable; -import com.evolute.utils.data.MappableObject; -import com.evolute.utils.db.DBManager; -import com.evolute.utils.db.Executer; -import com.evolute.utils.sql.BlobUpdate; -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 RelatorioPrintDataProvider -{ - private static final Object LOCK = new Object(); - protected static final Object UNCONTROLLED = "Incontrolado"; - protected static final Object CONTROLLED = "Controlado"; - protected static final Object INDETERMINATE = "Indeterminado"; - protected static final Object NAO_VALORAVEL = "N\u00E3o Valor\u00E1vel"; - - private static RelatorioPrintDataProvider instance = null; - - protected final Executer EXECUTER; - - public RelatorioPrintDataProvider() - throws Exception - { - if( Singleton.getInstance( DBConstants.LOCAL_DBMANAGER ) == null ) - { - RelatorioDBInit.initDB(); - } - DBManager LOCAL_DBMANAGER = ( DBManager ) Singleton.getInstance( DBConstants.LOCAL_DBMANAGER ); - EXECUTER = LOCAL_DBMANAGER.getSharedExecuter( this ); - } - - public static RelatorioPrintDataProvider getProvider() - throws Exception - { - synchronized( LOCK ) - { - if( instance == null ) - { - instance = new RelatorioPrintDataProvider(); - } - } - return instance; - } - - public boolean empresaUsaPlanoAlargadoPorPlanoId( Integer planoId ) - throws Exception - { - try - { - Select select = - new Select2( - new String[]{ "hs_relatorio", "marcacoes_estabelecimento", "estabelecimentos", "empresas" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "hs_relatorio.marcacao_id" ).isEqual( new Field( "marcacoes_estabelecimento.id" ) ), - new Field( "marcacoes_estabelecimento.estabelecimento_id" ).isEqual( new Field( "estabelecimentos.id" ) ), - new Field( "estabelecimentos.empresa_id" ).isEqual( new Field( "empresas.id" ) ) - }, - new String[]{ "imprimir_tabela_alargada" }, - new Field( "hs_relatorio.id" ).isEqual( planoId ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - - return ( ( Boolean ) array.get( 0, 0 ) ).booleanValue(); - } - catch( Exception ex ) - { - return true; - } - } - - - public RelatorioToPrint getRelatorioToPrint( Integer id ) - throws Exception - { - Virtual2DArray array; - - Select select = new Select2( - new String[]{ "hs_relatorio", "marcacoes_estabelecimento", "estabelecimentos", "empresas" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "hs_relatorio.marcacao_id" ).isEqual( new Field( "marcacoes_estabelecimento.id" ) ), - new Field( "marcacoes_estabelecimento.estabelecimento_id" ).isEqual( new Field( "estabelecimentos.id" ) ), - new Field( "estabelecimentos.empresa_id" ).isEqual( new Field( "empresas.id" ) ) - }, - new String[]{ - "empresas.id", "empresas.designacao_social", "empresas.actividade", - "estabelecimentos.id", "estabelecimentos.nome", - "hs_relatorio.data", "marcacoes_estabelecimento.data", - "hs_relatorio.acompanhante1", "hs_relatorio.funcao_acompanhante1", - "hs_relatorio.acompanhante2", "hs_relatorio.funcao_acompanhante2", - "hs_relatorio.funcionarios", "estabelecimentos.morada", - "hs_relatorio.avaliacao_inicial"}, - new Field( "hs_relatorio.id" ).isEqual( id ), - null, - null, - null, - null - ); -// System.out.println( "\ngetRelatorioToPrint() : " + select.toString() ); - - array = EXECUTER.executeQuery( select ); - Integer empresaId = ( Integer ) array.get( 0, 0 ); - String nomeEmpresa = ( String ) array.get( 0, 1 ); - String actividadeEmpresa = ( String ) array.get( 0, 2 ); - Integer estabelecimentoId = ( Integer ) array.get( 0, 3 ); - String nomeEstabelecimento = ( String ) array.get( 0, 4 ); - Integer logoId = getLogotipoIdForEmpresaId( empresaId ); - Date dataRelatorio = ( Date ) array.get( 0, 5 ); - Date dataVisita = ( Date ) array.get( 0, 6 ); - Date dataProximaVisita = getDataProximaVisita( estabelecimentoId, dataVisita ); - String nomeAcompanhante = ( String ) array.get( 0, 7 ); - String funcaoAcompanhante = ( String ) array.get( 0, 8 ); - String nomeAcompanhante2 = ( String ) array.get( 0, 9 ); - String funcaoAcompanhante2 = ( String ) array.get( 0, 10 ); - String textoFuncionarios = ( String ) array.get( 0, 11 ); - String morada = ( String ) array.get( 0, 12 ); - String tipoAvaliacao = ( array.get( 0, 13 ) != null && ( ( Boolean ) array.get( 0, 13 ) ).booleanValue() ) ? "INICIAL" : "PERI\u00d3DICA"; - EmpresaToPrint empresa = new EmpresaToPrint( nomeEmpresa, - "http://www.evolute.pt:13080/SIPRPImages/image?id=" + logoId, - nomeEstabelecimento, actividadeEmpresa, - nomeAcompanhante, funcaoAcompanhante, nomeAcompanhante2, funcaoAcompanhante2, morada ); - RelatorioToPrint plano = new RelatorioToPrint( - empresa, - dataRelatorio != null ? new DataToPrint( "data-relatorio", dataRelatorio ) : null, - dataVisita != null ? new DataToPrint( "data-hs", dataVisita ) : null, - tipoAvaliacao, - dataProximaVisita != null ? new DataToPrint( "data-proxima-hs", dataProximaVisita ) : null, - textoFuncionarios, - getTecnicoHS( id ), - getTecnicoSuperiorHS( id ), - getLegislacaoAplicavel( id ), - getNormalizacaoAplicavel( id ), - getEquipamento( id ), - getAreasToPrint( id ) - ); - return plano; - } - - public Date getDataProximaVisita( Integer estabelecimentoId, Date dataVisita ) - throws Exception - { - Select select = - new Select2( - new String[]{ "marcacoes_estabelecimento" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "MIN( marcacoes_estabelecimento.data )" }, - new Field( "marcacoes_estabelecimento.estabelecimento_id" ).isEqual( estabelecimentoId ).and( - new Field( "marcacoes_estabelecimento.data" ).isGreater( dataVisita ) ).and( - new Field( "marcacoes_estabelecimento.estado" ).isEqual( 0 ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - if( array.columnLength() == 0 ) - { - return null; - } - else - { - return ( Date ) array.get( 0, 0 ); - } - } - - 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 = EXECUTER.executeQuery( select ); - return array.columnLength() > 0 ? ( Integer ) array.get( 0, 0 ) : null; - } - - public TecnicoHSToPrint getTecnicoHS( Integer relatorioId ) - throws Exception - { - Select select = - new Select2( - new String[]{ "hs_relatorio", "marcacoes_estabelecimento", "marcacoes_tecnicos_hst" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "hs_relatorio.marcacao_id" ).isEqual( new Field( "marcacoes_estabelecimento.id" ) ), - new Field( "marcacoes_estabelecimento.tecnico_hst" ).isEqual( new Field( "marcacoes_tecnicos_hst.id" ) ), - }, - new String[]{ - "marcacoes_tecnicos_hst.id", - "marcacoes_tecnicos_hst.nome", - "marcacoes_tecnicos_hst.cap", - "marcacoes_tecnicos_hst.formacao", - "marcacoes_tecnicos_hst.assinatura",}, - new Field( "hs_relatorio.id" ).isEqual( relatorioId ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - if( array.columnLength() == 0 ) - { - return null; - } - else - { - Integer id = ( Integer ) array.get( 0, 0 ); - String nome = ( String ) array.get( 0, 1 ); - String cap = ( String ) array.get( 0, 2 ); - String formacao = ( String ) array.get( 0, 3 ); - Integer assinatura = ( Integer ) array.get( 0, 4 ); - return new TecnicoHSToPrint( id, nome, cap, formacao, "http://www.evolute.pt:13080/SIPRPImages/image?id=" + assinatura, false ); - } - } - - public TecnicoHSToPrint getTecnicoSuperiorHS( Integer relatorioId ) - throws Exception - { - Select select = - new Select2( - new String[]{ "hs_relatorio", "marcacoes_estabelecimento", "marcacoes_tecnicos_hst" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "hs_relatorio.marcacao_id" ).isEqual( new Field( "marcacoes_estabelecimento.id" ) ), - new Field( "marcacoes_estabelecimento.tecnico_superior_hst" ).isEqual( new Field( "marcacoes_tecnicos_hst.id" ) ), - }, - new String[]{ - "marcacoes_tecnicos_hst.id", - "marcacoes_tecnicos_hst.nome", - "marcacoes_tecnicos_hst.cap", - "marcacoes_tecnicos_hst.formacao", - "marcacoes_tecnicos_hst.assinatura",}, - new Field( "hs_relatorio.id" ).isEqual( relatorioId ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - if( array.columnLength() == 0 ) - { - return null; - } - else - { - Integer id = ( Integer ) array.get( 0, 0 ); - String nome = ( String ) array.get( 0, 1 ); - String cap = ( String ) array.get( 0, 2 ); - String formacao = ( String ) array.get( 0, 3 ); - Integer assinatura = ( Integer ) array.get( 0, 4 ); - return new TecnicoHSToPrint( id, nome, cap, formacao, "http://www.evolute.pt:13080/SIPRPImages/image?id=" + assinatura, true ); - } - } - - public LegislacaoAplicavelToPrint getLegislacaoAplicavel( Integer relatorioId ) - throws Exception - { - Select select = - new Select2( - new String[]{ "hs_relatorio_legislacao" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "hs_relatorio_legislacao.categoria", "hs_relatorio_legislacao.descricao", - "COALESCE(hs_relatorio_legislacao.categoria,'A')"}, - new Field( "hs_relatorio_legislacao.hs_relatorio_id" ).isEqual( relatorioId ), - new String[]{ "COALESCE(hs_relatorio_legislacao.categoria,'A')", "ordem" }, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - Vector diplomasGerais = new Vector(); - Vector nomes = new Vector(); - Vector> diplomas = new Vector>(); - String last = null; - for( int n = 0; n < array.columnLength(); n++ ) - { - String categoria = ( String ) array.get( n, 0 ); - String descricao = ( String ) array.get( n, 1 ); - if( categoria == null || categoria.trim().length() == 0 ) - { - diplomasGerais.add( descricao ); - } - else - { - if( !categoria.equals( last ) ) - { - nomes.add( categoria ); - diplomas.add( new Vector() ); - } - last = categoria; - diplomas.lastElement().add( descricao ); - } - } - LegislacaoAplicavelToPrint legislacao = - new LegislacaoAplicavelToPrint( diplomasGerais, nomes.toArray( new String[ nomes.size() ] ), - diplomas.toArray( new Vector[ diplomas.size() ] )); - return legislacao; - } - - public NormalizacaoToPrint getNormalizacaoAplicavel( Integer relatorioId ) - throws Exception - { - Select select = - new Select2( - new String[]{ "hs_relatorio_normalizacao" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "hs_relatorio_normalizacao.portuguesa", "hs_relatorio_normalizacao.descricao" }, - new Field( "hs_relatorio_normalizacao.hs_relatorio_id" ).isEqual( relatorioId ), - new String[]{ "hs_relatorio_normalizacao.portuguesa", "hs_relatorio_normalizacao.descricao" }, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - Vector portuguesas = new Vector(); - Vector internacionais = new Vector(); - for( int n = 0; n < array.columnLength(); n++ ) - { - Boolean portuguesa = ( Boolean ) array.get( n, 0 ); - String descricao = ( String ) array.get( n, 1 ); - if( portuguesa ) - { - portuguesas.add( descricao ); - } - else - { - internacionais.add( descricao ); - } - } - return new NormalizacaoToPrint( portuguesas, internacionais ); - } - - public EquipamentosToPrint getEquipamento( Integer relatorioId ) - throws Exception - { - Select select = - new Select2( - new String[]{ "hs_relatorio_equipamento" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "hs_relatorio_equipamento.tipo", "hs_relatorio_equipamento.marca", - "hs_relatorio_equipamento.modelo" }, - new Field( "hs_relatorio_equipamento.hs_relatorio_id" ).isEqual( relatorioId ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - EquipamentoToPrint equipamentos[] = new EquipamentoToPrint[ array.columnLength() ]; - for( int n = 0; n < array.columnLength(); n++ ) - { - String tipo = ( String ) array.get( n, 0 ); - String marca = ( String ) array.get( n, 1 ); - String modelo = ( String ) array.get( n, 2 ); - equipamentos[ n ] = new EquipamentoToPrint( tipo, marca, modelo ); - } - return new EquipamentosToPrint( equipamentos ); - } - - public Vector getAreasToPrint( Integer relatorioId ) - throws Exception - { - Virtual2DArray array; - Vector areas = new Vector(); - - Select select = new Select2( - new String[]{ "hs_relatorio_area" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "id", "description", "ordem" }, - new Field( "relatorio_id" ).isEqual( relatorioId ).and( - new Field( "deleted_date" ).isEqual( null ) ), - new String[]{ "id" }, - null, - null, - null - ); -// System.out.println( "\ngetAreasToPrint( " + relatorioId + " ) : " + select.toString() ); - array = 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 ); - -// System.out.println( "\n\t\tAREA : " + areaDescricao ); - - Integer ordem = ( Integer ) array.get( n, 2 ); - Vector postos = getPostosToPrintByAreaId( areaId ); - if( postos.size() > 0 ) - { - boolean generico = false; - for( PostoToPrint posto : postos ) - { - generico |= posto.isGenerico(); - } - areas.add( new AreaToPrint( areaDescricao, postos, ordem, generico ) ); - } - } - Collections.sort( areas ); - return areas; - } - - public Vector getPostosToPrintByAreaId( Integer areaId ) - throws Exception - { - Vector postos = new Vector(); - Virtual2DArray array; - Select select = new Select2( - new String[]{ "hs_relatorio_posto" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ - "hs_relatorio_posto.id", "hs_relatorio_posto.description", "coalesce(hs_relatorio_posto.is_principal,'FALSE')" - }, - new Field( "hs_relatorio_posto.area_id" ).isEqual( areaId ).and( - new Field( "hs_relatorio_posto.deleted_date" ).isEqual( null ) - ), - new String[]{ "coalesce(hs_relatorio_posto.is_principal,'FALSE') DESC", "hs_relatorio_posto.id" }, - null, - null, - null - ); -// System.out.println( "\n\tgetPostosToPrintByAreaId( " + areaId + " ) : " + select.toString() ); - - array = 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 ); - -// System.out.println( "\n\t\t\tPOSTO : " + descricao ); - - Boolean generico = ( Boolean ) array.get( n, 2 ); - postos.add( new PostoToPrint( descricao, getRiscosToPrintByPostoId( id ), generico ) ); - } - return postos; - } - - public Vector getRiscosToPrintByPostoId( Integer postoId ) - throws Exception - { - Virtual2DArray array; - Vector riscos = new Vector(); - Select select = new Select2( - new String[]{ "hs_relatorio_risco", "hs_relatorio_posto_risco", "hs_relatorio_risco_valor_qualitativo" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_LEFT_OUTER }, - new Expression[]{ - new Field( "hs_relatorio_risco.id" ).isEqual( new Field( "hs_relatorio_posto_risco.risco_id" ) ), - new Field( "hs_relatorio_posto_risco.valor_qualitativo_id" ).isEqual( new Field( "hs_relatorio_risco_valor_qualitativo.id" ) ) - }, - new String[]{ - "hs_relatorio_risco.id", "hs_relatorio_risco.description", "hs_relatorio_posto_risco.probabilidade", - "hs_relatorio_posto_risco.severidade", "hs_relatorio_risco_valor_qualitativo.description" - }, - new Field( "hs_relatorio_posto_risco.posto_id" ).isEqual( postoId ).and( - new Field( "hs_relatorio_risco.deleted_date" ).isEqual( null ).and( - new Field( "hs_relatorio_posto_risco.probabilidade" ).isDifferent( null ).or( - new Field( "hs_relatorio_posto_risco.severidade" ).isDifferent( null ).or( - new Field( "hs_relatorio_posto_risco.valor_qualitativo_id" ).isDifferent( null ) - ) - ) - ) - ), - new String[]{ "hs_relatorio_posto_risco.probabilidade*hs_relatorio_posto_risco.severidade DESC" }, - null, - null, - null - ); -// System.out.println( "\n\t\tgetRiscosToPrintByPostoId( " + postoId + " ) : " + select.toString() ); - - array = EXECUTER.executeQuery( select ); - Vector riscosVector = new Vector(); - HashMap> riscosIdMap = new HashMap>(); - for( int n = 0; n < array.columnLength(); n++ ) - { - Integer id = ( Integer ) array.get( n, 0 ); - String descricao = ( String ) array.get( n, 1 ); - -// System.out.println( "\n\t\t\t\tRISCO : " + descricao ); - - Integer probabilidade = ( Integer ) array.get( n, 2 ); - Integer severidade = ( Integer ) array.get( n, 3 ); - String valorQualitativo = ( String ) array.get( n, 4 ); - riscos.add( - new RiscoToPrint( - descricao, - severidade, - probabilidade, - valorQualitativo, - getMedidasToPrintByRiscoId( id ) ) ); - } - - Collections.sort(riscos, new Comparator(){ - - @Override - public int compare(RiscoToPrint o1, RiscoToPrint o2) { - Integer o1Value = 1000; - Integer o2Value = 1000; - if( o1.probabilidade != null && o1.severidade != null ) - { - o1Value = -o1.probabilidade*o1.severidade; - } - else if(o1.valorQualitativo.equals(UNCONTROLLED)) - { - o1Value = 100; - } - else if(o1.valorQualitativo.equals(CONTROLLED)) - { - o1Value = 200; - } - else if(o1.valorQualitativo.equals(INDETERMINATE)) - { - o1Value = 300; - } - else if ( o1.valorQualitativo.equals( NAO_VALORAVEL ) ) - { - o1Value = 400; - } - - if( o2.probabilidade != null && o2.severidade != null ) - { - o2Value = -o2.probabilidade*o2.severidade; - } - else if(o2.valorQualitativo.equals(UNCONTROLLED)) - { - o2Value = 100; - } - else if(o2.valorQualitativo.equals(CONTROLLED)) - { - o2Value = 200; - } - else if(o2.valorQualitativo.equals(INDETERMINATE)) - { - o2Value = 300; - } - else if ( o2.valorQualitativo.equals( NAO_VALORAVEL ) ) - { - o2Value = 400; - } - - if( o1Value == -4 && o2Value == -4 ) - { - o1Value = o1.probabilidade + o1.severidade; - o2Value = o2.probabilidade + o2.severidade; - } - return o1Value.compareTo( o2Value ); - } - }); - - return riscos; - } - - public Vector getMedidasToPrintByRiscoId( Integer riscoId ) - throws Exception - { - Vector medidas = new Vector(); - Select select = new Select2( - new String[]{ "hs_relatorio_medida" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ - "hs_relatorio_medida.id", "hs_relatorio_medida.requesitos_legais", "hs_relatorio_medida.description" - }, - new Field( "hs_relatorio_medida.risco_id" ).isEqual( riscoId ).and( - new Field( "hs_relatorio_medida.deleted_date" ).isEqual( null ) - ), - new String[]{ "hs_relatorio_medida.id" }, - null, - null, - null - ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - for( int n = 0; n < array.columnLength(); n++ ) - { - String requisitosLegais = ( String ) array.get( n, 1 ); - String descricao = ( String ) array.get( n, 2 ); - medidas.add( new MedidaToPrint( requisitosLegais, descricao ) ); - } - return medidas; - } - - /** - * Para fazer dump dos logotipos para converter para jpeg - */ - public Mappable[] getLogotipos() - throws Exception - { - Select select = - new Select2( - new String[]{ "image" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "id", "image_data" }, - null, - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - Mappable logotipos[] = new Mappable[ array.columnLength() ]; - for( int n = 0; n < logotipos.length; n++ ) - { - Integer id = ( Integer ) array.get( n, 0 ); - byte data[] = ( byte[] ) array.get( n, 1 ); - logotipos[ n ] = - new MappableObject( id, data ); - } - return logotipos; - } - - /** - * Para fazer import dos logotipos convertidos para jpeg - */ - public void updateLogotipo( Integer id, byte[] data ) - throws Exception - { - BlobUpdate update = - new BlobUpdate( "image", "image_data", data, new Field( "id" ).isEqual( id ) ); - EXECUTER.executeQuery( update ); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioToPrint.java deleted file mode 100644 index 0c36facb..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RelatorioToPrint.java +++ /dev/null @@ -1,96 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Vector; - -import org.jdom.Element; - -public class RelatorioToPrint - implements PrintableInterface -{ - protected EmpresaToPrint empresa; - protected DataToPrint dataRelatorio; - protected DataToPrint dataHs; - protected String tipoAvaliacao; - protected DataToPrint dataProximaHs; - protected String textoFuncionarios; - protected TecnicoHSToPrint tecnicoHS; - protected TecnicoHSToPrint tecnicoSuperiorHS; - protected LegislacaoAplicavelToPrint legislacaoAplicavel; - protected NormalizacaoToPrint normalizacaoAplicavel; - protected EquipamentosToPrint equipamentos; - protected Vector areas; - - public RelatorioToPrint( EmpresaToPrint empresa, - DataToPrint dataRelatorio, - DataToPrint dataHs, - String tipoAvaliacao, - DataToPrint dataProximaHs, - String textoFuncionarios, - TecnicoHSToPrint tecnicoHS, - TecnicoHSToPrint tecnicoSuperiorHS, - LegislacaoAplicavelToPrint legislacaoAplicavel, - NormalizacaoToPrint normalizacaoAplicavel, - EquipamentosToPrint equipamentos, - Vector areas ) - { - super(); - this.empresa = empresa; - this.dataRelatorio = dataRelatorio; - this.dataHs = dataHs; - this.tipoAvaliacao = tipoAvaliacao; - this.dataProximaHs = dataProximaHs; - this.textoFuncionarios = textoFuncionarios; - this.tecnicoHS = tecnicoHS; - this.tecnicoSuperiorHS = tecnicoSuperiorHS; - this.legislacaoAplicavel = legislacaoAplicavel; - this.normalizacaoAplicavel = normalizacaoAplicavel; - this.equipamentos = equipamentos; - this.areas = areas; - } - - @Override - public Element toJdomElement() throws Exception - { - Element relatorioElement = new Element( "relatorio" ); - relatorioElement.addContent( empresa.toJdomElement() ); - relatorioElement.addContent( dataRelatorio.toJdomElement() ); - relatorioElement.addContent( dataHs.toJdomElement() ); - Element tipoAvaliacaoElement = new Element( "tipo-avaliacao" ); - tipoAvaliacaoElement.setText( tipoAvaliacao ); - relatorioElement.addContent( tipoAvaliacaoElement ); - Element tipoAvaliacaoCamelElement = new Element( "tipo-avaliacao-camel" ); - tipoAvaliacaoCamelElement.setText( tipoAvaliacao.charAt(0) + tipoAvaliacao.toLowerCase().substring(1) ); - relatorioElement.addContent( tipoAvaliacaoCamelElement ); - if( dataProximaHs != null ) - { - relatorioElement.addContent( dataProximaHs.toJdomElement() ); - } - if( textoFuncionarios != null ) - { - Element textoFuncionariosElement = new Element( "texto-funcionarios" ); - textoFuncionariosElement.setText( textoFuncionarios ); - relatorioElement.addContent( textoFuncionariosElement ); - } - if( tecnicoHS != null ) - { - relatorioElement.addContent( tecnicoHS.toJdomElement() ); - } - if( tecnicoSuperiorHS != null ) - { - relatorioElement.addContent( tecnicoSuperiorHS.toJdomElement() ); - } - relatorioElement.addContent( legislacaoAplicavel.toJdomElement() ); - relatorioElement.addContent( normalizacaoAplicavel.toJdomElement() ); - relatorioElement.addContent( equipamentos.toJdomElement() ); - if( areas.size() > 0 ) - { - Element conclusoesElement = new Element( "conclusoes" ); - for( AreaToPrint area : areas ) - { - conclusoesElement.addContent( area.toJdomElement() ); - } - relatorioElement.addContent( conclusoesElement ); - } - return relatorioElement; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RiscoToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RiscoToPrint.java deleted file mode 100644 index f558f0eb..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/RiscoToPrint.java +++ /dev/null @@ -1,59 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.util.Vector; - -import org.jdom.Element; - -public class RiscoToPrint - implements PrintableInterface -{ - protected String descricao; - protected Integer severidade; - protected Integer probabilidade; - protected String valorQualitativo; - protected Vector medidas; - - public RiscoToPrint( String descricao, Integer severidade, Integer probabilidade, - String valorQualitativo, Vector medidas ) - { - super(); - this.descricao = descricao; - this.severidade = severidade; - this.probabilidade = probabilidade; - this.valorQualitativo = valorQualitativo; - this.medidas = medidas; - } - - @Override - public Element toJdomElement() throws Exception - { - Element riscoElement = new Element( "risco" ); - Element descricaoElement = new Element( "descricao" ); - descricaoElement.setText( descricao ); - riscoElement.addContent( descricaoElement ); - if( severidade != null ) - { - Element severidadeElement = new Element( "severidade" ); - severidadeElement.setText( severidade != null ? severidade.toString() : " " ); - riscoElement.addContent( severidadeElement ); - } - if( probabilidade != null ) - { - Element probabilidadeElement = new Element( "probabilidade" ); - probabilidadeElement.setText( probabilidade != null ? probabilidade.toString() : " " ); - riscoElement.addContent( probabilidadeElement ); - } - Element valorElement = new Element( "valor-numerico" ); - valorElement.setText( ( severidade != null && probabilidade != null ) ? "" + ( severidade * probabilidade ) : " " ); - riscoElement.addContent( valorElement ); - Element valorQualitativoElement = new Element( "valor-qualitativo" ); - valorQualitativoElement.setText( valorQualitativo != null ? valorQualitativo : " " ); - riscoElement.addContent( valorQualitativoElement ); - for( MedidaToPrint medida : medidas ) - { - riscoElement.addContent( medida.toJdomElement() ); - } - - return riscoElement; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TecnicoHSToPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TecnicoHSToPrint.java deleted file mode 100644 index 88fe4715..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TecnicoHSToPrint.java +++ /dev/null @@ -1,45 +0,0 @@ -package siprp.higiene.relatorio.print; - -import org.jdom.Element; - -public class TecnicoHSToPrint - implements PrintableInterface -{ - protected Integer id; - protected String nome; - protected String cap; - protected String formacao; - protected String assinatura; - protected boolean superior; - - public TecnicoHSToPrint( Integer id, String nome, String cap, - String formacao, String assinatura, boolean superior ) - { - super(); - this.id = id; - this.nome = nome; - this.cap = cap; - this.formacao = formacao; - this.assinatura = assinatura; - this.superior = superior; - } - - @Override - public Element toJdomElement() throws Exception - { - Element tecnicoHSElement = new Element( "tecnico" + ( superior ? "-superior" : "" ) + "-hs" ); - Element nomeElement = new Element( "nome" ); - nomeElement.setText( nome ); - tecnicoHSElement.addContent( nomeElement ); - Element capElement = new Element( "cap" ); - capElement.setText( cap ); - tecnicoHSElement.addContent( capElement ); - Element formacaoElement = new Element( "formacao" ); - formacaoElement.setText( formacao ); - tecnicoHSElement.addContent( formacaoElement ); - Element assinaturaElement = new Element( "assinatura" ); - assinaturaElement.setText( "" + assinatura ); - tecnicoHSElement.addContent( assinaturaElement ); - return tecnicoHSElement; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TestPrint.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TestPrint.java deleted file mode 100644 index a72201e8..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/TestPrint.java +++ /dev/null @@ -1,87 +0,0 @@ -package siprp.higiene.relatorio.print; - -import java.io.ByteArrayOutputStream; -import java.io.FileOutputStream; -import java.io.InputStream; - -import shst.util.fop.PDFCreator; - -import com.evolute.utils.xml.XSLTransformer; - -public class TestPrint -{ - public static void main( String args[] ) - throws Exception - { - new TestPrint().test(); - } - - public void test() - throws Exception - { -// FileOutputStream fos; -// -//// PlanoActuacaoDBInit.initDB(); -//// PlanoActuacaoToPrint plano = PlanoActuacaoPrintDataProvider.getProvider().getPlanoToPrint( 6 ); -// Element evoluteElement = new Element( "evolute" ); -// Document foDoc = new Document( evoluteElement ); -// Format pretty = Format.getPrettyFormat(); -// pretty.setIndent("\t"); -// XMLOutputter outputter = new XMLOutputter(pretty); -// ByteArrayOutputStream foBaos = new ByteArrayOutputStream(); -// outputter.output( foDoc, foBaos ); -//// FileOutputStream fos = new FileOutputStream( "/home/fpalma/Desktop/in.xml" ); -//// fos.write( foBaos.toByteArray() ); -//// fos.close(); -// -// byte fo[] = applyTemplate( -//// "siprp/planoactuacao/print/plano_actuacao.xsl", -//// getClass().getClassLoader().getResourceAsStream( "siprp/higiene/relatorio/relatorio.xsl" ), -// new FileInputStream( "/home/fpalma/projectos2/SIPRP/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio.xsl" ), -//// "siprp/planoactuacao/print/teste_input.xml" ); -// new FileInputStream( "/home/fpalma/projectos2/SIPRP/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input.xml" ) ); -//// new ByteArrayInputStream( foBaos.toByteArray() ) ); -//// new ByteArrayInputStream( "".getBytes() ) ); -//// System.out.println( new String( fo ) ); -// System.out.println( new String(fo) ); -// createPDFFile( fo, "/home/fpalma/Desktop/out.pdf" ); -//// createPDFFile( fo, "c:/Documents and Settings/Frederico/Ambiente de Trabalho/out.pdf" ); -// -// fos = new FileOutputStream( "/home/fpalma/Desktop/out.xml" ); -// fos.write( fo ); -// fos.close(); - - for( int n = 59; n <= 59; n++ ) - { - byte pdf[] = new RelatorioPDFCreator().createPDF( n ); - FileOutputStream fos = new FileOutputStream( "/home/fpalma/Desktop/" + n + ".pdf" ); - fos.write( pdf ); - fos.close(); - } - } - - public void createPDFFile( byte fo[], String path ) - throws Exception - { - byte pdf[] = PDFCreator.getPDFCreator().createPdfFromFo( fo ); - FileOutputStream fos = new FileOutputStream( path ); - fos.write( pdf ); - fos.close(); - } - - public byte[] applyTemplate( String template, String data ) - throws Exception - { - InputStream xsl = getClass().getClassLoader().getResourceAsStream( template ); - InputStream xml = getClass().getClassLoader().getResourceAsStream( data ); - return( applyTemplate( xsl, xml ) ); - } - - public byte[] applyTemplate( InputStream xsl, InputStream dataStream ) - throws Exception - { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - XSLTransformer.getXSLTransformer().transform( dataStream, xsl, baos ); - return baos.toByteArray(); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio.xsl b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio.xsl deleted file mode 100644 index d6cdad71..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio.xsl +++ /dev/null @@ -1,2874 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ATRIUM SALDANHA   - - - Praça Duque de Saldanha, 1 – 9º G   - - - 1050 – 094 Lisboa   - - - Telefone (+351) 213 504 540   - - - Fax (+351) 213 504 549   - - - geral@siprp.pt   - - - www.siprp.com   - - - - - - - Lisboa   - - - - - de - - - - - - - - - - - - AVALIAÇÃO DOS RISCOS PROFISSIONAIS   - - - Relatório - - -   - - -   - - -   - - - - - - - - - -   - - -   - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - - - - - - - ÍNDICE - - - - - - - - - - - - 1. INTRODUÇÃO - - - - - - - 2. AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - 3. MEDIÇÃO DOS FACTORES DE RISCO - - - - - - - 4. LEGISLAÇÃO APLICÁVEL - - - - - - - 4.1 Legislação de aplicação geral - - - - - - - 4.2 Legislação específica - - - - - - - 5. NORMALIZAÇÃO APLICÁVEL - - - - - - - 6. EMPRESA CLIENTE - - - - - - - 7. TABELAS DE AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - 8. PLANO DE ACTUAÇÃO - - - - - - - 9. ACOMPANHAMENTO - - - - - - - 10. CONSIDERAÇÕES FINAIS - - - - - -   - - -   - - - - - - - - 1 - INTRODUÇÃO   - - - - - - - - - - - O empregador deve assegurar aos trabalhadores condições de segurança e saúde em todos os aspectos relacionados com o trabalho, aplicando as medidas necessárias tendo em conta os princípios gerais de prevenção. - - - - - Na aplicação das medidas de prevenção, o empregador deve mobilizar os meios necessários, nomeadamente nos domínios da prevenção técnica, da formação, informação e consulta dos trabalhadores e de serviços adequados, internos ou externos à empresa. - - - - - De acordo com a Lei nº 102/2009 de 10 de Setembro, que regulamenta o regime jurídico da promoção e prevenção da segurança e da saúde no trabalho, a prevenção dos riscos profissionais deve assentar numa correcta e permanente avaliação de riscos. - - - - - Enquanto entidade prestadora de serviços externos, a SIPRP - Sociedade Ibérica de Prevenção de Riscos Profissionais fomenta a implementação das medidas necessárias para prevenir os riscos profissionais e promover a segurança e a saúde dos trabalhadores, nomeadamente através da planificação da prevenção (integrando a todos os níveis a avaliação dos riscos e respectivas medidas de prevenção), da avaliação de riscos (com elaboração do respectivo relatório), da elaboração do plano de prevenção dos riscos profissionais e dos planos detalhados de prevenção e protecção (planos de actuação). - - - - - O presente documento reflecte a avaliação dos riscos profissionais realizada, assim como as medidas de prevenção tidas como necessárias. - - - - - Será igualmente emitido um outro documento no qual se elabora o plano de prevenção dos riscos profissionais, o qual é denominado de Plano de Actuação. - - - - - - - - - - - - - - 2 - AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - - - - - Uma avaliação de riscos profissionais é um exame cuidadoso, realizado nos locais de trabalho, que tem como objectivo detectar os componentes aí existentes capazes de causar dano(s) ao(s) trabalhador(es) expostos. Na prática, trata-se de um processo dinâmico que reúne um duplo objectivo: - - - - - - - - - - • - - - - - Estimar a gravidade que um determinado risco no trabalho pode ter para a saúde e segurança dos trabalhadores, resultante das circunstâncias em que o perigo pode ocorrer; - - - - - - - • - - - - - Obter a informação necessária para que o empregador reúna condições para uma tomada de decisão apropriada, nomeadamente informação sobre a necessidade e o tipo de medidas preventivas a adoptar. - - - - - - - - A avaliação de riscos profissionais constitui um processo dinâmico, uma vez que os riscos profissionais que a entidade patronal se vê obrigada a avaliar não ficam definitivamente determinados, mas vão evoluindo à medida que alterações se vão efectuando em função: - - - - - - - - - - • - - - - - do desenvolvimento progressivo das condições de trabalho; - - - - - - - - - - - • - - - - - das investigações científicas em matéria de riscos profissionais. - - - - - - - - A avaliação dos riscos profissionais deve ser eficiente e suficientemente detalhada para possibilitar uma adequada hierarquização dos riscos e consequente controlo. - - - - - Uma vez que assume uma linguagem mais objectiva, a SIPRP optou pelo método de matriz simples 4x4, que envolve a quantificação da probabilidade e da gravidade. - - - - - O método referido recorre a duas escalas de quatro níveis, para quantificar as variáveis gravidade e probabilidade. - - - - - - - - - - - - Gravidade - - - - - - - - Probabilidade  - - - - - - - - Improvável   - - - 1   - - - - - Ocasional   - - - 2   - - - - - Provável   - - - 3   - - - - - Frequente   - - - 4   - - - - - - - Negligenciável - - - 1   - - - - - Aceitável   - - - 1   - - - - - Médio - - - 2   - - - - - Médio - - - 3   - - - - - Alto - - - 4   - - - - - - - Marginal - - - 2   - - - - - Médio - - - 2   - - - - - Médio   - - - 4   - - - - - Alto   - - - 6   - - - - - Muito alto   - - - 8   - - - - - - - Crítico - - - 3   - - - - - Médio - - - 3   - - - - - Alto   - - - 6   - - - - - Muito alto   - - - 9   - - - - - Extremamente alto - - - 12   - - - - - - - Catastrófico - - - 4   - - - - - Alto   - - - 4   - - - - - Muito alto   - - - 8   - - - - - Extremamente alto - - - 12   - - - - - Extremamente alto - - - 16   - - - - - - - Quadro – Matriz simples 4x4 - - - - - A interpretação do valor obtido pode ser realizada através da consulta do índice de risco, que traduz a prioridade de intervenção associada à avaliação feita. - - - - - - - - - - - Indice de risco - - - - - prioridade de intervenção - - - - - - - Aceitável - - - - - Actuação não prioritária - - - - - - - Médio - - - - - Intervenção a médio prazo - - - - - - - Alto - - - - - Intervenção a curto prazo - - - - - - - Muito alto - - - - - Actuação urgente - - - - - - - Extremamente alto - - - - - Actuação imediata - - - - - - - Quadro – Prioridade de intervenção de acordo com o índice de risco - - - Alguns riscos profissionais poderão ainda ser classificados como - indeterminados, dada a insuficência de informação. - - - São identificados igualmente requisitos legais, de carácter obrigatório e a que se encontram associados factores de risco. São apresentados com uma classificação de não valorável. - - - - - - - - - - - - 3 - MEDIÇÃO DOS FACTORES DE RISCO - - - - - - - - - - - Uma vez que um dos princípios gerais de prevenção é assegurar que as exposições aos agentes químicos, físicos e biológicos e aos factores de risco psicossociais não constituem risco para a segurança e saúde do trabalhador nos locais de trabalho, a SIPRP, no decorrer das avaliações dos riscos profissionais, realiza medições aos seguintes parâmetros: - - - - - - - - - - • - - - - - Iluminância ou nível de iluminação; - - - - - - - • - - - - - Temperatura do ar; - - - - - - - • - - - - - Humidade relativa do ar; - - - - - - - • - - - - - Nível sonoro contínuo equivalente (ruído). - - - - - - - - Para realizar as referidas medições são utilizados os seguintes equipamentos: - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - Todos os equipamentos encontram-se devidamente calibrados por entidades acreditadas pelo Instituto Português de Acreditação. - - - - - - - - - - - - - - 4 - LEGISLAÇÃO APLICÁVEL - - - - - - - - - - - A avaliação dos riscos profissionais realizada pela SIPRP tem em conta as prescrições indicadas na legislação portuguesa em matéria de Segurança, Higiene e Saúde do Trabalho: - - - - - - - 4.1 Aplicação geral - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - 4.2 Aplicação específica - - - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - - - - - - - - - 5 - NORMALIZAÇÃO APLICÁVEL - - - - - - - - - - - Na realização da avaliação dos riscos profissionais é considerada além da legislação, também a normalização relativa à Segurança, Higiene e Saúde do Trabalho.  - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - - - - - - - - 6 - EMPRESA CLIENTE - - - - - - - - - - - A SIPRP realizou a avaliação dos riscos profissionais na empresa - , - estabelecimento de , - no dia - - de - - de - . - - - - - A actividade desenvolvida pela empresa é de . - - - - - De acordo com indicações fornecidas, . - - - - - No decorrer da avaliação dos riscos profissionais, - a SIPRP obteve a colaboração e acompanhamento de - - ( - - ) - - e - ( - - ) - . - - - - - - - - - - - - - - 7 - TABELAS DE AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - - - - - A avaliação dos riscos profissionais realizada encontra-se nas tabelas que são apresentadas seguidamente. Nas mesmas são referidas igualmente as respectivas medidas de prevenção tidas como necessárias. - - - - - Os riscos comuns a todos os postos de trabalho encontram-se agrupados por forma a facilitar a leitura do presente documento. - - - ÍNDICE DAS TABELAS DE RISCO POR ÁREA DE - ACTIVIDADE - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8 - PLANO DE ACTUAÇÃO - - - - - - - - - - - Após a avaliação dos riscos profissionais e da indicação das respectivas medidas de prevenção tidas como necessárias, a SIPRP emite um documento no qual é elaborado o plano de prevenção dos riscos profissionais, denominado de Plano de Actuação. - - - - - - - - - - - - - - 9 - ACOMPANHAMENTO - - - - - - - - - - - A SIPRP acompanha a execução das medidas de prevenção através de assessoramento ao cliente durante o preenchimento do Plano de Actuação. -   - - - - - A execução das medidas de prevenção são verificadas através da realização da avaliação dos riscos profissionais periódica. -   - - - - - - - - - - - - - - 10 - CONSIDERAÇÕES FINAIS - - - - - - - - - - - A SIPRP agradece a disponibilidade e o apoio de todos os colaboradores da empresa e fica ao dispor para qualquer esclarecimento. - - - - - - - - - Lisboa, - - de - - de - - - -   - - -  Realizado por: - - - - - - - - - - - - - - - - - - -   - - - - - - Técnico de Higiene e Segurança -   - - - CAP nº - - - - - - - - - - - -  Verificado por: - - - - - - - - - - - - - - - - - - -   - - - - - - Técnico Superior de Higiene e Segurança -   - - - CAP nº - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Avaliação de riscos profissionais   - - - - - - -   - - - - Empresa: - - - - - - - - - - -   - - - - Estabelecimento: - - - - - - - - - - - - Data da avaliação: - - - - de - - de - - -   - - - - - - Avaliação: - - - - -   - - - - - - Próxima avaliação: - - - - de - - de - - -   - - - - - - - - Realizada por: - - - - - - - - - - / SIPRP – - Sociedade Ibérica de Prevenção - de Riscos Profissionais   - - - - - - - - - Posto de trabalho: - - - - - - - - - - - - - - - - - - - Grav.   - - - (G)   - - - - - Prob.   - - - (P)   - - - - - Valor Risco   - - - (G x P)   - - - - - risco / requisito legal e medidas de prevenção - - - - - - - - - - - -   - - - - -   - - - - -   - - - - -   - - - - - - -   - - - - -   - - - - -   - - - - -   - - - - - - -   - - - - -   - - - - -   - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - Aceitável - - - Médio - - - Médio - - - - - Médio - - - Alto - - - - - Alto - - - Muito alto - - - Muito alto - - - Extremamente alto - - - Extremamente alto - - - - - - - - - - - -   - - - - -   - - - - - - - -   - - - - - - - - - - - - - - - - . - - - ; - - - - - - - -   - - - - - - - - . - - - ; - - - - -   - - - -   - - - - - - - - - - - - - - - - - - - - - - - - Avaliação - - - - - - - dos Riscos Profissionais - - - - - - - - - - - - - - - diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_new.xsl b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_new.xsl deleted file mode 100644 index adc69ba1..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_new.xsl +++ /dev/null @@ -1,3671 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ATRIUM SALDANHA   - Praça Duque de Saldanha, 1 – 9º G   - 1050 – 094 Lisboa   - Telefone (+351) 213 504 540   - Fax (+351) 213 504 549   - geral@siprp.pt   - www.siprp.com   - - - Lisboa   - - - - de - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - Relatório -   -   -   -   -   -   -   - - - - -   -   - - - - - -   - -   - - - - - - -   -   -   - - - - - - Avaliação Periódica de Riscos Laborais -   -   - - - 113 - -   - - - -   -   - 9. PLANO DE ACTUAÇÃO   -   - A partir dos resultados da avaliação de riscos, - é elaborado um outro documento (Plano de - Actuação), que inclui a listagem das acções que - deverão ser realizadas de modo a eliminar, - reduzir ou controlar os riscos detectados.   - - Este Plano permitirá auxiliar a - AUCHAN - - - Loja de Coimbra - na programação e acompanhamento das - referidas acções. -   - -   -   - 10. CONSIDERAÇÕES FINAIS   -   - - A equipa técnica de Segurança e Higiene do - Trabalho da SIPRP agradece a colaboração de - todos os colaboradores da - AUCHAN - - - Loja de Coimbra - durante a realização desta auditoria, - ficando à disposição para qualquer - esclarecimento. -   - -   -   -   - Lisboa, 29 de Abril de 2008   -   - - - - - -   - Sónia Campos   - Ergonomista   - Téc. Sup. Seg. Hig. do Trabalho -   - (CAP nº 0601/6505/02)   - - - - -   -   -   -   - - - - - - - diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old.xsl b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old.xsl deleted file mode 100644 index 6da1dd6e..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old.xsl +++ /dev/null @@ -1,3833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vbvb   - - - - -   - - - - - - - -   - - Avaliação Periódica de Riscos Laborais -   -   -   -   -   -   - - - -   -   - ÍNDICE   - - 1. INTRODUÇÃO - - - - - 2. DADOS DA EMPRESA - - - - - 3. LEGISLAÇÃO APLICÁVEL - - - - - 3.1 Legislação de aplicação geral - - - - - 3.2 Legislação específica - - - - - 4. NORMALIZAÇÃO APLICÁVEL - - - - - 4.1 Normalização portuguesa - - - - - 4.2 Normalização internacional - - - - - 5. OBRIGAÇÕES LEGAIS - - - - - 5.1 Obrigações do empregador - - - - - 5.2 Obrigações do trabalhador - - - - - 6. EQUIPAMENTOS UTILIZADOS - - - - - 7. RISCOS LABORAIS - - - - - 7.1 Classificação dos riscos profissionais - - - - - 7.2 Valoração dos riscos - - - - - 8. AVALIAÇÃO DE RISCOS LABORAIS - - - - - - - - -   -   -   - 1. INTRODUÇÃO   -   - A entidade empregadora deve tomar todas as - medidas necessárias para a defesa da segurança e - saúde dos seus trabalhadores, mediante a criação - de um sistema organizado, dotado dos meios - necessários, que deve abranger as medidas de - eliminação e de controlo dos riscos, assim como - de formação, informação e consulta a empreender. -   - - De acordo com a Lei nº 35/2004 de 29 de - Julho, que contém os princípios que visam - promover a segurança, higiene e saúde do - trabalho, o empregador deve “ - Integrar no conjunto de actividades da - empresa … a avaliação dos riscos para a - segurança e saúde dos trabalhadores, com a - adopção de convenientes medidas de - prevenção.” -   - - Tendo em vista assegurar condições adequadas de - segurança, higiene e saúde dos trabalhadores, - são realizadas auditorias de segurança, no - decorrer das quais:   - - 1 - é recolhida informação através das visitas - aos locais de trabalho, do diálogo - estabelecido com os trabalhadores ou através - de outras fontes de informação;   - - - 2 - é listado o conjunto de factores de risco - inerentes às condições normais de laboração - ou aos acontecimentos não planeados mas - previsíveis;   - - - 3 - são identificados os trabalhadores - potencialmente expostos a riscos resultantes - dos factores de risco identificados;   - - - 4 - é recolhida informação relativa à existência - de grupos específicos (jovens, grávidas, - puérperas, lactantes);   - - - 5 - são identificados os trabalhadores - envolvidos em trabalhos proibidos, - condicionados ou não recomendados;   - - - 6 - são identificadas as situações de perigo - grave ou iminente.   - - A avaliação dos riscos laborais consiste - portanto, na análise estruturada de todos os - aspectos inerentes ao trabalho, concretizada - através da identificação, estimação e valoração - dos riscos existentes (com indicação dos - trabalhadores a eles expostos) e da definição - das medidas de prevenção ou protecção adequadas. -   -   -   -   -   - 2. DADOS DA EMPRESA   -   - - No dia - 6 de Março 2008 - realizou-se a auditoria às instalações da - empresa - JUMBO – Loja integrada no C. C. - Dolce Vita - Coimbra - , situada na - R. D. João III, Coimbra - (cuja actividade desenvolvida é de comércio - a retalho em supermercados e hipermercados) - para a avaliação das condições de segurança, - higiene e saúde do trabalho existentes. -   - - A empresa supracitada possui duzentos e sessenta - e quatro (264) funcionários, sendo que setenta e - seis (76) destes exercem actividades na zona de - produtos frescos.   - Para a realização da visita, a Técnica Superior - de Segurança e Higiene do Trabalho da Sociedade - Ibérica de Prevenção de Riscos Profissionais - Unipessoal Lda., obteve a colaboração e - acompanhamento do Sr. Carlos Beijinho - (Responsável de Segurança) na prestação de - informações relativas à actividade desenvolvida - e às condições de trabalho existentes.   -   -   - 3. LEGISLAÇÃO APLICÁVEL   -   - A avaliação de riscos laborais realizada foi - baseada nas obrigações impostas pela legislação - portuguesa em vigor relativa à Segurança, - Higiene e Saúde do Trabalho.   -   - 3.1 Legislação de aplicação geral   - - - -   - Lei nº 99/2003 de 27 de Agosto regulamentada - pela Lei nº 35/2004 de 29 de Julho – Aprova o - novo Código de Trabalho;   - - - - - -   - Decreto-Lei n.º441/91 de 14 de Novembro, - - alterado pelo - Decreto-Lei n.º133/99 de 21 de Abril – - Estabelece o regime jurídico do - enquadramento da segurança, higiene e saúde - do trabalho; -   - - - - - -   - Decreto-Lei n.º26/94, de 1 de Fevereiro, - - alterado - pela Lei n.º7/95 de 29 de Março e pelo - Decreto-Lei n.º109/2000 – Regime de - Organização e funcionamento dos serviços da - segurança, higiene e saúde do trabalho; -   - - - - -   - Decreto-Lei n.º 347/93 de 1 de Outubro e - Portaria n.º987/93 de 6 de Outubro – Relativos - às prescrições mínimas de segurança nos locais - de trabalho.   - -   -   - 3.2 Legislação específica   - Acidentes de Trabalho e Doenças Profissionais   - - 1 - Lei nº100/97, de 13 de Setembro - regulamentado pelo Decreto-Lei n.º143/99 de - 30 de Abril – Aprova o novo regime jurídico - dos acidentes de trabalho e doenças - profissionais;   - - - 2 - Decreto-Lei nº 341/93 de 30 de Setembro – - Aprova a Tabela Nacional de Incapacidades de - Trabalho;   - - - 3 - Decreto Regulamentar nº 6/2001 de 5 de Maio - – Aprova a lista das doenças profissionais e - o respectivo índice codificado.   - - Grupos Específicos de Trabalhadores   - - 1 - Portaria nº 229/96 de de 26 de Junho – - Relativa à Protecção da segurança e da saúde - das trabalhadoras grávidas, puérperas e - lactantes.   - - Comércio e serviços   - - 1 - Decreto-Lei nº243/86 de 20 de Agosto – - Aprova o Regulamento Geral de Higiene e - Segurança de Trabalho nos Estabelecimentos - Comerciais, de Escritórios e Serviços;   - - Equipamentos de Protecção Individual   - - 1 - Decreto-Lei nº 348/93 de 1 de Outubro – - Relativo às prescrições mínimas de segurança - e de saúde para a utilização pelos - trabalhadores de equipamentos de protecção - individual no trabalho;   - - - 2 - Portaria nº 988/93 de 6 de Outubro – - Estabelece as prescrições mínimas de - segurança e saúde dos trabalhadores na - utilização de equipamentos de protecção - individual no trabalho.   - - Sinalização de segurança   - - 1 - Decreto-Lei n.º141/95, de 14 de Junho - regulamentado pela Portaria n.º1456-A/95, de - 11 de Dezembro – Estabelece as prescrições - mínimas para a sinalização de segurança e de - saúde no trabalho.   - - Segurança contra incêndios   - - 1 - - Decreto-Lei nº 368/99 de 18 de Setembro - – Aprova as medidas de segurança contra - riscos de incêndio aplicáveis aos - estabelecimentos comerciais com área - total igual ou superior a 300 m - 2 - . -   - - -   -   - Máquinas e equipamentos   - - 1 - Decreto-Lei nº 50/2005 de 25 de Fevereiro – - Relativo às prescrições mínimas de segurança - e de saúde para a utilização de equipamentos - de trabalho;   - - - 2 - Decreto-Lei nº 320/2001 de 12 de Dezembro – - Estabelece as regras a que deve obedecer a - colocação no mercado e a entrada em serviço - das máquinas e dos componentes de segurança - e colocados no mercado isoladamente.   - - Risco e instalações eléctricas   - - 1 - Portaria nº 37/70 de 21 de Janeiro – Aprova - as instruções para os primeiros socorros em - acidentes pessoais produzidos por correntes - eléctricas;   - - - 2 - - Portaria nº 949A/2006, de 11 de Setembro - – Relativo às Regras Técnicas das - Instalações Eléctricas - de Baixa Tensão; -   - - - Agentes biológicos   - - 1 - Decreto-lei nº 84/97 de 16 de Abril – - Estabelece prescrições mínimas de protecção - da segurança e da saúde dos trabalhadores - contra os riscos da exposição a agentes - biológicos durante o trabalho.   - - Agentes químicos   - - 1 - Decreto-lei nº 290/201 de 16 de Novembro – - Relativo à protecção da segurança e saúde - dos trabalhadores contra os riscos ligados à - exposição a agentes químicos no trabalho.   - - Desempenho energético dos edifícios   - - 1 - Decreto-Lei n.º 78/06 de 4 de Abril – - Relativo ao desempenho energético dos - edifícios;   - - - 2 - Decreto-Lei nº 79/2006 de 4 de Abril - - Aprova o regulamento dos Sistemas - Energéticos de Climatização em Edifícios.   - - Ruído   - - 1 - Decreto-lei nº 182/2006 de 6 de Setembro – - Relativo às prescrições mínimas de segurança - e saúde em matéria de exposição dos - trabalhadores aos riscos devidos ao ruído.   - -   -   - Classificação, embalagem e rotulagem   - - - -   - Portaria nº 732-A/96 de 11 de Dezembro – - Estabelecer as regras a que devem obedecer a - notificação de novas substâncias químicas e a - classificação, embalagem e rotulagem que - substâncias perigosas para o Homem e o ambiente - quando colocadas no mercado.   - - Equipamentos dotados de visor   - - - -   - Decreto-Lei n.º349/93, de 1 de Outubro – - Prescrições mínimas de segurança e de saúde - respeitantes ao trabalho com equipamentos - dotados de visor,   - - - - -   - Portaria n.º 989/93, de 6 de Outubro – - Prescrições mínimas de segurança e de saúde - respeitantes ao trabalho com equipamentos - dotados de visor (Regulamenta o Decreto-Lei - n.º349/93, de 1 de Outubro).   - - Movimentação manual de cargas   - - 1 - Decreto-Lei n.º330/93 de 25 de Outubro – - Relativa às prescrições mínimas de segurança - e de saúde na movimentação manual de cargas. -   - -   - 4. NORMALIZAÇÃO APLICÁVEL   -   - Na realização da avaliação de riscos laborais - foi considerada além da legislação, também a - normalização relativa à Segurança, Higiene e - Saúde do Trabalho.   - 4.1 Normalização portuguesa   - - 1 - Norma Portuguesa (NP) 3992:1994 - - Sinalização contra incêndio. Sinais de - segurança;   - - - 2 - NP EN 2:1993 - Classes de fogos;   - - - 3 - NP 1800:1981 - Segurança contra incêndios. - Agentes extintores. Selecção segundo as - classes de fogos;   - - - 4 -   - - - 5 - NP 3064:1988 - Segurança contra incêndio. - Utilização dos extintores de incêndio - portáteis;   - - - 6 - NP 4280:1995 - Segurança contra incêndios. - Sinalização de dispositivos de combate a - incêndio;   - - - 7 - NP 4413:2002 - Manutenção de extintores;   - - - 8 - NP EN 2:1993 - Classes de fogos;   - - - 9 - NP EN 1866: 2000 - Extintores de incêndio - móveis;   - - - 10 - NP EN 869:1998 - Mantas de incêndio;   - - - 11 - NP EN 671-1:2003 - Instalações fixas de - combate a incêndio – Sistemas armados com - mangueiras.   - -   - 4.2 Normalização internacional   - - 1 - - International Organization of - Standardization (ISO) 8995: - 2002 - Lighting of Indoor Work Places; -   - - - - 1 - ISO 9241-5:1998 - Ergonomic requirements for - Office work with visual display terminals - (VDTS) Part 5: Workstation layout and - postural requirements;   - - - 2 - Norma Belga NBN S26001: 1984 - Chair-desk - working position – Basic principles;   - - - 3 - Norma Belga NBN S26002: 1984 - Chair-desk - working position-Dimensions and design - requirements.   - -   -   - 5. OBRIGAÇÕES LEGAIS   -   - De acordo com o Capítulo IV da Lei nº99/2003 de - 27 de Agosto são estabelecidas obrigações legais - para o empregador e trabalhador.   -   -   - 5.1 Obrigações do empregador   - De acordo com o artigo 273º da Lei nº99/2003 de - 27 de Agosto o empregador tem de:   - - - -   - Identificar os riscos previsíveis, combatendo-os - na origem, anulando-os ou limitando os seus - efeitos;   - - - - -   - Avaliar os riscos para a segurança e saúde dos - trabalhadores, com a adopção de convenientes - medidas de prevenção;   - -   -   - - - -   - Assegurar que a exposição a agentes químicos, - físicos e biológicos não constituam risco para a - saúde;   - - - - -   - Considerar a componente técnica, organização do - trabalho, as relações sociais e os factores - materiais na planificação da prevenção;   - - - - -   - Ter em conta os trabalhadores e terceiros - susceptíveis de serem abrangidos pelos riscos e - realização de trabalhos;   - - - - -   - Dar prioridade à protecção colectiva em relação - às medidas de protecção individual;   - - - - -   - Organizar o trabalho, procurando eliminar - eventuais efeitos nocivos do trabalho monótono e - cadenciado;   - - - - - -   - Assegurar a vigilância adequada da saúde dos - trabalhadores em função - - - dos riscos a que se encontram expostos; -   - - - - -   - Estabelecer medidas, identificar trabalhadores - responsáveis e assegurar contactos necessários - com entidades exteriores em matéria de primeiros - socorros, combate a incêndios e evacuação dos - trabalhadores;   - - - - -   - Permitir unicamente a trabalhadores com aptidão - e formação adequadas o acesso (apenas durante o - tempo necessário) a zonas de risco grave;   - - - - -   - Adoptar medidas e dar instruções que permitam - aos trabalhadores em caso de perigo grave ou - eminente que não possa ser evitado, cessar a sua - actividade ou afastar-se imediatamente do local - de trabalho, sem que possam retomar a actividade - enquanto persistir o perigo;   - - - - -   - Substituir o que é perigoso pelo que é isento de - perigo ou menos perigoso;   - - - - -   - Dar instruções adequadas aos trabalhadores;   - - - - -   - Ter em consideração se os trabalhadores têm - conhecimentos e aptidões em matéria de SHST que - lhes permita exercer com segurança as tarefas - incumbidas.   - -   -   - 5.2 Obrigações do trabalhador   - De acordo com o artigo 274º da Lei nº99/2003 de - 27 de Agosto os trabalhadores têm de:   - - - -   - Cumprir prescrições de SHST estabelecidas e - instruções determinadas pelo empregador;   - - - - -   - Zelar pela sua segurança e saúde, bem como pela - das outras pessoas que possam ser afectadas - pelas suas acções ou omissões no trabalho;   - - - - -   - Utilizar correctamente máquinas, aparelhos, - instrumentos, substâncias perigosas e outros - equipamentos e meios postos à sua disposição - (equipamento de protecção colectiva e - individual) e cumprir os procedimentos de - trabalho estabelecidos;   - - - - -   - Cooperar na melhoria do sistema de SHST;   - - - - -   - Comunicar imediatamente (ao superior - hierárquico) as avarias e deficiências por si - detectadas que se afigurem susceptíveis de - originar perigo grave e iminente (se não for - possível estabelecer contacto, adoptar as - medidas e instruções estabelecidas), assim como - qualquer defeito verificado nos sistemas de - protecção;   - - - - -   - Adoptar as medidas e instruções estabelecidas em - caso de perigo grave e iminente, se não for - possível estabelecer contacto imediato com o - superior hierárquico ou com os trabalhadores que - desempenhem funções específicas nos domínios da - segurança, higiene e saúde do trabalho.   - -   -   - 6. EQUIPAMENTOS UTILIZADOS   - No decorrer da auditoria são realizadas medições - relativas aos níveis de iluminância, humidade - relativa, temperatura do ar, velocidade do ar e - do nível sonoro contínuo equivalente.   - Na realização das referidas medições são - utilizados os seguintes equipamentos - (devidamente calibrados):   - - - -   - Luxímetro (Chauvin Arnoux Physics Line CA 811); -   - - - - -   - Termo-higrómetro (Chauvin Arnoux Physics Line CA - 846);   - - - - -   - Sonómetro (Cesva SC – 15 c Classe 2).   - -   - 7. RISCOS LABORAIS   -   - 7.1 Classificação dos riscos profissionais   - Os riscos profissionais encontram-se - relacionados com a Segurança, a Higiene, a - Ergonomia e a Psicossociologia do Trabalho.   - - Segurança do Trabalho - : contacto directo/indirecto com a - electricidade, projecção de fragmentos ou - partículas. -   - - - Higiene do Trabalho - : -   - - - Riscos físicos - : exposição a ruído, vibrações, radiações - (ionizantes e não ionizantes), condições - inadequadas de iluminação; -   - - - Riscos químicos - : exposição a agentes químicos no estado - sólido (poeiras, fibras e fumos), líquido - (aerossóis e neblinas) e gasoso (gases e - vapores); -   - - - Riscos biológicos - : exposição a contaminantes biológicos - (vírus, bactérias, fungos e parasitas). -   - - - Ergonomia do Trabalho - : manipulação manual de cargas, adopção de - posturas incorrectas. -   - - - Psicossociologia do Trabalho - : realização de trabalho monótono e/ou - complexo, atendimento público, existência de - conflitos interpessoais. -   - -   -   - 7.2 Valoração dos riscos   - A valoração dos riscos associados as perigos - identificados tem como objectivo a definição de - prioridades da execução das medidas preventivas - (hierarquização dos riscos).   - - Para realizar a valoração de um risco - laboral é necessário atender à - probabilidade - de ocorrência (quantas vezes pode ocorrer?) - e da estimativa da - severidade - (gravidade) das consequências da sua - materialização (que dano/lesão pode - resultar?). -   - - As consequências de um risco laboral podem ser - caracterizadas em danos muito leves, em lesões - leves, lesões graves ou lesões muito graves ou - morte.   - No seguinte quadro encontram-se descritos alguns - exemplos de consequências de acordo com o grau - de severidade.   -   - - - - - - - SEVERIDADE (S)   - - - CONSEQUÊNCIAS PREVISÍVEIS   - - - - - Danos muito leves   - - - - Pequenos ferimentos   - - Dor de cabeça ou outros - transtornos leves que não causem - baixa   - - Desconforto, fadiga visual   - - Em geral, lesões ou - transtornos que não requeiram - tratamento médico ou baixa - médica   - - - - - Lesão leve   - - - - Contusões, cortes - superficiais, entorses, - distensões   - - Irritações   - - Pequenas queimaduras - superficiais   - - Em geral, lesões ou - transtornos que requerem - tratamento médico e podem - ocasionar em alguns casos baixa - de curta duração   - - - - - Lesão grave   - - - - Lacerações   - - Queimaduras extensas   - - Comoções/Abalos físicos   - - Pequenas fracturas   - - Doença crónica que conduza a - uma incapacidade menor - (diminuição da audição, - dermatoses, asma)   - - Transtornos - músculo-esqueléticos   - - - - - Lesão muito grave/mortal   - - - - Amputações, lesões múltiplas   - - Facturas maiores   - - Intoxicações   - - Cancro   - - Doenças crónicas que afectam - severamente a vida   - - Incapacidades permanentes   - - Invalidez   - - Morte   - - - - -   -   -   - Um risco laboral pode ser classificado em - improvável, possível, provável ou inevitável, de - acordo com a probabilidade de se vir a - materializar; como se pode verificar no quadro - seguinte.   -   - - - - - - - PROBABILIDADE (P)   - - - CRITÉRIOS APLICADOS   - - - - - Improvável   - - - - Extremamente raro, ainda não - acorreu   - - Não existe exposição ao perigo - em condições normais de trabalho - ou é muito esporádica   - - O dano não é previsível que - ocorra   - - - - - Possível   - - - - É raro que possa ocorrer   - - Se já ocorreu alguma vez   - - Pode-se apresentar em - determinadas circunstâncias   - - A exposição ao perigo é - ocasional   - - O dano ocorreu várias vezes   - - - - - Provável   - - - - Não será estranho que ocorra o - dano   - - Já ocorreu em algumas - situações   - - Existência de vários - incidentes ou acidentes pela - mesma causa   - - Os sistemas e medidas - aplicadas para o controlo dos - riscos não impedem que este se - manifeste em qualquer momento da - exposição   - - O dano ocorrerá em algumas - ocasiões   - - A exposição ao perigo é - frequente ou afecta bastante - pessoas   - - - - - Inevitável   - - - - É o resultado mais provável - quando existe uma exposição - continuada ou afecta a muitas - pessoas   - - Ocorrerá a médio ou a longo - prazo   - - O dano ocorrerá sempre ou - quase sempre   - - - - -   - Com base na frequência da exposição e nas - consequências de um risco, é possível construir - uma matriz de falhas, na qual podem ser - atribuídas cores e números que evidenciem os - diferentes níveis de valoração do risco, como se - pode verificar no quadro seguinte.   -   - - - - - - - -   - - -   - PROBABILIDADE DE MATERIALIZAÇÃO - DO RISCO   -   - - - - - GRAU DE SEVERIDADE POSSÍVEL   - - - IMPROVÁVEL   - 1   - - - POSSÍVEL   - 2   - - - PROVÁVEL   - 3   - - - INEVITÁVEL   - 4   - - - - - DANOS MUITO LEVES   - 1   - - - IRRELEVANTE   - 1   - - - MUITO BAIXO   - 2   - - - MUITO BAIXO   - 3   - - - BAIXO   - 4   - - - - - LESÃO LEVE   - 2   - - - MUITO BAIXO   - 2   - - - BAIXO   - 4   - - - MÉDIO   - 6   - - - ALTO   - 8   - - - - - LESÃO GRAVE   - 3   - - - MUITO BAIXO   - 3   - - - MÉDIO   - 6   - - - ALTO   - 9   - - - MUITO ALTO   - 12   - - - - - LESÃO MUITO GRAVE OU MORTAL   - 4   - - - BAIXO   - 4   - - - ALTO   - 8   - - - MUITO ALTO   - 12   - - - EXTREMAMENTE ALTO   - 16   - - - - -   -   -   -   - A determinação da valoração do risco permite - hierarquizar as intervenções, definir as acções - e estabelecer prazos de execução, como se - exemplifica no seguinte quadro:   -   - - - - - - - VALORAÇÃO DO RISCO   - - - RECOMENDAÇÕES   - - - - - Irrelevante   - - - Não é necessário estabelecer - nenhuma medida   - - - - - Muito baixo   - - - Não é necessário estabelecer - medidas adicionais às existentes -   - - - - - Baixo   - Prioridade: Baixa   - - - Controlar a situação que pode - materializar o risco   - - - - - Médio   - Prioridade: Média   - - - Verificar periodicamente a - eficácia das medidas de controlo - e melhorar a acção preventiva a - médio prazo (se as consequências - poderem ser muito graves ou - mortais, o prazo deve ser - reduzido)   - - - - - Alto   - Prioridade: Média/Alta   - - - Devem-se implementar medidas - para reduzir o risco a curto - prazo (se as consequências - poderem ser muito graves ou - mortais, o prazo deve ser - reduzido)   - - - - - Muito alto   - Prioridade: Alta   - - - Adoptar medidas provisórias - imediatas e definitivas para a - redução do risco a muito curto - prazo.   - Se o trabalho não se realiza - habitualmente, não se deve - iniciar sem que haja redução do - risco. Avaliar as medidas - adoptadas   - - - - - Extremamente alto   - Prioridade: Actuação imediata   - - - Não começar ou continuar o - trabalho até que se reduza o - risco. É necessário avaliar o - risco, uma vez corrigido.   - - - - -   - Alguns riscos laborais podem necessitar da - realização de estudos específicos, realizados de - acordo com os critérios estabelecidos na - legislação e normativa portuguesa e - internacional. Nesta situação, os riscos - laborais detectados podem ser classificados como - risco controlado, semi-controlado, incontrolado - e indeterminado, como é mostrado na tabela - seguinte.   - - - - - - - - - RISCOS DE HIGIENE, - ERGONOMICOS OU PSICOSSOCIAIS - DO TRABALHO   - - - CLASSIFICAÇÃO   - - - OBSERVAÇÕES   - - - - - Risco analisado/documentado. -   - Informação suficiente.   - - - - - - - - - Controlado   -   - - - As medidas - de controlo - existentes - são - adequadas   - - - - - Incontrolado -   - - - As medidas - de controlo - são - inexistentes, - insuficientes - ou - inadequadas. -   - - - - - - - - - Risco não - estudado/analisado.   - Informação insuficiente.   - - - Indeterminado   - - - É necessário realizar estudo - específico   - - - - -   - - Um risco analisado e documentado, é aquele que - tendo sido objecto de uma avaliação específica e - que se encontra documentado, registado e - disponível na empresa.   - - Um risco que foi analisado pode encontrar-se - controlado ou incontrolado - , sendo esta última situação referente ao - não cumprimento das medidas de controlo - aconselhadas nos - estudos realizados e à não realização de - novos estudos com a periodicidade - obrigatória. -   - - - Se não existe informação suficiente para - determinar a magnitude ou nível do risco e - poder adoptar as medidas adequadas, - classifica-se como risco - Indeterminado - . -   - -   -   -   - 8. AVALIAÇÃO DE RISCOS LABORAIS   -   -   -   - Com base na informação recolhida no decorrer da - auditoria, foram elaboradas as tabelas de riscos - laborais que a seguir se apresentam, sendo estas - elaboradas por trabalhador (ou grupo de - trabalhadores com actividades semelhantes) e - para as instalações.   - Para cada um dos riscos identificados são - aconselhadas medidas preventivas e/ou - correctivas, de acordo com a legislação e - normativa vigente, tendo em vista a sua - eliminação, redução ou controlo para níveis - aceitáveis.   - - - - -   - - - - - - - -   - - Avaliação Periódica de Riscos Laborais -   -   -   -   -   - - - -   -   -   -   -   -   -   -   -   -   -   - Genérico   - Riscos comuns às áreas Administrativa   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 1 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - 3   - - - 2   - - - 6   - MÉDIO   - - -   - - 1 - Risco ergonómico devido à - postura na utilização de - equipamentos dotados de - visor   - -   - - 1 - Formar os trabalhadores - sobre a utilização dos - equipamentos dotados de - visor (Decreto Lei nº 349/93 - – art. 8º).   - - Devido ao tempo de exposição aos - factores de risco inerentes ao - trabalho e ao tempo de - interacção com ecrãs de - visualização, devem ser - garantidas condições básicas - para que os colaboradores possam - executar as suas tarefas com o - máximo de conforto, garantindo - níveis de produtividade.   - - 1 - - Disponibilizar a - todos - os trabalhadores - cadeiras que: garantam - ajustabilidade (altura e - apoios) e disponham de - apoio para os braços - (ISO 9241:1997 – - Ergonomics requirements - for office work with - visual terminals) -   - - - - - - -   -   -   -   -   -   -   -   -   -   -   -   -   -   - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 2 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - 3   - - - 2   - - - 6   - MÉDIO   - - -   -   - - 1 - Risco de exposição a - condições inadequadas de - iluminação   - - - 1 - As fontes de iluminação - devem ser de intensidade - uniforme e não devem - provocar contrastes muito - acentuados, encandeamento, - excessivo aquecimento, - cheiros, fumos ou gases - incómodos, tóxicos ou - perigosos (Decreto Lei nº - 243/86 – art. 14º);   - - - 2 - O valor de iluminância deve - ser no mínimo de 500 lux na - área focal de trabalho e de - 300 lux no envolvimento para - actividade de carácter (ISO - 8995 –Lighting of Indoor - Work Places);   - - - 3 - - A instalação eléctrica - (…) e deve assegurar que - a sua utilização não - constitua factor de - risco para os - trabalhadores, por - contacto directo ou - indirecto - ( - Portaria 987/93 art. 3º - - 1) -   - - - Todas as lâmpadas existentes nas - instalações deverão estar - devidamente protegidas.   - - - - - 3   - - - 2   - - - 6   - MÉDIO   - - -   - - 1 - Risco de incêndio   - -   - - 1 - - Todos os - estabelecimentos - comerciais devem dispor - de meios de primeira - intervenção apropriados, - colocados perto dos - acessos às escadas ou - saídas, nos caminhos de - evacuação e na - proximidade dos locais - de maior risco ( - Decreto-Lei 368/99 - - ponto 9 do Anexo - ); -   - - - - 2 - - Manter o material de - detecção e combate a - incêndios - permanentemente - acessível - (Decreto Lei n.º243/86 – - art.36º-1) - ; -   - - - Todos os extintores existentes - nas instalações deverão estar - posicionados a 1,20 m do chão - (manípulo)   - - - - -   -   -   - - - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 3 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - 4   - - - 1   - - - 4   - BAIXO   - - -   - - 1 - Risco de choque contra - objectos imóveis   - - - 1 - Manter o local de trabalho - arrumado (Decreto Lei - n.º441/91 – art.15ºb);   - - - 1 - Assegurar que as vias de - passagem se encontram - permanentemente - desobstruídas (Portaria - n.º987/93 – art.4º.)   - - - - - - 2   - - - 2   - - - 4   - BAIXO   - - - -   -   - - - 1 - Risco de desconforto térmico -   - - - 1 - O valor de temperatura deve - situar-se no intervalo de - valores recomendados (18 a - 22ºC, podendo atingir os - 25ºC em determinadas - condições climatéricas) - (Decreto Lei n.º243/86 – - art.11º-1a);   - - - 2 - O valor de humidade relativa - da atmosfera de trabalho - deve situar-se no intervalo - de valores recomendados (50 - a 70%) (Decreto-Lei - n.º243/86 – art.11º- 1b).   - - - Os valores de temperatura em - toda a área de escritórios - variaram entre - 21,1 ºC - e - 22 ºC - . Todos os valores - apresentados estão de acordo - com os valores recomendáveis - para o tipo de actividade - que aí se desenvolve. -   - - - Os valores de humidade - relativa da atmosfera de - trabalho em toda a área de - escritórios variaram entre - 27,3% - e - 29,2%. - Todos os valores - apresentados são inferiores - aos valores recomendáveis - para o tipo de actividade - que aí se desenvolve. -   - - - - - -   -   -   -   - - - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 4 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - 2   - - - 2   - - - 4   - BAIXO   - - -   - - 1 - Risco de exposição ao ruído -   - - - 1 - - O empregador assegura - que a exposição dos - trabalhadores ao ruído - durante o trabalho seja - reduzida ao nível mais - baixo possível e, em - qualquer caso, não - superior aos valores - limite de exposição de - 87 dB (A) e 140 dB (C) ( - Decreto Lei nº 182/2006 - -Art. 8º 1 - ); -   - - - - 1 - - O nível sonoro contínuo - equivalente médio obtido - (nas áreas - administrativas) variou - entre - 42 dB(A) e 70 dB (A), - pelo que (e em condições - normais de - funcionamento) a - Exposição pessoal diária - ao ruído, a média - semanal dos valores - diários da exposição - pessoal ao ruído e o - nível de pressão sonora - de pico deverá ser - inferior aos valores - limite. -   - - - - - - - 2   - - - 2   - - - 4   - BAIXO   - - -   - - 1 - Risco de contacto eléctrico - na utilização da instalação - e equipamentos eléctricos   - - - 1 - Toda a instalação eléctrica - deverá encontrar-se de - acordo com a Portaria nº - 949-A/2006 de 11 de Setembro - de 2006, que aprova as - regras técnicas das - instalações eléctricas de - baixa tensão.   - - Os colaboradores deverão estar - sensibilizados para a utilização - correcta da electricidade, de - forma a evitar situações de - sobrecarga das fontes de energia - (fichas triplas e extensões - sobrecaregadas)   - - - - - 2   - - - 2   - - - 4   - BAIXO   - - -   - - 1 - Risco de contacto com - objectos perfurantes e/ou - cortantes   - -   - - 1 - Assegurar a sua substituição - quando apresentarem um - elevado estado de degradação - (Decreto Lei n.º441/91 – - art.15ºb)   - - - 2 - Mantê-los arrumados após - cada utilização (Decreto Lei - n.º441/91 – art.15ºb)   - - - - - -   -   - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 5 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - 2   - - - 2   - - - 4   - BAIXO   - - -   - - 1 - Risco de queda ao mesmo - nível   - - - 1 - - Manter o pavimento dos - locais de trabalho - isentos de obstáculos - que possam provocar - quedas ( - Portaria n.º987/93 – - art.10º - ) -   - - - Identificar as áreas de trabalho - onde se verifica acumulação de - cablagens diversas em espaços de - circulação e rotear devidamente - (ou colocar no interior de calha - técnica) os referidos cabos para - que estes não representem risco - de queda para os trabalhadores   - - -   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Inexistência de sinalização - adequada de segurança e - saúde   - - - 1 - - Os sinais devem ser - instalados em local bem - iluminado, a altura e em - posição apropriadas, - tendo em conta os - impedimentos à sua - visibilidade desde a - distância julgada - conveniente ( - Portaria n.º1456-A/95 – - Art. 6º-1 - ); -   - - - - 2 - Limpar e verificar - regularmente os meios de - sinalização de segurança - (Portaria nº 1456-A/95 – - Art. 4º);   - - - 3 - Informar, consultar e formar - os trabalhadores sobre a - sinalização de segurança e - saúde (Decreto Lei nº 141/95 - – Art. 9º).   - - Assegurar que a sinalização de - segurança e emergência se - encontra permanentemente - actualizada   -   - - -   - - - - -   -   -   -   -   - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 6 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Existência de iluminação de - emergência de segurança   - - - 1 - A instalação de iluminação - de emergência de segurança - deverá permitir, em caso de - avaria da instalação normal, - a evacuação segura e fácil - do público para o exterior e - a execução das manobras - respeitantes à segurança e à - intervenção de socorros - (Portaria nº 740/74 – art. - 446º);   - - - 2 - A instalação de iluminação - de emergência deverá - assegurar a iluminação de - ambiente e a de circulação - (Portaria nº 740/74 – art. - 446º   - - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Organização dos meios de - evacuação e emergência   - - - 1 - Nos caminhos de evacuação - não devem ser colocados - obstáculos susceptíveis de - dificultarem a circulação e - poderem também constituir um - risco de propagação de - incêndio (Decreto Lei nº - 368/99 de 18 de Setembro - Anexo 2.1.5);   - - - 2 - - Assegurar que os - colaboradores se - encontram - suficientemente - instruídos sobre os - planos de evacuação dos - locais de trabalho - (Decreto Lei n.º 243/86 - – art.37º-1); -   - - - - 3 - As vias normais e de - emergência têm de estar - permanentemente - desobstruídas e em condições - de utilização, devendo o - respectivo traçado conduzir, - o mais rapidamente possível, - a áreas ao ar livre ou a - zonas de segurança (Portaria - nº 987/93 – 4º – 1);   - - - 4 - A instalação de cada posto - de trabalho deve permitir a - evacuação rápida e em máxima - segurança dos trabalhadores - (Portaria nº 987/93 – 4º – - 3).   - - - - - -   -   - - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 7 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Utilização de equipamentos - de trabalho (máquinas, - ferramentas ou instalações) -   - -   - - 1 - O empregador tem de - assegurar que os - equipamentos de trabalho são - adequados ou - convenientemente adaptados - ao trabalho a efectuar; - atender às condições e - características do trabalho - e aos riscos existentes na - escolha dos equipamentos de - trabalho; considerar os - postos de trabalho, posição - dos trabalhadores e os - princípios ergonómicos no - decorrer da utilização dos - equipamentos; e assegurar a - sua adequada manutenção - (Decreto Lei nº 50/2005 – - art. 3º)   - - - 2 - O empregador deve prestar a - trabalhadores e - representantes para a - segurança, higiene e saúde - do trabalho a informação - adequada sobre os - equipamentos de trabalho - utilizados (Decreto Lei nº - 50/2005 – art. 8º);   - - - 3 - O empregador deve consultar - por escrito, previamente e - em tempo útil, os - representantes dos - trabalhadores ou, na sua - ausência, os trabalhadores - sobre os equipamentos de - trabalho utilizados, pelo - menos duas vezes por ano - (Decreto Lei nº 50/2005 – - art. 9º)   - - - - - -   -   -   -   -   -   -   -   -   -   -   -   - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 8 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Existência de armário, caixa - ou bolsa com conteúdo mínimo - destinado aos primeiros - socorros   - -   - - 1 - O conteúdo dos armários, - caixas ou bolsas, deve ser - mantido em condições de - assepsia, convenientemente - conservado, etiquetado e - imediatamente substituído - após a sua utilização - (Decreto Lei n.º243/86 – - art.º28º-2);   - - - 2 - Deverão existir instruções - claras e simples para os - primeiros cuidados a pôr em - prática em caso de - emergência junto dos - armários, caixas ou bolsas - de primeiros socorros - (Decreto Lei n.º243/86 – - art.º28º-4).   - - - - - -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 9 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Risco de exposição a - contaminantes químicos e - biológicos   - - - 1 - O empregador deve assegurar - que as exposições aos - agentes químicos, físicos e - biológicos nos locais de - trabalho não constituam - risco para a saúde dos - trabalhadores (Lei nº 99/03 - – Art.273º -2c);   - - - 2 - Os níveis de concentração de - substâncias nocivas - existentes no ar não podem - ultrapassar os definidos em - legislação específica - (Portaria nº 987/93 – art.6º - - 5);   - - - 3 - As instalações e - equipamentos devem possuir - um plano de manutenção - preventiva que estabeleça - claramente as tarefas de - manutenção previstas, - nomeadamente o registo das - análises periódicas da - Qualidade do Ar Interior, - com indicação do técnico ou - técnicos que as realizaram - (Decreto Lei nº 79/2006 – - Art.19º- 2).   - - - 4 - Limpar e desinfectar todo o - equipamento no mínimo duas - vezes por ano e Verificar - regularmente o estado de - limpeza dos filtros e - proceder à sua limpeza - sempre que se justifique - (Direcção Geral da Saúde);   - - - 5 - - Realizar avaliações - microbiológicas - periódicas no interior - do sistema de ar - condicionado. - (Decreto-Lei 78/2006 e - Decreto-Lei 79/2006) - - próxima auditoria a - realizar até ao final de - 2009 - . -   - - - As embalagens de toner vazias - devem ser sempre armazenar em - local afastado dos locais de - trabalho   -   - - - - -   -   -   -   -   -   -   - - - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 10 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Existência de informação no - domínio da segurança, - higiene e saúde do trabalho -   - - - 1 - - Garantir a existência de - informação actualizada - sobre (Lei nº 99/2003 de - 27 de Agosto - art. 272 - º): -   - - - - 1 - Riscos para a segurança e - saúde, medidas de protecção - e de prevenção e a forma - como se aplicam;   - - - 2 - Medidas e instruções a - adoptar em caso de perigo - grave e iminente;   - - - 3 - Medidas de primeiros - socorros, de combate a - incêndios e de evacuação dos - trabalhadores em caso de - sinistro, bem como os - trabalhadores ou serviços - encarregados de as pôr em - prática.   - - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Formação no domínio da - segurança, higiene e saúde - do trabalho   - -   - - 1 - - Proporcionar formação - adequada e suficiente no - domínio da segurança, - higiene e saúde do - trabalho, tendo em conta - as respectivas funções e - o posto de trabalho ( - Lei nº 35/04 – art. 216º - ); -   - - - - 2 - - Formar em número - suficiente os - trabalhadores - responsáveis pela - aplicação das medidas de - primeiros socorros, de - combate a incêndios e de - evacuação de - trabalhadores, bem como - facultar-lhes o material - adequado ( - Lei nº 35/04 – art. 217º - ). -   - - - - - - -   -   -   -   -   -   -   - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - -   - - EMPRESA - : Auchan -   - - - -   - - DATA DA AVALIAÇÃO - : 6 de Março de 2008 -   - - - - - AVALIAÇÃO: INICIAL - - ¨ - PERIÓDICA - þ - -   - - - - - -   - ESTABELECIMENTO: Coimbra   - - -   - - DATA DA PRÓXIMA - : 25 de Setembro de 2008 -   - - - - REALIZADA POR: Sónia Campos   - SIPRP – Sociedade Ibérica de - Prevenção de Riscos - Profissionais   - - - - - - POSTO DE TRABALHO - : - Genérico Área Administrativa -   - - - - Página 11 de 11   - - - - - SEV.   - (S)   - - - PROB.   - (P)   - - - VALOR RISCO   - (S x P)   - - - RISCO / CONDIÇÕES ANÓMALAS /   - / ACÇÕES DE CONTROLO OU REDUÇÃO - DO RISCO   - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Representante dos - trabalhadores para a - segurança, higiene e saúde - no trabalho   - -   - - 1 - - Os trabalhadores ou o - sindicato que tenha - trabalhadores - representados na empresa - promovem a eleição dos - representantes dos - trabalhadores para a - segurança, higiene e - saúde do trabalho ( - Lei nº 35/04 – art. 266º - ). -   - - - - - - - -   - - - -   - - - INDETERMINADO   - - -   - - 1 - Comissão de higiene e - segurança no trabalho   - -   - - 1 - - Podem ser criadas - comissões de higiene e - segurança no trabalho de - composição paritária - (Lei - nº 35/04 – art. 215º - ). -   - - - - - - -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   - - - - - -   -   -   - - - - - - Avaliação Periódica de Riscos Laborais -   -   - - - 113 - -   - - - -   -   - 9. PLANO DE ACTUAÇÃO   -   - A partir dos resultados da avaliação de riscos, - é elaborado um outro documento (Plano de - Actuação), que inclui a listagem das acções que - deverão ser realizadas de modo a eliminar, - reduzir ou controlar os riscos detectados.   - - Este Plano permitirá auxiliar a - AUCHAN - - - Loja de Coimbra - na programação e acompanhamento das - referidas acções. -   - -   -   - 10. CONSIDERAÇÕES FINAIS   -   - - A equipa técnica de Segurança e Higiene do - Trabalho da SIPRP agradece a colaboração de - todos os colaboradores da - AUCHAN - - - Loja de Coimbra - durante a realização desta auditoria, - ficando à disposição para qualquer - esclarecimento. -   - -   -   -   - Lisboa, 29 de Abril de 2008   -   - - - - - -   - Sónia Campos   - Ergonomista   - Téc. Sup. Seg. Hig. do Trabalho -   - (CAP nº 0601/6505/02)   - - - - -   -   -   -   - - - - - - - diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2.xsl b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2.xsl deleted file mode 100644 index 89c379af..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2.xsl +++ /dev/null @@ -1,4391 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ATRIUM SALDANHA   - - - Praça Duque de Saldanha, 1 – 9º G   - - - 1050 – 094 Lisboa   - - - Telefone (+351) 213 504 540   - - - Fax (+351) 213 504 549   - - - geral@siprp.pt   - - - www.siprp.com   - - - - - Lisboa   - - - - - de - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - Relatório - - -   - - -   - - -   - - - - - - - - -   - - -   - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - - ÍNDICE - - - - 1. INTRODUÇÃO - - - - - - - 2. DADOS DA EMPRESA - - - - - - - 3. LEGISLAÇÃO APLICÁVEL - - - - - - - 3.1 Legislação de aplicação geral - - - - - - - 3.2 Legislação específica - - - - - - - 4. NORMALIZAÇÃO APLICÁVEL - - - - - - - 4.1 Normalização portuguesa - - - - - - - 4.2 Normalização internacional - - - - - - - 5. OBRIGAÇÕES LEGAIS - - - - - - - 5.1 Obrigações do empregador - - - - - - - 5.2 Obrigações do trabalhador - - - - - - - 6. EQUIPAMENTOS UTILIZADOS - - - - - - - 7. RISCOS LABORAIS - - - - - - - 7.1 Classificação dos riscos profissionais - - - - - - - 7.2 Valoração dos riscos - - - - - - - 8. AVALIAÇÃO DE RISCOS LABORAIS - - - - - - - 9. PLANO DE ACTUAÇÃO - - - - - - - 10. CONSIDERAÇÕES FINAIS - - - - - -   - - -   - - - - 1. INTRODUÇÃO   - - -   - - - A entidade empregadora deve tomar todas as - medidas necessárias para a defesa da segurança e - saúde dos seus trabalhadores, mediante a criação - de um sistema organizado, dotado dos meios - necessários, que deve abranger as medidas de - eliminação e de controlo dos riscos, assim como - de formação, informação e consulta a empreender. -   - - - - De acordo com a Lei nº 35/2004 de 29 de - Julho, que contém os princípios que visam - promover a segurança, higiene e saúde do - trabalho, o empregador deve - - - “Integrar no conjunto de actividades da - empresa … a avaliação dos riscos para a - segurança e saúde dos trabalhadores, com a - adopção de convenientes medidas de - prevenção.” - -   - - - Tendo em vista assegurar condições adequadas de - segurança, higiene e saúde dos trabalhadores, - são realizadas auditorias de segurança, no - decorrer das quais:   - - - - - - • - - - - - é recolhida informação através das - visitas aos locais de trabalho, do - diálogo estabelecido com os - trabalhadores ou através de outras - fontes de informação; - - - - - - - • - - - - - é listado o conjunto de factores de - risco inerentes às condições normais - de laboração ou aos acontecimentos - não planeados mas previsíveis;   - - - - - - - • - - - - - são identificados os trabalhadores - potencialmente expostos a riscos - resultantes dos factores de risco - identificados;   - - - - - - - • - - - - - é recolhida informação relativa à - existência de grupos específicos - (jovens, grávidas, puérperas, - lactantes);   - - - - - - - • - - - - - são identificados os trabalhadores - envolvidos em trabalhos proibidos, - condicionados ou não recomendados;   - - - - - - - • - - - - - são identificadas as situações de - perigo grave ou iminente.   - - - - - - A avaliação dos riscos laborais consiste - portanto, na análise estruturada de todos os - aspectos inerentes ao trabalho, concretizada - através da identificação, estimação e valoração - dos riscos existentes (com indicação dos - trabalhadores a eles expostos) e da definição - das medidas de prevenção ou protecção adequadas. -   - - -   - - - -   - - - 2. DADOS DA EMPRESA   - - -   - - - No dia - - - de - - de - - - - realizou-se a auditoria às instalações da - empresa - - - - – - - - , situada na - - - - - (cuja actividade desenvolvida é de - - ) para a avaliação das condições de - segurança, higiene e saúde do trabalho - existentes. - -   - - - - - - Para a realização da visita, a Técnica Superior - de Segurança e Higiene do Trabalho da Sociedade - Ibérica de Prevenção de Riscos Profissionais - Unipessoal Lda., obteve a colaboração e - acompanhamento de - - ( - - ) - - e - ( - - ) - - na prestação de informações relativas à - actividade desenvolvida e às condições de - trabalho existentes.   - - -   - - -   - - - 3. LEGISLAÇÃO APLICÁVEL   - - -   - - - A avaliação de riscos laborais realizada foi - baseada nas obrigações impostas pela legislação - portuguesa em vigor relativa à Segurança, - Higiene e Saúde do Trabalho.   - - -   - - - 3.1 Legislação de aplicação geral   - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - -   - - - 3.2 Legislação específica   - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - -   - - - 4. NORMALIZAÇÃO APLICÁVEL   - - -   - - - Na realização da avaliação de riscos laborais - foi considerada além da legislação, também a - normalização relativa à Segurança, Higiene e - Saúde do Trabalho.   - - - 4.1 Normalização portuguesa   - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - -   - - - 4.2 Normalização internacional   - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - -   - - - 5. OBRIGAÇÕES LEGAIS   - - -   - - - De acordo com o Capítulo IV da Lei nº99/2003 de - 27 de Agosto são estabelecidas obrigações legais - para o empregador e trabalhador.   - - -   - - -   - - - 5.1 Obrigações do empregador   - - - De acordo com o artigo 273º da Lei nº99/2003 de - 27 de Agosto o empregador tem de:   - - - - - - - - - - - - Identificar os riscos previsíveis, - combatendo-os na origem, anulando-os - ou limitando os seus efeitos;   - - - - - - - - - - > - - - - Avaliar os riscos para a segurança e - saúde dos trabalhadores, com a - adopção de convenientes medidas de - prevenção;   - - - - - - - - - - > - - - - Assegurar que a exposição a agentes - químicos, físicos e biológicos não - constituam risco para a saúde;   - - - - - - - - - - > - - - - Considerar a componente técnica, - organização do trabalho, as relações - sociais e os factores materiais na - planificação da prevenção;   - - - - - - - - - - > - - - - Ter em conta os trabalhadores e - terceiros susceptíveis de serem - abrangidos pelos riscos e realização - de trabalhos;   - - - - - - - - - - > - - - - Dar prioridade à protecção colectiva - em relação às medidas de protecção - individual;   - - - - - - - - - - > - - - - Organizar o trabalho, procurando - eliminar eventuais efeitos nocivos - do trabalho monótono e cadenciado;   - - - - - - - - - - > - - - - Assegurar a vigilância adequada da - saúde dos trabalhadores em função - dos riscos a que se encontram - expostos; - - - - - - - - - - > - - - - Estabelecer medidas, identificar - trabalhadores responsáveis e - assegurar contactos necessários com - entidades exteriores em matéria de - primeiros socorros, combate a - incêndios e evacuação dos - trabalhadores;   - - - - - - - - - - > - - - - Permitir unicamente a trabalhadores - com aptidão e formação adequadas o - acesso (apenas durante o tempo - necessário) a zonas de risco grave; -   - - - - - - - - - - > - - - - Adoptar medidas e dar instruções que - permitam aos trabalhadores em caso - de perigo grave ou eminente que não - possa ser evitado, cessar a sua - actividade ou afastar-se - imediatamente do local de trabalho, - sem que possam retomar a actividade - enquanto persistir o perigo;   - - - - - - - - - - > - - - - Substituir o que é perigoso pelo que - é isento de perigo ou menos - perigoso;   - - - - - - - - - - > - - - - Dar instruções adequadas aos - trabalhadores;   - - - - - - - - - - > - - - - Ter em consideração se os - trabalhadores têm conhecimentos e - aptidões em matéria de SHST que lhes - permita exercer com segurança as - tarefas incumbidas.   - - - - - -   - - -   - - - 5.2 Obrigações do trabalhador   - - - - - - - - - > - - - - De acordo com o artigo 274º da Lei - nº99/2003 de 27 de Agosto os - trabalhadores têm de:   - - - - - - - - - - > - - - - Cumprir prescrições de SHST - estabelecidas e instruções - determinadas pelo empregador;   - - - - - - - - - - > - - - - Zelar pela sua segurança e saúde, - bem como pela das outras pessoas que - possam ser afectadas pelas suas - acções ou omissões no trabalho;   - - - - - - - - - - > - - - - Utilizar correctamente máquinas, - aparelhos, instrumentos, substâncias - perigosas e outros equipamentos e - meios postos à sua disposição - (equipamento de protecção colectiva - e individual) e cumprir os - procedimentos de trabalho - estabelecidos;   - - - - - - - - - - > - - - - Cooperar na melhoria do sistema de - SHST;   - - - - - - - - - - > - - - - Comunicar imediatamente (ao superior - hierárquico) as avarias e - deficiências por si detectadas que - se afigurem susceptíveis de originar - perigo grave e iminente (se não for - possível estabelecer contacto, - adoptar as medidas e instruções - estabelecidas), assim como qualquer - defeito verificado nos sistemas de - protecção;   - - - - - - - - - - > - - - - Adoptar as medidas e instruções - estabelecidas em caso de perigo - grave e iminente, se não for - possível estabelecer contacto - imediato com o superior hierárquico - ou com os trabalhadores que - desempenhem funções específicas nos - domínios da segurança, higiene e - saúde do trabalho.   - - - - - -   - - - - 6. EQUIPAMENTOS UTILIZADOS   - - -   - - - No decorrer da auditoria são realizadas medições - relativas aos níveis de iluminância, humidade - relativa, temperatura do ar, velocidade do ar e - do nível sonoro contínuo equivalente.   - - - Na realização das referidas medições são - utilizados os seguintes equipamentos - (devidamente calibrados):   - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - -   - - -   - - - 7. RISCOS LABORAIS   - - -   - - -   - - - 7.1 Classificação dos riscos profissionais   - - - Os riscos profissionais encontram-se - relacionados com a Segurança, a Higiene, a - Ergonomia e a Psicossociologia do Trabalho.   - - - - Segurança do Trabalho - - - : contacto directo/indirecto com a - electricidade, projecção de fragmentos ou - partículas. - - - - - Higiene do Trabalho - - : - - - - Riscos físicos - - : exposição a ruído, vibrações, radiações - (ionizantes e não ionizantes), condições - inadequadas de iluminação; - - - - Riscos químicos - - : exposição a agentes químicos no estado sólido - (poeiras, fibras e fumos), líquido (aerossóis e - neblinas) e gasoso (gases e vapores); - - - - Riscos biológicos - - : exposição a contaminantes biológicos (vírus, - bactérias, fungos e parasitas). - - - - Ergonomia do Trabalho - - : manipulação manual de cargas, adopção de - posturas incorrectas. - - - - Psicossociologia do Trabalho - - : realização de trabalho monótono e/ou complexo, - atendimento público, existência de conflitos - interpessoais. - - -   - - - 7.2 Valoração dos riscos   - - - A valoração dos riscos associados as perigos - identificados tem como objectivo a definição de - prioridades da execução das medidas preventivas - (hierarquização dos riscos).   - - - Para realizar a valoração de um risco laboral é - necessário atender à - - probabilidade - - de ocorrência (quantas vezes pode ocorrer?) e da - estimativa da - - severidade - - (gravidade) das consequências da sua - materialização (que dano/lesão pode resultar?). - - - As consequências de um risco laboral podem ser - caracterizadas em danos muito leves, em lesões - leves, lesões graves ou lesões muito graves ou - morte.   - - - No seguinte quadro encontram-se descritos alguns - exemplos de consequências de acordo com o grau - de severidade.   - - -   - - - - - - - - - SEVERIDADE (S)   - - - - - CONSEQUÊNCIAS PREVISÍVEIS   - - - - - - - Danos muito leves   - - - - - - Pequenos ferimentos   - - - - Dor de cabeça ou outros - transtornos leves que não causem - baixa   - - - - Desconforto, fadiga visual   - - - - Em geral, lesões ou - transtornos que não requeiram - tratamento médico ou baixa - médica   - - - - - - - Lesão leve   - - - - - - Contusões, cortes - superficiais, entorses, - distensões   - - - - Irritações   - - - - Pequenas queimaduras - superficiais   - - - - Em geral, lesões ou - transtornos que requerem - tratamento médico e podem - ocasionar em alguns casos baixa - de curta duração   - - - - - - - Lesão grave   - - - - - - Lacerações   - - - - Queimaduras extensas   - - - - Comoções/Abalos físicos   - - - - Pequenas fracturas   - - - - Doença crónica que conduza a - uma incapacidade menor - (diminuição da audição, - dermatoses, asma)   - - - - Transtornos - músculo-esqueléticos   - - - - - - - Lesão muito grave/mortal   - - - - - - Amputações, lesões múltiplas   - - - - Facturas maiores   - - - - Intoxicações   - - - - Cancro   - - - - Doenças crónicas que afectam - severamente a vida   - - - - Incapacidades permanentes   - - - - Invalidez   - - - - Morte   - - - - - - -   - - -   - - - Um risco laboral pode ser classificado em - improvável, possível, provável ou inevitável, de - acordo com a probabilidade de se vir a - materializar; como se pode verificar no quadro - seguinte.   - - -   - - - - - - - - - PROBABILIDADE (P)   - - - - - CRITÉRIOS APLICADOS   - - - - - - - Improvável   - - - - - - Extremamente raro, ainda não - acorreu   - - - - Não existe exposição ao perigo - em condições normais de trabalho - ou é muito esporádica   - - - - O dano não é previsível que - ocorra   - - - - - - - Possível   - - - - - - É raro que possa ocorrer   - - - - Se já ocorreu alguma vez   - - - - Pode-se apresentar em - determinadas circunstâncias   - - - - A exposição ao perigo é - ocasional   - - - - O dano ocorreu várias vezes   - - - - - - - Provável   - - - - - - Não será estranho que ocorra o - dano   - - - - Já ocorreu em algumas - situações   - - - - Existência de vários - incidentes ou acidentes pela - mesma causa   - - - - Os sistemas e medidas - aplicadas para o controlo dos - riscos não impedem que este se - manifeste em qualquer momento da - exposição   - - - - O dano ocorrerá em algumas - ocasiões   - - - - A exposição ao perigo é - frequente ou afecta bastante - pessoas   - - - - - - - Inevitável   - - - - - - É o resultado mais provável - quando existe uma exposição - continuada ou afecta a muitas - pessoas   - - - - Ocorrerá a médio ou a longo - prazo   - - - - O dano ocorrerá sempre ou - quase sempre   - - - - - - -   - - - Com base na frequência da exposição e nas - consequências de um risco, é possível construir - uma matriz de falhas, na qual podem ser - atribuídas cores e números que evidenciem os - diferentes níveis de valoração do risco, como se - pode verificar no quadro seguinte.   - - -   - - - - - - - - - -   - - - - -   - - - PROBABILIDADE DE MATERIALIZAÇÃO - DO RISCO   - - - - - - - - GRAU DE SEVERIDADE POSSÍVEL   - - - - - IMPROVÁVEL   - - - 1   - - - - - POSSÍVEL   - - - 2   - - - - - PROVÁVEL   - - - 3   - - - - - INEVITÁVEL   - - - 4   - - - - - - - DANOS MUITO LEVES   - - - 1   - - - - - IRRELEVANTE   - - - 1   - - - - - MUITO BAIXO   - - - 2   - - - - - MUITO BAIXO   - - - 3   - - - - - BAIXO   - - - 4   - - - - - - - LESÃO LEVE   - - - 2   - - - - - MUITO BAIXO   - - - 2   - - - - - BAIXO   - - - 4   - - - - - MÉDIO   - - - 6   - - - - - ALTO   - - - 8   - - - - - - - LESÃO GRAVE   - - - 3   - - - - - MUITO BAIXO   - - - 3   - - - - - MÉDIO   - - - 6   - - - - - ALTO   - - - 9   - - - - - MUITO ALTO   - - - 12   - - - - - - - LESÃO MUITO GRAVE OU MORTAL   - - - 4   - - - - - BAIXO   - - - 4   - - - - - ALTO   - - - 8   - - - - - MUITO ALTO   - - - 12   - - - - - EXTREMAMENTE ALTO   - - - 16   - - - - - - -   - - -   - - - A determinação da valoração do risco permite - hierarquizar as intervenções, definir as acções - e estabelecer prazos de execução, como se - exemplifica no seguinte quadro:   - - -   - - - - - - - - - VALORAÇÃO DO RISCO   - - - - - RECOMENDAÇÕES   - - - - - - - Irrelevante   - - - - - Não é necessário estabelecer - nenhuma medida   - - - - - - - Muito baixo   - - - - - Não é necessário estabelecer - medidas adicionais às existentes -   - - - - - - - Baixo   - - - Prioridade: Baixa   - - - - - Controlar a situação que pode - materializar o risco   - - - - - - - Médio   - - - Prioridade: Média   - - - - - Verificar periodicamente a - eficácia das medidas de controlo - e melhorar a acção preventiva a - médio prazo (se as consequências - poderem ser muito graves ou - mortais, o prazo deve ser - reduzido)   - - - - - - - Alto   - - - Prioridade: Média/Alta   - - - - - Devem-se implementar medidas - para reduzir o risco a curto - prazo (se as consequências - poderem ser muito graves ou - mortais, o prazo deve ser - reduzido)   - - - - - - - Muito alto   - - - Prioridade: Alta   - - - - - Adoptar medidas provisórias - imediatas e definitivas para a - redução do risco a muito curto - prazo.   - - - Se o trabalho não se realiza - habitualmente, não se deve - iniciar sem que haja redução do - risco. Avaliar as medidas - adoptadas   - - - - - - - Extremamente alto   - - - Prioridade: Actuação imediata   - - - - - Não começar ou continuar o - trabalho até que se reduza o - risco. É necessário avaliar o - risco, uma vez corrigido.   - - - - - - -   - - - Alguns riscos laborais podem necessitar da - realização de estudos específicos, realizados de - acordo com os critérios estabelecidos na - legislação e normativa portuguesa e - internacional. Nesta situação, os riscos - laborais detectados podem ser classificados como - risco controlado, semi-controlado, incontrolado - e indeterminado, como é mostrado na tabela - seguinte.   - - -   - - - - - - - - - - RISCOS DE HIGIENE, ERGONOMICOS - OU PSICOSSOCIAIS DO TRABALHO   - - - - - CLASSIFICAÇÃO   - - - - - OBSERVAÇÕES   - - - - - - - Risco analisado/documentado.   - - - Informação suficiente.   - - - - - - - - - - - Controlado   - - -   - - - - - As medidas de - controlo - existentes são - adequadas   - - - - - - - Incontrolado   - - - - - As medidas de - controlo são - inexistentes, - insuficientes ou - inadequadas.   - - - - - - - - - - - Risco não estudado/analisado.   - - - Informação insuficiente.   - - - - - Indeterminado   - - - - - É necessário realizar estudo - específico   - - - - - -   - - Um risco analisado e documentado, é aquele que - tendo sido objecto de uma avaliação específica e - que se encontra documentado, registado e - disponível na empresa.   - - - - Um risco que foi analisado pode encontrar-se - - - controlado ou incontrolado - - - , sendo esta última situação referente ao - não cumprimento das medidas de controlo - aconselhadas nos - - - estudos realizados e à não realização de - novos estudos com a periodicidade - obrigatória. - -   - - - - Se não existe informação suficiente para - determinar a magnitude ou nível do risco e - poder adoptar as medidas adequadas, - classifica-se como risco - - - Indeterminado - - . -   - - -   - - - -   - - -   - - - 8. AVALIAÇÃO DE RISCOS LABORAIS   - - -   - - - Com base na informação recolhida no decorrer da - auditoria, foram elaboradas as tabelas de riscos - laborais que a seguir se apresentam, sendo estas - elaboradas por trabalhador (ou grupo de - trabalhadores com actividades semelhantes) e - para as instalações.   - - - Para cada um dos riscos identificados são - aconselhadas medidas preventivas e/ou - correctivas, de acordo com a legislação e - normativa vigente, tendo em vista a sua - eliminação, redução ou controlo para níveis - aceitáveis.   - - - ÍNDICE DAS TABELAS DE RISCO POR ÁREA DE - ACTIVIDADE - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9. PLANO DE ACTUAÇÃO   - - -   - - - A partir dos resultados da avaliação de riscos, - é elaborado um outro documento (Plano de - Actuação), que inclui a listagem das acções que - deverão ser realizadas de modo a eliminar, - reduzir ou controlar os riscos detectados.   - - - - Este Plano permitirá auxiliar a - - - - - - - - - - - na programação e acompanhamento das - referidas acções. - -   - - -   - - -   - - - 10. CONSIDERAÇÕES FINAIS - - -   - - - - A equipa técnica de Segurança e Higiene do - Trabalho da SIPRP agradece a colaboração de - todos os colaboradores da - - - - - - - - - - - durante a realização desta auditoria, - ficando à disposição para qualquer - esclarecimento. - -   - - -   - - -   - - -   - - - Lisboa, - - de - - de - - - -   - - - - - - - - - - - - - - - - - -   - - - - - - -   - - - Téc. Sup. Seg. Hig. do Trabalho -   - - - (CAP nº - - )   - - - - - - -   - - -   - - -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS LABORAIS   - - - - - - -   - - - - EMPRESA: - - - - - - - - - - -   - - - - ESTABELECIMENTO: - - - - - - - - - - - - DATA DA AVALIAÇÃO: - - - - de - - de - - -   - - - - - - AVALIAÇÃO: - - - - -   - - - - - - PRÓXIMA AVALIAÇÃO: - - - - de - - de - - -   - - - - - - - - REALIZADA POR: - - -  / SIPRP – - Sociedade Ibérica de Prevenção - de Riscos Profissionais   - - - - - - - - - POSTO DE TRABALHO: - - - - - - - - - - - - - - - - - - - - SEV.   - - - (S)   - - - - - PROB.   - - - (P)   - - - - - VALOR RISCO   - - - (S x P)   - - - - - RISCO / CONDIÇÕES ANÓMALAS /   - - - / ACÇÕES DE CONTROLO OU REDUÇÃO DO - RISCO   - - - - - - - - - -   - - - - -   - - - - -   - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - IRRELEVANTE - - - MUITO BAIXO - - - MUITO BAIXO - - - BAIXO - - - MÉDIO - - - ALTO - - - ALTO - - - MUITO ALTO - - - EXTREMAMENTE ALTO - - - - - - - - - - - -   - - - - -   - - - - - - - - - - -   - - - - - - - - - - - - - - - - . - - - ; - - - - - - - -   - - - - - - - - . - - - ; - - - - -   - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - Avaliação - - - - - - - de Riscos Laborais - - - - - - - - - - - - - - diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2010-08-10.xsl b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2010-08-10.xsl deleted file mode 100644 index 25b5e155..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/relatorio_old_2010-08-10.xsl +++ /dev/null @@ -1,3009 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ATRIUM SALDANHA   - - - Praça Duque de Saldanha, 1 – 9º G   - - - 1050 – 094 Lisboa   - - - Telefone (+351) 213 504 540   - - - Fax (+351) 213 504 549   - - - geral@siprp.pt   - - - www.siprp.com   - - - - - Lisboa   - - - - - de - - - - - - - - - - AVALIAÇÃO DOS RISCOS PROFISSIONAIS   - - - Relatório - - -   - - -   - - -   - - - - - - - - -   - - -   - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - - - - - - - ÍNDICE - - - - - - - - - - - - 1. INTRODUÇÃO - - - - - - - 2. AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - 3. MEDIÇÃO DOS FACTORES DE RISCO - - - - - - - 4. LEGISLAÇÃO APLICÁVEL - - - - - - - 4.1 Legislação de aplicação geral - - - - - - - 4.2 Legislação específica - - - - - - - 5. NORMALIZAÇÃO APLICÁVEL - - - - - - - 6. EMPRESA CLIENTE - - - - - - - 7. TABELAS DE AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - 8. PLANO DE ACTUAÇÃO - - - - - - - 9. ACOMPANHAMENTO - - - - - - - 10. CONSIDERAÇÕES FINAIS - - - - - -   - - -   - - - - - - - - 1 - INTRODUÇÃO   - - - - - - - - - - - O empregador deve assegurar aos trabalhadores condições de segurança e saúde em todos os aspectos relacionados com o trabalho, aplicando as medidas necessárias tendo em conta os princípios gerais de prevenção. - - - - - Na aplicação das medidas de prevenção, o empregador deve mobilizar os meios necessários, nomeadamente nos domínios da prevenção técnica, da formação, informação e consulta dos trabalhadores e de serviços adequados, internos ou externos à empresa. - - - - - De acordo com a Lei nº 102/2009 de 10 de Setembro, que regulamenta o regime jurídico da promoção e prevenção da segurança e da saúde no trabalho, a prevenção dos riscos profissionais deve assentar numa correcta e permanente avaliação de riscos. - - - - - Enquanto entidade prestadora de serviços externos, a SIPRP - Sociedade Ibérica de Prevenção de Riscos Profissionais fomenta a implementação das medidas necessárias para prevenir os riscos profissionais e promover a segurança e a saúde dos trabalhadores, nomeadamente através da planificação da prevenção (integrando a todos os níveis a avaliação dos riscos e respectivas medidas de prevenção), da avaliação de riscos (com elaboração do respectivo relatório), da elaboração do plano de prevenção dos riscos profissionais e dos planos detalhados de prevenção e protecção (planos de actuação). - - - - - O presente documento reflecte a avaliação dos riscos profissionais realizada, assim como recomenda as respectivas medidas de prevenção necessárias. - - - - - Será igualmente emitido um outro documento no qual se elabora o plano de prevenção dos riscos profissionais, o qual é denominado de Plano de Actuação. - - - - - - - - - - - - - - 2 - AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - - - - - Uma avaliação dos riscos profissionais é um exame cuidadoso, realizado nos locais de trabalho, de forma a detectar os componentes aí existentes capazes de causar dano(s) ao(s) trabalhador(es) expostos. Na prática, trata-se de um processo dinâmico que reúne um duplo objectivo: - - - - - - - - - - • - - - - - Estimar a gravidade que um determinado risco no trabalho pode ter para a saúde e segurança dos trabalhadores, resultante das circunstâncias em que o perigo pode ocorrer; - - - - - - - • - - - - - Obter a informação necessária para que o empregador reúna condições para uma tomada de decisão apropriada, nomeadamente informação sobre a necessidade e o tipo de medidas preventivas a adoptar. - - - - - - - - A avaliação dos riscos profissionais constitui um processo dinâmico, uma vez que os riscos profissionais que a entidade patronal se vê obrigada a avaliar não ficam definitivamente determinados, mas vai evoluindo à medida que alterações se vão efectuando em função: - - - - - - - - - - • - - - - - do desenvolvimento progressivo das condições de trabalho; - - - - - - - - - - - • - - - - - das investigações científicas em matéria de riscos profissionais. - - - - - - - - A avaliação dos riscos profissionais deve ser eficiente e suficientemente detalhada para possibilitar uma adequada hierarquização dos riscos e consequente controlo. - - - - - Uma vez que assume uma linguagem mais objectiva, a SIPRP optou pelo método de matriz simples 4x4, que envolve a quantificação da probabilidade e da gravidade. - - - - - O método referido recorre a duas escalas de quatro níveis, para caracterizar as variáveis gravidade e probabilidade. - - - - - - - - - - - - Gravidade - - - - - - - - Probabilidade  - - - - - - - - Improvável   - - - 1   - - - - - Ocasional   - - - 2   - - - - - Provável   - - - 3   - - - - - Frequente   - - - 4   - - - - - - - Negligenciável - - - 1   - - - - - Aceitável   - - - 1   - - - - - Médio - - - 2   - - - - - Médio - - - 3   - - - - - Alto - - - 4   - - - - - - - Marginal - - - 2   - - - - - Médio - - - 2   - - - - - Médio   - - - 4   - - - - - Alto   - - - 6   - - - - - Muito alto   - - - 8   - - - - - - - Crítico - - - 3   - - - - - Médio - - - 3   - - - - - Alto   - - - 6   - - - - - Muito alto   - - - 9   - - - - - Extremamente alto - - - 12   - - - - - - - Catastrófico - - - 4   - - - - - Alto   - - - 4   - - - - - Muito alto   - - - 8   - - - - - Extremamente alto - - - 12   - - - - - Extremamente alto - - - 16   - - - - - - - Quadro – Matriz simples 4x4 - - - - - A interpretação do valor obtido pode ser realizada através da consulta do índice de risco, que traduz a prioridade de intervenção associada à avaliação feita. - - - - - - - - - - - Indice de risco - - - - - prioridade de intervenção - - - - - - - Aceitável - - - - - Actuação não prioritária - - - - - - - Médio - - - - - Intervenção a médio prazo - - - - - - - Alto - - - - - Intervenção a curto prazo - - - - - - - Muito alto - - - - - Actuação urgente - - - - - - - Extremamente alto - - - - - Actuação imediata - - - - - - - Quadro – Prioridade de intervenção de acordo com o índice de risco - - - Alguns riscos profissionais poderão ainda ser classificados como - indeterminados, dada a insuficência de informação. - - - - - - - - - - - - - - 3 - MEDIÇÃO DOS FACTORES DE RISCO - - - - - - - - - - - Uma vez que um dos princípios gerais de prevenção é assegurar que as exposições aos agentes químicos, físicos e biológicos e aos factores de risco psicossociais não constituem risco para a segurança e saúde do trabalhador nos locais de trabalho, a SIPRP, no decorrer das avaliações dos riscos profissionais, realiza medições aos seguintes parâmetros: - - - - - - - - - - • - - - - - Iluminância ou nível de iluminação; - - - - - - - • - - - - - Temperatura do ar; - - - - - - - • - - - - - Humidade relativa do ar; - - - - - - - • - - - - - Nível sonoro contínuo equivalente (ruído). - - - - - - - - Para realizar as referidas medições são utilizados os seguintes equipamentos: - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - Todos os equipamentos encontram-se devidamente calibrados por entidades acreditadas pelo Instituto Português de Acreditação. - - - - - - - - - - - - - - 4 - LEGISLAÇÃO APLICÁVEL - - - - - - - - - - - A avaliação dos riscos profissionais realizada pela SIPRP tem em conta as prescrições indicadas na legislação portuguesa em matéria de Segurança, Higiene e Saúde do Trabalho: - - - - - - - 4.1 Aplicação geral - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - 4.2 Aplicação específica - - - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - - - - - - - - - 5 - NORMALIZAÇÃO APLICÁVEL - - - - - - - - - - - Na realização da avaliação dos riscos profissionais é considerada além da legislação, também a normalização relativa à Segurança, Higiene e Saúde do Trabalho.  - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - - - - - • - - - - - - - - . - - - ; - - - - - - - - - - - - - - - - - - - - 6 - EMPRESA CLIENTE - - - - - - - - - - - A SIPRP realizou a avaliação dos riscos profissionais na empresa - , - estabelecimento de , - no dia - - de - - de - . - - - - - A actividade desenvolvida pela empresa é de . - - - - - De acordo com funções fornecidas, . - - - - - No decorrer da avaliação dos riscos profissionais, - a SIPRP obteve a colaboração e acompanhamento de - - ( - - ) - - e - ( - - ) - . - - - - - - - - - - - - - - 7 - TABELAS DE AVALIAÇÃO DOS RISCOS PROFISSIONAIS - - - - - - - - - - - A avaliação dos riscos profissionais realizada encontra-se nas tabelas que são apresentadas seguidamente. Nas mesmas são referidas igualmente as respectivas medidas de prevenção tidas como necessárias. - - - - - Os riscos comuns encontram-se agrupados por forma a facilitar a leitura do presente documento. - - - ÍNDICE DAS TABELAS DE RISCO POR ÁREA DE - ACTIVIDADE - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - -   - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8 - PLANO DE ACTUAÇÃO - - - - - - - - - - - Após a avaliação dos riscos profissionais e da indicação das respectivas medidas de prevenção tidas como necessárias, a SIPRP emite um documento no qual é elaborado o plano de prevenção dos riscos profissionais, denominado de Plano de Actuação. - - - - - - - - - - - - - - 9 - ACOMPANHAMENTO - - - - - - - - - - - A SIPRP acompanha a execução das medidas de prevenção através de assessoramento ao cliente durante o preenchimento do Plano de Actuação. -   - - - - - A execução das medidas de prevenção são verificadas através da realização da avaliação dos riscos profissionais periódica. -   - - - - - - - - - - - - - - 10 - CONSIDERAÇÕES FINAIS - - - - - - - - - - - A SIPRP agradece a disponibilidade e o apoio de todos os colaboradores da empresa e fica ao dispor para qualquer esclarecimento. - - - - - - - - - Lisboa, - - de - - de - - - -   - - -  Realizado por: - - - - - - - - - - - - - - - - - - -   - - - - - - Técnico de Higiene e Segurança -   - - - CAP nº - - - - - - - - - - - -  Verificado por: - - - - - - - - - - - - - - - - - - -   - - - - - - Técnico Superior de Higiene e Segurança -   - - - CAP nº - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AVALIAÇÃO DE RISCOS PROFISSIONAIS   - - - - - - -   - - - - EMPRESA: - - - - - - - - - - -   - - - - ESTABELECIMENTO: - - - - - - - - - - - - DATA DA AVALIAÇÃO: - - - - de - - de - - -   - - - - - - AVALIAÇÃO: - - - - -   - - - - - - PRÓXIMA AVALIAÇÃO: - - - - de - - de - - -   - - - - - - - - REALIZADA POR: - - - - - - - - - - / SIPRP – - Sociedade Ibérica de Prevenção - de Riscos Profissionais   - - - - - - - - - POSTO DE TRABALHO: - - - - - - - - - - - - - - - - - - - - GRAV.   - - - (G)   - - - - - PROB.   - - - (P)   - - - - - VALOR RISCO   - - - (G x P)   - - - - - RISCO / CONDIÇÕES ANÓMALAS /   - - - / ACÇÕES DE CONTROLO OU REDUÇÃO DO - RISCO   - - - - - - - - - -   - - - - -   - - - - -   - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - - - - - - - - -   - - -   - - -   - - - - - - - - Aceitável - - - Médio - - - Médio - - - - - Médio - - - Alto - - - - - Alto - - - Muito alto - - - Muito alto - - - Extremamente alto - - - Extremamente alto - - - - - - - - - - - -   - - - - -   - - - - - - - - - - -   - - - - - - - - - - - - - - - - . - - - ; - - - - - - - -   - - - - - - - - . - - - ; - - - - -   - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - Avaliação - - - - - - - dos Riscos Profissionais - - - - - - - - - - - - - - diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input.xml b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input.xml deleted file mode 100644 index b4a8f8c5..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - COMPANHIA PORTUGUESA DE HIPERMERCADOS - - ALVERCA - - http://www.evolute.pt/~siprp/planoactuacao/siprp_logo.jpg - rua do estabelecimento - - - 2008 - 4 - Abril - 29 - - - 2008 - 3 - Março - 1 - - - Lei nº 99/2003 de 27 de Agosto regulamentada pela Lei - nº 35/2004 de 29 de Julho – Aprova o novo Código - de Trabalho - Decreto-Lei n.º441/91 de 14 de Novembro, alterado pelo - Decreto-Lei n.º133/99 de 21 de Abril – Estabelece o - regime jurídico do enquadramento da segurança, - higiene e saúde do trabalho - Decreto-Lei n.º26/94, de 1 de Fevereiro, alterado pela - Lei n.º7/95 de 29 de Março e pelo Decreto-Lei - n.º109/2000 – Regime de Organização e - funcionamento dos serviços da segurança, higiene e - saúde do trabalho - - - - Acidentes de Trabalho e Doenças Profissionais - - - - Lei nº 99/2003 de 27 de Agosto regulamentada pela - Lei nº 35/2004 de 29 de Julho – Aprova o novo - Código de Trabalho - - - Decreto-Lei n.º441/91 de 14 de Novembro, alterado - pelo Decreto-Lei n.º133/99 de 21 de Abril – - Estabelece o regime jurídico do enquadramento da - segurança, higiene e saúde do trabalho - - - Decreto-Lei n.º26/94, de 1 de Fevereiro, alterado - pela Lei n.º7/95 de 29 de Março e pelo - Decreto-Lei n.º109/2000 – Regime de - Organização e funcionamento dos serviços - da segurança, higiene e saúde do trabalho - - - - - - Área Administrativa - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - - Risco de exposição a condições - inadequadas de iluminação - - 6 - - - - Melhorar as condições de iluminação para valores - mínimos de 500 na área focal de trabalho e 300 - lux no seu envolvimento - - - Areas comerciais - - - - Cartazista - - - Frederico Palma - lampadas - - 2008 - 5 - Maio - 1 - - - 2009 - 5 - Maio - 1 - - OK - OK - OK - - - - Área Comercial - - - 1 - 2 - \ No newline at end of file diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input2.xml b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input2.xml deleted file mode 100644 index d305826b..00000000 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/print/teste_input2.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - COMPANHIA PORTUGUESA DE HIPERMERCADOS - - ALVERCA - http://apdp/siprp/auchan_jumbo_lado.jpg - rua do estabelecimento - - - 2008 - 4 - Abril - 29 - - - 2008 - 3 - Março - 1 - - - - Lei nº 99/2003 de 27 de Agosto regulamentada pela Lei - nº 35/2004 de 29 de Julho – Aprova o novo Código - de Trabalho - - - Decreto-Lei n.º441/91 de 14 de Novembro, alterado pelo - Decreto-Lei n.º133/99 de 21 de Abril – Estabelece o - regime jurídico do enquadramento da segurança, - higiene e saúde do trabalho - - - Decreto-Lei n.º26/94, de 1 de Fevereiro, alterado pela - Lei n.º7/95 de 29 de Março e pelo Decreto-Lei - n.º109/2000 – Regime de Organização e - funcionamento dos serviços da segurança, higiene e - saúde do trabalho - - - - - Acidentes de Trabalho e Doenças Profissionais - - - - Lei nº 99/2003 de 27 de Agosto regulamentada pela - Lei nº 35/2004 de 29 de Julho – Aprova o novo - Código de Trabalho - - - Decreto-Lei n.º441/91 de 14 de Novembro, alterado - pelo Decreto-Lei n.º133/99 de 21 de Abril – - Estabelece o regime jurídico do enquadramento da - segurança, higiene e saúde do trabalho - - - Decreto-Lei n.º26/94, de 1 de Fevereiro, alterado - pela Lei n.º7/95 de 29 de Março e pelo - Decreto-Lei n.º109/2000 – Regime de - Organização e funcionamento dos serviços - da segurança, higiene e saúde do trabalho - - - - - - Área Administrativa - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - Areas comerciais - - - - Risco de exposição a condições - inadequadas de iluminação - - 6 - - - - Melhorar as condições de iluminação para valores - mínimos de 500 na área focal de trabalho e 300 - lux no seu envolvimento - - - Areas comerciais - - - - Cartazista - - - Frederico Palma - lampadas - - 2008 - 5 - Maio - 1 - - - 2009 - 5 - Maio - 1 - - OK - OK - OK - - - - Área Comercial - - - 1 - 2 - \ No newline at end of file diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/revert.png b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/revert.png deleted file mode 100644 index f7e5f9354e0ec25d1960e84e90cc78c7a9597c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)WdKBPATcx`PH%P~GB7YQATl#LGch_eG$1Q5F)%QMP#j1A000McNliru z)&&<0Gy+gzv`hd1010qNS#tmY3lRVS3lRZ-WM7d0000DMK}|sb0I`n?{9y$E00PHJ zL_t(|+Le=ENKJ1d?+N)W@aV+Nt`-$TWXoEjZJIL{k!{f*S&Y08&?X8{`}wrzx(^0bAI=H z&p8zQeNh{}6Mwq=u?}=+L1OhvYIfFf1(EAkT`RMMW{q55b35J!5l%Fd{nq)^Xw9Yq z#hY7~j~%S9E7BI06e_6V(%c}GyFV7s-wdvvNwf+h!mk0&*h=;Jbbm){WyZ7j05e|z zoFM>)1)$T_AgHs;xG)<}d^XLAK?t;3+ftNd7xSR;Jml3zQZ=E@J1y0kP745`0c@rz z)@kZ9Q8IOsw*1iUjGYEqpg*Guod*#=sne5dO?!(;>v)p`)OoS?vz6NimH<>q09~EE zF2C{WD{xPQQ8`!8+hUfdT|cKZ)RjfeuoVNC$x0yP*rEe{#gWElmJhmEoQii$GH>V_gn%pp@e+C4-za0OR-v6d)yqZg^M(NADTX z@T*jRj*oLQVYl6l`un%c6ssGTOL-n;zhz9yD}Hjgx>#aFCn4t(H=X zh^Pl>&GrEfmt<@M0S4vyhI|BIO8H2tFdH zB&;FvM7QPKzqBI^MNqCrxnAz>u=jnnrpqf7md!#AN4BlZb8jDY|E002ovPDHLk FV1i%pdAa}q diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/submit.png b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/submit.png deleted file mode 100644 index 7cb1f515c9ff1a04d35d3c4597e0455dac96fde6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)WdKcYATc!{L3L*!GB7YTATcpIGch_bG$1Q5F)%RM{uz1z000McNliru z)&&<0F*%$asVx8i010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00KHm zL_t(|+Kp1rYZE~f{&qJ36^WiyB-#|LP!Oyowc&NSCfDvhuU#{W&kEE40dEN_BMyb?_bkTAKZM#+rJn-f?>($)VYD%H_|B_JG@`x z%0xewjagL8GM3B&`V!~i(dIrYx@Bc9KlO!=R2aHw1Z&2nmlsj=J|lhhI4X{Vhoi6Y zlka;DUUcr; zg|6PzT~19hVhshZTh#<37hdTY&+I@?BBAFWr%PD9T7_5hv0Prohsm5&>tW;=wyCp7 z=`cA}z(UDp^UOv|RnJ4dSjNcvdBkE{;rq%6sz=v((B0LhqtQIitr+NN+lKh=7<>}v zbh}2dZD@kP0*p`0a^iM)ZUlFp3`4wO&yb(9F;iH<$)kHgYfO){-oIrMN{cqeQ=ha9 zspu=h^f#NO7^pY;mx4NhQq3(>8_<2j=k5^Q4Z4C4O`hw($=AN_m+ UEP@{W{{R3007*qoM6N<$f&jolegFUf diff --git a/trunk/SIPRPSoft/src/siprp/medicina/exames/logic/RecepcaoExamesLogic.java b/trunk/SIPRPSoft/src/siprp/medicina/exames/logic/RecepcaoExamesLogic.java deleted file mode 100644 index 695f0a80..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/exames/logic/RecepcaoExamesLogic.java +++ /dev/null @@ -1,76 +0,0 @@ -package siprp.medicina.exames.logic; - -import java.util.Collection; -import java.util.List; - -import leaf.ui.LeafDialog; -import leaf.ui.LeafLogic; -import shst.data.outer.PrestadoresData; -import shst.data.outer.TrabalhadoresEcdData; -import shst.data.provider.MedicinaDataProvider; - -import com.evolute.utils.error.ErrorLogger; - -public class RecepcaoExamesLogic extends LeafLogic -{ - - @Action(isSave = true) - public final static String ACTION_SELECT_ANALISADOR = "ACTION_SELECT_ANALISADOR"; - - @Action(isSave = false) - public final static String ACTION_SELECT_EXAME = "ACTION_SELECT_EXAME"; - - @Action(isSave = false) - public final static String ACTION_FILL_EXAMES = "ACTION_FILL_EXAMES"; - - @Action(isSave = true) - public final static String ACTION_RECEBER_EXAMES = "ACTION_RECEBER_EXAMES"; - - @Action(isSave = false) - public final static String ACTION_SORT = "ACTION_SORT"; - - public PrestadoresData currentAnalisador = null; - - private static MedicinaDataProvider dao = null; - static - { - try - { - dao = MedicinaDataProvider.getProvider(); - } - catch (Exception e) - { - ErrorLogger.logException( e ); - } - } - - @LeafLogicActionBinding(actions = ACTION_SELECT_ANALISADOR) - public void getExamesForAnalisador( PrestadoresData analisador ) - { - currentAnalisador = analisador; - if( analisador != null ) - { - Collection result = dao.getPendingExamesForAnalisador( currentAnalisador ); - runAction( ACTION_FILL_EXAMES, result ); - } - } - - @LeafLogicActionBinding(actions = ACTION_RECEBER_EXAMES) - public void receberExames( List ecds ) - { - try - { - if( ecds != null ) - { - for( TrabalhadoresEcdData ecd : ecds ) - { - ecd.save(); - } - } - } catch( Exception e ) - { - LeafDialog.error( e ); - } - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/exames/ui/RecepcaoExamesWindow.java b/trunk/SIPRPSoft/src/siprp/medicina/exames/ui/RecepcaoExamesWindow.java deleted file mode 100644 index 14d4aca7..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/exames/ui/RecepcaoExamesWindow.java +++ /dev/null @@ -1,235 +0,0 @@ -package siprp.medicina.exames.ui; - -import static com.evolute.utils.strings.UnicodeLatin1Map.atilde; -import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil; -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Dimension; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; - -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.ListSelectionModel; - -import leaf.ui.LeafButton; -import leaf.ui.LeafInputField; -import leaf.ui.LeafTableModel; -import leaf.ui.LeafWindow; -import leaf.ui.LeafLogic.LeafUIActionBinding; -import shst.data.outer.EmpresasData; -import shst.data.outer.EstabelecimentosData; -import shst.data.outer.PrestadoresData; -import shst.data.outer.TrabalhadoresData; -import shst.data.outer.TrabalhadoresEcdData; -import shst.data.outer.TrabalhadoresEcdsData; -import shst.data.outer.TrabalhadoresEcdsDatasData; -import siprp.medicina.exames.logic.RecepcaoExamesLogic; - -import com.evolute.adt.OrderedMap; -import com.evolute.utils.tables.BaseTable; - -public class RecepcaoExamesWindow extends LeafWindow -{ - private static final long serialVersionUID = 1L; - - public static final String TITLE = "Recep" + ccedil + atilde + "o de ECDs"; - - private static final String TRABALHADOR = "Trabalhador"; - private static final String EMPRESA = "Empresa"; - - public final JLabel labelAnalisador = new JLabel( "Analisador" ); - - @ActionActivation(onSelect = RecepcaoExamesLogic.ACTION_SELECT_EXAME, onChange = "") - public BaseTable examesTable; - public LeafTableModel examesModel; - public JScrollPane examesScroll; - - @ActionActivation(onSelect = "", onChange = RecepcaoExamesLogic.ACTION_SELECT_ANALISADOR) - public final LeafInputField> fieldAnalisador = new LeafInputField>(); - - public final JLabel labelData = new JLabel( "Data de recep" + ccedil + atilde + "o" ); - public final LeafInputField fieldData = new LeafInputField(); - - public final JLabel labelOrder = new JLabel("Ordenar por: "); - @ActionActivation(onSelect="", onChange=RecepcaoExamesLogic.ACTION_SORT) - public final LeafInputField> fieldOrder = new LeafInputField>(); - - @ActionActivation(onSelect=RecepcaoExamesLogic.ACTION_RECEBER_EXAMES, onChange="") - public final LeafButton buttonReceber = new LeafButton( "Receber" ); - - public final JPanel pane = new JPanel(); - - public RecepcaoExamesWindow() - { - super( new RecepcaoExamesLogic() ); - setTitle( TITLE ); - setupLayout(); - setupComponents(); - placeComponents(); - completeSetup(); - } - - private void setupLayout() - { - double[] cols = new double[] { - TableLayout.PREFERRED, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.PREFERRED - }; - double[] rows = new double[] { - TableLayout.PREFERRED, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, TableLayout.PREFERRED - }; - TableLayout layout = new TableLayout( cols, rows ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - pane.setLayout( layout ); - } - - private void setupComponents() - { - setContentPane( pane ); - examesModel = new LeafTableModel( new String[] { - "Empresa", "Estabelecimento", "Trabalhador", "Exame (tipo)", "Exame" - } ); - examesTable = new BaseTable( examesModel ); - examesTable.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); -// examesTable.setNonResizableNorReordable(); - examesTable.getTableHeader().setResizingAllowed( true ); - examesTable.getTableHeader().setReorderingAllowed( false ); - examesScroll = new JScrollPane( examesTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - - OrderedMap orderOptions = new OrderedMap(); - orderOptions.putLast( EMPRESA, EMPRESA ); - orderOptions.putLast( TRABALHADOR, TRABALHADOR ); - fieldOrder.setObject( orderOptions, EMPRESA ); - fieldOrder.setEditable( true ); - } - - private JPanel createMargin(boolean horizontal, int marginSize) - { - JPanel result = new JPanel(); - Dimension dim = new Dimension(horizontal ? 0 : marginSize, horizontal ? marginSize: 0 ); - result.setPreferredSize( dim ); - result.setSize( dim ); - return result; - } - - private void placeComponents() - { - pane.add( createMargin(true, 20), new TableLayoutConstraints(0,0,0,5)); - pane.add( createMargin(true, 20), new TableLayoutConstraints(7,0,7,5)); - pane.add( createMargin(false, 20), new TableLayoutConstraints(0,0,7,0)); - pane.add( createMargin(false, 20), new TableLayoutConstraints(0,5,7,5)); - pane.add( labelAnalisador, new TableLayoutConstraints( 1, 1, 2, 1 ) ); - pane.add( fieldAnalisador, new TableLayoutConstraints( 1, 2, 4, 2 ) ); - pane.add( labelData, new TableLayoutConstraints( 1, 3 ) ); - pane.add( fieldData, new TableLayoutConstraints( 1, 4, 2, 4 ) ); - pane.add( buttonReceber, new TableLayoutConstraints( 4, 4 ) ); - pane.add( examesScroll, new TableLayoutConstraints( 1, 5, 4, 5 ) ); - pane.add( labelOrder, new TableLayoutConstraints( 1, 6 ) ); - pane.add( fieldOrder, new TableLayoutConstraints( 2, 6, 3, 6 ) ); - } - - @LeafUIActionBinding(action = RecepcaoExamesLogic.ACTION_FILL_EXAMES) - public void fillExames(Collection exames) - { - examesTable.clearSelection(); - examesModel.clearAll(); - if(exames != null) - { - OrderedMap orderedMap = new OrderedMap(); - for( TrabalhadoresEcdData current : exames ) - { - TrabalhadoresEcdsDatasData exameMarcacao = current.toTrabalhadores_ecds_datas_id(); - EmpresasData empresa = null; - EstabelecimentosData estabelecimento = null; - TrabalhadoresData trabalhador = null; - TrabalhadoresEcdsData exame = null; - if( exameMarcacao != null ) - { - exame = exameMarcacao.toTrabalhadores_ecds_id(); - if( exame != null) - { - trabalhador = exame.toTrabalhador_id(); - if( trabalhador != null ) - { - estabelecimento = trabalhador.toEstabelecimento_id(); - if( estabelecimento != null ) - { - empresa = estabelecimento.toEmpresa_id(); - } - } - } - } - orderedMap.putLast( current, empresa, estabelecimento, trabalhador, current.toEcd_id().toGrupo_protocolo_id(), current ); - } - orderedMap.order( new int[]{ 0, 1, 2, 3, 4 } ); - examesModel.setValues( orderedMap ); - } - } - - @LeafUIActionBinding(action=RecepcaoExamesLogic.ACTION_SORT) - public void sort() - { - Object selected = fieldOrder.getSelectedObject(); - if( selected != null ) - { - if(selected.toString().equals( TRABALHADOR )) - { - examesModel.order( 2, 3, 4 ); - }else - { - examesModel.order( 0, 1, 2, 3, 4 ); - } - } - } - - @LeafUIActionBinding(action = RecepcaoExamesLogic.ACTION_SELECT_ANALISADOR) - public PrestadoresData selectAnalisador() - { - return (PrestadoresData)fieldAnalisador.getSelectedObject(); - } - - @LeafUIActionBinding(action = RecepcaoExamesLogic.ACTION_RECEBER_EXAMES) - public List receberExames() - { - List result = new ArrayList(); - int [] selectedRows = examesTable.getSelectedRows(); - if( selectedRows != null ) - { - for( int i = 0; i < selectedRows.length; ++i) - { - Object ecd = examesModel.getKey( selectedRows[i] ); - if(ecd != null) - { - if( ecd instanceof TrabalhadoresEcdData) - { - ((TrabalhadoresEcdData) ecd ).setData_recepcao( fieldData.getObject() ); - result.add( (TrabalhadoresEcdData) ecd ); - } - } - } - } - runActionLater( RecepcaoExamesLogic.ACTION_SELECT_ANALISADOR ); - return result; - } - - @LeafUIActionBinding(action = RecepcaoExamesLogic.ACTION_STARTUP) - public void startup() - { - List prestadores = PrestadoresData.getAllPrestadores(); - PrestadoresData prestador = (prestadores == null || prestadores.size() == 0) ? null : prestadores.get( 0 ); - OrderedMap allPrestadores = new OrderedMap( prestadores ); - fieldAnalisador.setObject( allPrestadores, prestador ); - fieldAnalisador.setEditable( true ); - - fieldData.setObject( new Date() ); - fieldData.setEditable( true ); - - runActionLater( RecepcaoExamesLogic.ACTION_SELECT_ANALISADOR ); - } - -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindow.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindow.java deleted file mode 100644 index cc61707e..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindow.java +++ /dev/null @@ -1,262 +0,0 @@ -package siprp.medicina.locais_analise; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.text.DateFormat; -import java.util.Date; -import java.util.Locale; - -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import javax.swing.WindowConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import siprp.ui.SIPRPFrame; - -import com.evolute.utils.data.IDObject; -import com.evolute.utils.dataui.ControllableComponent; -import com.evolute.utils.tracker.TrackableWindow; -import com.evolute.utils.ui.DialogException; -import com.evolute.utils.ui.calendar.JCalendarPanel; -import com.evolute.utils.ui.panel.CheckBoxPanel; - -public class EnviarAnalisesWindow extends SIPRPFrame - implements TrackableWindow, ActionListener, ChangeListener, ControllableComponent< Object > -{ - /** - * - */ - private static final long serialVersionUID = 1L; - - public static final String TITLE = "Enviar ECDs SIPRP para An\u00e1lise"; - - protected JCalendarPanel dataPanel; - protected JComboBox prestadorCombo; - protected JPanel ecdsOuterPanel; - protected CheckBoxPanel ecdsPanel; - protected JButton enviarButton; - - protected final EnviarAnalisesWindowLogic logic; - - public EnviarAnalisesWindow() - throws Exception - { - logic = new EnviarAnalisesWindowLogic( this ); - setupComponents(); - } - - private void setupComponents() - { - setTitle( TITLE ); - setSize( 500, 400 ); - - JLabel dataLabel = new JLabel( "Data" ); - dataPanel = new JCalendarPanel( this ); - dataPanel.addChangeListener( this ); - JLabel prestadorLabel = new JLabel( "Analisador" ); - prestadorCombo = new JComboBox(); - ecdsOuterPanel = new JPanel(); - ecdsOuterPanel.setLayout( new GridLayout( 1, 1 ) ); - enviarButton = new JButton( "Gravar" ); - enviarButton.addActionListener( this ); - - TableLayout layout = - new TableLayout( - new double[]{ TableLayoutConstraints.MINIMUM, TableLayoutConstraints.PREFERRED, - TableLayoutConstraints.MINIMUM, TableLayoutConstraints.PREFERRED }, - new double[]{ TableLayoutConstraints.MINIMUM, TableLayoutConstraints.FILL, - TableLayoutConstraints.MINIMUM } ); - layout.setHGap( 2 ); - layout.setVGap( 2 ); - getContentPane().setLayout( layout ); - - getContentPane().add( dataLabel, new TableLayoutConstraints( 0, 0 ) ); - getContentPane().add( dataPanel, new TableLayoutConstraints( 1, 0 ) ); - getContentPane().add( prestadorLabel, new TableLayoutConstraints( 2, 0 ) ); - getContentPane().add( prestadorCombo, new TableLayoutConstraints( 3, 0 ) ); - getContentPane().add( ecdsOuterPanel, new TableLayoutConstraints( 0, 1, 3, 1 ) ); - getContentPane().add( enviarButton, new TableLayoutConstraints( 1, 2, 2, 2 ) ); - - - setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE ); - addWindowListener( new WindowAdapter(){ - public void windowClosing( WindowEvent e ) - { - close(); - } - - public void windowOpened( WindowEvent e ) - { -// setExtendedState( getExtendedState() | MAXIMIZED_BOTH ); - } - - } ); - dataPanel.setDate( new Date() ); - try - { - logic.dateChanged( dataPanel.getDate() ); - } - catch( Exception ex ) - { - if( dataPanel.getDate() != null ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar dados de " + DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "pt", "PT" ) ).format( dataPanel.getDate() ), true ); - } - else - { - DialogException.showExceptionMessage( ex, "Erro a carregar dados de null", true ); - } - } - } - - public void refresh() - { - } - - public void open() - { - setVisible( true ); - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable() { - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - public boolean closeIfPossible() - { - close(); - return true; - } - - protected void setPrestadores( IDObject prestadores[] ) - { - prestadorCombo.removeAllItems(); - for( IDObject prestador : prestadores ) - { - prestadorCombo.addItem( prestador ); - } -// revalidate(); - } - - public void setEcds( IDObject ecds[] ) - { - ecdsPanel = new CheckBoxPanel( ecds ); - ecdsOuterPanel.removeAll(); - ecdsOuterPanel.add( ecdsPanel ); - revalidate(); - } - - @Override - public void actionPerformed( ActionEvent e ) - { - Object source = e.getSource(); - if( source.equals( enviarButton ) ) - { - try - { - logic.save(); - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a gravar", true ); - } - } - } - - @Override - public void stateChanged( ChangeEvent e ) - { - Object source = e.getSource(); - if( source.equals( dataPanel ) ) - { - Date data = dataPanel.getDate(); - try - { - logic.dateChanged( data ); - } - catch( Exception ex ) - { - if( data != null ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar dados de " + DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "pt", "PT" ) ).format( data ), true ); - } - else - { - DialogException.showExceptionMessage( ex, "Erro a carregar dados de null", true ); - } - } - } - } - - @Override - public void clear() - { - if( prestadorCombo.getItemCount() > 0 ) - { - prestadorCombo.setSelectedIndex( 0 ); - if( ecdsPanel != null ) - { - ecdsPanel.clear(); - } - } - } - - @Override - public void fill( Object value ) - { - clear(); - if( value != null ) - { - Date data = ( Date ) ( ( Object[] ) value )[ 0 ]; - Integer prestadorId = ( Integer ) ( ( Object[] ) value )[ 1 ]; - Integer ecdsEscolhidos[] = ( Integer[] ) ( ( Object[] ) value )[ 2 ]; - if( prestadorId == null ) - { - prestadorCombo.setSelectedIndex( 0 ); - } - else - { - for( int n = 0; n < prestadorCombo.getItemCount(); n++ ) - { - IDObject prestador = ( IDObject ) prestadorCombo.getItemAt( n ); - if( prestadorId.equals( prestador.getID() ) ) - { - prestadorCombo.setSelectedIndex( n ); - } - } - } - ecdsPanel.fill( ecdsEscolhidos ); - } - } - - @Override - public Object save() - { - return new Object[]{ - dataPanel.getDate(), - ( ( IDObject )prestadorCombo.getSelectedItem() ).getID(), - ecdsPanel != null ? ecdsPanel.save() : null }; - } - - private void revalidate() - { - ( ( JPanel ) getContentPane() ).revalidate(); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindowLogic.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindowLogic.java deleted file mode 100644 index 08becee8..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/EnviarAnalisesWindowLogic.java +++ /dev/null @@ -1,83 +0,0 @@ -package siprp.medicina.locais_analise; - -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.util.Date; - -import shst.medicina.prestadores.PrestadoresDataProvider; -import siprp.medicina.locais_realizacao.LocaisRealizacaoConstants; -import siprp.medicina.locais_realizacao.LocaisRealizacaoDataProvider; - -import com.evolute.utils.data.IDObject; -import com.evolute.utils.ui.DialogException; - -class EnviarAnalisesWindowLogic -{ - protected final EnviarAnalisesWindow window; - protected final LocaisAnaliseLogic logic; - protected final PrestadoresDataProvider prestadoresProvider; - protected final LocaisRealizacaoDataProvider locaisRealizacaoProvider; - - public EnviarAnalisesWindowLogic( EnviarAnalisesWindow window ) - throws Exception - { - this.window = window; - logic = LocaisAnaliseLogic.getInstance(); - prestadoresProvider = PrestadoresDataProvider.getProvider(); - locaisRealizacaoProvider = LocaisRealizacaoDataProvider.getProvider(); - initWindow(); - } - - protected void initWindow() - throws Exception - { - window.addWindowListener( new WindowAdapter(){ - public void windowActivated( WindowEvent e ) - { - try - { - IDObject prestadores[] = prestadoresProvider.getPrestadoresActivos(); - IDObject prestadoresCompleto[] = - new IDObject[ prestadores.length + 1 ]; - prestadoresCompleto[ 0 ] = LocaisRealizacaoConstants.PRESTADOR_SIPRP; - for( int n = 0; n < prestadores.length; n++ ) - { - prestadoresCompleto[ n + 1 ] = prestadores[ n ]; - } - window.setPrestadores( prestadoresCompleto ); - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar prestadores", true ); - } - } - } ); - } - - protected void dateChanged( Date data ) - throws Exception - { -System.out.println( "EnviarAnalisesWindowLogic.dateChanged: " + data ); - if( data != null ) - { - Integer idsMarcacoes[] = - locaisRealizacaoProvider.getMarcacoesEcdsIdsByDataAndPrestadorId( data, LocaisRealizacaoConstants.PRESTADOR_ID_SIPRP ); -System.out.println( "idsMarcacoes.length : " +idsMarcacoes.length ); - IDObject grupos[] = logic.getGruposEcdsByMarcacoes( idsMarcacoes ); - window.setEcds( grupos ); - window.fill( logic.getDataPrestadorEGruposByData( data ) ); - } - else - { - window.setEcds( new IDObject[ 0 ] ); - window.fill( null ); - } - } - - protected void save() - throws Exception - { - Object dados[] = ( Object[] ) window.save(); - logic.savePrestadorEGruposData( ( Date ) dados[ 0 ], ( Integer ) dados[ 1 ], ( Integer[] ) dados[ 2 ] ); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseDataProvider.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseDataProvider.java deleted file mode 100644 index 00b7dce9..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseDataProvider.java +++ /dev/null @@ -1,138 +0,0 @@ -package siprp.medicina.locais_analise; - -import java.util.Date; - -import siprp.medicina.locais_realizacao.LocaisRealizacaoConstants; - -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.sql.Assignment; -import com.evolute.utils.sql.Begin; -import com.evolute.utils.sql.Commit; -import com.evolute.utils.sql.Delete; -import com.evolute.utils.sql.Expression; -import com.evolute.utils.sql.Field; -import com.evolute.utils.sql.Insert; -import com.evolute.utils.sql.Select; -import com.evolute.utils.sql.Select2; - -public class LocaisAnaliseDataProvider -{ - private static final Object LOCK = new Object(); - private static LocaisAnaliseDataProvider instance = null; - - private Executer EXECUTER; - - /** Creates a new instance of LocaisRealizacaoDataProvider */ - private LocaisAnaliseDataProvider() - throws Exception - { - DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER ); - EXECUTER = dbm.getSharedExecuter( this ); - } - - public static LocaisAnaliseDataProvider getProvider() - throws Exception - { - synchronized( LOCK ) - { - if( instance == null ) - { - instance = new LocaisAnaliseDataProvider(); - } - } - return instance; - } - - protected IDObject[] getGruposEcdsByMarcacoes( Integer marcacoesIds[] ) - throws Exception - { - if( marcacoesIds == null || marcacoesIds.length == 0 ) - { - return new IDObject[ 0 ]; - } - Select select = - new Select2( - new String[]{ "trabalhadores_ecd", "prt_tipos_elementos_protocolo", - "prt_grupos_protocolo"}, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_ecd.ecd_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_grupos_protocolo.id", "prt_grupos_protocolo.descricao", - "prt_grupos_protocolo.ordem" }, - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).in( marcacoesIds ), - new String[]{ "prt_grupos_protocolo.ordem" }, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - IDObject grupos[] = new IDObject[ array.columnLength() ]; - for( int n = 0; n < grupos.length; n++ ) - { - Integer id = ( Integer ) array.get( n, 0 ); - String descricao = ( String ) array.get( n, 1 ); - grupos[ n ] = new MappableObject( id, descricao ); - } - return grupos; - } - - public void savePrestadorEGruposData( Date data, Integer prestadorId, Integer gruposIds[] ) - throws Exception - { - EXECUTER.executeQuery( Begin.BEGIN ); - Delete delete = - new Delete( "trabalhadores_ecds_analise", - new Field( "data" ).isEqual( data ) ); - EXECUTER.executeQuery( delete ); - if( prestadorId != null && !LocaisRealizacaoConstants.PRESTADOR_ID_SIPRP.equals( prestadorId ) - && gruposIds != null && gruposIds.length > 0 ) - { - Insert insert = - new Insert( "trabalhadores_ecds_analise", - new Assignment[]{ - new Assignment( new Field( "data" ), data ), - new Assignment( new Field( "prestador_id" ), prestadorId ), - new Assignment( new Field( "grupo_ecds_id" ), gruposIds ) - } ); - EXECUTER.executeQuery( insert ); - } - EXECUTER.executeQuery( Commit.COMMIT ); - } - - public Object[] getDataPrestadorEGruposByData( Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "trabalhadores_ecds_analise" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "prestador_id", "grupo_ecds_id" }, - new Field( "data" ).isEqual( data ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - if( array.columnLength() == 0 ) - { - return null; - } - Integer grupos[] = new Integer[ array.columnLength() ]; - for( int n = 0; n < grupos.length; n++ ) - { - grupos[ n ] = ( Integer ) array.get( n, 1 ); - } - return new Object[]{ data, array.get( 0, 0 ), grupos }; - } -} - - \ No newline at end of file diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseLogic.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseLogic.java deleted file mode 100644 index eb4ed982..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/LocaisAnaliseLogic.java +++ /dev/null @@ -1,50 +0,0 @@ -package siprp.medicina.locais_analise; - -import java.util.Date; - -import com.evolute.utils.data.IDObject; - -public final class LocaisAnaliseLogic -{ - private static final Object LOCK = new Object(); - private static LocaisAnaliseLogic instance; - - private final LocaisAnaliseDataProvider provider; - - private LocaisAnaliseLogic() - throws Exception - { - provider = LocaisAnaliseDataProvider.getProvider(); - } - - public static LocaisAnaliseLogic getInstance() - throws Exception - { - synchronized( LOCK ) - { - if( instance == null ) - { - instance = new LocaisAnaliseLogic(); - } - } - return instance; - } - - protected IDObject[] getGruposEcdsByMarcacoes( Integer marcacoesIds[] ) - throws Exception - { - return provider.getGruposEcdsByMarcacoes( marcacoesIds ); - } - - protected void savePrestadorEGruposData( Date data, Integer prestadorId, Integer gruposIds[] ) - throws Exception - { - provider.savePrestadorEGruposData( data, prestadorId, gruposIds ); - } - - protected Object[] getDataPrestadorEGruposByData( Date data ) - throws Exception - { - return provider.getDataPrestadorEGruposByData( data ); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/ReceberAnalisesWindow.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/ReceberAnalisesWindow.java deleted file mode 100644 index c71b0704..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_analise/ReceberAnalisesWindow.java +++ /dev/null @@ -1,6 +0,0 @@ -package siprp.medicina.locais_analise; - -public class ReceberAnalisesWindow -{ - -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/FaxPrinter.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/FaxPrinter.java deleted file mode 100644 index e6ba4b5c..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/FaxPrinter.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * FaxPrinter.java - * - * Created on March 1, 2007, 3:26 PM - * - * To change this template, choose Tools | Template Manager - * and open the template in the editor. - */ - -package siprp.medicina.locais_realizacao; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.JToggleButton; -import javax.swing.SwingUtilities; - -import com.evolute.utils.data.IDObject; -import com.evolute.utils.data.MappableObject; -import com.evolute.utils.ui.CustomJDialog; -import com.evolute.utils.ui.panel.CheckBoxPanel; - -/** - * - * @author fpalma - */ -public class FaxPrinter extends CustomJDialog - implements ActionListener -{ - private JTextField deText; - private JTextField deEmailText; - private JTextField deFaxText; - private JTextField deTelefoneText; - private JTextField assuntoText; - private JTextField localText; - private JToggleButton localAutoButton; - private JTextField perfil1Text; - private CheckBoxPanel perfil1Panel; - private JTextField perfil2Text; - private CheckBoxPanel perfil2Panel; - private JTextField horaText; - - private JButton imprimirButton; - private JButton cancelarButton; - - public static void main( String args[] ) - { - FaxPrinter d = new FaxPrinter(); - d.setVisible( true ); - } - - /** Creates a new instance of FaxPrinter */ - public FaxPrinter() - { - super( null, true ); - setupComponents(); - } - - private void setupComponents() - { - setTitle( "Por favor preencha os detalhes do Fax" ); - setSize( 800, 600 ); - - JLabel deLabel = new JLabel( "De" ); - deText = new JTextField(); - JLabel deEmailLabel = new JLabel( "E-mail" ); - deEmailText = new JTextField(); - JLabel deFaxLabel = new JLabel( "Fax" ); - deFaxText = new JTextField(); - JLabel deTelefoneLabel = new JLabel( "N\u00famero de telefone" ); - deTelefoneText = new JTextField(); - JLabel assuntoLabel = new JLabel( "Assunto" ); - assuntoText = new JTextField(); - localAutoButton = new JToggleButton( "Local Autom\u00e1tico" ); - localText = new JTextField(); - JLabel perfil1Label = new JLabel( "Nome" ); - perfil1Text = new JTextField(); - perfil1Panel = new CheckBoxPanel( new IDObject[]{ new MappableObject( new Integer( 1 ), "teste1" ), - new MappableObject( new Integer( 3 ), "teste3" ) } ); - JLabel perfil2Label = new JLabel( "Nome" ); - perfil2Text = new JTextField(); - perfil2Panel = new CheckBoxPanel( new IDObject[]{ new MappableObject( new Integer( 2 ), "teste2" ) } ); - imprimirButton = new JButton( "Imprimir" ); - imprimirButton.addActionListener( this ); - cancelarButton = new JButton( "Cancelar" ); - cancelarButton.addActionListener( this ); - JPanel buttonPanel = new JPanel(); - JPanel perfil1OuterPanel = new JPanel(); - perfil1OuterPanel.setBorder( BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Perfil 1" ) ); - JPanel perfil2OuterPanel = new JPanel(); - perfil2OuterPanel.setBorder( BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Perfil 2" ) ); - - double cols[] = - new double[]{ TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM, - TableLayout.FILL, }; - double rows[] = - new double[]{ TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, - TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED }; - - TableLayout tableLayout = new TableLayout( cols,rows ); - setLayout( tableLayout ); - - add( deLabel, new TableLayoutConstraints( 0, 0 ) ); - add( deText, new TableLayoutConstraints( 1, 0 ) ); - add( deEmailLabel, new TableLayoutConstraints( 2, 0 ) ); - add( deEmailText, new TableLayoutConstraints( 3, 0 ) ); - add( deFaxLabel, new TableLayoutConstraints( 0, 1 ) ); - add( deFaxText, new TableLayoutConstraints( 1, 1 ) ); - add( deTelefoneLabel, new TableLayoutConstraints( 2, 1 ) ); - add( deTelefoneText, new TableLayoutConstraints( 3, 1 ) ); - add( assuntoLabel, new TableLayoutConstraints( 0, 2 ) ); - add( assuntoText, new TableLayoutConstraints( 1, 2, 3, 2 ) ); - add( localAutoButton, new TableLayoutConstraints( 0, 3 ) ); - add( localText, new TableLayoutConstraints( 1, 3, 3, 3 ) ); - add( perfil1OuterPanel, new TableLayoutConstraints( 0, 4, 1, 4 ) ); - add( perfil2OuterPanel, new TableLayoutConstraints( 2, 4, 3, 4 ) ); - add( buttonPanel, new TableLayoutConstraints( 0, 5, 3, 5 ) ); - - cols = new double[]{ TableLayout.MINIMUM, TableLayout.FILL }; - rows = new double[]{ TableLayout.PREFERRED, TableLayout.FILL }; - - tableLayout = new TableLayout( cols,rows ); - perfil1OuterPanel.setLayout( tableLayout ); - - perfil1OuterPanel.add( perfil1Label, new TableLayoutConstraints( 0, 0 ) ); - perfil1OuterPanel.add( perfil1Text, new TableLayoutConstraints( 1, 0 ) ); - perfil1OuterPanel.add( perfil1Panel, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - - tableLayout = new TableLayout( cols,rows ); - perfil2OuterPanel.setLayout( tableLayout ); - - perfil2OuterPanel.add( perfil2Label, new TableLayoutConstraints( 0, 0 ) ); - perfil2OuterPanel.add( perfil2Text, new TableLayoutConstraints( 1, 0 ) ); - perfil2OuterPanel.add( perfil2Panel, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - - buttonPanel.setLayout( new FlowLayout( FlowLayout.CENTER ) ); - buttonPanel.add( imprimirButton ); - buttonPanel.add( cancelarButton ); - - } - - public void actionPerformed(ActionEvent e) - { - Object source = e.getSource(); - if( source.equals( imprimirButton ) ) - { - print(); - } - else if( source.equals( cancelarButton ) ) - { - close(); - } - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable(){ - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - public void print() - { - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoConstants.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoConstants.java deleted file mode 100644 index 1911b738..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoConstants.java +++ /dev/null @@ -1,11 +0,0 @@ -package siprp.medicina.locais_realizacao; - -import com.evolute.utils.data.IDObject; -import com.evolute.utils.data.MappableObject; - -public class LocaisRealizacaoConstants -{ - public static final Integer PRESTADOR_ID_SIPRP = new Integer( -1 ); - - public static final IDObject PRESTADOR_SIPRP = new MappableObject( PRESTADOR_ID_SIPRP, "SIPRP" ); -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoDataProvider.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoDataProvider.java deleted file mode 100644 index b7a80564..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoDataProvider.java +++ /dev/null @@ -1,530 +0,0 @@ -/* - * LocaisRealizacaoDataProvider.java - * - * Created on February 22, 2007, 10:44 AM - * - * To change this template, choose Tools | Template Manager - * and open the template in the editor. - */ - -package siprp.medicina.locais_realizacao; - -import java.util.Date; - -import shst.MedicinaConstants; - -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.sql.Assignment; -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.Union; -import com.evolute.utils.sql.Update; -import com.evolute.utils.tables.ColumnizedMappable; - -/** - * - * @author fpalma - */ -public class LocaisRealizacaoDataProvider -{ - private static final Object LOCK = new Object(); - private static LocaisRealizacaoDataProvider instance = null; - - private Executer EXECUTER; - - /** Creates a new instance of LocaisRealizacaoDataProvider */ - private LocaisRealizacaoDataProvider() - throws Exception - { - DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER ); - EXECUTER = dbm.getSharedExecuter( this ); - } - - public static LocaisRealizacaoDataProvider getProvider() - throws Exception - { - synchronized( LOCK ) - { - if( instance == null ) - { - instance = new LocaisRealizacaoDataProvider(); - } - } - return instance; - } - - public ColumnizedMappable[] getEmpresasComMarcacoes( Date data ) - throws Exception - { - - - Select selectConsultas = - new Select2( - new String[]{ "trabalhadores_consultas_datas", "trabalhadores_consultas", "trabalhadores", "estabelecimentos" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas_datas.trabalhadores_consultas_id" ).isEqual( new Field( "trabalhadores_consultas.id" ) ), - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ), - new Field( "trabalhadores.estabelecimento_id" ).isEqual( new Field( "estabelecimentos.id" ) ) }, - new String[]{ "estabelecimentos.empresa_id" }, - new Field( "trabalhadores_consultas_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores_consultas_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Select selectEcds = - new Select2( - new String[]{ "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores", "estabelecimentos" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ), - new Field( "trabalhadores.estabelecimento_id" ).isEqual( new Field( "estabelecimentos.id" ) ) }, - new String[]{ "estabelecimentos.empresa_id" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - - Select select = - new Select2( - new String[]{ "empresas" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "DISTINCT empresas.id", "empresas.designacao_social", "empresas.designacao_social_plain" }, - new Field( "empresas.id" ).in( new Union( new Select[]{ selectConsultas, selectEcds }, new int[]{} ) ), - new String[]{ "empresas.designacao_social_plain" }, - null, - null, - 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[] getEstabelecimentosComMarcacoesByEmpresa( Integer empresaID, Date data ) - throws Exception - { - Select selectConsultas = - new Select2( - new String[]{ "trabalhadores_consultas_datas", "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas_datas.trabalhadores_consultas_id" ).isEqual( new Field( "trabalhadores_consultas.id" ) ), - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "trabalhadores.estabelecimento_id" }, - new Field( "trabalhadores_consultas_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores_consultas_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Select selectEcds = - new Select2( - new String[]{ "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "trabalhadores.estabelecimento_id" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - - Select select = - new Select2( - new String[]{ "estabelecimentos" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "DISTINCT estabelecimentos.id", "estabelecimentos.nome", "estabelecimentos.nome_plain" }, - new Field( "estabelecimentos.id" ).in( new Union( new Select[]{ selectConsultas, selectEcds }, new int[]{} ) ).and( - new Field( "estabelecimentos.inactivo" ).isEqual( "n" ) ).and( - new Field( "empresa_id" ).isEqual( empresaID ) ), - new String[]{ "estabelecimentos.nome_plain" }, - null, - null, - 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 int getNumeroConsultasByEstabelecimentoAndDate( Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "trabalhadores_consultas_datas", "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas_datas.trabalhadores_consultas_id" ).isEqual( new Field( "trabalhadores_consultas.id" ) ), - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "COUNT( DISTINCT trabalhadores.id )" }, - new Field( "trabalhadores_consultas_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_consultas_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - return ( ( Number ) array.get( 0, 0 ) ).intValue(); - } - - public Integer[] getPrestadoresConsultaIdByEstabelecimentoAndDate( Integer estabelecimentoId, Date data ) - throws Exception - { - Select selectExterno = - new Select2( - new String[]{ "trabalhadores_consultas_datas", "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas_datas.trabalhadores_consultas_id" ).isEqual( new Field( "trabalhadores_consultas.id" ) ), - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_consultas_datas.prestador_id" }, - new Field( "trabalhadores_consultas_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_consultas_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Virtual2DArray arrayExterno = EXECUTER.executeQuery( selectExterno ); - Integer ids[] = new Integer[ arrayExterno.columnLength() ]; - for( int n = 0; n < arrayExterno.columnLength(); n++ ) - { - ids[ n ] = ( Integer ) arrayExterno.get( n, 0 ); - } - return ids; - } - - public void setPrestadorConsultaIdForEstabelecimentoAndDate( Integer estabelecimentoId, Date data, Integer prestadorId ) - throws Exception - { - Select selectConsultas = - new Select2( - new String[]{ "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_consultas.id" }, - new Field( "trabalhadores_consultas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_consultas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Update updateConsultas = new Update( "trabalhadores_consultas", - new Assignment[]{ - new Assignment( new Field( "prestador_id" ), prestadorId ) - }, - new Field( "id" ).in( selectConsultas ) ); - EXECUTER.executeQuery( updateConsultas ); - - Select selectConsultasDatas = - new Select2( - new String[]{ "trabalhadores_consultas_datas", "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas_datas.trabalhadores_consultas_id" ).isEqual( new Field( "trabalhadores_consultas.id" ) ), - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_consultas_datas.id" }, - new Field( "trabalhadores_consultas_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_consultas_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Update updateConsultasDatas = new Update( "trabalhadores_consultas_datas", - new Assignment[]{ - new Assignment( new Field( "prestador_id" ), prestadorId ) - }, - new Field( "id" ).in( selectConsultasDatas ) ); - EXECUTER.executeQuery( updateConsultasDatas ); - } - - protected IDObject[] getGruposEcdsByEstabelecimentoAndDate( Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "prt_grupos_protocolo", "prt_tipos_elementos_protocolo", "trabalhadores_ecd", - "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "prt_grupos_protocolo.id" ).isEqual( new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ) ), - new Field( "prt_tipos_elementos_protocolo.id" ).isEqual( new Field( "trabalhadores_ecd.ecd_id" ) ), - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).isEqual( new Field( "trabalhadores_ecds_datas.id" ) ), - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT prt_grupos_protocolo.id", "prt_grupos_protocolo.descricao", "prt_grupos_protocolo.ordem", - "prt_grupos_protocolo.descricao_plain" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - new String[]{ "prt_grupos_protocolo.ordem", "prt_grupos_protocolo.descricao_plain" }, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - IDObject grupos[] = new IDObject[ array.columnLength() ]; - for( int n = 0; n < grupos.length; n++ ) - { - Integer id = ( Integer ) array.get( n, 0 ); - String descricao = ( String ) array.get( n, 1 ); - grupos[ n ] = new MappableObject( id, descricao ); - } - return grupos; - } - - public Integer[] getPrestadoresByGrupoEcdEstabelecimentoAndDate( Integer grupoId, Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "prt_tipos_elementos_protocolo", "trabalhadores_ecd", - "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "prt_tipos_elementos_protocolo.id" ).isEqual( new Field( "trabalhadores_ecd.ecd_id" ) ), - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).isEqual( new Field( "trabalhadores_ecds_datas.id" ) ), - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_ecds_datas.prestador_id" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ).isEqual( grupoId ) ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - Integer prestadores[] = new Integer[ array.columnLength() ]; - for( int n = 0; n < prestadores.length; n++ ) - { - prestadores[ n ] = ( Integer ) array.get( n, 0 ); - } - return prestadores; - } - - public int getNumeroMarcacoesByGrupoEcdEstabelecimentoAndDate( Integer grupoId, Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "prt_tipos_elementos_protocolo", "trabalhadores_ecd", - "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "prt_tipos_elementos_protocolo.id" ).isEqual( new Field( "trabalhadores_ecd.ecd_id" ) ), - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).isEqual( new Field( "trabalhadores_ecds_datas.id" ) ), - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "COUNT( DISTINCT trabalhadores.id)" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "prt_tipos_elementos_protocolo.grupo_protocolo_id" ).isEqual( grupoId ) ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - return ( ( Number ) array.get( 0, 0 ) ).intValue(); - } - - public void setPrestadorIdForGruposEcdsEstabelecimentoAndDate( Integer estabelecimentoId, Date data, Integer prestadorId ) - throws Exception - { - Select selectConsultas = - new Select2( - new String[]{ "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_consultas.id" }, - new Field( "trabalhadores_consultas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_consultas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Update updateConsultas = new Update( "trabalhadores_consultas", - new Assignment[]{ - new Assignment( new Field( "prestador_id" ), prestadorId ) - }, - new Field( "id" ).in( selectConsultas ) ); - EXECUTER.executeQuery( updateConsultas ); - - Select selectConsultasDatas = - new Select2( - new String[]{ "trabalhadores_consultas_datas", "trabalhadores_consultas", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_consultas_datas.trabalhadores_consultas_id" ).isEqual( new Field( "trabalhadores_consultas.id" ) ), - new Field( "trabalhadores_consultas.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_consultas_datas.id" }, - new Field( "trabalhadores_consultas_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_consultas_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Update updateConsultasDatas = new Update( "trabalhadores_consultas_datas", - new Assignment[]{ - new Assignment( new Field( "prestador_id" ), prestadorId ) - }, - new Field( "id" ).in( selectConsultasDatas ) ); - EXECUTER.executeQuery( updateConsultasDatas ); - } - - protected IDObject[] getExamesOficiaisByEstabelecimentoAndDate( Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "ecd_oficial", "trabalhadores_ecd", - "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "ecd_oficial.id" ).isEqual( new Field( "trabalhadores_ecd.ecd_oficial_id" ) ), - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).isEqual( new Field( "trabalhadores_ecds_datas.id" ) ), - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT ecd_oficial.id", "ecd_oficial.descricao", "ecd_oficial.ordem", - "ecd_oficial.descricao_plain" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - new String[]{ "ecd_oficial.ordem", "ecd_oficial.descricao_plain" }, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - IDObject ecds[] = new IDObject[ array.columnLength() ]; - for( int n = 0; n < ecds.length; n++ ) - { - Integer id = ( Integer ) array.get( n, 0 ); - String descricao = ( String ) array.get( n, 1 ); - ecds[ n ] = new MappableObject( id, descricao ); - } - return ecds; - } - - public Integer[] getPrestadoresByEcdOficialEstabelecimentoAndDate( Integer ecdOficialId, Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "trabalhadores_ecd", "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).isEqual( new Field( "trabalhadores_ecds_datas.id" ) ), - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "DISTINCT trabalhadores_ecds_datas.prestador_id" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_ecd.ecd_oficial_id" ).isEqual( ecdOficialId ) ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - Integer prestadores[] = new Integer[ array.columnLength() ]; - for( int n = 0; n < prestadores.length; n++ ) - { - prestadores[ n ] = ( Integer ) array.get( n, 0 ); - } - return prestadores; - } - - public int getNumeroMarcacaoesByEcdOficialEstabelecimentoAndDate( Integer ecdOficialId, Integer estabelecimentoId, Date data ) - throws Exception - { - Select select = - new Select2( - new String[]{ "trabalhadores_ecd", "trabalhadores_ecds_datas", "trabalhadores_ecds", "trabalhadores" }, - new Integer[]{ Select2.JOIN_INNER, Select2.JOIN_INNER, Select2.JOIN_INNER }, - new Expression[]{ - new Field( "trabalhadores_ecd.trabalhadores_ecds_datas_id" ).isEqual( new Field( "trabalhadores_ecds_datas.id" ) ), - new Field( "trabalhadores_ecds_datas.trabalhadores_ecds_id" ).isEqual( new Field( "trabalhadores_ecds.id" ) ), - new Field( "trabalhadores_ecds.trabalhador_id" ).isEqual( new Field( "trabalhadores.id" ) ) }, - new String[]{ "COUNT( DISTINCT trabalhadores.id)" }, - new Field( "trabalhadores_ecds_datas.data" ).isEqual( data ).and( - new Field( "trabalhadores.estabelecimento_id" ).isEqual( estabelecimentoId ) ).and( - new Field( "trabalhadores_ecd.ecd_oficial_id" ).isEqual( ecdOficialId ) ).and( - new Field( "trabalhadores_ecds_datas.estado" ).isEqual( new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ) ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - return ( ( Number ) array.get( 0, 0 ) ).intValue(); - } - - public Integer []getMarcacoesEcdsIdsByDataAndPrestadorId( Date data, Integer prestadorId ) - throws Exception - { - if( LocaisRealizacaoConstants.PRESTADOR_ID_SIPRP.equals( prestadorId ) ) - { - prestadorId = null; - } - Select select = - new Select2( - new String[]{ "trabalhadores_ecds_datas" }, - new Integer[]{}, - new Expression[]{}, - new String[]{ "id" }, - new Field( "data" ).isEqual( data ).and( - new Field("prestador_id" ).isEqual( prestadorId ) ).and( - new Field( "estado" ).in( - new Integer[]{ - new Integer( MedicinaConstants.ESTADO_POR_REALIZAR ), - new Integer( MedicinaConstants.ESTADO_PARCIALMENTE_REALIZADO ), - new Integer( MedicinaConstants.ESTADO_REALIZADO ) } ) ), - null, - null, - null, - null ); - Virtual2DArray array = EXECUTER.executeQuery( select ); - Integer ids[] = new Integer[ array.columnLength() ]; - for( int n = 0; n < array.columnLength(); n++ ) - { - ids[ n ] = ( Integer ) array.get( n, 0 ); - } - return ids; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoWindow.java b/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoWindow.java deleted file mode 100644 index cbf427bb..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/LocaisRealizacaoWindow.java +++ /dev/null @@ -1,730 +0,0 @@ -/* - * LocaisRealizacaoWindow.java - * - * Created on February 22, 2007, 10:19 AM - * - * To change this template, choose Tools | Template Manager - * and open the template in the editor. - */ - -package siprp.medicina.locais_realizacao; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.Color; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.util.Arrays; -import java.util.Date; -import java.util.Vector; - -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; -import javax.swing.WindowConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import shst.medicina.prestadores.PrestadoresDataProvider; -import siprp.ui.SIPRPFrame; - -import com.evolute.utils.data.IDObject; -import com.evolute.utils.tables.BaseTable; -import com.evolute.utils.tables.ColumnizedMappable; -import com.evolute.utils.tables.VectorTableModel; -import com.evolute.utils.tracker.TrackableWindow; -import com.evolute.utils.ui.DialogException; -import com.evolute.utils.ui.calendar.JCalendarPanel; - -/** - * - * @author fpalma - */ -public class LocaisRealizacaoWindow extends SIPRPFrame - implements ActionListener, TrackableWindow, ListSelectionListener -{ - /** - * - */ - private static final long serialVersionUID = 1L; - - protected JCalendarPanel dataPanel; - protected JButton carregarButton; -// protected JButton recarregarPrestadoresButton; - protected VectorTableModel empresasModel; - protected BaseTable empresasTable; - protected VectorTableModel estabelecimentosModel; - protected BaseTable estabelecimentosTable; - protected JLabel numeroConsultasLabel; - protected JComboBox prestadoresConsultasCombo; - protected JButton enviarConsultasButton; - protected JButton faxConsultasButton; - protected JButton enviarECDsButton; - protected JScrollPane listaEcdsScroll; - -// protected JLabel numeroECDsLabel; - protected Integer idsGruposEcds[]; - protected JComboBox prestadoresECDsCombos[]; - protected Integer idsEcdsOficiais[]; - protected JComboBox prestadoresECDsOficiaisCombos[]; -// protected JButton faxECDsButton; - - protected LocaisRealizacaoDataProvider provider; - protected PrestadoresDataProvider prestadoresProvider; - - /** - * Creates a new instance of LocaisRealizacaoWindow - */ - public LocaisRealizacaoWindow() - throws Exception - { - provider = LocaisRealizacaoDataProvider.getProvider(); - prestadoresProvider = PrestadoresDataProvider.getProvider(); - setupComponents(); - } - - private void setupComponents() - { - setTitle( "Locais de Realiza\u00e7\u00e3o" ); - setSize( 1000, 700 ); - JLabel dataLabel = new JLabel( "Data" ); - dataPanel = new JCalendarPanel( this ); - - carregarButton = new JButton( "Carregar" ); - carregarButton.addActionListener( this ); -// recarregarPrestadoresButton = new JButton( "Recarregar Prestadores" ); -// recarregarPrestadoresButton.addActionListener( this ); - empresasModel = new VectorTableModel( new String[]{ "empresa" } ); - empresasTable = new BaseTable( empresasModel ); - empresasTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); - empresasTable.getSelectionModel().addListSelectionListener( this ); - JScrollPane empresasScp = new JScrollPane( empresasTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - estabelecimentosModel = new VectorTableModel( new String[]{ "estabelecimento" } ); - estabelecimentosTable = new BaseTable( estabelecimentosModel ); - estabelecimentosTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); - estabelecimentosTable.getSelectionModel().addListSelectionListener( this ); - JScrollPane estabelecimentosScp = new JScrollPane( estabelecimentosTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); - JPanel consultasPanel = new JPanel(); - consultasPanel.setBorder( BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Consultas" ) ); - JLabel consultasLabel = new JLabel( "N\u00ba de Consultas: " ); - numeroConsultasLabel = new JLabel( " " ); - numeroConsultasLabel.setForeground( Color.green.darker() ); - prestadoresConsultasCombo = new JComboBox(); - enviarConsultasButton = new JButton( "Atribuir" ); - enviarConsultasButton.addActionListener( this ); - faxConsultasButton = new JButton( "Fax" ); - faxConsultasButton.addActionListener( this ); - JPanel ecdsPanel = new JPanel(); - ecdsPanel.setBorder( BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "ECDs" ) ); -// JLabel ecdsLabel = new JLabel( "Quantidade " ); -// numeroECDsLabel = new JLabel( " " ); -// numeroECDsLabel.setForeground( Color.green.darker() ); -// prestadoresECDsCombo = new JComboBox(); - listaEcdsScroll = new JScrollPane(); - listaEcdsScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED ); - listaEcdsScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); - enviarECDsButton = new JButton( "Atribuir" ); - enviarECDsButton.addActionListener( this ); -// faxECDsButton = new JButton( "Fax" ); -// faxECDsButton.addActionListener( this ); - dataPanel.addChangeListener( new ChangeListener(){ - public void stateChanged(ChangeEvent e) - { - empresasTable.clearSelection(); - Vector values = empresasModel.getValues(); - values.clear(); - empresasModel.setValues( values ); - } - } ); - - TableLayout layout = - new TableLayout( - new double[]{ TableLayout.FILL, TableLayout.FILL, TableLayout.FILL, TableLayout.FILL }, - new double[]{ TableLayout.MINIMUM, TableLayout.FILL, TableLayout.FILL } ); - layout.setHGap( 5 ); - layout.setVGap( 5 ); - -// getContentPane().setLayout( new BorderLayout( 5, 5 ) ); - getContentPane().setLayout( layout ); - JPanel upperPanel = new JPanel(); - getContentPane().add( upperPanel, new TableLayoutConstraints( 0, 0, 3, 0 ) ); - getContentPane().add( empresasScp, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - getContentPane().add( estabelecimentosScp, new TableLayoutConstraints( 2, 1, 3, 1 ) ); -// JPanel detalhesPanel = new JPanel(); -// getContentPane().add( detalhesPanel, new TableLayoutConstraints( 0, 2, 1, 2 ) ); - getContentPane().add( consultasPanel, new TableLayoutConstraints( 0, 2 ) ); - getContentPane().add( ecdsPanel, new TableLayoutConstraints( 1, 2, 3, 2 ) ); -// getContentPane().add( upperPanel, BorderLayout.NORTH ); -// JPanel centerPanel = new JPanel(); -// getContentPane().add( centerPanel, BorderLayout.CENTER ); - - upperPanel.setLayout( new FlowLayout( FlowLayout.CENTER ) ); - upperPanel.add( dataLabel ); - upperPanel.add( dataPanel ); - upperPanel.add( carregarButton ); -// upperPanel.add( recarregarPrestadoresButton ); - -// centerPanel.setLayout( new GridLayout( 1, 3 ) ); -// centerPanel.add( empresasScp ); -// centerPanel.add( estabelecimentosScp ); -// JPanel detalhesPanel = new JPanel(); -// centerPanel.add( detalhesPanel ); - - double cols[] = - new double[]{ TableLayout.MINIMUM, TableLayout.FILL }; - double rows[] = - new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.MINIMUM }; - - TableLayout tableLayout = new TableLayout( cols,rows ); - consultasPanel.setLayout( tableLayout ); - - consultasPanel.add( consultasLabel, new TableLayoutConstraints( 0, 0 ) ); - consultasPanel.add( numeroConsultasLabel, new TableLayoutConstraints( 1, 0 ) ); - consultasPanel.add( prestadoresConsultasCombo, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - consultasPanel.add( enviarConsultasButton, new TableLayoutConstraints( 0, 2, 1, 2 ) ); -// consultasPanel.add( faxConsultasButton, new TableLayoutConstraints( 0, 3, 1, 3 ) ); - - rows = new double[]{ TableLayout.FILL, TableLayout.MINIMUM }; - - tableLayout = new TableLayout( cols,rows ); - ecdsPanel.setLayout( tableLayout ); -// -// ecdsPanel.add( ecdsLabel, new TableLayoutConstraints( 0, 0 ) ); -// ecdsPanel.add( numeroECDsLabel, new TableLayoutConstraints( 1, 0 ) ); -// ecdsPanel.add( prestadoresECDsCombo, new TableLayoutConstraints( 0, 1, 1, 1 ) ); - ecdsPanel.add( listaEcdsScroll, new TableLayoutConstraints( 0, 0, 1, 0 ) ); - ecdsPanel.add( enviarECDsButton, new TableLayoutConstraints( 0, 1, 1, 1 ) ); -// ecdsPanel.add( faxECDsButton, new TableLayoutConstraints( 0, 3, 1, 3 ) ); - -// cols = new double[]{ TableLayout.FILL }; -// rows = new double[]{ TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.FILL }; -// -// tableLayout = new TableLayout( cols,rows ); -// detalhesPanel.setLayout( tableLayout ); -// -// detalhesPanel.add( consultasPanel, new TableLayoutConstraints( 0, 0 ) ); -// detalhesPanel.add( ecdsPanel, new TableLayoutConstraints( 0, 1 ) ); - - setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE ); - addWindowListener( new WindowAdapter(){ - public void windowClosing( WindowEvent e ) - { - close(); - } - - public void windowOpened( WindowEvent e ) - { -// setExtendedState( getExtendedState() | MAXIMIZED_BOTH ); - } - - } ); - dataPanel.setDate( new Date() ); - recarregarPrestadores(); - carregar(); - } - - public void refresh() - { - } - - public void open() - { - setVisible( true ); - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable() { - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - public boolean closeIfPossible() - { - close(); - return true; - } - - public void actionPerformed(ActionEvent e) - { - Object source = e.getSource(); - if( source.equals( carregarButton ) ) - { - carregar(); - } -//// else if( source.equals( recarregarPrestadoresButton ) ) -// { -// recarregarPrestadores(); -// } - else if( source.equals( enviarConsultasButton ) ) - { - enviarConsultas(); - } - else if( source.equals( faxConsultasButton ) ) - { - faxConsultas(); - } - else if( source.equals( enviarECDsButton ) ) - { - enviarECDs(); - } -// else if( source.equals( faxECDsButton ) ) -// { -// faxECDs(); -// } - - } - - public void valueChanged(ListSelectionEvent e) - { - Object source = e.getSource(); - if( e.getValueIsAdjusting() ) - { - return; - } - if( source.equals( empresasTable.getSelectionModel() ) ) - { - mudarEmpresa(); - } - else if( source.equals( estabelecimentosTable.getSelectionModel() ) ) - { - mudarEstabelecimento(); - } - } - - protected void carregar() - { - empresasTable.clearSelection(); - Date data = dataPanel.getDate(); - if( data == null ) - { - empresasModel.clearAll(); - return; - } - try - { - ColumnizedMappable empresas[] = provider.getEmpresasComMarcacoes( data ); - Vector values = empresasModel.getValues(); - values.clear(); - values.addAll( Arrays.asList( empresas ) ); - empresasModel.setValues( values ); - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar empresas", true ); - } - } - - protected void mudarEmpresa() - { - estabelecimentosTable.clearSelection(); - Date data = dataPanel.getDate(); - int selected = empresasTable.getSelectedRow(); - if( data == null || selected == -1 ) - { - estabelecimentosModel.clearAll(); - return; - } - Integer empresaID = ( ( ColumnizedMappable ) empresasModel.getRowAt( selected ) ).getID(); - try - { - ColumnizedMappable estabelecimentos[] = - provider.getEstabelecimentosComMarcacoesByEmpresa( empresaID, data ); - Vector values = estabelecimentosModel.getValues(); - values.clear(); - values.addAll( Arrays.asList( estabelecimentos ) ); - estabelecimentosModel.setValues( values ); - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar estabelecimentos", true ); - } - } - - protected void mudarEstabelecimento() - { - Date data = dataPanel.getDate(); - int selectedEstabelecimento = estabelecimentosTable.getSelectedRow(); - numeroConsultasLabel.setText( " " ); -// numeroECDsLabel.setText( " " ); - enviarConsultasButton.setEnabled( false ); - enviarECDsButton.setEnabled( false ); - if( data == null || selectedEstabelecimento == -1 ) - { - return; - } - Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID(); - try - { - int countConsultas = - provider.getNumeroConsultasByEstabelecimentoAndDate( estabelecimentoID, data ); -// int countECDs = -// provider.getNumeroMarcacoesByEstabelecimentoAndTipo( estabelecimentoID, -// Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data ); - if( countConsultas > 0 ) - { - numeroConsultasLabel.setText( "" + countConsultas ); - enviarConsultasButton.setEnabled( true ); - Integer[] escolhidos = - provider.getPrestadoresConsultaIdByEstabelecimentoAndDate( estabelecimentoID, data ); - if( escolhidos.length == 1 ) - { - numeroConsultasLabel.setForeground( Color.green.darker() ); - } - else - { - numeroConsultasLabel.setForeground( Color.red.darker() ); - } - int e; - for( e = 0; e < escolhidos.length; e++ ) - { - if( escolhidos[ e ] != null ) - { - break; - } - } - if( e == escolhidos.length || escolhidos[ e ] == null ) - { - prestadoresConsultasCombo.setSelectedIndex( 0 ); - } - else - { - for( int p = 0; p < prestadoresConsultasCombo.getItemCount(); p++ ) - { - IDObject prestador = ( IDObject ) prestadoresConsultasCombo.getItemAt( p ); - if( prestador.getID().equals( escolhidos[ e ] ) ) - { - prestadoresConsultasCombo.setSelectedIndex( p ); - } - } - } - enviarConsultasButton.setEnabled( true ); - } - - IDObject prestadoresECDs[] = prestadoresProvider.getPrestadoresECDsActivos(); - - IDObject gruposEcds[] = provider.getGruposEcdsByEstabelecimentoAndDate( estabelecimentoID, data ); - idsGruposEcds = new Integer[ gruposEcds.length ]; - prestadoresECDsCombos = new JComboBox[ gruposEcds.length ]; - JPanel gruposEcdsPanel = new JPanel(); - double rows[] = new double[ gruposEcds.length + 1 ]; - for( int n = 0; n < rows.length - 1; n++ ) - { - rows[ n ] = TableLayoutConstraints.MINIMUM; - } - rows[ rows.length - 1 ] = TableLayoutConstraints.FILL; - TableLayout layout = - new TableLayout( - new double[]{ TableLayoutConstraints.FILL, TableLayoutConstraints.MINIMUM, - TableLayoutConstraints.FILL }, - rows ); - gruposEcdsPanel.setLayout( layout ); - gruposEcdsPanel.setBorder( - BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), - "Protocolo" ) ); - for( int n = 0; n < gruposEcds.length; n++ ) - { - JLabel ecdLabel = new JLabel( "" + gruposEcds[ n ].toString() ); - int numero = - provider.getNumeroMarcacoesByGrupoEcdEstabelecimentoAndDate( - gruposEcds[ n ].getID(), estabelecimentoID, data ); - Integer escolhidos[] = - provider.getPrestadoresByGrupoEcdEstabelecimentoAndDate( - gruposEcds[ n ].getID(), estabelecimentoID, data ); - JLabel numeroLabel = new JLabel( "" + numero, JLabel.RIGHT ); - if( escolhidos.length > 1 ) - { - numeroLabel.setForeground( Color.red.darker() ); - } - else - { - numeroLabel.setForeground( Color.green.darker() ); - } - prestadoresECDsCombos[ n ] = new JComboBox(); - prestadoresECDsCombos[ n ].addItem( LocaisRealizacaoConstants.PRESTADOR_SIPRP ); - for( int p = 0; p < prestadoresECDs.length; p++ ) - { - prestadoresECDsCombos[ n ].addItem( prestadoresECDs[ p ] ); - } - int e; - for( e = 0; e < escolhidos.length; e++ ) - { - if( escolhidos[ e ] != null ) - { - break; - } - } - if( e == escolhidos.length || escolhidos[ e ] == null ) - { - prestadoresECDsCombos[ n ].setSelectedIndex( 0 ); - } - else - { - for( int p = 0; p < prestadoresECDsCombos[ n ].getItemCount(); p++ ) - { - IDObject prestador = ( IDObject ) prestadoresECDsCombos[ n ].getItemAt( p ); - if( prestador.getID().equals( escolhidos[ e ] ) ) - { - prestadoresECDsCombos[ n ].setSelectedIndex( p ); - } - } - } - - gruposEcdsPanel.add( ecdLabel, new TableLayoutConstraints( 0, n ) ); - gruposEcdsPanel.add( numeroLabel, new TableLayoutConstraints( 1, n ) ); - gruposEcdsPanel.add( prestadoresECDsCombos[ n ], new TableLayoutConstraints( 2, n ) ); - } - - - IDObject ecdsOficiais[] = provider.getExamesOficiaisByEstabelecimentoAndDate( estabelecimentoID, data ); - idsEcdsOficiais = new Integer[ ecdsOficiais.length ]; - prestadoresECDsOficiaisCombos = new JComboBox[ ecdsOficiais.length ]; - JPanel ecdsOficiaisPanel = new JPanel(); - rows = new double[ ecdsOficiais.length + 1 ]; - for( int n = 0; n < rows.length - 1; n++ ) - { - rows[ n ] = TableLayoutConstraints.MINIMUM; - } - rows[ rows.length - 1 ] = TableLayoutConstraints.FILL; - layout = new TableLayout( - new double[]{ TableLayoutConstraints.FILL, TableLayoutConstraints.MINIMUM, - TableLayoutConstraints.FILL }, - rows ); - ecdsOficiaisPanel.setLayout( layout ); - ecdsOficiaisPanel.setBorder( - BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), - "Extra protocolo" ) ); - for( int n = 0; n < ecdsOficiais.length; n++ ) - { - JLabel ecdLabel = new JLabel( "" + ecdsOficiais[ n ].toString() ); - int numero = - provider.getNumeroMarcacaoesByEcdOficialEstabelecimentoAndDate( - ecdsOficiais[ n ].getID(), estabelecimentoID, data ); - Integer escolhidos[] = - provider.getPrestadoresByEcdOficialEstabelecimentoAndDate( - ecdsOficiais[ n ].getID(), estabelecimentoID, data ); - JLabel numeroLabel = new JLabel( "" + numero, JLabel.RIGHT ); - if( escolhidos.length > 1 ) - { - numeroLabel.setForeground( Color.red.darker() ); - } - else - { - numeroLabel.setForeground( Color.green.darker() ); - } - prestadoresECDsOficiaisCombos[ n ] = new JComboBox(); - prestadoresECDsOficiaisCombos[ n ].addItem( LocaisRealizacaoConstants.PRESTADOR_SIPRP ); - for( int p = 0; p < prestadoresECDs.length; p++ ) - { - prestadoresECDsOficiaisCombos[ n ].addItem( prestadoresECDs[ p ] ); - } - int e; - for( e = 0; e < escolhidos.length; e++ ) - { - if( escolhidos[ e ] != null ) - { - break; - } - } - if( e == escolhidos.length || escolhidos[ e ] == null ) - { - prestadoresECDsOficiaisCombos[ n ].setSelectedIndex( 0 ); - } - else - { - for( int p = 0; p < prestadoresECDsOficiaisCombos[ n ].getItemCount(); p++ ) - { - IDObject prestador = ( IDObject ) prestadoresECDsOficiaisCombos[ n ].getItemAt( p ); - if( prestador.getID().equals( escolhidos[ e ] ) ) - { - prestadoresECDsOficiaisCombos[ n ].setSelectedIndex( p ); - } - } - } - - ecdsOficiaisPanel.add( ecdLabel, new TableLayoutConstraints( 0, n ) ); - ecdsOficiaisPanel.add( numeroLabel, new TableLayoutConstraints( 1, n ) ); - ecdsOficiaisPanel.add( prestadoresECDsOficiaisCombos[ n ], new TableLayoutConstraints( 2, n ) ); - } - - JPanel ecdsPanel = new JPanel(); - TableLayout ecdsLayout = - new TableLayout( new double[]{ TableLayoutConstraints.FILL }, - new double[]{ TableLayoutConstraints.MINIMUM, TableLayoutConstraints.MINIMUM, - TableLayoutConstraints.FILL } ); - ecdsPanel.setLayout( ecdsLayout ); - ecdsPanel.add( gruposEcdsPanel, new TableLayoutConstraints( 0, 0 ) ); - ecdsPanel.add( ecdsOficiaisPanel, new TableLayoutConstraints( 0, 1 ) ); - listaEcdsScroll.setViewportView( ecdsPanel ); - - enviarECDsButton.setEnabled( true ); -// if( countECDs > 0 ) -// { -// numeroECDsLabel.setText( "" + countECDs ); -// enviarECDsButton.setEnabled( true ); -// Integer[] escolhidos = -// provider.getPrestadoresIDByEstabelecimentoAndTipo( estabelecimentoID, -// Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data ); -// if( escolhidos.length == 1 ) -// { -// numeroECDsLabel.setForeground( Color.green.darker() ); -// } -// else -// { -// numeroECDsLabel.setForeground( Color.red.darker() ); -// } -// int e; -// for( e = 0; e < escolhidos.length; e++ ) -// { -// if( escolhidos[ e ] != null ) -// { -// break; -// } -// } -// if( e == escolhidos.length || escolhidos[ e ] == null ) -// { -// prestadoresECDsCombo.setSelectedIndex( 0 ); -// } -// else -// { -// for( int p = 0; p < prestadoresECDsCombo.getItemCount(); p++ ) -// { -// IDObject prestador = ( IDObject ) prestadoresECDsCombo.getItemAt( p ); -// if( prestador.getID().equals( escolhidos[ e ] ) ) -// { -// prestadoresECDsCombo.setSelectedIndex( p ); -// } -// } -// } -// } - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar detalhes", true ); - } - } - - protected void recarregarPrestadores() - { - try - { - IDObject prestadoresConsultas[] = prestadoresProvider.getPrestadoresConsultasActivos(); - IDObject prestadoresECDs[] = prestadoresProvider.getPrestadoresECDsActivos(); - prestadoresConsultasCombo.removeAllItems(); - prestadoresConsultasCombo.addItem( LocaisRealizacaoConstants.PRESTADOR_SIPRP ); - for( int n = 0; n < prestadoresConsultas.length; n++ ) - { - prestadoresConsultasCombo.addItem( prestadoresConsultas[ n ] ); - } -// prestadoresECDsCombo.removeAllItems(); -// prestadoresECDsCombo.addItem( PRESTADOR_SIPRP ); -// for( int n = 0; n < prestadoresECDs.length; n++ ) -// { -// prestadoresECDsCombo.addItem( prestadoresECDs[ n ] ); -// } - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a carregar prestadores", true ); - } - } - - protected void enviarECDs() - { - Date data = dataPanel.getDate(); - int selectedEstabelecimento = estabelecimentosTable.getSelectedRow(); - if( data == null || selectedEstabelecimento == -1 ) - { - return; - } - Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID(); - try - { -// Integer prestadorID = ( ( IDObject ) prestadoresECDsCombo.getSelectedItem() ).getID(); -// if( PRESTADOR_ID_SIPRP.equals( prestadorID ) ) -// { -// prestadorID = null; -// } -// provider.setPrestadorIDForEstabelecimentoAndTipo( estabelecimentoID, -// Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data, prestadorID ); - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a atribuir", true ); - } - } - -// protected void faxECDs() -// { -// Date data = dataPanel.getDate(); -// int selectedEstabelecimento = estabelecimentosTable.getSelectedRow(); -// if( data == null || selectedEstabelecimento == -1 ) -// { -// return; -// } -// Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID(); -// try -// { -// Integer prestadorID = ( ( IDObject ) prestadoresECDsCombo.getSelectedItem() ).getID(); -// if( PRESTADOR_ID_SIPRP.equals( prestadorID ) ) -// { -// prestadorID = null; -// } -// provider.setPrestadorIDForEstabelecimentoAndTipo( estabelecimentoID, -// Marcacao.TIPO_MARCACAO_TRABALHADOR_EXAMES, data, prestadorID ); -// } -// catch( Exception ex ) -// { -// DialogException.showExceptionMessage( ex, "Erro a atribuir", true ); -// } -// } - - protected void enviarConsultas() - { - Date data = dataPanel.getDate(); - int selectedEstabelecimento = estabelecimentosTable.getSelectedRow(); - if( data == null || selectedEstabelecimento == -1 ) - { - return; - } - Integer estabelecimentoID = ( ( ColumnizedMappable ) estabelecimentosModel.getRowAt( selectedEstabelecimento ) ).getID(); - try - { - Integer prestadorID = ( ( IDObject ) prestadoresConsultasCombo.getSelectedItem() ).getID(); - if( LocaisRealizacaoConstants.PRESTADOR_ID_SIPRP.equals( prestadorID ) ) - { - prestadorID = null; - } - provider.setPrestadorConsultaIdForEstabelecimentoAndDate( estabelecimentoID, data, prestadorID ); - } - catch( Exception ex ) - { - DialogException.showExceptionMessage( ex, "Erro a atribuir", true ); - } - } - - protected void faxConsultas() - { - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds.xsl b/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds.xsl deleted file mode 100644 index 6b5e07a7..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds.xsl +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - - - - FAX - - Nº de Páginas (incluíndo esta) - / - Number of pages (including this one): - - - - - - - - - - - - - - Data - / - Date: - - - - - - - - - - - - Para - / - To: - - - - - - - - - - - - Empresa - / - Company: - - - - - - - - - - - - Nº Fax - / - Fax number: - - - - - - - - - - - - De - / - From: - - - - - - - - - E-mail: - - - - - - - - - - - Nº Fax - / - Fax number: - - - - - - - - - - Nº Tel. - / - Phone number: - - - - - - - - - - - - - - - - - - - - Assunto - / - Subject: - - - - - - - - - - - - - - - - - - - Cliente: - - - - - - - - Local: - - - - - - - - - - Data: - - - - - - - - Hora: - - - - - - - - - - Exmos. Senhores, - - Informo que o - s - seguinte - s - colaborador - es - irão - irá - comparecer nas vossas instalações para colheita: - - - - - - - - - NOME DO FUNCIONÁRIO - - - DATA_NASCIMENTO - - - PERFIL - - - - - - - - - - - - - - - - - - - - - - - - - - - PERFIL - - - : - - , - - - - - - - - - - AGRADEÇO QUE ESTA LISTAGEM NOS SEJA REENVIADA COM INDICAÇÃO DAS - EVENTUAIS FALTAS OCORRIDAS - - - - - Sem outro assunto de momento, aproveitamos para apresentar os nossos melhores cumprimentos, - - - - - - - - - - diff --git a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds_teste.xml b/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds_teste.xml deleted file mode 100644 index 8e0366c2..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/locais_realizacao/fax_ecds_teste.xml +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - 24-01-2007 - Pedro Manuel Silva Bento - Laboratorio ao lado da mercearia - 21 351 45 67 - Paula Dias - pdias@siprp.pt - (+351) 21 789 88 32 - (+351) 21 789 88 32 - Marcação de Colheitas para Análise - Evolute - Laboratorio ao lado da mercearia - 28-01-2007 - 08H00 - 1 - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - Frederico Alexandre de Matos Monge Palma - 02-10-1976 - 1 - - - Pedro da Silva Antonio - 02-10-1973 - 2 - - - Joao Pedro Silva - 02-10-1976 - 1 - - - - GENÉRICO - Hemograma - Vel. Sedimentação - Glicemia em Jejum - Creatinina - Colesterol Total - Colesterol HDL - Triglicéridos - Transaminases - Gama GT - Urina II - - - MANIPULADORES - Hemograma - Vel. Sedimentação - Glicemia em Jejum - Creatinina - Colesterol Total - Colesterol HDL - Triglicéridos - Transaminases - Gama GT - Urina II - Quistos - - diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/ColorChooserDialog.java b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/ColorChooserDialog.java deleted file mode 100644 index cc03d174..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/ColorChooserDialog.java +++ /dev/null @@ -1,103 +0,0 @@ -package siprp.medicina.processo.mail; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; -import javax.swing.JColorChooser; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import javax.swing.colorchooser.AbstractColorChooserPanel; - -import siprp.ui.SIPRPFrame; - -import com.evolute.utils.ui.CustomJDialog; - -public class ColorChooserDialog extends CustomJDialog - implements ActionListener -{ - /** - * - */ - private static final long serialVersionUID = 1L; - - protected JColorChooser colorChooser; - protected JButton okButton; - protected JButton cancelButton; - - protected Color initialColor; - protected Color selectedColor; - - public ColorChooserDialog( SIPRPFrame owner, Color color ) - { - super( owner, true ); - initialColor = color; - setupComponents(); - if( owner != null ) - { - centerSuper(); - } - else - { - center(); - } - } - - private void setupComponents() - { - setTitle( "Escolha a cor" ); - colorChooser = new JColorChooser( initialColor ); - - colorChooser.setChooserPanels( new AbstractColorChooserPanel[]{ colorChooser.getChooserPanels()[ 0 ] } ); - colorChooser.setPreviewPanel( new JPanel() ); - okButton = new JButton( "OK" ); - cancelButton = new JButton( "Cancelar" ); - - setLayout( new BorderLayout() ); - add( colorChooser, BorderLayout.CENTER ); - JPanel buttonPanel = new JPanel(); - add( buttonPanel, BorderLayout.SOUTH ); - - buttonPanel.setLayout( new FlowLayout( FlowLayout.CENTER ) ); - buttonPanel.add( okButton ); - buttonPanel.add( cancelButton ); - - okButton.addActionListener( this ); - cancelButton.addActionListener( this ); - pack(); - } - - @Override - public void actionPerformed(ActionEvent e) - { - Object source = e.getSource(); - if( source.equals( okButton ) ) - { - selectedColor = colorChooser.getColor(); - close(); - } - else - { - close(); - } - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable(){ - public void run() - { - setVisible( false ); - dispose(); - } - } ); - } - - public Color getColor() - { - return selectedColor; - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailDialog.java b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailDialog.java deleted file mode 100644 index 0e865fec..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailDialog.java +++ /dev/null @@ -1,645 +0,0 @@ -package siprp.medicina.processo.mail; - -import info.clearthought.layout.TableLayout; -import info.clearthought.layout.TableLayoutConstraints; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.FileDialog; -import java.awt.FlowLayout; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.io.File; -import java.util.Arrays; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; -import java.util.Vector; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.JTextPane; -import javax.swing.SwingUtilities; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.text.AttributeSet; -import javax.swing.text.DefaultEditorKit; -import javax.swing.text.StyleConstants; -import javax.swing.text.StyledEditorKit; -import javax.swing.text.html.HTMLEditorKit; - -import siprp.ui.SIPRPFrame; - -import com.evolute.utils.images.ImageIconLoader; -import com.evolute.utils.tables.BaseTable; -import com.evolute.utils.tables.VectorTableModel; -import com.evolute.utils.ui.CustomJDialog; - -public class MailDialog extends CustomJDialog -{ - /** - * - */ - private static final long serialVersionUID = 1L; - protected StyledEditorKit.FontSizeAction FONT_SIZE_ACTIONS[]; - protected int FONT_SIZES[]; - - protected SIPRPFrame owner; - - protected JTextField toText; - protected JTextField bccText; - protected JTextField subjectText; - protected BaseTable attachmentsTable; - protected VectorTableModel attachmentsModel; - protected JTextPane bodyPane; - - protected Action removeAttachmentAction; - - private boolean sent = false; -// -// public static void main( String args[] ) -// throws Exception -// { -// MailDialog mailDialog = new MailDialog( null ); -// mailDialog.setTo( "fredPalma@netcabo.pt" ); -// mailDialog.setBcc( "fpalma@evolute.pt" ); -// mailDialog.setSubject( "SIPRP - Marca\u00E7\u00E3o de consulta de 'Frederico Palma'" ); -// mailDialog.setMessage( -// "

    " -// + "Vimos pelo presente informar que 'Frederico Palma' deverá comparecer " -// + "nas nossas instalações para a realização da consulta de Medicina " -// + "do Trabalho, no dia '10-01-2008', pelas 08H30. " -// + "

    " -// + "

    " -// + "Solicitamos, também, que o colaborador seja portador do Boletim de Vacinas e " -// + "dos últimos exames complementares realizados." -// + "

    " -// + "

    " -// + "Caso não seja possível a comparência deste colaborador na data " -// + "indicada, contacte-nos, por favor, através do telefone 21 350 45 40 " -// + "ou respondendo ao remetente desta mensagem." -// + "

    " -// + "

    " -// + "Cumprimentos," -// + "

    " -// + "

    " -// + "SIPRP" -//// color=\"#497895\" -// + "

    " -// + "

    " -// + "ATRIUM SALDANHA" -// + "

    " -// + "

    " -// + "Praça Duque de Saldanha, 1 - 9ºG" -// + "

    " -// + "

    " -// + "1050-094 Lisboa" -// + "

    " ); -// mailDialog.setSize( 1024, 768 ); -// mailDialog.setVisible( true ); -// System.exit( 0 ); -// } - - private final String[] additionalBCCs; - - public MailDialog( SIPRPFrame owner, String to, String bcc, String subject, String message, Vector files, String ... additionalBCCs) - throws Exception - { - super( owner, true ); - this.additionalBCCs = additionalBCCs; - this.owner = owner; - commonStartup(); - setTo( to ); - setBcc( bcc ); - setSubject( subject ); - setMessage( message ); - attach( files ); - setModal( true ); - setSize( 800, 600 ); - setLocationRelativeTo( null ); - setVisible( true ); - } - -// public MailDialog( SIPRPFrame owner ) -// throws Exception -// { -// super( owner, true ); -// this.owner = owner; -// commonStartup(); -// setModal( true ); -// setSize( 1024, 768 ); -// setVisible( true ); -// } - - private void commonStartup() - throws Exception - { - setupComponents(); - if( owner != null ) - { - centerSuper(); - } - else - { - center(); - } - } - - private void setupComponents() - throws Exception - { - setLayout( new BorderLayout() ); - JPanel headerPanel = new JPanel(); - setupHeaderComponents( headerPanel ); - add( headerPanel, BorderLayout.NORTH ); - JPanel htmlPanel = new JPanel(); - setupHTMLComponents( htmlPanel ); - add( htmlPanel, BorderLayout.CENTER ); - } - - private void setupHeaderComponents( JPanel headerPanel ) - throws Exception - { - Action sendAction = new AbstractAction( "send" ){ - /** - * - */ - private static final long serialVersionUID = 1L; - - public void actionPerformed( ActionEvent e ) - { - try - { - setCursor( new Cursor(Cursor.WAIT_CURSOR) ); - send(); - } - finally - { - setCursor( new Cursor(Cursor.DEFAULT_CURSOR ) ); - } - close(); - } - }; - sendAction.putValue( Action.SHORT_DESCRIPTION, "Enviar" ); - JButton sendButton = createButton( sendAction, "siprp/medicina/processo/mail/icons/mail2.png" ); - Action attachAction = new AbstractAction( "attach" ){ - /** - * - */ - private static final long serialVersionUID = 1L; - - public void actionPerformed( ActionEvent e ) - { - FileDialog fd = new FileDialog( owner, "Escolha um ficheiro", FileDialog.LOAD ); - fd.setDirectory( System.getProperty( "user.home" ) ); - fd.setVisible( true ); - // String filename = "c:\\test.xls"; - String filename = fd.getFile(); - if( filename != null ) - { - String dir = fd.getDirectory(); - attach( filename, dir ); - } - } - }; - attachAction.putValue( Action.SHORT_DESCRIPTION, "Acrescentar anexo" ); - JButton attachButton = createButton( attachAction, "siprp/medicina/processo/mail/icons/mail_attachment.png" ); - removeAttachmentAction = new AbstractAction( "remove-attachment" ){ - /** - * - */ - private static final long serialVersionUID = 1L; - - public void actionPerformed( ActionEvent e ) - { - int selected = attachmentsTable.getSelectedRow(); - if( selected > -1 && selected < attachmentsTable.getRowCount() ) - { - attachmentsModel.removeRowAt( selected ); - } - } - }; - removeAttachmentAction.putValue( Action.SHORT_DESCRIPTION, "Remover anexo" ); - JButton removeAttachmentButton = createButton( removeAttachmentAction, "siprp/medicina/processo/mail/icons/delete2.png" ); - removeAttachmentAction.setEnabled( false ); - - JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout( new GridLayout( 1, 2 ) ); - JPanel leftButtonPanel = new JPanel(); - buttonPanel.add( leftButtonPanel ); - JPanel rightButtonPanel = new JPanel(); -// buttonPanel.add( rightButtonPanel ); - leftButtonPanel.setLayout( new FlowLayout( FlowLayout.LEFT ) ); - leftButtonPanel.add( sendButton ); - rightButtonPanel.setLayout( new FlowLayout( FlowLayout.RIGHT ) ); - rightButtonPanel.add( attachButton ); - rightButtonPanel.add( removeAttachmentButton ); - - JLabel toLabel = new JLabel( "Para:" ); - toText = new JTextField(); - JLabel bccLabel = new JLabel( "C\u00f3pia:" ); - bccText = new JTextField(); - JLabel assuntoLabel = new JLabel( "Assunto:" ); - subjectText = new JTextField(); - attachmentsModel = new VectorTableModel( new String[]{ "" } ); - attachmentsTable = new BaseTable( attachmentsModel ); -// JScrollPane attachmentsScroll = new JScrollPane( attachmentsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, -// JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); - attachmentsTable.getSelectionModel().addListSelectionListener( new ListSelectionListener(){ - - @Override - public void valueChanged(ListSelectionEvent e) - { - removeAttachmentAction.setEnabled( attachmentsTable.getSelectedRow() != -1 ); - } - - } ); - - TableLayout layout = - new TableLayout( - new double[]{ TableLayoutConstraints.MINIMUM, TableLayoutConstraints.FILL }, - new double[]{ TableLayoutConstraints.PREFERRED, TableLayoutConstraints.MINIMUM, TableLayoutConstraints.MINIMUM, - TableLayoutConstraints.MINIMUM } ); - layout.setHGap( 2 ); - layout.setVGap( 2 ); - - headerPanel.setLayout( layout ); - headerPanel.add( buttonPanel, new TableLayoutConstraints( 0, 0, 1, 0 ) ); - headerPanel.add( toLabel, new TableLayoutConstraints( 0, 1 ) ); - headerPanel.add( toText, new TableLayoutConstraints( 1, 1 ) ); -// headerPanel.add( attachmentsScroll, new TableLayoutConstraints( 2, 1, 2, 3 ) ); - headerPanel.add( bccLabel, new TableLayoutConstraints( 0, 2 ) ); - headerPanel.add( bccText, new TableLayoutConstraints( 1, 2 ) ); - headerPanel.add( assuntoLabel, new TableLayoutConstraints( 0, 3 ) ); - headerPanel.add( subjectText, new TableLayoutConstraints( 1, 3 ) ); - } - - private void setupHTMLComponents( JPanel htmlPanel ) - throws Exception - { - HTMLEditorKit kit = new HTMLEditorKit(); - Action actions[] = kit.getActions(); - Vector fontSizeActions = - new Vector(); - for( int n = 0; n < actions.length; n++ ) - { - String str = actions[ n ].getValue( Action.NAME ).toString(); - if( str.toLowerCase().indexOf( "font-size" ) != -1 ) - { - int size = Integer.parseInt( str.split( "-" )[ 2 ] ); - if( size == 16 ) - { - continue; - } - fontSizeActions.add( ( StyledEditorKit.FontSizeAction ) actions[ n ] ); - } - } - - FONT_SIZE_ACTIONS = fontSizeActions.toArray( new StyledEditorKit.FontSizeAction[ fontSizeActions.size() ] ); - Arrays.sort( FONT_SIZE_ACTIONS, new Comparator(){ - public int compare( StyledEditorKit.FontSizeAction fsa1, StyledEditorKit.FontSizeAction fsa2 ) - { - String str1 = fsa1.getValue( Action.NAME ).toString(); - String str2 = fsa2.getValue( Action.NAME ).toString(); - int size1 = Integer.parseInt( str1.split( "-" )[ 2 ] ); - int size2 = Integer.parseInt( str2.split( "-" )[ 2 ] ); - return size1 > size2 ? 1 : -1; - } - } ); - FONT_SIZES = new int[ FONT_SIZE_ACTIONS.length ]; - for( int n = 0; n < FONT_SIZES.length; n++ ) - { - FONT_SIZES[ n ] = Integer.parseInt( FONT_SIZE_ACTIONS[ n ].getValue( Action.NAME ).toString().split( "-" )[ 2 ] ); - } - - bodyPane = new JTextPane(); - bodyPane.setEditorKit( kit ); - ActionMap actionMap = bodyPane.getActionMap(); - - Action cutAction = actionMap.get( DefaultEditorKit.cutAction ); - cutAction.putValue( Action.SHORT_DESCRIPTION, "Cortar" ); - Action copyAction = actionMap.get( DefaultEditorKit.copyAction ); - copyAction.putValue( Action.SHORT_DESCRIPTION, "Copiar" ); - Action pasteAction = actionMap.get( DefaultEditorKit.pasteAction ); - pasteAction.putValue( Action.SHORT_DESCRIPTION, "Colar" ); - - Action boldAction = actionMap.get( "font-bold" ); - boldAction.putValue( Action.SHORT_DESCRIPTION, "Bold" ); - Action italicAction = actionMap.get( "font-italic" ); - italicAction.putValue( Action.SHORT_DESCRIPTION, "It\u00e1lico" ); - Action underlineAction = actionMap.get( "font-underline" ); - underlineAction.putValue( Action.SHORT_DESCRIPTION, "Sublinhado" ); - Action fontBiggerAction = new StyledEditorKit.FontSizeAction( "font-bigger", 30 ){ - /** - * - */ - private static final long serialVersionUID = 1L; - - public void actionPerformed( ActionEvent e ) - { - - int start = bodyPane.getSelectionStart(); - AttributeSet set = bodyPane.getStyledDocument().getCharacterElement( start ).getAttributes(); - int size = StyleConstants.getFontSize( set ); - for( int n = 0; n < FONT_SIZES.length; n++ ) - { - if( size < FONT_SIZES[ n ] ) - { - FONT_SIZE_ACTIONS[ n ].actionPerformed( e ); - break; - } - } - bodyPane.requestFocusInWindow(); - } - }; - fontBiggerAction.putValue( Action.SHORT_DESCRIPTION, "Fonte maior" ); - Action fontSmallerAction = - new StyledEditorKit.FontSizeAction( "font-smaller", 5 ){ - /** - * - */ - private static final long serialVersionUID = 1L; - - public void actionPerformed( ActionEvent e ) - { - - int start = bodyPane.getSelectionStart(); - AttributeSet set = bodyPane.getStyledDocument().getCharacterElement( start ).getAttributes(); - int size = StyleConstants.getFontSize( set ); - for( int n = FONT_SIZES.length - 1; n >= 0; n-- ) - { - if( size > FONT_SIZES[ n ] ) - { - FONT_SIZE_ACTIONS[ n ].actionPerformed( e ); - break; - } - } - bodyPane.requestFocusInWindow(); - } - }; - fontSmallerAction.putValue( Action.SHORT_DESCRIPTION, "Fonte menor" ); - Action colorAction = - new StyledEditorKit.ForegroundAction( "color", Color.black ){ - /** - * - */ - private static final long serialVersionUID = 1L; - - public void actionPerformed( ActionEvent e ) - { - ColorChooserDialog dialog = new ColorChooserDialog( owner, Color.black ); - dialog.setVisible( true ); - Color color = dialog.getColor(); - if( color != null ) - { - bodyPane.requestFocusInWindow(); - Action colorTempAction = new StyledEditorKit.ForegroundAction( "color-temp", color ); - bodyPane.getActionMap().put( "color-temp", colorTempAction ); - colorTempAction.actionPerformed( e ); - } - bodyPane.requestFocusInWindow(); - } - }; - colorAction.putValue( Action.SHORT_DESCRIPTION, "C\u00f4r" ); - String fontFamilies[] = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); - JComboBox fontCombo = new JComboBox(); - for( int n = 0; n < fontFamilies.length; n++ ) - { - fontCombo.addItem( fontFamilies[ n ] ); - } - fontCombo.addItemListener( new ItemListener(){ - - @Override - public void itemStateChanged(ItemEvent e) - { - String selected = ( String ) e.getItem(); - Action fontFamilyAction = - new StyledEditorKit.FontFamilyAction( "font-family-action" , selected ); - bodyPane.getActionMap().put( "font-family-action", fontFamilyAction ); - fontFamilyAction.actionPerformed( - new ActionEvent( e.getSource(), e.getID(), "" ) ); - bodyPane.requestFocusInWindow(); - } - } ); - - Action alignLeftAction = actionMap.get( "left-justify" ); - alignLeftAction.putValue( Action.SHORT_DESCRIPTION, "Alinhado \u00e0 esquerda" ); - Action alignCenterAction = actionMap.get( "center-justify" ); - alignCenterAction.putValue( Action.SHORT_DESCRIPTION, "Centrado" ); - Action alignRightAction = actionMap.get( "right-justify" ); - alignRightAction.putValue( Action.SHORT_DESCRIPTION, "Alinhado \u00e0 direita" ); - Action alignJustifyAction = - new StyledEditorKit.AlignmentAction( "justify", - javax.swing.text.StyleConstants.ALIGN_JUSTIFIED ); - actionMap.put( "justify", alignJustifyAction ); - alignJustifyAction.putValue( Action.SHORT_DESCRIPTION, "Justificado" ); - - JButton exportButton = new JButton( "X" ); - exportButton.addActionListener( new ActionListener(){ - public void actionPerformed( ActionEvent e ) - { - System.out.println( bodyPane.getText() ); - } - } ); - - JPanel upperPanel = new JPanel(); - upperPanel.setLayout( new FlowLayout( FlowLayout.LEFT ) ); - upperPanel.add( exportButton ); - upperPanel.add( createButton( cutAction, "siprp/medicina/processo/mail/icons/cut.png" ) ); - upperPanel.add( createButton( copyAction, "siprp/medicina/processo/mail/icons/copy.png" ) ); - upperPanel.add( createButton( pasteAction, "siprp/medicina/processo/mail/icons/paste.png" ) ); - upperPanel.add( new JLabel( " " ) ); - upperPanel.add( createButton( boldAction, "siprp/medicina/processo/mail/icons/text_bold.png" ) ); - upperPanel.add( createButton( italicAction, "siprp/medicina/processo/mail/icons/text_italics.png" ) ); - upperPanel.add( createButton( underlineAction, "siprp/medicina/processo/mail/icons/text_underlined.png" ) ); - upperPanel.add( createButton( fontBiggerAction, "siprp/medicina/processo/mail/icons/font_bigger.png" ) ); - upperPanel.add( createButton( fontSmallerAction, "siprp/medicina/processo/mail/icons/font_smaller.png" ) ); - upperPanel.add( createButton( colorAction, "siprp/medicina/processo/mail/icons/colorwheel.png" ) ); - upperPanel.add( fontCombo ); - upperPanel.add( new JLabel( " " ) ); - upperPanel.add( createButton( alignLeftAction, "siprp/medicina/processo/mail/icons/text_align_left.png" ) ); - upperPanel.add( createButton( alignCenterAction, "siprp/medicina/processo/mail/icons/text_align_center.png" ) ); - upperPanel.add( createButton( alignRightAction, "siprp/medicina/processo/mail/icons/text_align_right.png" ) ); - upperPanel.add( createButton( alignJustifyAction, "siprp/medicina/processo/mail/icons/text_align_justified.png" ) ); - - htmlPanel.setLayout( new BorderLayout() ); - - htmlPanel.add( upperPanel, BorderLayout.NORTH ); - htmlPanel.add( new JScrollPane( bodyPane, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ), BorderLayout.CENTER ); - } - - private JButton createButton( Action action, String iconPath ) - throws Exception - { - action.putValue( Action.SMALL_ICON, ImageIconLoader.loadImageIcon( iconPath ) ); - JButton button = new JButton( action ); - button.setText( null ); - - return button; - } - - public void setTo( String to ) - { - toText.setText( to ); - } - - public String getTo() - { - return toText.getText(); - } - - public void setBcc( String bcc ) - { - bccText.setText( bcc ); - } - - public String getBcc() - { - return bccText.getText(); - } - - public void setSubject( String subject ) - { - subjectText.setText( subject ); - } - - public String getSubject() - { - return subjectText.getText(); - } - - public void setMessage( String message ) - { - bodyPane.setText( message ); - } - - public String getMessage() - { - return bodyPane.getText(); - } - - public void send() - { -// close(); - String to = toText.getText(); - String bcc = bccText.getText(); - if( additionalBCCs != null ) - { - String bccconcat = ""; - for( String b : additionalBCCs ) - { - bccconcat += b + ", "; - } - bcc = bccconcat + bcc; - if( bcc.endsWith( ", " ) ) - { - bcc = bcc.substring( 0, bcc.length() - 2 ); - } - } - String subject = subjectText.getText(); - String body = bodyPane.getText(); - String attachmentList[] = new String[ attachmentsTable.getRowCount() ]; - List attachments = new LinkedList(); - Vector values = attachmentsModel.getValues(); - for( int n = 0; n < attachmentList.length; n++ ) - { - String str = values.elementAt( n ); - String name = str.substring( 0, str.indexOf( "(") - 1 ); - String path = str.substring( str.indexOf( "(") + 1, str.indexOf( ")") ); -// try -// { - File file = new File(path + name); - if( file != null && file.exists() ) - { - attachments.add(file); - } -// FileInputStream fis = new FileInputStream( path + name ); -// Vector bytes = new Vector(); -// int available = 0; -// int total = 0; -// while( ( available = fis.available() ) > 0 ) -// { -// byte b[] = new byte[ available ]; -// fis.read( b ); -// bytes.add( b ); -// total += available; -// } -// attachments[ n ] = new byte[ total ]; -// int pos = 0; -// for( byte[] chunk : bytes ) -// { -// System.arraycopy( chunk, 0, attachments[ n ], pos, chunk.length ); -// pos += chunk.length; -// } -// } -// catch( FileNotFoundException fnfex ) -// { -// JOptionPane.showMessageDialog( owner, -// "O ficheiro " + path + name + " n\u00e3o existe.", -// "Ficheiro inexistente", -// JOptionPane.ERROR_MESSAGE ); -// return; -// } -// catch( IOException ioex ) -// { -// DialogException.showExceptionMessage( ioex, "Erro a ler ficheiro " + path + name, true ); -// return; -// } - } - MailSender sender = new MailSender(); - try - { - sender.send( to, bcc, subject, body, attachmentList, attachments ); - sent = true; - } - catch( Exception ex ) - { - ex.printStackTrace(); - } - } - - public boolean wasSent() - { - return sent; - } - - public void close() - { - SwingUtilities.invokeLater( new Runnable(){ - public void run() - { - setVisible( false ); - dispose(); - } - } ); - - } - - private void attach( Vector files ) - { - for (File file : files ) - { - attach( file.getName(), file.getParent() + File.separator ); - } - } - - public void attach( String filename, String dir ) - { - String full = filename + " (" + dir + ")"; - Vector values = attachmentsModel.getValues(); - values.add( full ); - attachmentsModel.setValues( values ); - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailSender.java b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailSender.java deleted file mode 100644 index 58f8d71d..00000000 --- a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/MailSender.java +++ /dev/null @@ -1,84 +0,0 @@ -package siprp.medicina.processo.mail; - -import java.io.File; -import java.util.Date; -import java.util.List; -import java.util.Properties; - -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.activation.FileDataSource; -import javax.mail.Address; -import javax.mail.Authenticator; -import javax.mail.Message; -import javax.mail.Multipart; -import javax.mail.PasswordAuthentication; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; - -public class MailSender -{ - public static final String from = "departamentotecnico@siprp.pt"; - protected String mailServer = "mail2.evolute.pt"; - protected String userName = "auto@siprp.pt"; - protected String password = "sdfoyias78e"; - - public MailSender() - { - - } - - public void send( String to, String bcc, String subject, String body, String attachmentNames[], List attachments ) throws Exception - { - Properties props = System.getProperties(); - props.put( "mail.smtp.host", mailServer ); - props.put( "mail.smtp.auth", "true" ); - - Authenticator auth = new SMTPAuthenticator(); - Session session = Session.getInstance( props, auth ); - - MimeMessage msg = new MimeMessage( session ); - - msg.setFrom( new InternetAddress( from ) ); - msg.setReplyTo( new Address[]{ new InternetAddress(from)} ); - msg.setRecipients( Message.RecipientType.TO, InternetAddress.parse( to, true ) ); - msg.setRecipients( Message.RecipientType.CC, InternetAddress.parse( bcc, true ) ); - msg.setSubject( subject ); - - MimeBodyPart bodyPart = new MimeBodyPart(); - bodyPart.setContent( body,"text/html" ); - - Multipart multipart = new MimeMultipart(); - multipart.addBodyPart(bodyPart); - - if( attachmentNames != null && !attachments.isEmpty() ) - { - for(int i = 0; i < attachmentNames.length; ++i ) - { -// String attachName = attachmentNames[i]; - MimeBodyPart attachPart = new MimeBodyPart(); - DataSource dataSource = new FileDataSource(attachments.get(i)); - attachPart.setDataHandler( new DataHandler(dataSource)); - attachPart.setFileName(attachments.get(i).getName()); - multipart.addBodyPart(attachPart, i + 1); - } - } - msg.setContent(multipart); - msg.setHeader( "X-Mailer", "Evolute Mailer" ); - msg.setSentDate( new Date() ); - Transport.send( msg ); - } - - private class SMTPAuthenticator extends javax.mail.Authenticator - { - - public PasswordAuthentication getPasswordAuthentication() - { - return new PasswordAuthentication(userName, password); - } - } -} diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/Thumbs.db b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/Thumbs.db deleted file mode 100644 index d1514ff6851273afe5ed1ce17e2e9e997b5d2d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29696 zcmeI42_RKl_rR~Q44G$2aZwqHOi3hV44G##Wp<+sWvEnCQX!PFP)JC*=1AsB%9uHq z2pMk4Jp9+`<-Oi}z3=PQ`+EQPeKtS)x_9rh&beo=b=F#YpYyzq_SKCnwjR`PiVTVf zwYWrvBK_=r0(gz^vCyDUgz$n0SX^3K`sqy+3SO?1f6zCu0Q?4&Vef0Gk0WfEz#q zJOD4i2W$e6vBeLy2p|9m0z$wRU@IUDYy*&XqEL$g;(!Do2_WyUlt2Ckv``rMIRfWt zFUkdKH`G!1*1om5=DrZlnVgWbA%V`Ih5H^l{fG`N+O6+wtG(KVlb;qy0kbYm%|Ml=0VgtUU|41LijvzJwu@Q(3_#^#C z&LQ$WBKnW?`&|DO;XNr}2OtgX1Y`hNU>6_<>;~k4J-}W-0YJ861+_Au0;mG}05w1z z&;a%Wnt&Fd4d?*60Mb_;VVB z5pV*W0T%!R90HJj$Duw990A+`55N=f0uXIJ26zKLfG^+&ApL@&M#dsC1_}vb{Jvaz zg`!bWP*y+@z@R>W?BG&6d^JRbgvc)xV)!LlO+rFUOhUeD73pe9a!N`HatewyRCF|J zsA#DuC}@~yXz3Xk85t?5nOT?^Sm+oS8IX+-5J4Ye5;77JGKMu2YZ(4?S$c?~U5$bt zA_6WHAuRzBEx}SbavdQcfxSg`_){SugncAkwVI5a0vcdxKtqX$2#JZ1y@uAl@HvW@ zmV|DDupBA9ro}2QR|b)jAvacY@6IY^)OsggL88d+J}9JIBwcQ|~+-NV!C=&@6$&jbXXJ$F7d>`Hh<-|PN?H-kg?ckd@Y zOioSD%p%7{fFkNU8d)QW`Ip<+i5x7LNncgvvhw6Ocjh@);WhU%zJ6uzE$cWY zaWpr*qqR!fjiH7?`c4OD%J)W9MAa|S!y5|~V>!-?;5R($cxA;crakF_KbVh;T~!`v z-gK*J)Cn8rNIXR=&wjSJ#+kRCE103@=Hb}pi;Ziw?`^6J#&(Ky$+%PVil1)e_2SeoL#{)ReEUPYJt&&j|i_o3V_lr%%q<@ayg;+TWpiA9ZzE|3p{x zZ{_;)M;F%r%=Kr1csd%d-lE#bGhTTuRgMY!n#`s3pt)2Vm*nc?Fn-Eje_B6}MUrEj zs~5K!Iu_jblGkm#9#&3s!&|FiQ^XL>wm_3Ul|hJ(RZIMyH1=Z-m9J*ZyqBbPF* zK3o4pvp~(Lt>4RevXr}SXKMI0EyaWTeR5oL1&+m0vt-!n*UR>7ZNPR@J4P|3$y^m0 zi(pB>hD#Jh(%tJoN4thoiPN~oUtK~`NsbZvFybQv=8bQeDs$vUq>9}MbBN599aN*+ zr@E{9y$bmWCXIc)4rvy>!r{UO$1b0d+@u}W+>vYM>9TnIWSQ9m6}Qv&^=^et-I$Q? zbYN(}@*#PS1D`;0k{=_{a!0!o$aPsjM$HXun`-%D& z?aiUB8)OD-px5VpC866#HU2_hcaZT%{Sce~(fobt=M47O9xSjqWF9ae$rJu}gT4J+ zmH_lYa>L8}x!h;@`m+ain(EQ^pj^JD~~Be3XaZIj|r*8L`x`5*3TsH_{2xo9JJw- zeR`o?Rh&QdO2?2O|h<0=d3{xbNGPtI%%dXY6Mfcr^^O5)OWdFP|G6#)y2M_9VT}9?k5T9UK zR}X5d5h{YxTAlI8OY^$+xS-Y8cK(GOyYupl_ZsK%gj)*T;Cebj>|}Ur zbG*3Ubj_GS33GO^{k$%Y`o7(4c%QyfFl9u9*3;m*)B9ZZu3!7uOH5;bqgW=rSDBi@ zgrK4Gvn<<-NhMQHQ)ftm5!=)im2Tw{ zq{^unJSk~(#8gs2{gD2!txZO(&(t?)ETWjdl;!K^hQI0hiOiFJPx+SkM-K!Feso-Z znxp+*`G_xr%u9W3{9_Gm`9H}=VzKWj-*WtJAaKhk`CC8EV1N4_kV5>2%+Dd?=xdMv z1hf_UB>(HDVSbu_S@EC#Yy79Vu?nfKbj7juHNpl(Y*0HA62s9l)1bfw{}#PCtcl+%1|1vU(3~R{D7*iEJB7eKRZtfduAYd zU8F09JxSkHZQJ7!TW7iu4g;1NCxQzfKJabdo)lR)Z9IR+Rr^+GVaFdiN1vh?#J}+Z zFUS02Hpw1hCKq^Z^)YHfK6Cq(_p=9d0Lhsw+h0!5hn4tcW&ZPv6TAN*|EIgcjH^j7 zliS-{HCA#^+vCtkfH7QwgIKQyr{O(*?qCXqx+L`*Pv}U-%4zD zyCXuNwYqdw_Bu{%$jGyBn?y5tPxssQk?a8>JlU#@58BlDr2`%{k~5#S+EBk{B=$NS(mY_f7~njw=)0pW9NV7zE1ye z&rcaP2ndJ;orzZSC~4?Dr)^MFK!AjX_$b9ZRK8T}Va)u^y;jq=N+TAVcXX1Q z%Do-K@Y?k^pz{KhUgz6uQ|0J$h-_Wu$W0~JN9o+<&>YnjnD|C&-I?PShs4+^B6CgI zhU)8y&yQ{z;8L~-7C!BBL_q0LUrXxt+FJC3?nhOOQuh20>b{_Z$oj11IRDF6Kqt_< zgP?<-X9$q2BjPop%1^={f8Z2w8aM+40D-_+;2dxs2m&qu$hx5zs4oGRfe;`R2m`JF z;Xnis30wuP0Z~9Sfb_i$bsP{6TnBCd2|yx{1l$B}0m(oLkP0CE@}a&1qyrg1CU6(X z0`39#fouQ^+gt`zY0v-UxKnd^=Cc_wn;3-fG zJOk>0=fDe~9%uj>fhGXy*8=rRpcQBX+JO$B6X*iEfmc8efCG>|eNev!`hfx94KN4{ z0mHysU<4Qi#(;4E>Guxm_rL`30hk1)fN5X`m<8s5d0+uR`h1+IBlyMsa;@0k75n>R z?e79n3&uS)DWd;z_sAP`!TVD~o*orU+mnLzL{A!fK8_{qi`VkHVR1ZFfYxEln#FLj z;>6^K#F1?m&TZCkyIg%I(lsFjTeqv6j!Nfbto@kak@lS$>dm665BAnpGzK}f>DD%7 zmyV*N1d0w-=at>^;!%>e*58t}r$xbehsJXuCzmbm&fyQll*OefqZ7z z9?PGQp9XD}Kgk#U3*=M5_Gtcu`~ql;%-11hCI9pDGS&aJ^|y1}y;YSTre#+Ji0$0n z?7X|q46ozI8D&0Ve*tm?V}B%Evp z%Bj<`%X%{lM`djcU7nPFTWnm~jW=B! z&$DX{tpoQr^bz_p4Lw_p^B>xD)AC*U*{vZtq;Bdcj+V6TH8n^8+Z};~u)M$bp`5@+ zvVt7Z=h3MYs2eh$^Lw3hhn%kU$6PMb&jnsB`%gPp^lv48`LXfK+(5aXaNxd{2@2Jz z;!q8mVP-b9G~-S+HbntPPp$y6&1cMoo?kej-p~3fl$GD!f8iM(u6;DUW`b z*=7nIaC-4LLc&$ar!Y8x?-GmWGx8Izi&S>UMsgz4+a21>uuCX1^%9)3gnnVvh)c$L z>yzoyHEQKK9%-DTBO0UruQ-S$51boPKkTNw#dAEj59U_VJ@dbiSwa->-rijCb)StCj)?djL{aw-DAFIC$+;~jz#IQGWPQ!;e7BSfzIj1KaFO&rg z^Y(=Gq2Dp&xJi~yr1)^+t;!a;8>B^Z*`7r@W(6&cMHW_<3y^T~NYL9-1vb!_Zzj(Uo97>qTbKhktycvPS+bLYFYA@r! zIqQp(6FY((@Jzf`{pAxCJtzqCx|LUYr9pCx0mGY!c`j1}Mi9E8r$yW0?roX;8r?dOTNc)GXfOj)E zdn-pPM>lUVF9qY8?whm5j^?HUnTP+JJzmy7WIfo5{;lZWkJP_tT;0eT_wh&^TFSXA zz+Hoiox*;U@4l01DZ0KRWrK3tV36N6EwUjul4JTO7dLo$3bo4vUpVi+%A-o-R4D-;O(JS|nxDgFr9DDS( zeOvb3cConhLoE^>p(?v8ae7ZKo7}#aFWIrWaYrH!zcJlES zUt80Oc8q6JZtZKUe{(ro*1v5l`nRHgKUV+d3ae%>7G_MV>Xuw8*E7OQ`c};6v^gi3 z$Q^c{^o(OT`-HK68)j3?=1b8W90z7{PZw{P4pN#vd8^C5p-b(0hlb5f2Pqfq?T)9z z0=X2daV(<}N(9W}Z`0oqUiZ&mf3Zrlq}jP`w7GlkSZP9|7-0=nc*;HT;o(3m5q~Mj*u=k6@NHtVXsc~rvr&INPAA8h3~l!+wEOU=qsRWIPr~BU zy^qXrGbKAZE*vl2db)dO0Vn7dGUtSWr#m6{Q@TO@<-0@`AYwyic$f2PmXKF-f*%{0 zgE9w@l?E1&54ZjJ-XGofxfM2m%#$x~#R?>^g~bPi01-e8kN~8>DquB029N_3041;n zpaPIJL^M#-0(1a9zyL4;OaL>$0C0D$xtf_e+E6%YnQfNg*%AO?s75`ZMI9XJT=0BnGrfD9lD>;mL~-GDr>2iOZJ z0E&PTpbV%0s=z)#4M6rm1M2;NCZGjq13G{%pa8~{ha2|zykD+}`61>}xjI~YqgFnT_phe5+oL2?V9kC#L6M6u7? zEZcwG75o2>wEx@xg8UOQ9!X%BAT=^v{#`*H)n)5ncKu zU-)m356^Z(IewBa@;AsA1o;!hKYjoI;OECJ5Kf<*+dFOC6YU@}9O1V|`Ay}fBzxc5XG zq;MY#;2xum!xcL(q=;$+AE(bO=JoRH-G%o{X7CIP=G<35Kb>6|ypu4S&P8edn)Qrf z>pFREnI;{U(%CJgCDhW|cYF-SHOf1=HSWHcK#%tsiScyzyAyRSFDZqEYD;z^{dZeVp`mC)P1exfO?p!lzW4T(V(V!4^L2y zp>)3Z3F)$jekEH-vt%9C(D#~`509OTr_QR~E;#e({ng8rj=j^+fx?wvf68FsB{KFS%+ zI>l=_<5J(eJ^p1?M0_M_F zb%v~}{e6$aA0vgIe1D|Rvi_T|=>LlT|JeBZ|I77vaNeQ^L+_Q?OI=pNY+p=Xe76vL zuf9d~UMQKfO@R`hJ>Q(1SLE9}5+m-14&5+d?m$hwC(m<=-ZHR%GAzxmaL2pOiezky z@f0@0Cj52y{inxH-=5o8-ycz6_97yx29r>tX5I8h&xu;rzc=7d{S)SI)}z+1JU{lo z-1h6y~)^L;PYSy6R{EH4(n6nCr1qI$8?+a+IKGb$@mv!V~ej4S* zC6xV1zPlW3m@56IBKbQny*&37<|>io7Z&73Xx(@=PVdoVxoe2v;n*|M?Q8jaBF`3^ zPmD-WYxg}7lGVw$YWZ%SG5LH{iQ`V$HOIHSaC>G>_QEcXr)5HXPAwx@CV^VS&_SD( z&V0(`bs}cBNbzm&W8G(@jV*fDh;|xoW61sdN8rZ-)`{A|)em_J+OMy#ywC}`2Ltuq;>zbeMSgV^ z-V6xKwl` zEwnNo7n7Oc&|L(%kQfeoSd^E+=RX{LIHBxRG|CRIk)JtVv*+I_K2 zDD|i_r8x7QFjINkfht#95k+(cEz#;x)&S)RX`(?xKiLK$ANf}!$H9$~%-rH6BzWWK zxz!o?d#RQL>#Z-mVw-vYs;YF1Zk{`Yxm>@^eb`|g`b8U&g}|k3^nl06o4mQQTi(sO zo0=|ej@_vBKs?&5xK@z)>3auD{whZG3!A#u?0AxkDVp_GDqKP-7O@Vdm|dEWib#qZ z;6A0@=_BCpopvq(PnvHXriSjPu*d1>dD=P=vC1C3q~%aJzd>;cb?tunsl_gfB~-6& zC;3D|c%8!2nJ1N#Q7*~2;X*miz?((+MRwsX0oT{Y#-oJgvpM2A{1_YUWmwHuz3F1e z63>Z{^tj- z|5*^64(qjBTtpKo7th%*#1kd7b`A(9D!tw3Z+^{_CVuM$682i}sq;SDZF;FGhYFYy0#w(i zG#hVkbl*6noAu_9m)Oi;hOwz4(~TRB`HM{r{oWL~(}_o4#D7RpsU%j26@%+rb zVfM2R)x+&%-DWeEQ1!C=dIU0wqMw&rq$y6ta_U6A$W*|N9m$cYT(~YHSvnrJTUAYZ z?@?T>9Q#}GP`Aq|JsAgyLfFC@{725P)bPJ9xgR+qhwENDzbkuOp)lEK_(F4ihjM!B zhTPCDQ4VRmTi{_vwQB7MPF@kkr+xx>o{4vL$5Xnxrcap`d*QsVo$!vX@ls0E-H+-! zqqCn>V_&F7`x5G2_rv?+j-}Kxw?k@h3wG(x(nKyl5+HirzF{=WU%@-eV-(f*uorKb zvAr>2#;y#%ggQ0D-B$a~DKp@nhShoh)N`r#n+&InWejFUN8Dc=j>l40QPX(Q>t&7S z_~Qq+_*!Ckn#IrY>AWXrd8NRvTR=Bb$R5BD7J{G5!ttx|w&D75ZvM)Y_cf%0(f5@) zO*_xo9eQ-(aSu)y(dlXEwSKjSUq@aeDmZ>NS=5 zv`|)qksZ^6CALebmy6vGkA-KRFLHIoWKL($7uPq_7(G$LjPbsr3|&GsC=hWzN=)s2 zDl%UtTJ<<4lTFpOzRR?Au&=dQv8+{4YTUuS4|{$(rcl+JXUbRyn}v7pO3IbB&G+}X zsMIPXn30~e885jZRH?&_g@b0VZ}^LgUChJuWZE>-w&D#tsoLPBPBBo-n9R zT+q4h{_tg|LcIr-Rqxna!<3;#F1D&N;pEn;l&5NwVZNLEyV?|Lww3D|lWTNcpi1Vy zaM_o0(sm)-*^i{dfvrD1wF*bg)KxW!$=OSGp555T-}0O?U%w5>)tK1ZTTy*A@19l( zRjM#Aw3yXlBVF-|G=~;F!zvT?GcoSIDaEGG?O zrRML6Nkx9PR&^9t-%x@9I#%?R0)uE=k+>#T)tbc!Ph*`zX z@_-9M#pw7RioTZ=zn;UdHe2*pz1IaEb6LW|WrJ1s6v}oYwC*O%zaGdp9$}wIpL+AsSZ9RCrE{!ozNMlu8ciQDRccM847zqIun(Be8eVi)52KOk`$+ z`eR3JtuFXHy<4fFex|NDr~Q>s`km>(Jxw3#=-Z{EY&sR diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/arrow_down.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/arrow_down.png deleted file mode 100644 index ad8f6a36c0b54271d556dd928164c85eaa890454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE)4%caKYZ?lYt_f1s;*b z3=CW!K$y{KjmZq4AbW|YuPgg?9$qeE(`c*ddO)Geo-U3d5|@)x8k$^#=EU09|1JIT z_3wH4efj_Wj{i$Pk?z2@x?*Nn?Zwm||AU$z{#S}yw%SQ{&KVvc@G)TZ(dmib`E#b^ zkqQY3iMoHkzkdH8Zzsaqv&N^0$LJ6bPtYG8o&OU5>el@EI{IsT-`+3V`r&(R3{NS~jRS^`ZKss~@YtP5Vn{Z2Xb5r?+z9j@ NgQu&X%Q~loCIE#WdKBJATlx_PH%P~GB7YTATc&NF)%tbHy|r8F)%O!ku`?^000McNliru z)e9C63l4*ot)Bn@010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00NIm zL_t(|+NG0SNK;`L$A6of+nmcyooKl-vYAN`X-e7$MiNTtMOR%!Sd`sFbtBbH<&AU^ z-2{18-E^I1q(nsqK}ad6tfit^Q`+2|o;g2{r{|~)D!lTA|2drJeV*U@y#M#Su*qTg zH_%K`dJOeS5|LU55iiNhDA{~panWXU^0?^(QyT&vaHeL7sb|GjTV~O|Ozc|}ump)` zMj2S}@pVBBnVp=!@s!v90UmO_+QfWo-JvqG=fqZ+@I#;*%tPRfgR7tMbd}aomSRxX zcz+GD3b@N1mkrH-wxZhYsmg)@AB;)yuQ!m^1IOl|L=p>yX*Tiv?Q(EMqu}N(qDCDM zMs3JXDR<}Al!D&{Bk3??mF#ISO7Sj9+9UFUyTm|VX-d|QSsL`(b%3$faiEY;$VhZT z06+IjP+;W34tX5`^`L|^pr0kI1vx~`)atb+{Sm|NRWj`O!k|oo7PLv-aamM$c&(Fu zVU0?j^uwaaW^)s>4|@}Uka#h=q%k=UUjx#)2E!8fRaZh)z3ku#`SR@)rC|}ch2XmV zYXHOS;QKzMOfzNDEvFo^Nf)|lm-X380t<_}1Q4Zyoy;iH{Ejh{07NwP<;TFcvY56V zH79A+EXqV4eO69|qpPb$#Q}#_OxIvL$^z{P6C;>frY(ID)ibtMyjzqfa_F=6b<$o= zQP1GddB%I=VZ}sC0s!~I*pn}i@=C=uf+0s;TiB{6SfyzXXI2g~KDNl04&O2>=@)5| zeaT2l{KxT5KiQRiB=w)PIOA6LHZ$8ZRPqh8VoHGCo==Rt`#i-Q=V diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/copy.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/copy.png deleted file mode 100644 index 87cf5c96c5c2dab542d9819a4b0083034f8da5e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)WdKcYATc!{L3L*!GB7YTATcpIGch_bG$1Q5F)%RM{uz1z000McNliru z(+C+AC_2QWfp!1@010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00HAk zL_t(|+O1MONL)b>{@(cx(p&@yoK-F=hms=kr$`Yj0t#EPRHzgZZv-{z}Ll1)iaci_~*t8NIZOi^S_lEhyj>g`ff9F zFpt}e998C_|4kcOo0AaQy)aoo_U$XI=YQ5f+yH&zU0)>Q*mNG7+a+^Or;^4lf7%M3 zm$mu;QixiRQVLX#kp6vSxEHyV0!jyE^bK_4?3AJ9c>>=SH_W?xJFDY3gaXI1^YP1? zvAg99WV)Ndg@VT%-I5Fe7-QyA+&Kp0N~`wi_ukhpP}RkCJ#E0k(kc%3{^0k?CE7EM z5K2WW=xk3>a!9T8A+UOa;M^xy$*{c|fCa zNa|u?@4<$cKzlL-D<33wy#gs^_*valnh9BoOg7cy(c^lQgD0#vF#iL|MjWYYrm zN$m(*Hf7#eE8<}PmzhM|bwhxQ%Zj-?>qsHs#3nV_%X%b2vo|(17+HM-5RU`zr#{;z le4`K&MZs=eWM%%3Tmg4#4-8rBc$okI002ovPDHLkV1g2~6^sA? diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/cut.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/cut.png deleted file mode 100644 index bb6237739248f1fb2445327dfeb189203c2e9cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zdDP)WdKHUATc%|O<`#uGB7YRATcpIF*Z6eH6SZ6F)%Qnf5sXB000McNliru z(*+O-8ys?Bu#^A*010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00GoV zL_t(|+GAiCXuyn1V#$)l5A^j7#19-eu$L^8moHoT|IVE||7vS%D)6ae!X@$N&!3OV z%F2u{U%tv9%YZLmzPtm`tgNhD_zYmdCGqp;&tD%ueq>-_W`-LeQ~p5Y*Xw73uP(oQ zz;HV7H{5_3)2ICq5*A|n^5yHh@87<@`2U~bg|M)Q`m<-x7?_wCIUA=eZv3ehl5*|F zBgr#wJ~Ij_v%mT(v_9(R&cMB31HOO%e%{&H)j~)}NEpZ!2HLK@cFk&r{d;#Y{QUBP ziA~d^Zu5c53>WuZ*(|9kHA}-nX~C&&7v}@j%7G0iEGoAA|NsBqyZ7!Had2>Ov#_wT z{Q3Rs%pY}E<8P)GOuKHp{{Q^`8%7Quu01~)zwgsi6!~+KiA5Zwml0POXmve`_tWKD zuzcB31|9|R|NnmfdGYD(XGv2N<^TWxF)(gfyl?;CV<}EJ4Jg_2>Fv~sTfhDP%NWfg z&bOMAhyCE22XF2%FfywA{`u?GpMw&)3=A%RaYm2d#0Sp={Wl%}u_Na{xy>7}uDc=(rvN$J<;@6Sm}2fyC`EV+ODve?V3_iaAC{BVbrnLm($761T> W1DdK0000WdKBJATux^Q)O@^z#6Yn&d^ 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 diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/font_smaller.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/font_smaller.png deleted file mode 100644 index e7dafe034baf5a66f76d8dc90bf0a6643d39fbf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmV;*0yX`KP)qqEmTyyntdb$Q(2O(Ag?CWlz zFt?YmI!`n0v7YnHa7GoqswoZn{{AMIfJ`mkXS6K+1uIg{5nFOZ)zkbq7EE4 zY5BQ>vfFMlX~8gS`7%=gWYL<95!H`BOZM!GNeOWmDsCPi zOB+RBI*1Y+W@E_$i=hYTIw)eLhiNgxsTm36r2&di4bw=E11w4hktJA+)>BiHPWrlT zRCx|f1Mvgkxs{%)daV@YKw$R07*qoM6N<$f}vADc>n+a diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/mail2.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/mail2.png deleted file mode 100644 index 6315fdc229c1a357bec25500edf612abc8a5a9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmV;W16urvP)WdKcYATl%{MrC3kGB7YRATcyLFf=+bI3O!9F)%PHnk;|-000McNliru z(*p(#88a5Wx^Msh010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00R9< zL_t(|+U-_5Zxk^Qo_$=ANJx~Fz!g!X>!PGc3Q`0iu1l4Yzd%n#mEVCWiXCD9uGtnuCNBckA_InX%V zKnQ@gwUiv|46-Z(&NEPo+6voBw}mjZlr#pYCVK5lLWHNyyNr15wB_X7+ zyZgFg+=8^V50J|H;VYOh4h$(vk)0=T7v4Sp0C#u8VonLb`g*Toq)po$b9EQ@7cgcF zesTli=?XV~4>A-F0MT@LIe_VO#=y?bUV+rzt>11M`#zn*0|NMwrjT#}j}^-`Ap%ro z094l2dIgnrJG0|WZ6C-zZsZ$^V7O4~MZeDg8N0fg#XyRvx3~8y)cS_!F+)2S2`)Uv z4$~Vixv0WGx7#ZjsPnCFY#uX=OS5w_P9UN=4A`SmXRt{YvGMh#s%&P)cvfY=rRGmS zv~`iIFU5dM`QL(==ORkLB^PA5#%G`{h||+gFdpAy;8J?#n0f`)0&9-0mAb#W`Uv*- z-{$|QvI{7uQw-QR_+0=|)X_pI-CQqWAweMWI5^#!g6NOq4z>d=t_yH`c%j9W z0L5N82Aa}t8xR{C{e^Dw*SGN&+axrPfkp9feqKHWL_cHFiTbiz%@K4iqb!rPIiM{I zVOTu{1g0rxkS!bd8UQ_`=%qqJN}D9=Kv=yCcx!913uf^G`jL~r1`U7^EssWHxV^p6 zj|JbTHAuDJS1PE9?x6VJx|f184C!u&^lfXCUk;#ieRA?8HH!!Ou|SJU8R)EK4U*r4 z2(-)0$uV=y#OYW)+S;t00000NkvXX Hu0mjf^b3{L diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/mail_attachment.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/mail_attachment.png deleted file mode 100644 index 668440ad2ed0fdcacc53f872a4f762ee4ed930d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2230 zcmV;n2ub&eP)WdKcSATlr@PH%P~GB7YQATlyKFf%$aH6SZ6F)%Re%fspb000McNliru z(*pz)Efle1te5}*010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00<6A zL_t(|+RayMY!ufOKJ(hy_1e2$d;P%m3xi#oK(Kf<5Rww4K8Oe?KnMvfK?==}qzEMy zC?SoMC{Cj!Es;@*P|}J*9SBWIsPY4)rHB$pQPf00?1VyN@7l&*uXoqp#opP+%uc_1 zXZ=|0(xeZyBVEm%ojd1z_dDM?=PuFz_!9or57)0Zr91Dux+a+vH<@N;v1uBEf}p== znvVTXJ~=z|Uj=aJka>4F-1Sq3Lu@K9SE;bjL8%l`AP}W%*M=e`C63+Owl%yC^X7jP zz|o^-NjMyP%`k@VtF5&O9*>O#LFPjgB~lcHl1YOuT)1M!9k1&1x~u-j&Imwv1>vGJ211EM`VZ~db9UWL0USJNE*u!> zKT}i`oau7Kxv_ujIKv%J%ndkYVA8l-&kS5To#Gj?Y}sOf=sWzik0@wru1;4u~ig^SA)nT_j!#hML8u`+oA?Ck721_xz10CfE%B@!KQl;)~d6p2(-LJTFc+u0B>mnkn#f}wm= zKo6ZgO8}D`caqD%MA!tuc#ZbQ^#l;03uheX{I>c z%pnVbBv}sGE*StM86P6TUR*3wM@MKp3nrvx;yV#Gb(H2lZu5yJmSVj#>noWH;LSIG zy?J0Dye6HtoUvUiN`|ACp)+SLQ+~cmvt||YtZ8o_qjIxD-AA{2Xd-cG8R)cJg@Y>792jP%M_FEn61QoH^cX zRkXfm`Vhrw7=VgrYFhkAX=#xejp{u9x7}7jBO|>qDq*)0SAJfeN(>wm=Ez72)W_-N zmoHIE%kA{)t0(EX=a$g!-FI;i$B%zRm6hMddKrva0GM;OA5|ru*5d#|p^&a=np=|0 zkRTM(;9v|p%BP1Pz6;<1hLE=z#9k)9 zKT02e+>QA5)Aj4aRA29=d+(hMY71%O#<_IhKpR+inj2oQpcZw)POYs+XzSKZ09wF9 zF$N$f1gfh3I2zUFcXYIU6D1O9laFqwV37y`IeFngbHc|Om~lYSZo1``TEw^-qN`;V zsIhSt47UT|1zNbUnN?M)t1AZsYiRG@U(x2x4#XJr%s*L@4x>*Ph(>-4wt{Dva$gP(aU2m z%SJYBM7~>VNLc_5j6D7>61k3^;J}W5Mvpx5BZ!+Q9w(}(sGxQ0*5FLJmmYj@Cl3S5 zpedEmFcP49nC8t}NN>OWI;i#{_EsZO6jqYe>?aPs)aLSDVoD)JSgSwk&$&xaD7SwgC&uf~FSo=YD4OjbEQyiN!7J|VDm{|;(4G~9LUNWi_K=fxK{OmXnft{eb~ zgz^QV^=W6P@2}|X+zB!Rj&z^PRp8&XYt>hF@PB{(9Z_ym7Zj`kZvX%Q07*qoM6N<$ Ef@duYIsgCw diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/paste.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/paste.png deleted file mode 100644 index e3397b279cef33b261d14401a1ca40670020b99d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0!00ZP)WdKcSATcu_MrC3kGB7YQATcvKF)}(bF(4~2F)%O}y-DBz000McNliru z(*zh06&B|d?W6zz010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00I+9 zL_t(|+NG1hYtv91$G=IFZE0dhY;ic+QgGCZ2#RL?619gf0gYSx(K{oeDJbj_%pQ!w!I^4|OXzQ51!%M0+IkM^g7 zR;zWgP$;}qN|EPz*PG4e`k?~xlT!`2mB$KNy(5dc?U_4Pe(Hp7nkKf}@5ue|^rtH} zNeQfm!S39#2kUQ>JR_4TRTuPP@r+(_@Ue3Zm(E{79LMR=^z@C~QfSx>dJfSG&e6u& z0&kxk5|C1>8%G^LL|A(B8q3S?AqAypdQL~T^A(ND1Y^wP5LqAOWde#MKwOask8X0J zSWCYl#QrS%9TSOB4|*@I`qs>G85wu4)@?+&>>fSI44s|j)7`*9Ga#h45ttTE+!_9WJH+&#eD-a0v1Sm-`OFotOOWi_kDkh zDZZdqtBeXr8RK^XqGU+uddN%SS#m2#X*gh50ODYRAc(o@H<+fu7i$+$^n*uq0D%yz zq1QbWdKHUATlu^MrC3kGB7YRATcpIF*iChG9W83F)%Q{Dd!0Q000McNliru z(*hU`3l6)7kFEd!010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00B!$ zL_t(|+GAj#5HP|R6L!Bl!^X{R{O`{n215AN)vISGb%vS1O__Y)^O>tJ{{ANxoV)ez ze_r{jGa$VzAcC2V%~(sEiDBnm1_lnG2s;QfL)a`#KzT+84FlTp+zbNp^2TrjK+a-d zU;}H|wQ?2%3s5r?P!lT?L?ejJ3^gDwDGf~j|NEB#%>ana5eaD!S1?2PAOk>bWEU|0 zXN2oPH2|t`?c!Nr8tejQh!;SvNK1p*{`W5vb^~BGC#C>h0d)Zf3ue?YG2t)(WGhI+ zvIVmk*q9+MKn5@uFfszYfGrG|p@Ef}ng)*nTmZ!de}Dgmy8wpg&6$POb{K%`LFVAo zfZ+mU1O6cyuxK83|Dzj>9*Aep-+pflN@3Zl3E)5ig)|6**y!Nsi8~00694*4bG^A8G&q002ovPDHLkV1f>Ywy^*J diff --git a/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_align_justified.png b/trunk/SIPRPSoft/src/siprp/medicina/processo/mail/icons/text_align_justified.png deleted file mode 100644 index 639e7f63d6c436d91047b259e028e98574b3f8c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 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 y20T5#;kK4~Ovl$RcHsL