*** empty log message ***
[thera-pi.git] / Reha / src / patientenFenster / PatNeuanlage.java
blobb8f66137970de49848361d29215b3294ca750286
1 package patientenFenster;
3 import hauptFenster.Reha;
5 import java.awt.AlphaComposite;
6 import java.awt.BorderLayout;
7 import java.awt.Color;
8 import java.awt.Dimension;
9 import java.awt.Font;
10 import java.awt.Graphics;
11 import java.awt.Graphics2D;
12 import java.awt.Image;
13 import java.awt.Point;
14 import java.awt.event.ActionEvent;
15 import java.awt.event.ActionListener;
16 import java.awt.event.FocusEvent;
17 import java.awt.event.FocusListener;
18 import java.awt.event.KeyAdapter;
19 import java.awt.event.KeyEvent;
20 import java.awt.event.KeyListener;
21 import java.awt.event.MouseAdapter;
22 import java.awt.event.MouseEvent;
23 import java.awt.image.BufferedImage;
24 import java.io.ByteArrayInputStream;
25 import java.io.ByteArrayOutputStream;
26 import java.io.IOException;
27 import java.io.Serializable;
28 import java.sql.ResultSet;
29 import java.sql.SQLException;
30 import java.sql.Statement;
31 import java.util.Arrays;
32 import java.util.List;
33 import java.util.Vector;
35 import javax.imageio.ImageIO;
36 import javax.swing.BorderFactory;
37 import javax.swing.ImageIcon;
38 import javax.swing.JButton;
39 import javax.swing.JComponent;
40 import javax.swing.JLabel;
41 import javax.swing.JOptionPane;
42 import javax.swing.JScrollPane;
43 import javax.swing.JTabbedPane;
44 import javax.swing.SwingUtilities;
45 import javax.swing.UIManager;
46 import javax.swing.table.DefaultTableModel;
48 import jxTableTools.TableTool;
49 import krankenKasse.KassenFormulare;
50 import kvKarte.KVKWrapper;
51 import oOorgTools.OOTools;
53 import org.jdesktop.swingworker.SwingWorker;
54 import org.jdesktop.swingx.JXDialog;
55 import org.jdesktop.swingx.JXPanel;
56 import org.jdesktop.swingx.JXTable;
58 import rechteTools.Rechte;
59 import sqlTools.ExUndHop;
60 import sqlTools.SqlInfo;
61 import stammDatenTools.ArztTools;
62 import stammDatenTools.ZuzahlTools;
63 import sun.awt.image.ImageFormatException;
64 import systemEinstellungen.INIFile;
65 import systemEinstellungen.SystemConfig;
66 import systemTools.JCompTools;
67 import systemTools.JRtaCheckBox;
68 import systemTools.JRtaComboBox;
69 import systemTools.JRtaTextField;
70 import systemTools.ListenerTools;
71 import systemTools.StringTools;
72 import terminKalender.DatFunk;
74 import com.jgoodies.forms.builder.PanelBuilder;
75 import com.jgoodies.forms.layout.CellConstraints;
76 import com.jgoodies.forms.layout.FormLayout;
77 import com.jgoodies.looks.windows.WindowsTabbedPaneUI;
78 import com.mysql.jdbc.PreparedStatement;
79 import com.sun.image.codec.jpeg.JPEGCodec;
80 import com.sun.image.codec.jpeg.JPEGImageEncoder;
82 import events.PatStammEvent;
83 import events.PatStammEventClass;
84 import events.RehaTPEvent;
85 import events.RehaTPEventClass;
86 import events.RehaTPEventListener;
88 public class PatNeuanlage extends JXPanel implements RehaTPEventListener,Serializable,ActionListener, KeyListener,FocusListener {
90 /**
93 private static final long serialVersionUID = -5089258058628709139L;
94 /**
98 //private JXPanel Tab1 = null;
99 public JRtaTextField[] jtf = {null,null,null,null,null,
100 null,null,null,null,null,
101 null,null,null,null,null,
102 null,null,null,null,null,
103 null,null,null,null,null,
104 null,null,null,null,null,
105 null,null,null,null,null,
106 null,null}; //,null,null, null};
107 JRtaCheckBox[]jcheck ={null,null,null,null,null,
108 null,null,null,null,null,
109 null};
112 JXTable doclist = null;
113 MyDocTableModel docmod = null;
114 JButton knopf0 = null;
115 JButton knopf1 = null;
116 JButton knopf3 = null;
117 JButton knopf4 = null;
118 JButton knopf5 = null;
119 JButton pic0 = null;
120 JButton pic1 = null;
121 JButton pic2 = null;
123 JRtaComboBox cbanrede = null;
125 //Lemmi 20110103: Merken der Originalwerte der eingelesenen Textfelder, Combo- und Check-Boxen
126 Vector<Object> originale = new Vector<Object>();
128 String kassenid = "";
129 String befreitdatum = "";
130 String befreitbeginn = "";
131 JLabel lblbild = null;
132 boolean freizumstart = false;
133 boolean freibeimspeichern = false;
134 public FocusListener flis;
135 public boolean feldergefuellt = false;
137 JLabel kassenLab;
138 JLabel arztLab;
140 Font font = null;
141 JScrollPane jscr = null;
142 public List<String>xfelder = Arrays.asList( new String[] {"anrede" ,"n_name","v_name","strasse","plz","ort","geboren","telefonp",
143 "telefong","telefonm","emaila","kasse","kv_nummer","v_nummer","kv_status",
144 "bef_dat","artz","arzt_num","therapeut","abwanrede","abwtitel","abn_name",
145 "abwv_name","abwstrasse","abwort","akutdat","termine1","termine2","kilometer",
146 "heimbewohn","jahrfrei","bef_ab"});
147 public List<String> checks = Arrays.asList( new String[] {"abwadress","akutpat" ,"merk1","merk2","merk3","merk4",
148 "merk5","merk6","heimbewohn","nobefr","u18no"});
149 //Achtung bei Feldgr��en �ber > 65 immer 2 abziehen wg. memofelder die nicht eingelesen werden
150 //0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
151 int[] fedits = {0 , 1 , 2 , 3 , 4, 5, 6,11, 7, 8, 9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 };
152 int[] ffelder = {0 , 1 , 2 , 3 ,21,23,24, 4,18,19,20,50,13,14,16,15,31,25,26,56, 6, 7, 8, 9,10,11,12,46,34,36,37,48,40,65,66,67,41};
153 int[] fchecks = {0 , 1 , 2 , 3 , 4 , 5 ,6 , 7 , 8, 9};
154 int[] ffelder2 = {5 ,33 ,62 ,61 , 60 ,59 ,58, 57, 44,68};
155 Vector<String> patDaten = null;
156 ImageIcon hgicon;
157 int icx,icy;
158 AlphaComposite xac1 = null;
159 AlphaComposite xac2 = null;
160 String feldname = "";
161 String globPat_intern = "";
162 public static String arztbisher = "";
163 public static String kassebisher = "";
164 boolean inNeu = false;
165 Vector<String> titel = new Vector<String>() ;
166 Vector<String> formular = new Vector<String>();
167 int iformular = -1;
169 private RehaTPEventClass rtp = null;
171 boolean editvoll = false;
172 private JRtaTextField formularid = new JRtaTextField("NIX",false);
174 private KVKWrapper kvw;
176 boolean startMitBild = false;
177 boolean updateBild = false;
179 public PatNeuanlage(Vector<String> vec,boolean neu,String sfeldname){
180 setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
181 new SwingWorker<Void,Void>(){
182 @Override
183 protected Void doInBackground() throws Exception {
184 setBackgroundPainter(Reha.thisClass.compoundPainter.get("PatNeuanlage"));
185 return null;
187 }.execute();
188 this.setDoubleBuffered(true);
189 this.patDaten = vec;
190 this.inNeu = neu;
191 if(inNeu){
192 editvoll = Rechte.hatRecht(Rechte.Patient_anlegen, false);
193 }else{
194 editvoll = Rechte.hatRecht(Rechte.Patient_editvoll, false);
196 this.feldname = sfeldname;
197 this.setBackground(Color.WHITE);
198 this.setLayout(new BorderLayout());
199 this.font = new Font("Tahome",Font.BOLD,11);
200 this.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
202 add(getButtonPanel(),BorderLayout.SOUTH);
204 UIManager.put("TabbedPane.tabsOpaque", Boolean.FALSE);
205 UIManager.put("TabbedPane.contentOpaque", Boolean.FALSE);
207 JTabbedPane patTab = new JTabbedPane();
208 try{
209 patTab.setUI(new WindowsTabbedPaneUI());
210 }catch(Exception ex){
211 // Kein KarstenLentsch LAF
213 //TabbedPaneUI tpUi = patTab.getUI();
215 patTab.setOpaque(false);
219 patTab.addTab("1 - Stammdaten", Tab1());
220 patTab.addTab("2 - Zusätze", Tab2());
221 patTab.addTab("3 - Sonstiges", Tab3());
222 patTab.setMnemonicAt(0, (int) '1');
223 patTab.setMnemonicAt(1, (int) '2');
224 patTab.setMnemonicAt(2, (int) '3');
226 if(!editvoll){
227 new SwingWorker<Void,Void>(){
228 @Override
229 protected Void doInBackground() throws Exception {
230 for(int i = 0; i < jtf.length;i++){
231 if(jtf[i] != null){
232 jtf[i].setEnabled(false);
235 for(int i = 0; i < jcheck.length;i++){
236 if(jcheck[i] != null){
237 jcheck[i].setEnabled(false);
240 doclist.setEnabled(false);
241 pic0.setEnabled(false);
242 pic1.setEnabled(false);
243 pic2.setEnabled(false);
244 knopf0.setEnabled(false);
245 knopf1.setEnabled(false);
246 knopf3.setEnabled(false);
247 cbanrede.setEnabled(false);
248 jcheck[1].setEnabled(true);
249 jtf[7].setEnabled(true);
250 jtf[8].setEnabled(true);
251 jtf[9].setEnabled(true);
252 jtf[10].setEnabled(true);
253 jtf[19].setEnabled(true);
254 jtf[27].setEnabled(true);
255 jtf[28].setEnabled(true);
256 jtf[29].setEnabled(true);
257 jtf[30].setEnabled(true);
259 return null;
261 }.execute();
265 add(patTab,BorderLayout.CENTER);
267 hgicon = Reha.rehaBackImg;
268 icx = hgicon.getIconWidth()/2;
269 icy = hgicon.getIconHeight()/2;
270 xac1 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.07f);
271 xac2 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f);
273 rtp = new RehaTPEventClass();
274 rtp.addRehaTPEventListener((RehaTPEventListener) this);
275 this.addKeyListener(this);
277 //****************Checken ob Preisgruppen bedient werden****************
279 // nur für den ersten Focus setzen
280 flis = new FocusListener(){
282 @Override
283 public void focusGained(FocusEvent arg0) {
284 // TODO Auto-generated method stub
285 try{
286 if( ((JComponent)arg0.getSource()).getName().equals("PatientenNeuanlage") ){
287 if(inNeu || feldname.equals("")){
288 setzeFocus();
289 }else{
290 if(Reha.thisClass.patpanel.kid < 0 && feldname.equals("KASSE")){
291 if(feldergefuellt){
292 //jtf[12].setText("?"+jtf[12].getText());
295 if(Reha.thisClass.patpanel.aid < 0 && feldname.equals("ARZT")){
296 if(feldergefuellt){
297 //jtf[17].setText("?"+jtf[17].getText());
300 geheAufFeld(feldname);
302 removeFocusListener(this);
304 }catch(java.lang.NullPointerException ex){
308 @Override
309 public void focusLost(FocusEvent arg0) {
310 // TODO Auto-generated method stub
314 this.addFocusListener(flis);
316 new SwingWorker<Void,Void>(){
318 @Override
319 protected Void doInBackground() throws Exception {
320 for(int i = 0; i < ffelder.length;i++ ){
321 jtf[ffelder[i]].addFocusListener(flis);
323 for(int i = 0; i < ffelder2.length;i++ ){
324 jcheck[ffelder2[i]].addFocusListener(flis);
326 return null;
328 }.execute();
331 if((!this.inNeu)){
332 new Thread(){
333 public void run(){
334 fuelleFelder();
335 if(!feldname.equals("")){
336 geheAufFeld(feldname);
339 }.start();
340 }else{
341 jtf[12].setText("?");
342 jtf[17].setText("?");
344 SwingUtilities.invokeLater(new Runnable(){
345 public void run(){
346 if(SystemConfig.sReaderAktiv.equals("1")){
347 kvw = new KVKWrapper(SystemConfig.sReaderName);
348 kvw.KVK_Einlesen();
352 UIManager.put("TabbedPane.tabsOpaque", Boolean.TRUE);
353 UIManager.put("TabbedPane.contentOpaque", Boolean.TRUE);
355 validate();
356 repaint();
358 // Lemmi 20110103: Merken der Originalwerte der eingelesenen Textfelder
359 // SaveChangeStatus();
364 public void geheAufFeld(String feld){
365 ////System.out.println("Focus setzen auf "+feld);
366 final String xfeld = feld;
367 new SwingWorker<Void,Void>(){
369 @Override
370 protected Void doInBackground() throws Exception {
371 // TODO Auto-generated method stub
372 for(int i = 0; i < jtf.length;i++){
373 if(jtf[i].getName() != null){
374 if( jtf[i].getName().trim().toUpperCase().equals(xfeld)){
375 if(! jtf[i].hasFocus()){
376 jtf[i].setCaretPosition(0);
377 jtf[i].requestFocusInWindow();
379 break;
383 return null;
386 }.execute();
388 SwingUtilities.invokeLater(new Runnable(){
389 public void run(){
394 @Override
395 public void paintComponent( Graphics g ) {
396 super.paintComponent( g );
397 Graphics2D g2d = (Graphics2D)g;
399 if(hgicon != null){
400 g2d.setComposite(this.xac1);
401 g2d.drawImage(hgicon.getImage(), (getWidth()/2)-icx , (getHeight()/2)-icy,null);
402 g2d.setComposite(this.xac2);
406 public void setzeFocus(){
407 SwingUtilities.invokeLater(new Runnable(){
408 public void run(){
409 if(! cbanrede.hasFocus()){
410 cbanrede.requestFocusInWindow();
413 });
415 public PatNeuanlage getInstance(){
416 return this;
419 private void fuelleFelder(){
420 //final String xfeld = this.feldname;
422 new SwingWorker<Void,Void>(){
424 @Override
425 protected Void doInBackground() throws Exception {
427 List<String> nichtlesen = Arrays.asList(new String[] {"anamnese","pat_text"});
428 Vector<?> felder = SqlInfo.holeSatz("pat5", "*", "pat_intern='"+Reha.thisClass.patpanel.aktPatID+"'",nichtlesen);
429 int gros = felder.size();
430 int anzahlf = fedits.length;
431 int anzahlc = fchecks.length;
432 if(gros > 0){
433 String name = "";
434 for(int i = 0; i < anzahlf;i++){
435 name = jtf[fedits[i]].getName().trim();
436 if(name.contains("geboren") ||
437 name.contains("akutdat") ||
438 name.contains("akutbis") ||
439 name.contains("bef_dat") ||
440 name.contains("bef_ab") ||
441 name.contains("er_dat")){
442 String datum = String.valueOf((String)felder.get(ffelder[i]));
443 if(datum.trim().length() > 0){
444 ////System.out.println("Datum w�re gewesen->"+datum+" L�nge->"+datum.trim().length());
445 jtf[fedits[i]].setText(DatFunk.sDatInDeutsch(datum) );
447 }else{
448 jtf[fedits[i]].setText((String) felder.get(ffelder[i]) );
453 for(int i = 0; i < anzahlc;i++){
454 jcheck[i].setSelected( (felder.get(ffelder2[i]).equals("F")||felder.get(ffelder2[i]).equals("") ? false : true) );
456 cbanrede.setSelectedItem(jtf[0].getText());
459 if(!feldname.equals("")){
460 geheAufFeld(feldname);
462 arztbisher = jtf[17].getText();
463 kassebisher = jtf[12].getText();
464 kassenid = Reha.thisClass.patpanel.patDaten.get(68);
465 befreitdatum = DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(31));
466 freizumstart = (Reha.thisClass.patpanel.patDaten.get(30).equals("T") ? true : false);
467 if(!jtf[35].getText().trim().equals("")){
468 jcheck[10].setEnabled(true);
471 //System.out.println("Gehe auf Feld 1 -> "+getInstance().feldname);
472 if(! "".equals(getInstance().feldname)){
473 SwingUtilities.invokeLater(new Runnable(){
474 public void run(){
475 //System.out.println("Gehe auf Feld 2 -> "+getInstance().feldname);
476 feldergefuellt = true;
477 geheAufFeld(getInstance().feldname);
479 });
482 return null;
485 }.execute();
488 private void schreibeInDb(){
489 if( jtf[2].getText().trim().equals("") || jtf[3].getText().trim().equals("")
490 || jtf[4].getText().trim().equals("") || jtf[5].getText().trim().equals("")
491 || jtf[6].getText().trim().equals("") || jtf[12].getText().trim().equals("")
492 || jtf[11].getText().trim().equals(". .") || jtf[17].getText().trim().equals("") ){
493 JOptionPane.showMessageDialog(null, "Die Daten des Patienten wurden unvollständig eingegeben!\n\nSpeichern ist nicht möglich.\n");
494 cbanrede.requestFocus();
495 return;
497 //int gros = felder.size();
498 int anzahlf = fedits.length;
499 int anzahlc = fchecks.length;
500 int patintern = 0;
501 String name = "";
502 //String wert = "";
503 String spatintern;
504 StringBuffer buf = new StringBuffer();
505 if(this.inNeu){
506 buf.append("insert into pat5 set ");
507 }else{
508 buf.append("update pat5 set ");
511 for(int i = 1; i < anzahlf;i++){
512 name = jtf[fedits[i]].getName().trim();
513 if(name.contains("geboren") ||
514 name.contains("akutdat") ||
515 name.contains("akutbis") ||
516 name.contains("bef_dat") ||
517 name.contains("bef_ab") ||
518 name.contains("er_dat")){
519 if(jtf[fedits[i]].getText().trim().equals(". .")){
520 buf.append(name+"=NULL, ");
521 if(name.equals("bef_dat")){ //Wenn befreit bis testen ob er wert gr��er als heute
522 buf.append("befreit ='F', ");
523 freibeimspeichern = false;
524 //System.out.println("Patient ist -> nicht <- befreit!");
526 }else{
527 try{
528 buf.append(name+"='"+DatFunk.sDatInSQL(jtf[fedits[i]].getText())+"', ");
529 if(name.equals("bef_dat")){ //Wenn befreit bis testen ob er wert gr��er als heute
530 if( DatFunk.DatumsWert(jtf[fedits[i]].getText()) >= DatFunk.DatumsWert(DatFunk.sHeute()) ){
531 buf.append("befreit ='T', ");
532 freibeimspeichern = true;
533 //System.out.println("Patient ist befreit!");
534 }else{
535 buf.append("befreit ='F', ");
536 freibeimspeichern = false;
539 }catch(java.lang.ArrayIndexOutOfBoundsException ex){
540 buf.append(name+"='"+"*****Problem"+jtf[fedits[i]].getText()+"', ");
544 }else{
545 buf.append(name+"='"+StringTools.Escaped(jtf[fedits[i]].getText())+"', ");
548 buf.append("anrede='"+((String)cbanrede.getSelectedItem()).trim()+"'");
549 for(int i = 0; i < anzahlc;i++){
550 name = jcheck[i].getName();
551 buf.append(", "+name+"='"+(jcheck[i].isSelected() ? "T' " : "F' " ));
554 if(!this.inNeu){
555 globPat_intern = Reha.thisClass.patpanel.aktPatID;
556 buf.append(" where pat_intern='"+globPat_intern+"' LIMIT 1");
557 spatintern = Reha.thisClass.patpanel.aktPatID;
558 // Wenn Kasse veränderr wurde....
559 if(!jtf[34].getText().trim().equals(kassenid)){
560 JOptionPane.showMessageDialog(null, "Achtung - Sie haben dem Patient eine neue Kasse zugewiesen.\n"+
561 "Eventuell ändert sich dadurch der Zuzahlungsstatus vorhandener Rezepte. Bitte prüfen!!!");
563 @SuppressWarnings("unused")
564 int zzregel = -1;
565 boolean doof = false;
566 if(! (freizumstart == freibeimspeichern)){
567 if ( ((zzregel = ZuzahlTools.getZuzahlRegel(jtf[34].getText().trim())) <= 0) ){
568 //System.out.println("Zuzahlregel = "+zzregel+" Kassen-ID = "+jtf[34].getText().trim());
569 //if ( ((zzregel = ZuzahlTools.getZuzahlRegel(jtf[34].getText().trim())) <= 0) && freibeimspeichern){
570 JOptionPane.showMessageDialog(null,"Sie haben einen Kostenträger gwählt der keine Zuzahlung verlangt und\n"+
571 "jetzt wollen Sie im Feld Zuzahlungsbefreiung rummurksen???????\n\nNa ja.....");
572 doof = true;
574 if(!doof){
575 // hier wäre es optimal eine ZuzahlToolsFunktion zu haben.....
576 int anzahl = SqlInfo.zaehleSaetze("verordn", "pat_intern='"+Reha.thisClass.patpanel.aktPatID+"' AND REZ_GEB='0.00'");
577 if(anzahl > 0){
578 String meldung = "Dieser Patient hat -> "+anzahl+" laufende Rezepte <- ohne Abschluss\n"+
579 "Soll der veränderte Befreiungsstatus auf alle noch nicht(!) bezahlten Rezepte übertragen werden?";
580 int frage = JOptionPane.showConfirmDialog(null,meldung,"Achtung wichtige Benuterzanfrage",JOptionPane.YES_NO_OPTION);
581 if(frage == JOptionPane.NO_OPTION){
582 JOptionPane.showMessageDialog(null,"Dann eben nicht!\nVergessen Sie aber nicht den Befreiungsstatus der Rezepte von Hand zu ändern");
583 }else if(frage == JOptionPane.YES_OPTION){
584 String pat_intern = Reha.thisClass.patpanel.aktPatID;
585 String geboren = DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4));
586 String befreit = (freibeimspeichern ? "T" : "F");
587 @SuppressWarnings("unused")
588 String datum = (freibeimspeichern ? "" : jtf[16].getText().trim());
589 ZuzahlTools.zzStatusEdit(pat_intern, geboren, "", befreit, jtf[34].getText().trim());
592 }else{
593 ////System.out.println("Doof = true and zzregel = "+zzregel);
597 }else{
598 // Angelegt von aufgenommen werden
599 //int neuid = SqlInfo.holeId("pat5", "n_name");
600 patintern = SqlInfo.erzeugeNummer("pat"); //neuid+Reha.thisClass.patiddiff;
601 if(patintern < 0){
602 JOptionPane.showMessageDialog(null,"Fehler beim Bezug einer neuen Patientennummer\nNeustart des Programmes vermutlich erforderlich");
603 return;
605 globPat_intern = Integer.toString(patintern); //Integer.valueOf(patintern).toString();
606 buf.append(",anl_datum='"+DatFunk.sDatInSQL(DatFunk.sHeute())+"' ");
607 buf.append(",pat_intern='"+globPat_intern +"'"); // where id='"+Integer.valueOf(neuid).toString()+"'");
608 spatintern = Integer.toString(patintern);
610 SqlInfo.sqlAusfuehren(buf.toString());
611 //new ExUndHop().setzeStatement(buf.toString());
612 if(updateBild){
613 new SwingWorker<Void,Void>(){
614 @Override
615 protected Void doInBackground() throws Exception {
616 speichernPatBild( ( ((inNeu) || (!startMitBild)) ? true : false ),(ImageIcon)lblbild.getIcon(),globPat_intern);
617 return null;
620 }.execute();
624 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).setVisible(false);
625 //final PatNeuanlage xthis = this;
627 String rez_num = "";
628 if(Reha.thisClass.patpanel.aktRezept.tabaktrez.getRowCount()>0){
629 int row = Reha.thisClass.patpanel.aktRezept.tabaktrez.getSelectedRow();
630 if(row>=0){
631 rez_num = Reha.thisClass.patpanel.aktRezept.tabaktrez.getValueAt(row,0).toString().trim();
634 final String xpatintern = spatintern;
635 final String xrez = rez_num;
636 new Thread(){
637 public void run(){
638 Reha.thisClass.patpanel.getLogic().arztListeSpeichernVector((Vector<?>)docmod.getDataVector().clone(), inNeu, String.valueOf(globPat_intern));
639 // new ArztListeSpeichern((Vector)docmod.getDataVector().clone(),inNeu,globPat_intern);
640 //System.out.println("Es wirde die ArztListe gespeichert.....");
641 finalise();
642 ((JXDialog)getInstance().getParent().getParent().getParent().getParent().getParent()).dispose();
643 String s1 = "#PATSUCHEN";
644 String s2 = xpatintern;
645 PatStammEvent pEvt = new PatStammEvent(getInstance());
646 pEvt.setPatStammEvent("PatSuchen");
647 pEvt.setDetails(s1,s2,xrez);
648 PatStammEventClass.firePatStammEvent(pEvt);
649 pEvt = null;
652 }.start();
656 private JXPanel getButtonPanel(){
657 JXPanel but = new JXPanel(new BorderLayout());
658 //but.add(new JLabel("Hier ist Raum f�r Buttons"));
659 but.setOpaque(false);
660 but.setDoubleBuffered(true);
662 knopf3 = new JButton("Chipkarte");
663 knopf3.setPreferredSize(new Dimension(70, 20));
664 knopf3.addActionListener(this);
665 knopf3.setActionCommand("einlesen");
666 knopf3.setName("einlesen");
667 knopf3.addKeyListener(this);
668 knopf3.setMnemonic(KeyEvent.VK_C);
669 //if(SystemConfig.sReaderAktiv.equals("0")){
670 knopf3.setEnabled(false);
673 knopf4 = new JButton("speichern");
674 knopf4.setPreferredSize(new Dimension(70, 20));
675 knopf4.addActionListener(this);
676 knopf4.setActionCommand("speichern");
677 knopf4.setName("speichern");
678 knopf4.addKeyListener(this);
679 knopf4.setMnemonic(KeyEvent.VK_S);
681 knopf5 = new JButton("abbrechen");
682 knopf5.setPreferredSize(new Dimension(70, 20));
683 knopf5.addActionListener(this);
684 knopf5.setActionCommand("abbrechen");
685 knopf5.setName("abbrechen");
686 knopf5.addKeyListener(this);
687 knopf5.setMnemonic(KeyEvent.VK_A);
689 // 1. 2. 3. 4. 5. 6. 7
690 FormLayout lay = new FormLayout("fill:0:grow(0.50), 60dlu,15dlu, 60dlu, 15dlu,60dlu,fill:0:grow(0.50) ",
691 //1. 2. 3. 4. 5.
692 "4dlu, p, 4dlu");
693 PanelBuilder builder = new PanelBuilder(lay);
694 builder.setDefaultDialogBorder();
695 builder.getPanel().setOpaque(false);
697 CellConstraints cc = new CellConstraints();
698 builder.add(knopf3, cc.xy(2,2));
699 builder.add(knopf4, cc.xy(4,2));
700 builder.add(knopf5, cc.xy(6,2));
702 but.add(builder.getPanel(),BorderLayout.CENTER);
703 return but;
706 private JXPanel Tab1(){
707 JXPanel tab1 = new JXPanel(new BorderLayout());
708 tab1.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
709 tab1.setOpaque(false);
710 tab1.setDoubleBuffered(true);
711 tab1.add(getDatenPanel12(),BorderLayout.EAST);
712 tab1.add(getDatenPanel11(),BorderLayout.WEST);
713 tab1.validate();
714 return tab1;
717 private JXPanel Tab2(){
718 JXPanel tab2 = new JXPanel(new BorderLayout());
719 tab2.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
720 tab2.setOpaque(false);
721 tab2.setDoubleBuffered(true);
722 tab2.add(getDatenPanel22(),BorderLayout.EAST);
723 tab2.add(getDatenPanel21(),BorderLayout.WEST);
724 tab2.validate();
725 holeFormulare();
726 return tab2;
729 private JXPanel Tab3(){
730 JXPanel tab3 = new JXPanel(new BorderLayout());
731 tab3.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
732 tab3.setOpaque(false);
733 tab3.setDoubleBuffered(true);
734 tab3.add(getDatenPanel32(),BorderLayout.EAST);
735 tab3.add(getDatenPanel31(),BorderLayout.WEST);
737 return tab3;
740 private JXPanel getDatenPanel12(){
742 JXPanel pat12 = new JXPanel(new BorderLayout());
743 //but.setBorder(null);
744 pat12.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
745 pat12.setOpaque(false);
746 pat12.setDoubleBuffered(true);
750 jtf[12] = new JRtaTextField("GROSS", true);
751 jtf[12].setName("kasse");
752 jtf[12].addKeyListener(new KeyAdapter(){
753 public void keyPressed(KeyEvent arg0) {
754 ////System.out.println("code = "+arg0.getKeyCode());
755 ////System.out.println("char = "+arg0.getKeyChar());
756 if(arg0.getKeyChar()=='?'){
757 String suchkrit = jtf[12].getText().replaceAll("\\?", "");
758 kassenAuswahl(new String[] {suchkrit,jtf[34].getText().trim(),jtf[34].getText()});
762 jtf[12].addFocusListener(this);
764 jtf[13] = new JRtaTextField("ZAHLEN", true);
765 jtf[13].setName("kv_nummer");
767 jtf[14] = new JRtaTextField("ZAHLEN", true);
768 jtf[14].setName("v_nummer");
770 jtf[15] = new JRtaTextField("ZAHLEN", true);
771 jtf[15].setName("kv_status");
773 jtf[16] = new JRtaTextField("DATUM", true);
774 jtf[16].setName("bef_dat"); //aus Kostentr�gerdatei/Karte einlesen?
775 jtf[16].setFont(font);
776 jtf[16].setForeground(Color.RED);
778 jtf[36] = new JRtaTextField("DATUM", true);
779 jtf[36].setName("bef_ab");
780 jtf[36].setFont(font);
781 jtf[36].setForeground(Color.RED);
784 jtf[17] = new JRtaTextField("GROSS", true);
785 jtf[17].setName("arzt");
786 jtf[17].addKeyListener(new KeyAdapter(){
787 public void keyPressed(KeyEvent arg0) {
788 if(arg0.getKeyChar()=='?'){
789 arg0.consume();
790 String[] suchkrit = {jtf[17].getText().replaceAll("\\?", ""),jtf[33].getText()};
791 arztAuswahl(suchkrit);
796 jtf[17].addFocusListener(this);
798 jtf[18] = new JRtaTextField("ZAHLEN", true);
799 jtf[18].setName("arzt_num");
801 jtf[19] = new JRtaTextField("GROSS", true);
802 jtf[19].setName("therapeut");
808 jtf[33] = new JRtaTextField("ZAHLEN", true);
809 jtf[33].setName("arztid");
811 jtf[34] = new JRtaTextField("ZAHLEN", true);
812 jtf[34].setName("kassenid");
815 // 1. 2. 3. 4. 5. 6.
816 FormLayout lay12 = new FormLayout("right:max(80dlu;p), 4dlu, 60dlu,right:max(60dlu;p), 4dlu, 60dlu",
817 //1. 2. 3. 4. 5. 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
818 "p, 10dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 82dlu, p, 20dlu, p, 2dlu, p, 2dlu, p, 2dlu, p");
820 PanelBuilder builder12 = new PanelBuilder(lay12);
821 builder12.setDefaultDialogBorder();
822 builder12.getPanel().setOpaque(false);
823 CellConstraints cc12 = new CellConstraints();
824 builder12.getPanel().setDoubleBuffered(true);
826 builder12.addSeparator("Krankenversicherung", cc12.xyw(1, 1, 6));
827 kassenLab = new JLabel("Kasse *)");
828 kassenLab.setIcon(SystemConfig.hmSysIcons.get("kleinehilfe"));
829 kassenLab.setHorizontalTextPosition(JLabel.LEFT);
831 kassenLab.addMouseListener(new MouseAdapter(){
832 public void mousePressed(MouseEvent ev){
833 if(editvoll){
834 SwingUtilities.invokeLater(new Runnable(){
835 public void run(){
836 String suchkrit = jtf[12].getText().replace("?", "");
837 kassenAuswahl(new String[] {suchkrit,jtf[34].getText().trim(),jtf[34].getText()});
843 builder12.add(kassenLab, cc12.xy(1, 3));
844 builder12.add(jtf[12], cc12.xyw(3, 3, 4));
845 builder12.addLabel("Kassen-IK", cc12.xy(1,5));
846 builder12.add(jtf[13], cc12.xyw(3, 5, 4));
847 builder12.addLabel("Vers-Nr.", cc12.xy(1,7));
848 builder12.add(jtf[14], cc12.xyw(3, 7, 4));
849 builder12.addLabel("Status", cc12.xy(1, 9));
850 builder12.add(jtf[15], cc12.xy(3,9));
851 builder12.addLabel("Befreit von", cc12.xy(1, 11));
852 builder12.add(jtf[36], cc12.xy(3, 11));
853 builder12.addLabel("bis ", cc12.xy(4,11));
854 builder12.add(jtf[16], cc12.xy(6, 11));
856 builder12.addSeparator("Arzt / Therapeut", cc12.xyw(1, 23, 6));
857 arztLab = new JLabel("Hausarzt *)");
858 arztLab.setIcon(SystemConfig.hmSysIcons.get("kleinehilfe"));
859 arztLab.setHorizontalTextPosition(JLabel.LEFT);
860 arztLab.addMouseListener(new MouseAdapter(){
861 public void mousePressed(MouseEvent ev){
862 if(editvoll){
863 SwingUtilities.invokeLater(new Runnable(){
864 public void run(){
865 String[] suchkrit = {jtf[17].getText().replace("?", ""),jtf[33].getText()};
866 arztAuswahl(suchkrit);
872 builder12.add(arztLab, cc12.xy(1, 25));
873 builder12.add(jtf[17], cc12.xyw(3, 25, 4));
874 builder12.addLabel("ArztNummer (LANR)", cc12.xy(1, 27));
875 builder12.add(jtf[18], cc12.xyw(3,27,4));
876 builder12.addLabel("Betreuer/Therapeut", cc12.xy(1, 29));
877 builder12.add(jtf[19], cc12.xyw(3,29,4));
879 JScrollPane jscrzusatz = JCompTools.getTransparentScrollPane(builder12.getPanel());
880 jscrzusatz.getVerticalScrollBar().setUnitIncrement(15);
881 jscrzusatz.getViewport().setOpaque(false);
882 jscrzusatz.setBorder(null);
883 jscrzusatz.setViewportBorder(null);
884 jscrzusatz.validate();
885 jscrzusatz.addKeyListener(this);
886 pat12.add(jscrzusatz,BorderLayout.CENTER);
887 pat12.validate();
888 return pat12;
891 private void finalise(){
892 for(int i = 0; i < jtf.length; i++){
893 if(jtf[i]!= null){
894 ListenerTools.removeListeners(jtf[i]);
895 jtf[i] = null;
899 for(int i = 0; i < jcheck.length; i++){
900 if(jcheck[i]!= null){
901 ListenerTools.removeListeners(jcheck[i]);
902 jcheck[i] = null;
905 ListenerTools.removeListeners(knopf0);
906 ListenerTools.removeListeners(knopf1);
907 ListenerTools.removeListeners(knopf3);
908 ListenerTools.removeListeners(knopf4);
909 ListenerTools.removeListeners(knopf5);
910 xfelder = null;
911 checks = null;
912 doclist = null;
913 docmod = null;
914 if(rtp != null){
915 rtp.removeRehaTPEventListener((RehaTPEventListener) this);
916 rtp = null;
921 private JXPanel getDatenPanel21(){
922 JXPanel pat21 = new JXPanel(new BorderLayout());
923 //but.setBorder(null);
924 pat21.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
925 pat21.setOpaque(false);
926 pat21.setDoubleBuffered(true);
929 jtf[20] = new JRtaTextField("GROSS", true);
930 jtf[20].setName("abwanrede");
932 jtf[21] = new JRtaTextField("GROSS", true);
933 jtf[21].setName("abwtitel");
935 jtf[22] = new JRtaTextField("GROSS", true);
936 jtf[22].setName("abwn_name");
938 jtf[23] = new JRtaTextField("GROSS", true);
939 jtf[23].setName("abwv_name");
941 jtf[24] = new JRtaTextField("GROSS", true);
942 jtf[24].setName("abwstrasse");
944 jtf[25] = new JRtaTextField("GROSS", true);
945 jtf[25].setName("abwplz");
947 jtf[26] = new JRtaTextField("GROSS", true);
948 jtf[26].setName("abwort");
950 jtf[31] = new JRtaTextField("ZAHLEN", true);
951 jtf[31].setName("kilometer");
953 jtf[32] = new JRtaTextField("DATUM", true);
954 jtf[32].setName("er_dat");
956 jtf[35] = new JRtaTextField("ZAHLEN", true);
957 jtf[35].setName("jahrfrei");
958 jtf[35].setEnabled(false);
960 jcheck[0] = new JRtaCheckBox();
961 jcheck[0].setOpaque(false);
962 jcheck[0].setName("abwadress");
964 jcheck[8] = new JRtaCheckBox();
965 jcheck[8].setOpaque(false);
966 jcheck[8].setName("heimbewohn");
968 jcheck[10] = new JRtaCheckBox();
969 jcheck[10].setOpaque(false);
970 jcheck[10].setName("vorjahrfrei");
971 jcheck[10].setActionCommand("vorjahrfrei");
972 //jcheck[10].setEnabled(false);
973 jcheck[10].addActionListener(this);
975 jcheck[9] = new JRtaCheckBox();
976 jcheck[9].setOpaque(false);
977 jcheck[9].setName("u18ignore");
978 jcheck[9].setActionCommand("u18ignore");
979 jcheck[9].setEnabled(false);
980 jcheck[9].addActionListener(this);
983 FormLayout lay21 = new FormLayout("right:max(80dlu;p), 4dlu, 60dlu,right:max(60dlu;p), 4dlu, 60dlu",
984 //1. 2. 3. 4. 5. 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
985 "p, 10dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 10dlu, p, 10dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p");
987 PanelBuilder builder21 = new PanelBuilder(lay21);
988 builder21.setDefaultDialogBorder();
989 builder21.getPanel().setOpaque(false);
990 CellConstraints cc21 = new CellConstraints();
991 builder21.getPanel().setDoubleBuffered(true);
993 builder21.addSeparator("Zusätze", cc21.xyw(1, 1, 6));
994 builder21.addLabel("Kilometer bei HB", cc21.xy(1, 3));
995 builder21.add(jtf[31], cc21.xy(3, 3));
996 builder21.addLabel("Heimbewohner", cc21.xy(1,5));
997 builder21.add(jcheck[8], cc21.xy(3, 5));
998 builder21.addLabel("befreit im Vorjahr", cc21.xy(1,7));
999 builder21.add(jtf[35],cc21.xy(3,7));
1000 builder21.addLabel("löschen?", cc21.xy(4,7));
1001 builder21.add(jcheck[10],cc21.xy(6, 7));
1002 builder21.addLabel("U18-Regel ignorieren?",cc21.xy(1,9));
1003 builder21.add(jcheck[9],cc21.xy(3, 9));
1004 builder21.addLabel("Vertrag unterz. am", cc21.xy(1, 11));
1005 builder21.add(jtf[32], cc21.xy(3, 11));
1007 builder21.addSeparator("abweichender Rechnungsempfänger/Versicherter", cc21.xyw(1, 13, 6));
1008 builder21.addLabel("verwenden", cc21.xy(1,15));
1009 builder21.add(jcheck[0], cc21.xy(3,15));
1010 builder21.addLabel("Anrede", cc21.xy(1, 17));
1011 builder21.add(jtf[20], cc21.xy(3, 17));
1012 builder21.addLabel("Titel", cc21.xy(4, 17));
1013 builder21.add(jtf[21], cc21.xy(6, 17));
1014 builder21.addLabel("Nachname", cc21.xy(1, 19));
1015 builder21.add(jtf[22], cc21.xyw(3, 19, 4));
1016 builder21.addLabel("Vorname", cc21.xy(1, 21));
1017 builder21.add(jtf[23], cc21.xyw(3,21,4));
1018 builder21.addLabel("Strasse, Nr.", cc21.xy(1, 23));
1019 builder21.add(jtf[24], cc21.xyw(3, 23, 4));
1020 builder21.addLabel("PLZ, Ort", cc21.xy(1, 25));
1021 builder21.add(jtf[25], cc21.xy(3, 25));
1022 builder21.add(jtf[26], cc21.xyw(4, 25, 3));
1026 JScrollPane jscrzusatz = JCompTools.getTransparentScrollPane(builder21.getPanel());
1027 jscrzusatz.getVerticalScrollBar().setUnitIncrement(15);
1028 jscrzusatz.getViewport().setOpaque(false);
1029 jscrzusatz.setBorder(null);
1030 jscrzusatz.setViewportBorder(null);
1031 jscrzusatz.validate();
1032 jscrzusatz.addKeyListener(this);
1033 pat21.add(jscrzusatz,BorderLayout.CENTER);
1034 pat21.validate();
1035 return pat21;
1038 private JXPanel getDatenPanel22(){
1039 JXPanel pat22 = new JXPanel(new BorderLayout());
1040 //but.setBorder(null);
1041 pat22.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
1042 pat22.setOpaque(false);
1043 pat22.setDoubleBuffered(true);
1045 jcheck[2] = new JRtaCheckBox(SystemConfig.vPatMerker.get(0));
1046 jcheck[2].setOpaque(false);
1047 jcheck[2].setName("merk1");
1049 jcheck[3] = new JRtaCheckBox(SystemConfig.vPatMerker.get(1));
1050 jcheck[3].setOpaque(false);
1051 jcheck[3].setName("merk2");
1053 jcheck[4] = new JRtaCheckBox(SystemConfig.vPatMerker.get(2));
1054 jcheck[4].setOpaque(false);
1055 jcheck[4].setName("merk3");
1057 jcheck[5] = new JRtaCheckBox(SystemConfig.vPatMerker.get(3));
1058 jcheck[5].setOpaque(false);
1059 jcheck[5].setName("merk4");
1061 jcheck[6] = new JRtaCheckBox(SystemConfig.vPatMerker.get(4));
1062 jcheck[6].setOpaque(false);
1063 jcheck[6].setName("merk5");
1065 jcheck[7] = new JRtaCheckBox(SystemConfig.vPatMerker.get(5));
1066 jcheck[7].setOpaque(false);
1067 jcheck[7].setName("merk6");
1069 //die Labeltexte merk2 bis merk7 aus Datenbank/SysINI einlesen?
1070 docmod = new MyDocTableModel();
1071 docmod.setColumnIdentifiers(new String[] {"LANR","Nachname","Strasse","Ort","BSNR",""});
1072 doclist = new JXTable(docmod);
1073 doclist.getColumn(5).setMinWidth(0);
1074 doclist.getColumn(5).setMaxWidth(0);
1075 doclist.addMouseListener(new MouseAdapter(){
1076 public void mouseClicked(MouseEvent arg0) {
1078 if(arg0.getClickCount()==2 && arg0.getButton()==1){
1079 final Point pt = arg0.getLocationOnScreen();
1080 new SwingWorker<Void,Void>(){
1081 @Override
1082 protected Void doInBackground() throws Exception {
1083 try{
1084 arztInListeDoppelKlick(pt);
1085 }catch(Exception ex){
1086 ex.printStackTrace();
1088 return null;
1091 }.execute();
1096 new SwingWorker<Void,Void>(){
1097 @Override
1098 protected Void doInBackground() throws Exception {
1099 doArztListe();
1100 return null;
1102 }.execute();
1103 JScrollPane docscr = JCompTools.getTransparentScrollPane(doclist);
1104 docscr.validate();
1106 knopf0 = new JButton("entfernen");
1107 knopf0.setPreferredSize(new Dimension(70, 20));
1108 knopf0.addActionListener(this);
1109 knopf0.setName("entfernen");
1110 knopf0.setActionCommand("deldoc");
1111 knopf0.addKeyListener(this);
1112 knopf1 = new JButton("hinzu");
1113 knopf1.setPreferredSize(new Dimension(70, 20));
1114 knopf1.addActionListener(this);
1115 knopf1.setName("hinzu");
1116 knopf1.setActionCommand("adddoc");
1117 knopf1.addKeyListener(this);
1120 FormLayout lay22 = new FormLayout("right:max(80dlu;p), 4dlu, 60dlu,right:max(60dlu;p), 4dlu, 60dlu",
1121 //1. 2. 3. 4. 5. 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
1122 "p, 10dlu, p, 2dlu, p, 2dlu, p, 42dlu, p, 11dlu, 90dlu, 5dlu, p");
1124 PanelBuilder builder22 = new PanelBuilder(lay22);
1125 builder22.setDefaultDialogBorder();
1126 builder22.getPanel().setOpaque(false);
1127 CellConstraints cc22 = new CellConstraints();
1128 builder22.getPanel().setDoubleBuffered(true);
1130 builder22.addSeparator("individuelle Merkmale", cc22.xyw(1, 1, 6));
1132 builder22.add(jcheck[2], cc22.xy(3, 3));
1133 builder22.add(jcheck[3], cc22.xy(6, 3));
1134 builder22.add(jcheck[4], cc22.xy(3, 5));
1135 builder22.add(jcheck[5], cc22.xy(6, 5));
1136 builder22.add(jcheck[6], cc22.xy(3, 7));
1137 builder22.add(jcheck[7], cc22.xy(6,7));
1139 builder22.addSeparator("Ärzteliste des Patienten", cc22.xyw(1,9,6));
1140 builder22.add(docscr, cc22.xyw(1, 11, 6));
1141 builder22.addLabel("Arzt aufnehmen", cc22.xy(1,13));
1142 builder22.add(knopf1, cc22.xy(3,13));
1143 builder22.addLabel("Arzt entfernen", cc22.xy(4,13));
1144 builder22.add(knopf0, cc22.xy(6,13));
1148 JScrollPane jscrzusatz = JCompTools.getTransparentScrollPane(builder22.getPanel());
1149 jscrzusatz.getVerticalScrollBar().setUnitIncrement(15);
1150 jscrzusatz.getViewport().setOpaque(false);
1151 jscrzusatz.setBorder(null);
1152 jscrzusatz.setViewportBorder(null);
1153 jscrzusatz.validate();
1154 jscrzusatz.addKeyListener(this);
1155 pat22.add(jscrzusatz,BorderLayout.CENTER);
1156 pat22.validate();
1157 return pat22;
1159 public void setNewPic(ImageIcon img){
1160 lblbild.setText("");
1161 lblbild.setIcon(img);
1162 updateBild = true;
1165 private JXPanel getDatenPanel31(){
1166 JXPanel pat31 = new JXPanel(new BorderLayout());
1167 //but.setBorder(null);
1168 pat31.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
1169 pat31.setOpaque(false);
1170 pat31.setDoubleBuffered(true);
1173 pic0 = new JButton("verwerfen");
1174 pic0.setPreferredSize(new Dimension(70, 20));
1175 pic0.addActionListener(this);
1176 pic0.setActionCommand("delpic");
1177 pic0.addKeyListener(this);
1178 pic1 = new JButton("Aufnahme");
1179 pic1.setPreferredSize(new Dimension(70, 20));
1180 pic1.addActionListener(this);
1181 pic1.setActionCommand("addpic");
1182 pic1.addKeyListener(this);
1183 pic2 = new JButton("Bilddatei");
1184 pic2.setPreferredSize(new Dimension(70, 20));
1185 pic2.addActionListener(this);
1186 pic2.setActionCommand("addjpg");
1187 pic2.addKeyListener(this);
1190 FormLayout lay31 = new FormLayout("right:max(80dlu;p), 4dlu, 175px,right:max(60dlu;p), 4dlu, 60dlu",
1191 //1. 2. 3. 4. 5. 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
1192 "p, 10dlu, 220px, 2dlu, p");
1194 PanelBuilder builder31 = new PanelBuilder(lay31);
1195 builder31.setDefaultDialogBorder();
1196 builder31.getPanel().setOpaque(false);
1197 CellConstraints cc31 = new CellConstraints();
1198 builder31.getPanel().setDoubleBuffered(true);
1200 builder31.addSeparator("Patientenfoto", cc31.xyw(1, 1, 6));
1201 lblbild = new JLabel();
1202 builder31.add(lblbild, cc31.xy(3, 3));
1203 builder31.addLabel("Bild aufnehmen", cc31.xy(1,5));
1204 /****/
1205 JXPanel pan = new JXPanel();
1206 pan.setOpaque(false);
1207 FormLayout lay2 = new FormLayout("fill:0:grow(0.5),2px,fill:0:grow(0.5)","p");
1208 pan.setLayout(lay2);
1209 CellConstraints cc2 = new CellConstraints();
1210 pan.add(pic1, cc2.xy(1,1,CellConstraints.FILL,CellConstraints.DEFAULT));
1211 pan.add(pic2, cc2.xy(3,1,CellConstraints.FILL,CellConstraints.DEFAULT));
1212 builder31.add(pan, cc31.xy(3,5));
1213 /****/
1214 //builder31.add(pic1, cc31.xy(3,5));
1215 builder31.addLabel("Bild verwerfen", cc31.xy(4,5));
1216 builder31.add(pic0, cc31.xy(6,5));
1217 new SwingWorker<Void,Void>(){
1218 @Override
1219 protected Void doInBackground() throws Exception {
1220 try{
1221 if(! inNeu){
1222 BufferedImage img = holePatBild(Reha.thisClass.patpanel.aktPatID);
1223 if(img==null){
1224 lblbild.setText("Kein Bild des Patienten vorhanden");
1225 }else{
1226 lblbild.setText("");
1227 lblbild.setIcon(new ImageIcon(img));
1228 startMitBild = true;
1230 }else{
1231 lblbild.setText("Kein Bild des Patienten vorhanden");
1232 lblbild.setIcon(null);
1234 }catch(Exception ex){
1235 ex.printStackTrace();
1237 return null;
1239 }.execute();
1243 JScrollPane jscrzusatz = JCompTools.getTransparentScrollPane(builder31.getPanel());
1244 jscrzusatz.getVerticalScrollBar().setUnitIncrement(15);
1245 jscrzusatz.getViewport().setOpaque(false);
1246 jscrzusatz.setBorder(null);
1247 jscrzusatz.setViewportBorder(null);
1248 jscrzusatz.validate();
1249 jscrzusatz.addKeyListener(this);
1250 pat31.add(jscrzusatz,BorderLayout.CENTER);
1251 pat31.validate();
1252 return pat31;
1255 @SuppressWarnings("unused")
1256 private ImageIcon getPatBild(){
1257 return null;
1260 private JXPanel getDatenPanel32(){
1261 JXPanel pat32 = new JXPanel(new BorderLayout());
1262 //but.setBorder(null);
1263 pat32.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
1264 pat32.setOpaque(false);
1265 pat32.setDoubleBuffered(true);
1271 FormLayout lay32 = new FormLayout("right:max(80dlu;p), 4dlu, 60dlu,right:max(60dlu;p), 4dlu, 60dlu",
1272 //1. 2. 3. 4. 5. 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
1273 "p, 10dlu, 160dlu, 2dlu, p");
1275 PanelBuilder builder32 = new PanelBuilder(lay32);
1276 builder32.setDefaultDialogBorder();
1277 builder32.getPanel().setOpaque(false);
1278 CellConstraints cc32 = new CellConstraints();
1279 builder32.getPanel().setDoubleBuffered(true);
1281 builder32.addLabel("Space for future Extensions", cc32.xyw(1,3, 6));
1283 JScrollPane jscrzusatz = JCompTools.getTransparentScrollPane(builder32.getPanel());
1284 jscrzusatz.getVerticalScrollBar().setUnitIncrement(15);
1285 jscrzusatz.getViewport().setOpaque(false);
1286 jscrzusatz.setBorder(null);
1287 jscrzusatz.setViewportBorder(null);
1288 jscrzusatz.validate();
1289 jscrzusatz.addKeyListener(this);
1290 pat32.add(jscrzusatz,BorderLayout.CENTER);
1291 pat32.validate();
1292 return pat32;
1295 private JXPanel getDatenPanel11(){
1296 JXPanel pat11 = new JXPanel(new BorderLayout());
1297 //but.setBorder(null);
1298 pat11.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
1299 pat11.setOpaque(false);
1300 pat11.setDoubleBuffered(true);
1302 cbanrede = new JRtaComboBox(new String[] {"HERR","FRAU"});
1303 cbanrede.addKeyListener(this);
1304 jtf[0] = new JRtaTextField("GROSS", true);
1305 jtf[0].setName("anrede");
1307 jtf[1] = new JRtaTextField("GROSS", true);
1308 jtf[1].setName("titel");
1310 jtf[2] = new JRtaTextField("GROSS", true);
1311 jtf[2].setName("n_name");
1312 jtf[2].setFont(font);
1313 jtf[2].setForeground(Color.RED);
1315 jtf[3] = new JRtaTextField("GROSS", true);
1316 jtf[3].setName("v_name");
1317 jtf[3].setFont(font);
1318 jtf[3].setForeground(Color.RED);
1320 jtf[4] = new JRtaTextField("GROSS", true);
1321 jtf[4].setName("strasse");
1323 jtf[5] = new JRtaTextField("ZAHLEN", true);
1324 jtf[5].setName("plz");
1326 jtf[6] = new JRtaTextField("GROSS", true);
1327 jtf[6].setName("ort");
1329 jtf[7] = new JRtaTextField("GROSS", true);
1330 jtf[7].setName("telefonp");
1332 jtf[8] = new JRtaTextField("GROSS", true);
1333 jtf[8].setName("telefong");
1335 jtf[9] = new JRtaTextField("GROSS", true);
1336 jtf[9].setName("telefonm");
1338 jtf[10] = new JRtaTextField("", true);
1339 jtf[10].setName("emaila");
1341 jtf[11] = new JRtaTextField("DATUM", true);
1342 jtf[11].setName("geboren");
1343 jtf[11].setFont(font);
1344 jtf[11].setForeground(Color.RED);
1346 jtf[27] = new JRtaTextField("DATUM", true);
1347 jtf[27].setName("akutbis");
1349 jtf[28] = new JRtaTextField("DATUM", true);
1350 jtf[28].setName("akutdat");
1352 jtf[29] = new JRtaTextField("GROSS", true);
1353 jtf[29].setName("termine1");
1355 jtf[30] = new JRtaTextField("GROSS", true);
1356 jtf[30].setName("termine2");
1358 jcheck[1] = new JRtaCheckBox();
1359 jcheck[1].setOpaque(false);
1360 jcheck[1].setName("akutpat");
1364 // 1. 2. 3. 4. 5. 6.
1365 FormLayout lay11 = new FormLayout("right:max(80dlu;p), 4dlu, 60dlu,right:max(60dlu;p), 4dlu, 60dlu",
1366 //1. 2. 3. 4. 5. 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
1367 "p, 10dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 10dlu, p, 10dlu, p, 2dlu, p, 2dlu, p, 2dlu, p");
1368 PanelBuilder builder = new PanelBuilder(lay11);
1369 builder.setDefaultDialogBorder();
1370 builder.getPanel().setOpaque(false);
1371 CellConstraints cc11 = new CellConstraints();
1372 builder.getPanel().setDoubleBuffered(true);
1374 builder.addSeparator("Personendaten",cc11.xyw(1,1,6));
1375 builder.addLabel("Anrede", cc11.xy(1,3));
1376 builder.add(cbanrede, cc11.xy(3,3));
1377 //builder.add(jtf[0], cc11.xy(3,1));
1378 builder.addLabel("Titel", cc11.xy(4,3));
1379 builder.add(jtf[1], cc11.xy(6,3));
1380 builder.addLabel("Nachname *)", cc11.xy(1,5));
1381 builder.add(jtf[2], cc11.xyw(3, 5, 4));
1382 builder.addLabel("Vorname *)", cc11.xy(1,7));
1383 builder.add(jtf[3], cc11.xyw(3, 7, 4));
1384 builder.addLabel("Strasse, Nr. *)", cc11.xy(1,9));
1385 builder.add(jtf[4], cc11.xyw(3, 9, 4));
1386 builder.addLabel("PLZ, Ort *)", cc11.xy(1,11));
1387 builder.add(jtf[5], cc11.xy(3, 11));
1388 builder.add(jtf[6], cc11.xyw(4, 11, 3));
1389 builder.addLabel("Geburtstag *)", cc11.xy(1,13));
1390 builder.add(jtf[11], cc11.xy(3, 13));
1391 builder.addLabel("Telefon priv.", cc11.xy(1, 15));
1392 builder.add(jtf[7], cc11.xyw(3, 15, 4));
1393 builder.addLabel("Telefon gesch.", cc11.xy(1, 17));
1394 builder.add(jtf[8], cc11.xyw(3, 17, 4));
1395 builder.addLabel("Mobil", cc11.xy(1, 19));
1396 builder.add(jtf[9], cc11.xyw(3, 19, 4));
1397 builder.addLabel("Email", cc11.xy(1, 21));
1398 builder.add(jtf[10], cc11.xyw(3, 21, 4));
1402 builder.addSeparator("Plandaten", cc11.xyw(1, 23, 6));
1404 builder.addLabel("Akutpatient", cc11.xy(1,25));
1405 builder.add(jcheck[1], cc11.xy(3,25));
1407 builder.addLabel("akut von", cc11.xy(1,27));
1408 builder.add(jtf[28], cc11.xy(3, 27));
1409 builder.addLabel("akut bis", cc11.xy(4,27));
1410 builder.add(jtf[27], cc11.xy(6, 27));
1412 builder.addLabel("mögliche Termine 1", cc11.xy(1, 29));
1413 builder.add(jtf[29], cc11.xyw(3, 29, 4));
1414 builder.addLabel("mögliche Termine 2", cc11.xy(1, 31));
1415 builder.add(jtf[30], cc11.xyw(3, 31, 4));
1419 builder.getPanel().addKeyListener(this);
1420 builder.getPanel().addFocusListener(this);
1421 builder.getPanel().validate();
1422 JScrollPane xjscr = JCompTools.getTransparentScrollPane(builder.getPanel());
1423 //jscr = new JScrollPane();
1424 //jscr.setOpaque(false);
1425 //jscr.getViewport().setOpaque(false);
1426 //jscr.setBorder(null);
1427 //jscr.setViewportBorder(null);
1428 xjscr.getVerticalScrollBar().setUnitIncrement(15);
1429 //jscr.setViewportView(builder.getPanel());
1431 xjscr.validate();
1432 xjscr.addKeyListener(this);
1434 pat11.add(xjscr,BorderLayout.CENTER);
1435 pat11.validate();
1436 return pat11;
1439 public static String getArztBisher(){
1440 return arztbisher;
1442 public static String getKasseBisher(){
1443 return kassebisher;
1445 private void doArztListe(){
1446 if(this.inNeu){
1447 return;
1449 //System.out.println("in doArztListe");
1450 String aerzte = Reha.thisClass.patpanel.patDaten.get(63);
1451 String[] einzelarzt = null;
1452 String[] arztdaten = null;
1453 Vector<?> arztvec = null;
1454 if(!aerzte.trim().equals("")){
1455 einzelarzt = aerzte.split("\n");
1456 //System.out.println("Anzahl Ärzte = "+einzelarzt.length);
1457 for(int i = 0; i < einzelarzt.length;i++){
1458 arztdaten = einzelarzt[i].split("@");
1459 //docmod.setColumnIdentifiers(new String[] {"LANR","Nachname","Strasse","Ort","BSNR",""});
1460 arztvec = SqlInfo.holeFelder("select arztnum,nachname,strasse,ort,bsnr,id from arzt where id='"+arztdaten[1]+"' LIMIT 1" );
1461 if(arztvec.size() > 0){
1462 docmod.addRow((Vector<?>)arztvec.get(0));
1465 if(docmod.getRowCount()>0){
1466 doclist.setRowSelectionInterval(0, 0);
1470 public void enableReaderButton(){
1471 if(SystemConfig.sReaderAktiv.equals("0")){
1472 return;
1474 knopf3.setEnabled(true);
1475 einlesen();
1477 public void disableReaderButton(){
1478 if(SystemConfig.sReaderAktiv.equals("0")){
1479 return;
1481 knopf3.setEnabled(false);
1484 private void einlesen(){
1486 if(SystemConfig.sReaderAktiv.equals("0")){
1487 return;
1489 if(!Reha.thisClass.ocKVK.isCardReady){
1490 JOptionPane.showMessageDialog(null,"Chipkarten-Lesegerät ist nicht bereit");
1491 return;
1493 if(SystemConfig.hmKVKDaten.isEmpty()){
1494 JOptionPane.showMessageDialog(null,"Daten der Chipkarte konnten nicht gelesen werden");
1495 return;
1497 ////System.out.println("Aufruf der KVK");
1498 KVKWrapper kvw = new KVKWrapper(SystemConfig.sReaderName);
1499 int ret = kvw.KVK_Einlesen();
1500 if(ret==0){
1501 KVKRohDaten kvkr = new KVKRohDaten(this);
1502 kvkr.setModal(true);
1503 kvkr.setLocationRelativeTo(this);
1504 kvkr.setVisible(true);
1505 setzeFocus();
1506 kvkr = null;
1507 //cbanrede.requestFocus();
1508 }else{
1509 String fehlertext = "Fehler beim einlesen der Versichertenkarte.\nBitte erneut einlesen\n\n";
1510 //"Fehler-Code: "+SystemConfig.hmKVKDaten.get("Fehlercode")+"\n"+
1511 //"Fehler-Text: "+SystemConfig.hmKVKDaten.get("Fehlertext")+"\n";
1512 JOptionPane.showMessageDialog(null,fehlertext);
1515 @Override
1516 public void actionPerformed(ActionEvent arg0) {
1517 // TODO Auto-generated method stub
1518 String com = arg0.getActionCommand();
1519 if(com.equals("einlesen")){
1520 if(SystemConfig.sReaderAktiv.equals("0")){
1521 return;
1523 einlesen();
1524 }else if(com.equals("speichern")){
1525 schreibeInDb();
1526 }else if(com.equals("abbrechen")){
1527 // Lemmi 20110103: Verhinderung von Datenverlust bei unbeabsichtigtem Zumachen des geänderten Patientent-Dialoges
1528 // if ( HasChanged() && askForCancelUsaved() == 1 )
1529 // return;
1530 finalise();
1531 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
1532 }else if(com.equals("adddoc")){
1533 arztInListeAuswahl();
1534 }else if(com.equals("deldoc")){
1535 int row = -1;
1536 if( (row = doclist.getSelectedRow()) < 0){
1537 return;
1538 }else{
1539 TableTool.loescheRow(doclist, row);
1542 }else if(com.equals("u18ignore")){
1544 }else if(com.equals("vorjahrfrei")){
1545 //System.out.println("in checkBox Vorjahrfrei");
1546 if(jcheck[10].isSelected()){
1547 jtf[35].setText("");
1548 }else{
1549 jtf[35].setText(SystemConfig.vorJahr);
1551 }else if(com.equals("delpic")){
1552 if( lblbild.getIcon()!=null && !inNeu){
1553 int frage = JOptionPane.showConfirmDialog(null,"Wollen Sie das Patientenfoto wirklich löschen?","Wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1554 if(frage==JOptionPane.YES_OPTION){
1555 SqlInfo.sqlAusfuehren("delete from patbild where pat_intern = '"+
1556 Reha.thisClass.patpanel.aktPatID+"' LIMIT 1");
1557 }else{
1558 return;
1561 lblbild.setIcon(null);
1562 lblbild.setText("Kein Bild des Patienten vorhanden");
1563 startMitBild = false;
1564 updateBild = false;
1565 return;
1566 }else if(com.equals("addpic")){
1567 if(SystemConfig.sWebCamActive.equals("0")){
1568 JOptionPane.showMessageDialog(null,"WebCam entweder nicht aktiviert (System-Initialisierung)\noder nicht angeschlossen!");
1569 return;
1571 PatientenFoto foto = new PatientenFoto(null,"patBild",this);
1572 foto.setModal(true);
1573 foto.setLocationRelativeTo(null);
1574 foto.pack();
1575 foto.setVisible(true);
1576 foto = null;
1577 return;
1579 }else if(com.equals("addjpg")){
1580 JOptionPane.showMessageDialog(null,"Aufnahme von fertigen Bilddateien (noch) nicht implementiert");
1585 @Override
1586 public void keyPressed(KeyEvent arg0) {
1587 // TODO Auto-generated method stub
1588 ////System.out.println("Neuanlage Pressed "+arg0.getKeyCode());
1589 if(arg0.getKeyCode()== 10 || arg0.getKeyCode()==0){
1590 arg0.consume();
1591 try{
1592 if(((JComponent)arg0.getSource()).getName().equals("einlesen")){
1593 einlesen();
1594 return;
1596 if(((JComponent)arg0.getSource()).getName().equals("speichern")){
1597 schreibeInDb();
1598 return;
1600 if(((JComponent)arg0.getSource()).getName().equals("abbrechen")){
1602 // Lemmi 20110103: Verhinderung von Datenverlust bei unbeabsichtigtem Zumachen des geänderten Patientent-Dialoges
1603 // if ( HasChanged() && askForCancelUsaved() == 1 )
1604 // return;
1606 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).setVisible(false);
1607 finalise();
1608 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
1609 return;
1611 }catch(Exception ex){
1616 if(arg0.getKeyCode()==27){
1618 // Lemmi 20110103: Verhinderung von Datenverlust bei unbeabsichtigtem Zumachen des geänderten Patientent-Dialoges
1619 // if ( HasChanged() && askForCancelUsaved() == 1 )
1620 // return;
1622 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).setVisible(false);
1623 finalise();
1624 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
1628 @Override
1629 public void keyReleased(KeyEvent arg0) {
1630 // TODO Auto-generated method stub
1631 ////System.out.println("Neuanlage Released "+arg0);
1632 if(arg0.getKeyCode()== 10 || arg0.getKeyCode()==0)
1633 arg0.consume();
1635 @Override
1636 public void keyTyped(KeyEvent arg0) {
1637 // TODO Auto-generated method stub
1638 ////System.out.println("Neuanlage Typed "+arg0);
1639 if(arg0.getKeyCode()== 10 || arg0.getKeyCode()==0)
1640 arg0.consume();
1643 @Override
1644 public void focusGained(FocusEvent arg0) {
1645 // TODO Auto-generated method stub
1647 Rectangle rec1 =((JComponent)arg0.getSource()).getBounds();
1648 Rectangle rec2 = jscr.getViewport().getViewRect();
1649 JViewport vp = jscr.getViewport();
1650 Rectangle rec3 = vp.getVisibleRect();
1651 if((rec1.y+((JComponent)arg0.getSource()).getHeight()) > (rec2.y+rec2.height)){
1652 vp.setViewPosition(new Point(rec1.x,(rec2.y+rec2.height)-rec1.height));
1654 if(rec1.y < (rec2.y)){
1655 vp.setViewPosition(new Point(rec1.x,rec1.y));
1657 jscr.validate();
1658 jscr.repaint();
1661 if( ((JComponent)arg0.getSource()).getName() != null){
1662 if(((JComponent)arg0.getSource()).getName().equals("arzt")){
1663 if(testObDialog(jtf[17].getText())){
1664 //System.out.println("Arzt-Dialog erforderlich");
1665 String[] suchenach = null;
1666 if(jtf[17].getText().trim().length() > 1){
1667 suchenach = new String[] {jtf[17].getText().trim().substring(1),jtf[33].getText().trim()};
1668 }else{
1669 suchenach = new String[] {"",""};
1671 arztAuswahl(suchenach);
1673 }else if(((JComponent)arg0.getSource()).getName().equals("kasse")){
1674 if(testObDialog(jtf[12].getText())){
1675 //System.out.println("Kassen-Dialog erforderlich");
1676 String[] suchenach = null;
1677 if(jtf[12].getText().trim().length() > 1){
1678 suchenach = new String[] {jtf[12].getText().trim().substring(1),jtf[34].getText().trim()};
1679 }else{
1680 suchenach = new String[] {"",""};
1682 kassenAuswahl(suchenach);
1688 @Override
1689 public void focusLost(FocusEvent arg0) {
1690 if( ((JComponent)arg0.getSource()).getName() != null){
1691 //System.out.println(((JComponent)arg0.getSource()).getName());
1694 // TODO Auto-generated method stub
1696 private void arztAuswahl(String[] suchenach){
1697 jtf[19].requestFocus();
1698 ArztAuswahl awahl = new ArztAuswahl(null,"ArztAuswahl",suchenach,new JRtaTextField[] {jtf[17],jtf[18],jtf[33]},jtf[17].getText().trim());
1699 awahl.setModal(true);
1700 awahl.setLocationRelativeTo(this);
1701 awahl.setVisible(true);
1702 awahl.dispose();
1703 awahl = null;
1704 new SwingWorker<Void,Void>(){
1705 @Override
1706 protected Void doInBackground() throws Exception {
1707 try{
1708 //System.out.println("Beginne ArztOrganisation mit Arzt ID ="+jtf[33].getText());
1709 aerzteOrganisieren(jtf[33].getText(),inNeu,docmod,doclist,true);
1710 }catch(Exception ex){
1711 ex.printStackTrace();
1713 return null;
1716 }.execute();
1717 SwingUtilities.invokeLater(new Runnable(){
1718 public void run(){
1719 jtf[19].requestFocus();
1722 if(jtf[17].getText().indexOf("?") >= 0){
1723 String text = jtf[17].getText().replace("?","");
1724 jtf[17].setText(text);
1730 private void kassenAuswahl(String[] suchenach){
1731 jtf[14].requestFocus();
1732 KassenAuswahl kwahl = new KassenAuswahl(null,"KassenAuswahl",suchenach,new JRtaTextField[] {jtf[12],jtf[13],jtf[34]},jtf[12].getText().trim());
1733 kwahl.setModal(true);
1734 kwahl.setLocationRelativeTo(this);
1735 kwahl.setVisible(true);
1736 kwahl.dispose();
1737 kwahl = null;
1738 SwingUtilities.invokeLater(new Runnable(){
1739 public void run(){
1740 jtf[14].requestFocus();
1743 if(jtf[12].getText().indexOf("?") >= 0){
1744 String text = jtf[12].getText().replace("?","");
1745 jtf[12].setText(text);
1749 private void arztInListeAuswahl(){
1750 JRtaTextField[] tfaliste = {new JRtaTextField("nix",false),new JRtaTextField("nix",false),new JRtaTextField("nix",false)};
1751 ArztAuswahl awahl = new ArztAuswahl(null,"ArztAuswahl",new String[] {"",""} ,tfaliste,"");
1752 awahl.setModal(true);
1753 awahl.setLocationRelativeTo(this);
1754 awahl.setVisible(true);
1755 awahl.dispose();
1756 awahl = null;
1757 final JRtaTextField xtf = tfaliste[2];
1758 if(!xtf.getText().equals("")){
1759 new SwingWorker<Void,Void>(){
1760 @Override
1761 protected Void doInBackground() throws Exception {
1762 try{
1763 //System.out.println("Beginne ArztOrganisation mit Arzt ID ="+xtf.getText());
1764 aerzteOrganisieren(xtf.getText(),inNeu,docmod,doclist,false);
1765 }catch(Exception ex){
1766 ex.printStackTrace();
1768 return null;
1771 }.execute();
1774 private void arztInListeDoppelKlick(Point klick){
1775 int row = doclist.getSelectedRow();
1776 if(row >= 0){
1777 formulareAuswerten(klick);
1778 //ProgLoader.ArztFenster(0,(String)doclist.getValueAt(row,5) );
1782 public void holeFormulare(){
1783 new SwingWorker<Void,Void>(){
1784 @Override
1785 protected Void doInBackground() throws Exception {
1786 try{
1787 INIFile inif = new INIFile(Reha.proghome+"ini/"+Reha.aktIK+"/arzt.ini");
1788 int forms = inif.getIntegerProperty("Formulare", "ArztFormulareAnzahl");
1789 for(int i = 1; i <= forms; i++){
1790 titel.add(inif.getStringProperty("Formulare","AFormularText"+i));
1791 formular.add(inif.getStringProperty("Formulare","AFormularName"+i));
1793 }catch(Exception ex){
1794 ex.printStackTrace();
1796 return null;
1799 }.execute();
1803 public void formulareAuswerten(Point klick){
1804 int row = doclist.getSelectedRow();
1805 if(row >= 0){
1806 String sid = Integer.toString(Integer.parseInt((String) doclist.getValueAt(row, 5)));
1807 iformular = -1;
1808 KassenFormulare kf = new KassenFormulare(null,titel,formularid);
1809 Point pt = klick;
1810 kf.setLocation(pt.x-100,pt.y+25);
1811 kf.setModal(true);
1812 kf.setVisible(true);
1813 iformular = Integer.valueOf(formularid.getText());
1814 kf = null;
1815 final String xid = sid;
1816 if(iformular >= 0){
1817 new SwingWorker<Void,Void>(){
1819 @Override
1820 protected Void doInBackground() throws Exception {
1821 ArztTools.constructArztHMap(xid);
1822 OOTools.starteStandardFormular(Reha.proghome+"vorlagen/"+Reha.aktIK+"/"+formular.get(iformular),null);
1823 return null;
1825 }.execute();
1829 //System.out.println("Es wurde Formular "+iformular+" gew�hlt");
1831 }else{
1832 String mes = "Wenn man eine Kasse anschreiben möchte, empfiehlt es sich\n"+
1833 "vorher die Kasse auszuwählen die man anschreiben möchte!!!\n\n"+
1834 "Aber trösten Sie sich, unser Herrgott hat ein Herz für eine ganz spezielle Randgruppe.\n"+
1835 "Sie dürfen also hoffen....\n\n";
1836 JOptionPane.showMessageDialog(null, mes);
1837 iformular = -1;
1841 public void aerzteOrganisieren(String aid,boolean neu,MyDocTableModel mod,JXTable tbl,boolean bloednachfragen){
1842 //hier weitermachen
1843 // wenn neu dann Tabelle mit nur einem arzt
1844 // *******************/
1845 // wenn nicht neu und nicht in bisherigem aerzt.feld
1846 // nachfragen ob neu aufgenommen werden soll
1847 // wenn ja aufnehmen und in dbAbspeichern
1848 // wenn nicht zur�ck
1849 if(mod != null){
1850 if(neu){
1851 if(! inTableEnthalten(aid,mod)){
1852 //System.out.println("Neuanlage Pat. Arzt wird in Liste übernommen");
1853 mod.setRowCount(0);
1854 arztInTableAufnehmen(aid,mod);
1855 tbl.validate();
1856 }else{
1857 //System.out.println("Neuanlage Pat. Arzt bereits in der Liste enthalten");
1859 }else{ // in Patient �ndern
1860 if(! inTableEnthalten(aid,mod)){
1861 //System.out.println("Ändern Pat. Arzt wird in Liste übernommen");
1862 if(bloednachfragen){
1863 int frage = JOptionPane.showConfirmDialog(null,"Den gewählten Arzt in die Arztliste dieses Patienten aufnehmen?","Wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1864 if(frage == JOptionPane.YES_OPTION){
1865 arztInTableAufnehmen(aid,mod);
1866 tbl.validate();
1868 }else{
1869 arztInTableAufnehmen(aid,mod);
1870 tbl.validate();
1872 }else{
1873 //System.out.println("Ändern Pat. Arzt bereits in der Liste enthalten");
1876 }else{ // funktion wurde �ber Rezept aufgerufen
1880 private void arztInTableAufnehmen(String aid,MyDocTableModel mod ){
1881 Vector<Vector<String>> vecx;
1882 if(mod != null){
1883 vecx = SqlInfo.holeFelder("select arztnum,nachname,strasse,ort,bsnr,id from arzt where id='"+aid+"' LIMIT 1" );
1884 if(vecx.size() > 0){
1885 mod.addRow((Vector<String>)vecx.get(0));
1887 }else{
1891 private boolean inTableEnthalten(String aid,MyDocTableModel mod){
1892 boolean bret = false;
1893 for(int i = 0; i<mod.getRowCount();i++){
1894 if( ((String)mod.getValueAt(i, 5)).equals(aid)){
1895 bret = true;
1896 return bret;
1899 return bret;
1902 private boolean testObDialog(String string){
1903 if(string==null){
1904 return false;
1906 if(string.trim().length() == 0){
1907 return false;
1909 if(string.substring(0,1).
1910 equals("?")){
1911 return true;
1913 return false;
1916 private void speichernPatBild(boolean neu,ImageIcon ico,String pat_intern){
1917 Statement stmt = null;;
1918 ResultSet rs = null;
1919 PreparedStatement ps = null;
1920 //boolean ret = false;
1921 //int bilder = 0;
1923 //piTool.app.conn.setAutoCommit(true);
1924 try {
1925 //stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
1926 // ResultSet.CONCUR_UPDATABLE );
1927 if(neu){
1928 String select = "Insert into patbild set bild = ? , pat_intern = ?, vorschau = ?";
1929 ps = (PreparedStatement) Reha.thisClass.conn.prepareStatement(select);
1930 ps.setBytes(1, bufferedImageToByteArray( (BufferedImage) ico.getImage()));
1931 ps.setString(2, pat_intern);
1932 BufferedImage buf = new BufferedImage(35,40,BufferedImage.TYPE_INT_RGB);
1933 Graphics2D g = buf.createGraphics();
1934 g.drawImage(ico.getImage().getScaledInstance(35, 44, Image.SCALE_SMOOTH), null, null);
1935 g.dispose();
1936 ps.setBytes(3, bufferedImageToByteArray( (BufferedImage) buf));
1937 ps.execute();
1938 buf = null;
1939 }else{
1940 String select = "Update patbild set bild = ? , vorschau = ? where pat_intern = ?";
1941 ps = (PreparedStatement) Reha.thisClass.conn.prepareStatement(select);
1942 ps.setBytes(1, bufferedImageToByteArray( (BufferedImage) ico.getImage()));
1943 BufferedImage buf = new BufferedImage(35,44,BufferedImage.TYPE_INT_RGB);
1944 Graphics2D g = buf.createGraphics();
1945 g.drawImage(ico.getImage().getScaledInstance(35, 44, Image.SCALE_SMOOTH), null, null);
1946 g.dispose();
1947 ps.setBytes(2, bufferedImageToByteArray( (BufferedImage) buf));
1948 ps.setString(3, pat_intern);
1949 ps.execute();
1950 buf = null;
1953 } catch (SQLException e) {
1954 e.printStackTrace();
1955 } catch (IOException e) {
1956 e.printStackTrace();
1957 } catch (ImageFormatException e) {
1958 e.printStackTrace();
1959 } catch (Exception e) {
1960 e.printStackTrace();
1962 finally {
1963 if (rs != null) {
1964 try {
1965 rs.close();
1966 } catch (SQLException sqlEx) { // ignore }
1967 rs = null;
1970 if (stmt != null) {
1971 try {
1972 stmt.close();
1973 } catch (SQLException sqlEx) { // ignore }
1974 stmt = null;
1977 if (ps != null) {
1978 try {
1979 ps.close();
1980 } catch (SQLException sqlEx) { // ignore }
1981 ps = null;
1986 private static byte[] bufferedImageToByteArray(BufferedImage img) throws ImageFormatException, IOException{
1987 if(img != null){
1988 ByteArrayOutputStream os = new ByteArrayOutputStream();
1989 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
1990 encoder.encode(img);
1991 return os.toByteArray();
1992 }else{
1993 return null;
1996 public static BufferedImage holePatBild(String pat_intern){
1997 Statement stmt = null;;
1998 ResultSet rs = null;
1999 //int bilder = 0;
2000 Image bild = null;
2001 try {
2002 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
2003 ResultSet.CONCUR_UPDATABLE );
2004 String test = "select bild from patbild where pat_intern ='"+pat_intern+"'";
2005 rs = (ResultSet) stmt.executeQuery(test);
2006 while(rs.next()){
2007 bild = ImageIO.read( new ByteArrayInputStream(rs.getBytes("bild")) );
2009 } catch (SQLException e) {
2010 e.printStackTrace();
2011 } catch (IOException e) {
2012 e.printStackTrace();
2013 return null;
2015 finally {
2016 if (rs != null) {
2017 try {
2018 rs.close();
2019 } catch (SQLException sqlEx) { // ignore }
2020 rs = null;
2023 if (stmt != null) {
2024 try {
2025 stmt.close();
2026 } catch (SQLException sqlEx) { // ignore }
2027 stmt = null;
2031 return (BufferedImage) bild;
2036 class MyDocTableModel extends DefaultTableModel{
2040 private static final long serialVersionUID = 1L;
2042 public Class<?> getColumnClass(int columnIndex) {
2043 if(columnIndex==1){
2044 return String.class;}
2045 else{
2046 return String.class;
2049 public boolean isCellEditable(int row, int col) {
2050 return false;
2055 public void aufraeumen(){
2056 for(int i = 0; i < jtf.length;i++ ){
2057 jtf[i].listenerLoeschen();
2058 ListenerTools.removeListeners(jtf[i]);
2060 for(int i = 0; i < jcheck.length;i++ ){
2061 ListenerTools.removeListeners(jcheck[i]);
2063 xfelder.clear();
2064 checks.clear();
2065 xfelder = null;
2066 checks = null;
2067 rtp.removeRehaTPEventListener((RehaTPEventListener) this);
2068 rtp = null;
2070 @Override
2071 public void rehaTPEventOccurred(RehaTPEvent evt) {
2072 try{
2073 if(evt.getDetails()[0] != null){
2074 if(evt.getDetails()[0].equals(this.getName())){
2075 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).setVisible(false);
2076 finalise();
2077 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
2078 ////System.out.println("****************Patient Neu/ändern -> Listener entfernt**************");
2081 }catch(NullPointerException ne){
2082 //System.out.println("In PatNeuanlage" +evt);
2087 /* Lemmi ToDo: Den intransparente Handhabung mit jtf[0] und Anrede prüfen !!!
2088 // Lemmi 20110103: Merken der Originalwerte der eingelesenen Textfelder
2089 // ACHTUNG: Die Reihenfolge der Abfragen muß in SaveChangeStatus() und HasChanged() exakt identisch sein !
2090 private void SaveChangeStatus(){
2091 int i;
2092 originale.clear(); // vorherige Merkung wegwerfen
2094 // Alle Text-Eingabefelder
2095 for ( i = 0; i < jtf.length; i++ ) {
2096 //String strText = jtf[i].getText();
2097 originale.add( jtf[i].getText() );
2100 // Einzelne Text-Felder
2101 // originale.add( jta.getText() );
2103 // alle ComboBoxen
2104 originale.add( (Integer)cbanrede.getSelectedIndex() );
2106 // alle CheckBoxen
2107 for ( i = 0; i < jcheck.length; i++ ) {
2108 originale.add( (Boolean)(jcheck[i].isSelected() ) ); //
2112 // Lemmi 20110103: prüft, ob sich Einträge geändert haben
2113 // ACHTUNG: Die Reihenfolge der Abfragen muß in SaveChangeStatus() und HasChanged() exakt identisch sein !
2114 public Boolean HasChanged() {
2115 int i, idx = 0;
2117 // Alle Text-Eingabefelder
2118 for ( i = 0; i < jtf.length; i++) {
2119 String strTex1 = ">" + jtf[i].getText() + "< >" + originale.get(idx++) + "<";
2120 if(! jtf[i].getText().equals( originale.get(idx++) ) )
2121 return true;
2124 // Einzelne Textfelder
2125 // if(! jta.getText().equals( originale.get(idx++) ) )
2126 // return true;
2128 // alle ComboBoxen
2129 if( cbanrede.getSelectedIndex() != (Integer)originale.get(idx++) ) // Art d. Verordn. etc.
2130 return true;
2132 // alle CheckBoxen
2133 for ( i = 0; i < jcheck.length; i++) { // CheckBoxen
2134 if( jcheck[i].isSelected() != (Boolean)originale.get(idx++) ) // Begründung außer der Regel vorhanden ? .....
2135 return true;
2138 return false;
2141 // Lemmi 20110103: Stndard-Abfrage nach Prüfung, ob sich Einträge geändert haben
2142 // fragt nach, ob wirklich ungesichert abgebrochen werden soll !
2143 public int askForCancelUsaved(){
2144 String[] strOptions = {"ja", "nein"}; // Defaultwert euf "nein" gesetzt !
2145 return JOptionPane.showOptionDialog(null, "Es wurden Patienten-Anngaben geändert!\nWollen sie die Änderung(en) wirklich verwerfen?",
2146 "Angaben wurden geändert",
2147 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
2148 strOptions, strOptions[1] );
2154 class ArztListeSpeichern{
2155 public ArztListeSpeichern(Vector<Vector<String>> vec,boolean neu,String xpatintern){
2156 if(vec.size() <= 0){
2157 return;
2159 String cmd = "update pat5 set aerzte = '";
2160 String aliste = "";
2161 for(int i = 0;i < vec.size();i++){
2162 aliste = aliste+"@"+((String)((Vector<String>)vec.get(i)).get(5))+"@\n";
2164 SqlInfo.aktualisiereSaetze("pat5", "aerzte='"+aliste+"'", "pat_intern='"+xpatintern+"'");
2165 new ExUndHop().setzeStatement(cmd);
2166 Reha.thisClass.patpanel.patDaten.set(63,aliste);
2167 //System.out.println(cmd);