*** empty log message ***
[thera-pi.git] / Reha / src / patientenFenster / RezNeuanlage.java
bloba0ff060fbadd543903214c647f6436fcfdabed7f
1 package patientenFenster;
3 import hauptFenster.Reha;
4 import hmrCheck.HMRCheck;
6 import java.awt.BorderLayout;
7 import java.awt.Color;
8 import java.awt.Font;
9 import java.awt.LinearGradientPaint;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12 import java.awt.event.FocusEvent;
13 import java.awt.event.FocusListener;
14 import java.awt.event.KeyEvent;
15 import java.awt.event.KeyListener;
16 import java.awt.event.MouseAdapter;
17 import java.awt.event.MouseEvent;
18 import java.util.Arrays;
19 import java.util.Vector;
20 import java.util.regex.Pattern;
22 import javax.swing.BorderFactory;
23 import javax.swing.JButton;
24 import javax.swing.JComponent;
25 import javax.swing.JLabel;
26 import javax.swing.JOptionPane;
27 import javax.swing.JScrollPane;
28 import javax.swing.JTextArea;
29 import javax.swing.SwingUtilities;
31 import org.jdesktop.swingworker.SwingWorker;
32 import org.jdesktop.swingx.JXDialog;
33 import org.jdesktop.swingx.JXPanel;
34 import org.jdesktop.swingx.painter.MattePainter;
35 import org.therapi.reha.patient.LadeProg;
37 import rechteTools.Rechte;
38 import CommonTools.SqlInfo;
39 import stammDatenTools.RezTools;
40 import systemEinstellungen.SystemConfig;
41 import systemEinstellungen.SystemPreislisten;
42 import CommonTools.Colors;
43 import CommonTools.JCompTools;
44 import CommonTools.JRtaCheckBox;
45 import CommonTools.JRtaComboBox;
46 import CommonTools.JRtaTextField;
47 import systemTools.ListenerTools;
48 import CommonTools.StringTools;
49 import terminKalender.DatFunk;
51 import com.jgoodies.forms.builder.PanelBuilder;
52 import com.jgoodies.forms.layout.CellConstraints;
53 import com.jgoodies.forms.layout.FormLayout;
55 import events.RehaTPEvent;
56 import events.RehaTPEventClass;
57 import events.RehaTPEventListener;
59 public class RezNeuanlage extends JXPanel implements ActionListener, KeyListener,FocusListener,RehaTPEventListener{
61 /**
64 // Lemmi Doku: Das sind die Text-Eingabefgelder im Rezept
65 public JRtaTextField[] jtf = {null,null,null,null,null,
66 null,null,null,null,null,
67 null,null,null,null,null,
68 null,null,null,null,null,
69 null,null,null,null,null,
70 null,null,null,null,null,
71 null};
72 // Lemmi 20101231: Harte Index-Zahlen für "jtf" durch sprechende Konstanten ersetzt !
73 final int cKTRAEG = 0;
74 final int cARZT = 1;
75 final int cREZDAT = 2;
76 final int cBEGINDAT = 3;
77 final int cANZ1 = 4; // ACHTUNG die Positionen cANZ1 bis cANZ4 müssen immer nacheinander definiert sein
78 final int cANZ2 = 5;
79 final int cANZ3 = 6;
80 final int cANZ4 = 7;
81 final int cFREQ = 8;
82 final int cDAUER = 9;
83 final int cANGEL = 10;
84 final int cKASID = 11;
85 final int cARZTID = 12;
86 final int cPREISGR = 13;
87 final int cHEIMBEW = 14;
88 final int cBEFREIT = 15;
89 final int cPOS1 = 16; // ACHTUNG die Positionen cPOS1 bis cPOS4 müssen immer nacheinander definiert sein
90 final int cPOS2 = 17;
91 final int cPOS3 = 18;
92 final int cPOS4 = 19;
93 final int cPREIS1 = 20; // ACHTUNG die Positionen cPREIS1 bis cPREIS4 müssen immer nacheinander definiert sein
94 final int cPREIS2 = 21;
95 final int cPREIS3 = 22;
96 final int cPREIS4 = 23;
97 final int cANLAGDAT = 24;
98 final int cANZKM = 25;
99 final int cPATID = 26;
100 final int cPATINT = 27;
101 final int cZZSTAT = 28;
102 final int cHEIMBEWPATSTAM = 29;
103 final int cICD10 = 30;
105 // Lemmi 20101231: Merken der Originalwerte der eingelesenen Textfelder, Combo- und Check-Boxen
106 Vector<Object> originale = new Vector<Object>();
108 public JRtaCheckBox[] jcb = {null,null,null,null};
109 // Lemmi 20101231: Harte Index-Zahlen für "jcb" durch sprechende Konstanten ersetzt !
110 final int cBEGRADR = 0;
111 final int cHAUSB = 1;
112 final int cTBANGEF = 2;
113 final int cVOLLHB = 3;
115 public JRtaComboBox[] jcmb = {null,null,null,null,null,null,null,null,null};
116 // Lemmi 20101231: Harte Index-Zahlen für "jcmb" durch sprechende Konstanten ersetzt !
117 final int cRKLASSE = 0;
118 final int cVERORD = 1;
119 final int cLEIST1 = 2; // ACHTUNG die Positionen cLEIST1 bis cLEIST4 müssen immer nacheinander definiert sein
120 final int cLEIST2 = 3;
121 final int cLEIST3 = 4;
122 final int cLEIST4 = 5;
123 final int cINDI = 6;
124 final int cBARCOD = 7;
125 final int cFARBCOD = 8;
128 public JTextArea jta = null;
130 public JButton speichern = null;
131 public JButton abbrechen = null;
132 public JButton hmrcheck = null;
134 public boolean neu = false;
135 public String feldname = "";
137 // Lemmi 20110101: strKopiervorlage zugefügt. Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
138 //boolean bCtrlPressed = false;
139 public String strKopiervorlage = "";
141 public Vector<String> vec = null; // Lemmi Doku: Das bekommt den 'vecaktrez' aus dem rufenden Programm (AktuelleRezepte)
142 public Vector<Vector<String>> preisvec = null;
143 private boolean klassenReady = false;
144 private boolean initReady = false;
145 private static final long serialVersionUID = 1L;
146 private int preisgruppe = -1;
147 public boolean feldergefuellt = false;
148 private String nummer = null;
149 private String[] farbcodes = {null,null,null,null,null,null,null,null,null,null};
150 //private String[] heilmittel = {"KG","MA","ER","LO","RH"};
152 private String aktuelleDisziplin = "";
153 private int preisgruppen[] = {0,0,0,0,0,0,0,0};
154 int[] comboid = {-1,-1,-1,-1};
156 MattePainter mp = null;
157 LinearGradientPaint p = null;
158 private RehaTPEventClass rtp = null;
160 JLabel kassenLab;
161 JLabel arztLab;
163 // Lemmi 20110106: Lieber Hr. Steinhilber: Diese Funktion an andere Stelle verlegt, weil Architekturänderung
164 // String rezToCopy = null;
166 String[] strRezepklassenAktiv = null;
168 // Lemmi 20110101: bCtrlPressed zugefügt. Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
169 public RezNeuanlage(Vector<String> vec,boolean neu,String sfeldname){
170 // public RezNeuanlage(Vector<String> vec,boolean neu,String sfeldname, boolean bCtrlPressed){
171 super();
172 this.neu = neu;
173 this.feldname = sfeldname;
174 this.vec = vec; // Lemmi 20110106 Wird auch für das Kopieren verwendet !!!!
175 // this.bCtrlPressed = bCtrlPressed;
177 if( vec.size() > 0 && this.neu ) {
178 // Lemmi 20110106: Lieber Hr. Steinhilber: Diese Funktion an andere Stelle verlegt, weil Architekturänderung
179 //rezToCopy = AktuelleRezepte.getActiveRezNr();
180 //aktuelleDisziplin = RezTools.putRezNrGetDisziplin(rezToCopy);
181 aktuelleDisziplin = RezTools.putRezNrGetDisziplin(vec.get(1) );
185 setName("RezeptNeuanlage");
186 rtp = new RehaTPEventClass();
187 rtp.addRehaTPEventListener((RehaTPEventListener) this);
190 addKeyListener(this);
192 setLayout(new BorderLayout());
193 setOpaque(true);
194 setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
195 add(getDatenPanel(),BorderLayout.CENTER);
196 add(getButtonPanel(),BorderLayout.SOUTH);
197 setBackgroundPainter(Reha.thisClass.compoundPainter.get("RezNeuanlage"));
198 validate();
199 SwingUtilities.invokeLater(new Runnable(){
200 public void run()
202 setzeFocus();
204 });
205 initReady = true;
206 if(!neu){
207 if(!Rechte.hatRecht(Rechte.Rezept_editvoll, false)){ // Lemmi Doku: Das sieht aus wie der Read-Only-Modus für das Rezept
208 new SwingWorker<Void,Void>(){
209 @Override
210 protected Void doInBackground() throws Exception {
211 for(int i = 0; i < jtf.length; i++){ // Lemmi Doku: alle Textfelder unbedienbar machen
212 if(jtf[i] != null){
213 jtf[i].setEnabled(false);
216 for(int i = 0; i < jcb.length;i++){ // Lemmi Doku: alle CheckBoxen unbedienbar machen
217 if(jcb[i] != null){
218 jcb[i].setEnabled(false);
221 for(int i = 0; i < jcmb.length;i++){ // Lemmi Doku: alle ComboBoxen unbedienbar machen
222 if(jcmb[i] != null){
223 jcmb[i].setEnabled(false);
226 return null;
229 }.execute();
235 public void macheFarbcodes(){
236 farbcodes[0] = "kein Farbcode";
237 jcmb[cFARBCOD].addItem(farbcodes[0]);
239 for (int i = 0;i < 9;i++){
240 farbcodes[i+1] = SystemConfig.vSysColsBedeut.get(i+14);
241 jcmb[cFARBCOD].addItem(farbcodes[i+1]);
243 if(! this.neu){
244 int itest = StringTools.ZahlTest(this.vec.get(57));
245 if(itest >= 0){
246 jcmb[cFARBCOD].setSelectedItem( (String)SystemConfig.vSysColsBedeut.get(itest) );
247 }else{
248 jcmb[cFARBCOD].setSelectedIndex(0);
250 }else{
251 jcmb[cFARBCOD].setSelectedIndex(0);
255 public void setzeFocus(){
256 SwingUtilities.invokeLater(new Runnable(){
257 public void run()
259 if(neu){
260 int aid,kid;
261 boolean beenden = false;
262 String meldung = "";
263 kid = StringTools.ZahlTest(jtf[cKASID].getText());
264 aid = StringTools.ZahlTest(jtf[cARZTID].getText());
265 if(kid < 0 && aid < 0){
266 beenden = true;
267 meldung = "Achtung - dem Patientenstamm ist keine verwertbare Krankenkasse\n"+
268 "sowie kein verwertbarer Arzt zugeordnet\n\n"+
269 "Gehen Sie im Patientenstamm auf ->Ändern/Editieren<- und ordnen Sie verwertaber Daten zu!";
270 }else if(kid >= 0 && aid < 0){
271 beenden = true;
272 meldung = "Achtung - dem Patientenstamm ist kein verwertbarer Arzt zugeordnet\n\n"+
273 "Gehen Sie im Patientenstamm auf ->Ändern/Editieren<- und ordnen Sie verwertaber Daten zu!";
274 }else if(kid < 0 && aid >= 0){
275 beenden = true;
276 meldung = "Achtung - dem Patientenstamm ist keine verwertbare Krankenkasse zugeordnet\n\n"+
277 "Gehen Sie im Patientenstamm auf ->Ändern/Editieren<- und ordnen Sie verwertaber Daten zu!";
279 if(beenden){
280 JOptionPane.showMessageDialog(null,meldung);
281 aufraeumen();
282 ((JXDialog)getParent().getParent().getParent().getParent().getParent()).dispose();
283 }else{
284 holePreisGruppe(jtf[cKASID].getText().trim());
285 SwingUtilities.invokeLater(new Runnable(){
286 public void run()
288 jcmb[cRKLASSE].requestFocus();
290 });
292 // else bedeutet nicht neu - sondern ändern
293 }else{
294 int aid,kid;
295 //boolean beenden = false;
296 //String meldung = "";
297 kid = StringTools.ZahlTest(jtf[cKASID].getText());
298 aid = StringTools.ZahlTest(jtf[cARZTID].getText());
299 if(kid < 0 && aid < 0){
300 jtf[cKASID].setText(Integer.toString(Reha.thisClass.patpanel.kid));
301 jtf[cARZTID].setText(Integer.toString(Reha.thisClass.patpanel.aid));
302 jtf[cKTRAEG].setText(Reha.thisClass.patpanel.patDaten.get(13));
303 }else if(kid >= 0 && aid < 0){
304 jtf[cARZTID].setText(Integer.toString(Reha.thisClass.patpanel.aid));
305 }else if(kid < 0 && aid >= 0){
306 jtf[cKASID].setText(Integer.toString(Reha.thisClass.patpanel.kid));
307 jtf[cKTRAEG].setText(Reha.thisClass.patpanel.patDaten.get(13));
308 }else{
309 //System.out.println("*****************Keine Preisgruppen bezogen*******************");
310 //preisgruppen
311 //RezTools.holePreisVector(vec.get(1), Integer.parseInt(vec.get(41))-1);
312 //ladePreise();
314 SwingUtilities.invokeLater(new Runnable(){
315 public void run()
317 jtf[cKTRAEG].requestFocus();
319 });
323 });
328 public JXPanel getButtonPanel(){
329 JXPanel jpan = JCompTools.getEmptyJXPanel();
330 jpan.addKeyListener(this);
331 jpan.setOpaque(false);
332 FormLayout lay = new FormLayout(
333 // 1 2 3 4 5 6 7
334 "fill:0:grow(0.25),50dlu,fill:0:grow(0.25),50dlu,fill:0:grow(0.25),50dlu,fill:0:grow(0.25)",
335 // 1 2 3
336 "5dlu,p,5dlu");
337 CellConstraints cc = new CellConstraints();
338 jpan.setLayout(lay);
339 speichern = new JButton("speichern");
340 speichern.setActionCommand("speichern");
341 speichern.addActionListener(this);
342 speichern.addKeyListener(this);
343 speichern.setMnemonic(KeyEvent.VK_S);
344 jpan.add(speichern,cc.xy(2,2));
346 hmrcheck = new JButton("HMR-Check");
347 hmrcheck.setActionCommand("hmrcheck");
348 hmrcheck.addActionListener(this);
349 hmrcheck.addKeyListener(this);
350 hmrcheck.setMnemonic(KeyEvent.VK_H);
351 jpan.add(hmrcheck,cc.xy(4,2));
353 abbrechen = new JButton("abbrechen");
354 abbrechen.setActionCommand("abbrechen");
355 abbrechen.addActionListener(this);
356 abbrechen.addKeyListener(this);
357 abbrechen.setMnemonic(KeyEvent.VK_A);
358 jpan.add(abbrechen,cc.xy(6,2));
360 return jpan;
363 /********************************************/
365 // Lemmi 20101231: Merken der Originalwerte der eingelesenen Textfelder
366 // ACHTUNG: Die Reihenfolge der Abfragen muß in SaveChangeStatus() und HasChanged() exakt identisch sein !
367 private void SaveChangeStatus(){
368 int i;
369 originale.clear(); // vorherige Merkung wegwerfen
371 // Alle Text-Eingabefelder
372 for ( i = 0; i < jtf.length; i++ ) {
373 //String strText = jtf[i].getText();
374 originale.add( jtf[i].getText() );
377 // Das Feld mit "Ärztliche Diagnose"
378 originale.add( jta.getText() );
380 // alle ComboBoxen
381 for ( i = 0; i < jcmb.length; i++ ) {
382 originale.add( (Integer)jcmb[i].getSelectedIndex() ); // Art d. Verordn. etc.
385 // alle CheckBoxen
386 for ( i = 0; i < jcb.length; i++ ) {
387 originale.add( (Boolean)(jcb[i].isSelected() ) ); //
391 // Lemmi 20101231: prüft, ob sich Einträge geändert haben
392 // ACHTUNG: Die Reihenfolge der Abfragen muß in SaveChangeStatus() und HasChanged() exakt identisch sein !
393 public Boolean HasChanged(){
394 int i, idx = 0;
396 // Alle Text-Eingabefelder
397 for ( i = 0; i < jtf.length; i++) {
398 if(! jtf[i].getText().equals( originale.get(idx++) ) )
399 return true;
402 // Das Feld mit "Ärztliche Diagnose"
403 if(! jta.getText().equals( originale.get(idx++) ) ) // Ärztliche Diagnose
404 return true;
406 // alle ComboBoxen
407 for ( i = 0; i < jcmb.length; i++) { // ComboBoxen
408 if( jcmb[i].getSelectedIndex() != (Integer)originale.get(idx++) ) // Art d. Verordn. etc.
409 return true;
412 // alle CheckBoxen
413 for ( i = 0; i < jcb.length; i++) { // CheckBoxen
414 if( jcb[i].isSelected() != (Boolean)originale.get(idx++) ) // Begründung außer der Regel vorhanden ? .....
415 return true;
418 return false;
421 // Lemmi 20101231: Stndard-Abfrage nach Prüfung, ob sich Einträge geändert haben
422 // fragt nach, ob wirklich ungesichert abgebrochen werden soll !
423 public int askForCancelUsaved(){
424 /* if ( JOptionPane.NO_OPTION
425 == JOptionPane.showConfirmDialog(null, "Es wurden Rezept-Anngaben geändert!\nWollen sie die Änderung(en) wirklich verwerfen?",
426 "Angaben wurden geändert", JOptionPane.YES_NO_OPTION ) ) {
428 String[] strOptions = {"ja", "nein"}; // Defaultwert euf "nein" gesetzt !
429 return JOptionPane.showOptionDialog(null, "Es wurden Rezept-Anngaben geändert!\nWollen sie die Änderung(en) wirklich verwerfen?",
430 "Angaben wurden geändert",
431 JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
432 strOptions, strOptions[1] );
435 private JScrollPane getDatenPanel(){ //1 2 3 4 5 6 7 8
436 FormLayout lay = new FormLayout("right:max(80dlu;p), 4dlu, 60dlu, 5dlu, right:max(60dlu;p), 4dlu, 60dlu",
437 //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
438 "p, 10dlu, p, 5dlu, p, 5dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 10dlu, p, 10dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, " +
439 //26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
440 "10dlu, p, 10dlu, p, 2dlu, p, 2dlu, p, 10dlu, p, 10dlu, p,10dlu,p,10dlu,30dlu,2dlu");
443 CellConstraints cc = new CellConstraints();
444 PanelBuilder jpan = new PanelBuilder(lay);
445 jpan.setDefaultDialogBorder();
446 jpan.getPanel().setOpaque(false);
447 //String ywerte = "";
450 // Lemmi 20101231: Harte Index-Zahlen für "jtf" durch sprechende Konstanten ersetzt !
451 jtf[cKTRAEG] = new JRtaTextField("NIX",false); // kasse/kostenträger
452 jtf[cARZT] = new JRtaTextField("NIX",false); // arzt
453 jtf[cREZDAT] = new JRtaTextField("DATUM",true); // rezeptdatum
454 jtf[cBEGINDAT] = new JRtaTextField("DATUM",true); // spätester beginn
455 jtf[cANZ1] = new JRtaTextField("ZAHLEN",true); // Anzahl 1
456 jtf[cANZ2] = new JRtaTextField("ZAHLEN",true); // Anzahl 2
457 jtf[cANZ3] = new JRtaTextField("ZAHLEN",true); // Anzahl 3
458 jtf[cANZ4] = new JRtaTextField("ZAHLEN",true); // Anzahl 4
459 jtf[cFREQ] = new JRtaTextField("GROSS",true); // Frequenz
460 jtf[cDAUER] = new JRtaTextField("ZAHLEN",true); // Dauer
461 jtf[cANGEL] = new JRtaTextField("GROSS",true); // angelegt von
462 jtf[cKASID] = new JRtaTextField("GROSS",false); //kassenid
463 jtf[cARZTID] = new JRtaTextField("GROSS",false); //arztid
464 // ************ manches / nicht alles nachfolgende muss noch eingebaut werden.....
465 jtf[cPREISGR] = new JRtaTextField("GROSS",false); //preisgruppe
466 jtf[cHEIMBEW] = new JRtaTextField("GROSS",false); //heimbewohner
467 jtf[cBEFREIT] = new JRtaTextField("GROSS",false); //befreit
468 jtf[cPOS1] = new JRtaTextField("",false); //POS1
469 jtf[cPOS2] = new JRtaTextField("",false); //POS2
470 jtf[cPOS3] = new JRtaTextField("",false); //POS3
471 jtf[cPOS4] = new JRtaTextField("",false); //POS4
472 jtf[cPREIS1] = new JRtaTextField("",false); //PREIS1
473 jtf[cPREIS2] = new JRtaTextField("",false); //PREIS2
474 jtf[cPREIS3] = new JRtaTextField("",false); //PREIS3
475 jtf[cPREIS4] = new JRtaTextField("",false); //PREIS4
476 jtf[cANLAGDAT] = new JRtaTextField("DATUM",false); // ANLAGEDATUM
477 jtf[cANZKM] = new JRtaTextField("",false); // KILOMETER
478 jtf[cPATID] = new JRtaTextField("",false); //id von Patient
479 jtf[cPATINT] = new JRtaTextField("",false); //pat_intern von Patient
480 jtf[cZZSTAT] = new JRtaTextField("",false); //zzstatus
481 jtf[cHEIMBEWPATSTAM] = new JRtaTextField("",false); //Heimbewohner aus PatStamm
482 jtf[cICD10] = new JRtaTextField("GROSS",false); //ICD10-Code
483 jcmb[cRKLASSE] = new JRtaComboBox();
484 int lang = SystemConfig.rezeptKlassenAktiv.size();
485 strRezepklassenAktiv = new String[lang];
486 for(int i = 0;i < lang;i++){
487 jcmb[cRKLASSE].addItem(SystemConfig.rezeptKlassenAktiv.get(i).get(0));
488 // Lemmi 20110106: Belegung der Indices zur ComboBox für spätere Auswahlen:
489 strRezepklassenAktiv[i] = SystemConfig.rezeptKlassenAktiv.get(i).get(1); // hier speichern wir die Kürzel für spätere Aktivitäten
491 if(SystemConfig.AngelegtVonUser) {
492 jtf[cANGEL].setText(Reha.aktUser);
493 jtf[cANGEL].setEditable(false);
496 jpan.addLabel("Rezeptklasse auswählen",cc.xy(1, 3));
497 jpan.add(jcmb[cRKLASSE],cc.xyw(3, 3,5));
498 jcmb[cRKLASSE].setActionCommand("rezeptklasse");
499 jcmb[cRKLASSE].addActionListener(this);
500 /********************/
502 if(this.neu){
503 jcmb[cRKLASSE].setSelectedItem(SystemConfig.initRezeptKlasse);
504 }else{
505 for(int i = 0;i < lang;i++){
506 if(this.vec.get(1).substring(0,2).equals(SystemConfig.rezeptKlassenAktiv.get(i).get(1))){
507 jcmb[cRKLASSE].setSelectedIndex(i);
510 jcmb[cRKLASSE].setEnabled(false);
514 jpan.addSeparator("Rezeptkopf", cc.xyw(1,5,7));
516 kassenLab = new JLabel("Kostenträger");
517 kassenLab.setIcon(SystemConfig.hmSysIcons.get("kleinehilfe"));
518 kassenLab.setHorizontalTextPosition(JLabel.LEFT);
519 kassenLab.addMouseListener(new MouseAdapter(){
520 public void mousePressed(MouseEvent ev){
521 if(!Rechte.hatRecht(Rechte.Rezept_editvoll,false)){
522 return;
524 if(jtf[cKTRAEG].getText().trim().startsWith("?")){
525 jtf[cKTRAEG].requestFocus();
526 }else{
527 jtf[cKTRAEG].setText("?"+jtf[cKTRAEG].getText().trim());
528 jtf[cKTRAEG].requestFocus();
530 String[] suchkrit = new String[] {jtf[cKTRAEG].getText().replace("?", ""),jtf[cKASID].getText()};
531 jtf[cKTRAEG].setText(String.valueOf(suchkrit[0]));
532 kassenAuswahl(suchkrit);
536 jtf[cKTRAEG].setName("ktraeger");
537 jtf[cKTRAEG].addKeyListener(this);
538 jpan.add(kassenLab,cc.xy(1,7));
539 jpan.add(jtf[cKTRAEG],cc.xy(3,7));
541 arztLab = new JLabel("verordn. Arzt");
542 arztLab.setIcon(SystemConfig.hmSysIcons.get("kleinehilfe"));
543 arztLab.setHorizontalTextPosition(JLabel.LEFT);
544 arztLab.addMouseListener(new MouseAdapter(){
545 public void mousePressed(MouseEvent ev){
546 if(!Rechte.hatRecht(Rechte.Rezept_editvoll,false)){
547 return;
549 if(jtf[cARZT].getText().trim().startsWith("?")){
550 jtf[cARZT].requestFocus();
551 }else{
552 jtf[cARZT].setText("?"+jtf[cARZT].getText().trim());
553 jtf[cARZT].requestFocus();
555 String[] suchkrit = new String[] {jtf[cARZT].getText().replace("?", ""),jtf[cARZTID].getText()};
556 jtf[cARZT].setText(String.valueOf(suchkrit[0]));
557 arztAuswahl(suchkrit);
561 jtf[cARZT].setName("arzt");
562 jtf[cARZT].addKeyListener(this);
563 jpan.add(arztLab,cc.xy(5,7));
564 jpan.add(jtf[cARZT],cc.xy(7,7));
567 jtf[cREZDAT].setName("rez_datum");
568 jtf[cREZDAT].addFocusListener(this);
569 jpan.addLabel("Rezeptdatum",cc.xy(1,9));
570 jpan.add(jtf[cREZDAT],cc.xy(3,9));
573 jtf[cBEGINDAT].setName("lastdate");
574 jpan.addLabel("spätester Beh.Beginn",cc.xy(5,9));
575 jpan.add(jtf[cBEGINDAT],cc.xy(7,9));
577 jcmb[cVERORD] = new JRtaComboBox(new String[] {"Erstverodnung","Folgeverordnung", "außerhalb des Regelfalles"});
578 jcmb[cVERORD].setActionCommand("verordnungsart");
579 jcmb[cVERORD].addActionListener(this);
580 jpan.addLabel("Art d. Verordn.",cc.xy(1, 11));
581 jpan.add(jcmb[cVERORD],cc.xy(3, 11));
582 jcb[cBEGRADR] = new JRtaCheckBox("vorhanden");
583 jcb[cBEGRADR].setOpaque(false);
584 jcb[cBEGRADR].setEnabled(false);
585 jpan.addLabel("Begründ. für adR",cc.xy(5, 11));
586 jpan.add(jcb[cBEGRADR],cc.xy(7, 11));
588 jcb[cHAUSB] = new JRtaCheckBox("Ja / Nein");
589 jcb[cHAUSB].setOpaque(false);
590 jcb[cHAUSB].setActionCommand("Hausbesuche");
591 jcb[cHAUSB].addActionListener(this);
592 jpan.addLabel("Hausbesuch",cc.xy(1, 13));
593 jpan.add(jcb[cHAUSB],cc.xy(3, 13));
595 jcb[cVOLLHB] = new JRtaCheckBox("abrechnen");
596 jcb[cVOLLHB].setOpaque(false);
597 jcb[cVOLLHB].setToolTipText("Nur aktiv wenn Patient Heimbewohner und Hausbesuch angekreuzt");
598 jpan.addLabel("volle HB-Gebühr",cc.xy(5,13));
599 if(neu){
600 jcb[cVOLLHB].setEnabled(false);
601 jcb[cVOLLHB].setSelected(false);
602 }else{
603 if(Reha.thisClass.patpanel.patDaten.get(44).equals("T")){
604 // Wenn Heimbewohner
605 if(this.vec.get(43).equals("T")){
606 jcb[cVOLLHB].setEnabled(true);
607 jcb[cVOLLHB].setSelected( (this.vec.get(61).equals("T") ? true : false));
608 }else{
609 jcb[cVOLLHB].setEnabled(false);
610 jcb[cVOLLHB].setSelected(false);
612 }else{
613 // Wenn kein(!!) Heimbewohner
614 if(this.vec.get(43).equals("T")){
615 jcb[cVOLLHB].setEnabled(false);
616 jcb[cVOLLHB].setSelected(true);
617 }else{
618 jcb[cVOLLHB].setEnabled(false);
619 jcb[cVOLLHB].setSelected(false);
623 jpan.add(jcb[cVOLLHB],cc.xy(7,13));
627 jcb[cTBANGEF] = new JRtaCheckBox("angefordert");
628 jcb[cTBANGEF].setOpaque(false);
629 jpan.addLabel("Therapiebericht",cc.xy(1, 15));
630 jpan.add(jcb[cTBANGEF],cc.xy(3, 15));
632 jpan.addSeparator("Verordnete Heilmittel", cc.xyw(1,17,7));
634 jtf[cANZ1].setName("anzahl1");
635 jtf[cANZ1].addFocusListener(this);
636 jpan.addLabel("Anzahl / Heilmittel 1",cc.xy(1, 19));
637 jpan.add(jtf[cANZ1],cc.xy(3, 19));
638 jcmb[cLEIST1] = new JRtaComboBox();
639 jcmb[cLEIST1].setName("leistung1");
640 jcmb[cLEIST1].setActionCommand("leistung1");
641 jcmb[cLEIST1].addActionListener(this);
642 jpan.add(jcmb[cLEIST1],cc.xyw(5, 19,3));
644 jpan.addLabel("Anzahl / Heilmittel 2",cc.xy(1, 21));
645 jpan.add(jtf[cANZ2],cc.xy(3, 21));
646 jcmb[cLEIST2] = new JRtaComboBox();
647 jcmb[cLEIST2].setName("leistung2");
648 jcmb[cLEIST2].setActionCommand("leistung2");
649 jcmb[cLEIST2].addActionListener(this);
650 jpan.add(jcmb[cLEIST2],cc.xyw(5, 21,3));
652 jpan.addLabel("Anzahl / Heilmittel 3",cc.xy(1, 23));
653 jpan.add(jtf[cANZ3],cc.xy(3, 23));
654 jcmb[cLEIST3] = new JRtaComboBox();
655 jcmb[cLEIST3].setActionCommand("leistung3");
656 jcmb[cLEIST3].setName("leistung3");
657 jcmb[cLEIST3].addActionListener(this);
658 jpan.add(jcmb[cLEIST3],cc.xyw(5, 23,3));
660 jpan.addLabel("Anzahl / Heilmittel 4",cc.xy(1, 25));
661 jpan.add(jtf[cANZ4],cc.xy(3, 25));
662 jcmb[cLEIST4] = new JRtaComboBox();
663 jcmb[cLEIST4].setActionCommand("leistung4");
664 jcmb[cLEIST4].setName("leistung4");
665 jcmb[cLEIST4].addActionListener(this);
666 jpan.add(jcmb[cLEIST4],cc.xyw(5, 25,3));
668 jpan.addSeparator("Durchführungsbestimmungen", cc.xyw(1,27,7));
670 jpan.addLabel("Behandlungsfrequenz",cc.xy(1, 29));
671 jpan.add(jtf[cFREQ],cc.xy(3, 29));
673 jpan.addLabel("Dauer der Behandl. in Min.",cc.xy(5, 29));
674 jpan.add(jtf[cDAUER],cc.xy(7, 29));
677 jpan.addLabel("Indikationsschlüssel",cc.xy(1, 31));
678 jcmb[cINDI] = new JRtaComboBox();
679 jpan.add(jcmb[cINDI],cc.xy(3, 31));
681 klassenReady = true;
682 fuelleIndis((String)jcmb[cRKLASSE].getSelectedItem());
684 jpan.addLabel("Barcode-Format",cc.xy(5, 31));
685 //jcmb[cBARCOD] = new JRtaComboBox(new String[] {"Muster 13/18","Muster 14","DIN A6-Format","DIN A4(BGE)","DIN A4 (REHA)"});
686 jcmb[cBARCOD] = new JRtaComboBox(SystemConfig.rezBarCodName);
687 jpan.add(jcmb[cBARCOD],cc.xy(7, 31));
689 jpan.addLabel("FarbCode im TK",cc.xy(1, 33));
690 jcmb[cFARBCOD] = new JRtaComboBox();
691 new SwingWorker<Void,Void>(){
692 @Override
693 protected Void doInBackground() throws Exception {
694 macheFarbcodes();
695 return null;
697 }.execute();
699 jpan.add(jcmb[cFARBCOD],cc.xy(3, 33));
700 jpan.addLabel("Angelegt von",cc.xy(5, 33));
701 jpan.add(jtf[cANGEL],cc.xy(7, 33));
702 jpan.addSeparator("ICD-10 sofern vorhanden", cc.xyw(1,35,7));
703 // hier der ICD-10 Code
704 /********/
705 jpan.addLabel("ICD-10-Code",cc.xy(1,37));
706 jtf[cICD10].setName("icd10");
707 //jtf[cICD10].addFocusListener(this);
708 jpan.add(jtf[cICD10],cc.xy(3,37));
711 jpan.addSeparator("Ärztliche Diagnose laut Rezept", cc.xyw(1,39,7));
712 jta = new JTextArea();
713 jta.setBorder(BorderFactory.createLineBorder(Colors.PiOrange.alpha(0.5f)));
714 jta.setFont(new Font("Courier",Font.PLAIN,11));
715 jta.setLineWrap(true);
716 jta.setName("notitzen");
717 jta.setWrapStyleWord(true);
718 jta.setEditable(true);
719 jta.setBackground(Color.WHITE);
720 jta.setForeground(Color.RED);
721 JScrollPane span = JCompTools.getTransparentScrollPane(jta);
722 span.setBorder(BorderFactory.createLineBorder(Colors.PiOrange.alpha(0.25f)));
723 jpan.add(span,cc.xywh(1, 41,7,2));
724 JScrollPane jscr = JCompTools.getTransparentScrollPane(jpan.getPanel());
725 jscr.getVerticalScrollBar().setUnitIncrement(15);
727 if(this.neu){
728 this.holePreisGruppe(Reha.thisClass.patpanel.patDaten.get(68).trim());
729 this.ladePreisliste(jcmb[cRKLASSE].getSelectedItem().toString().trim(), preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]);
730 this.fuelleIndis(jcmb[cRKLASSE].getSelectedItem().toString().trim());
732 // Lemmi 20110101: bCtrlPressed zugefügt. Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
733 ladeZusatzDatenNeu(); // das muß auch als Voraussetzung für doKopiereLetztesRezeptDesPatienten gemacht werden
734 if ( this.neu && vec.size() > 0 )
735 doKopiereLetztesRezeptDesPatienten(); // hier drin wird auch "ladeZusatzDatenNeu()" aufgerufen
737 }else{
738 this.holePreisGruppe(this.vec.get(37));
739 this.ladePreisliste(jcmb[cRKLASSE].getSelectedItem().toString().trim(), preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]);
740 this.fuelleIndis(jcmb[cRKLASSE].getSelectedItem().toString().trim());
741 ladeZusatzDatenAlt();
744 jscr.validate();
746 // Lemmi 20101231: Merken der Originalwerte der eingelesenen Textfelder
747 SaveChangeStatus();
749 return jscr;
755 public int leistungTesten(int combo,int veczahl){
756 int retwert = 0;
757 if(veczahl==-1 || veczahl==0){
758 return retwert;
760 if(preisvec==null){
761 return 0;
763 for(int i = 0;i<preisvec.size();i++){
764 if( Integer.parseInt((String) ((Vector<?>)preisvec.get(i)).get(preisvec.get(i).size()-1)) == veczahl ){
765 return i+1;
768 return retwert;
770 public RezNeuanlage getInstance(){
771 return this;
773 @Override
774 public void actionPerformed(ActionEvent e) {
775 if(e.getActionCommand().equals("rezeptklasse") && klassenReady){
776 //System.out.println(jcmb[cRKLASSE].getSelectedItem().toString().trim());
777 //System.out.println(preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]);
778 this.ladePreisliste(jcmb[cRKLASSE].getSelectedItem().toString().trim(), preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]);
779 this.fuelleIndis((String)jcmb[cRKLASSE].getSelectedItem());
781 return;
783 /*********************/
784 if(e.getActionCommand().equals("verordnungsart") && klassenReady){
785 if(jcmb[cVERORD].getSelectedIndex()==2){
786 jcb[cBEGRADR].setEnabled(true);
787 }else{
788 jcb[cBEGRADR].setSelected(false);
789 jcb[cBEGRADR].setEnabled(false);
791 return;
793 /*********************/
794 if(e.getActionCommand().equals("speichern") ){
795 new SwingWorker<Void,Void>(){
796 @Override
797 protected Void doInBackground() throws Exception {
798 try{
799 if(! anzahlTest()){
800 return null;
802 if(getInstance().neu){
803 doSpeichernNeu();
804 }else{
805 doSpeichernAlt();
807 }catch(Exception ex){
808 ex.printStackTrace();
810 return null;
813 }.execute();
814 return;
816 /*********************/
817 if(e.getActionCommand().equals("abbrechen") ){
818 new SwingWorker<Void,Void>(){
819 @Override
820 protected Void doInBackground() throws Exception {
821 doAbbrechen();
822 return null;
824 }.execute();
825 return;
827 if(e.getActionCommand().equals("hmrcheck") ){
828 new SwingWorker<Void,Void>(){
829 @Override
830 protected Void doInBackground() throws Exception {
831 try{
832 boolean icd10falsch = false;
833 if(jtf[cICD10].getText().trim().length() > 0){
834 String String1 = jtf[cICD10].getText().trim().substring(0,1).toUpperCase();
835 String String2 = jtf[cICD10].getText().trim().substring(1).toUpperCase().replace(" ", "").replace("*", "").replace("!", "").replace("+","").replace("R", "").replace("L","").replace("B","").replace("G","").replace("V","").replace("Z","");;
836 String suchenach = String1+String2;
837 //suchenach = suchenach.replace(" ", "").replace("*", "").replace("!", "").replace("R", "").replace("L","").replace("B","").replace("G","").replace("V","").replace("Z","");
838 //System.out.println(suchenach+" Länge = "+suchenach.length());
839 //if(SqlInfo.holeEinzelFeld("select id from icd10 where schluessel1 = '"+suchenach+"' LIMIT 1").equals("")){
840 if(SqlInfo.holeEinzelFeld("select id from icd10 where schluessel1 like '"+suchenach+"%' LIMIT 1").equals("")){
842 int frage = JOptionPane.showConfirmDialog(null, "<html>Achtung!!<br><br>Der ICD-10 Code <b>"+jtf[cICD10].getText().trim()+
843 "</b> existiert nicht!<br>"+
844 "Wollen Sie jetzt das ICD-10-Tool starten?<br><br></html>", "falscher ICD-10",JOptionPane.YES_NO_OPTION);
845 if(frage==JOptionPane.YES_OPTION){
846 new LadeProg(Reha.proghome+"ICDSuche.jar"+" "+Reha.proghome+" "+Reha.aktIK);
849 icd10falsch = true;
851 }else{
852 if( SystemPreislisten.hmHMRAbrechnung.get(aktuelleDisziplin).get(preisgruppen[jcmb[cRKLASSE].getSelectedIndex()])==1 ){
853 hmrcheck.setEnabled(true);
854 JOptionPane.showMessageDialog(null, "<html><b><font color='#ff0000'>Kein ICD-10 Code angegeben!</font></b></html>");
858 doHmrCheck(icd10falsch);
859 }catch(Exception ex){
860 ex.printStackTrace();
862 return null;
864 }.execute();
865 return;
868 if(e.getActionCommand().equals("Hausbesuche") ){
869 if(jcb[cHAUSB].isSelected()){
870 // Hausbesuch gewählt
871 if(Reha.thisClass.patpanel.patDaten.get(44).equals("T")){
872 //System.out.println("aktuelle Preisgruppe = "+preisgruppe);
873 if(this.preisgruppe!=1 && (jcmb[cRKLASSE].getSelectedIndex() <= 1) ){
874 jcb[cVOLLHB].setEnabled(true);
876 SwingUtilities.invokeLater(new Runnable(){
877 public void run()
879 jcb[cHAUSB].requestFocus();
881 });
882 }else{
883 jcb[cVOLLHB].setEnabled(false);
884 jcb[cVOLLHB].setSelected(true);
885 SwingUtilities.invokeLater(new Runnable(){
886 public void run()
888 jcb[cHAUSB].requestFocus();
890 });
892 }else{
893 // Haubesuch abgewählt
894 jcb[cVOLLHB].setEnabled(false);
895 jcb[cVOLLHB].setSelected(false);
896 SwingUtilities.invokeLater(new Runnable(){
897 public void run()
899 jcb[cHAUSB].requestFocus();
901 });
903 return;
906 /*********************/
907 if(e.getActionCommand().contains("leistung") && initReady){
908 int lang = e.getActionCommand().length();
909 doRechnen( Integer.valueOf( e.getActionCommand().substring(lang-1 ) ) );
910 String test = (String)((JRtaComboBox)e.getSource()).getSelectedItem();
911 if(test==null){
912 return;
914 if(! test.equals("./.")){
915 String id = (String)((JRtaComboBox)e.getSource()).getValue();
916 Double preis = holePreisDouble(id,preisgruppe);
917 if(preis <= 0.0){
918 JOptionPane.showMessageDialog(null,"Diese Position ist für die gewählte Preisgruppe ungültig\nBitte weisen Sie in der Preislisten-Bearbeitung der Position ein Kürzel zu");
919 ((JRtaComboBox)e.getSource()).setSelectedIndex(0);
922 return;
927 /* Lemmi 20101231: diese Routine ersetzt durch nachfolgenden Routine, weil diese Routine ein "Scheck" gegen die Zukunft ist!
928 private boolean anzahlTest(){
929 int itest;
930 int maxanzahl=0,aktanzahl=0;
931 for(int i = 2; i < 6;i++){
932 itest = jcmb[i].getSelectedIndex();
933 if(itest > 0){
934 if(i == 2 ){
935 try{
936 maxanzahl = Integer.parseInt(jtf[i+2].getText());
937 }catch(Exception ex){
938 maxanzahl = 0;
940 }else{
941 try{
942 aktanzahl = Integer.parseInt(jtf[i+2].getText());
943 }catch(Exception ex){
944 aktanzahl = 0;
946 if(aktanzahl > maxanzahl){
947 String cmd = "Sie haben mehrere Heilmittel mit unterschiedlicher Anzahl eingegeben.\n"+
948 "Bitte geben Sie die Heilmittel so ein daß das Heilmittel mit der größten Anzahl oben steht\n"+
949 "und dann (bezogen auf die Anzahl) in absteigender Reihgenfolge nach unten";
950 JOptionPane.showMessageDialog(null,cmd);
951 return false;
956 return true;
959 // Lemmi 20101231: Harte Index-Zahlen für "jcmb" und "jtf" durch sprechende Konstanten ersetzt !
960 // Lemmi Doku: prüft ob die Heilmittel überhaupt und in der korrekten Reihenfolge eingetragen worden sind
961 private boolean anzahlTest(){
962 int itest;
963 int maxanzahl=0, aktanzahl=0;
965 for(int i = 0; i < 4; i++) { // über alle 4 Leistungs- und Anzahl-Positionen rennen
966 itest = jcmb[cLEIST1 + i].getSelectedIndex();
967 if(itest > 0){
968 if(i == 0 ){ // die 1. Position besonders abfragen - diese muß existieren !
969 try{
970 maxanzahl = Integer.parseInt(jtf[cANZ1 + i].getText());
971 }catch(Exception ex){
972 maxanzahl = 0;
974 }else{
975 try{
976 aktanzahl = Integer.parseInt(jtf[cANZ1 + i].getText());
977 }catch(Exception ex){
978 aktanzahl = 0;
980 if(aktanzahl > maxanzahl){
981 String cmd = "Sie haben mehrere Heilmittel mit unterschiedlicher Anzahl eingegeben.\n"+
982 "Bitte geben Sie die Heilmittel so ein daß das Heilmittel mit der größten Anzahl oben steht\n"+
983 "und dann (bezogen auf die Anzahl) in absteigender Reihgenfolge nach unten";
984 JOptionPane.showMessageDialog(null,cmd);
985 return false;
990 return true;
993 private void doRechnen(int comb){
994 //unbelegt
996 @SuppressWarnings("unused")
997 private void mustHmrCheck(){
998 if( SystemPreislisten.hmHMRAbrechnung.get(aktuelleDisziplin).get(preisgruppen[jcmb[cRKLASSE].getSelectedIndex()])==1 ){
999 this.hmrcheck.setEnabled(false);
1002 private void doHmrCheck(boolean icd10falsch ){
1003 if( SystemPreislisten.hmHMRAbrechnung.get(aktuelleDisziplin).get(preisgruppen[jcmb[cRKLASSE].getSelectedIndex()])==0 ){
1004 this.hmrcheck.setEnabled(true);
1005 JOptionPane.showMessageDialog(null, "HMR-Check ist bei diesem Kostenträger nicht erforderlich");
1006 return;
1008 //System.out.println(SystemPreislisten.hmHMRAbrechnung.get(aktuelleDisziplin).get(preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]));
1009 int itest = 0; //jcmb[cLEIST1].getSelectedIndex();
1010 String indi = (String)jcmb[cINDI].getSelectedItem();
1011 if(indi.equals("") || indi.contains("kein IndiSchl.")){
1012 JOptionPane.showMessageDialog(null, "<html><b>Kein Indikationsschlüssel angegeben.<br>Die Angaben sind <font color='#ff0000'>nicht</font> gemäß den gültigen Heilmittelrichtlinien!</b></html>");
1013 return;
1015 indi = indi.replace(" ", "");
1016 Vector<Integer> anzahlen = new Vector<Integer>();
1017 Vector<String> hmpositionen = new Vector<String>();
1019 /* Lemmi 20101231: diesen Block ersetzt durch nachfolgenden Block, weil dieser Block ein "Scheck" gegen die Zukunft ist!
1020 for(int i = 2;i <= 5;i++ ){
1021 itest = jcmb[i].getSelectedIndex();
1022 if(itest > 0){
1023 anzahlen.add( Integer.parseInt(jtf[2+i].getText()) );
1024 hmpositionen.add(preisvec.get(itest-1).get(2));
1028 // Lemmi 20101231: Harte Index-Zahlen für "jcmb" und "jtf" durch sprechende Konstanten ersetzt !
1029 for(int i = 0; i < 4; i++ ) { // Lemmi Doku: Nacheinander alle 4 Leistungen abfragen und Anzahlen addieren
1030 itest = jcmb[cLEIST1 + i].getSelectedIndex();
1031 if(itest > 0){
1032 anzahlen.add( Integer.parseInt(jtf[cANZ1 + i].getText()) );
1033 hmpositionen.add(preisvec.get(itest-1).get(2));
1039 if(jtf[cREZDAT].getText().trim().equals(". .")){
1040 JOptionPane.showMessageDialog(null, "Rezeptdatum nicht korrekt angegeben HMR-Check nicht möglich");
1041 return;
1044 long dattest = DatFunk.TageDifferenz(DatFunk.sHeute(),jtf[cREZDAT].getText().trim() );
1045 if( (dattest < 365) || (dattest > 365) ){
1046 int frage = JOptionPane.showConfirmDialog(null, "<html><b>Das Rezeptdatum ist etwas kritisch....<br><br><font color='#ff0000'> "+
1047 "Rezeptdatum = "+jtf[cREZDAT].getText().trim()+"</font></b><br>Das sind ab Heute "+Long.toString(dattest)+" Tage<br><br><br>"+
1048 "Wollen Sie dieses Rezeptdatum tatsächlich abspeichern?", "Bedenkliches Rezeptdatum",JOptionPane.YES_NO_OPTION);
1049 if(frage!=JOptionPane.YES_OPTION){
1050 return;
1055 if(icd10falsch){
1056 int frage = JOptionPane.showConfirmDialog(null, "<html><b>Der eingetragene ICD-10-Code ist falsch: <font color='#ff0000'>"+
1057 jtf[cICD10].getText().trim()+"</font></b><br>"+
1058 "HMR-Check nicht möglich!<br><br>"+
1059 "Wollen Sie jetzt das ICD-10-Tool starten?<br><br></html>", "falscher ICD-10",JOptionPane.YES_NO_OPTION);
1060 if(frage==JOptionPane.YES_OPTION){
1061 new LadeProg(Reha.proghome+"ICDSuche.jar"+" "+Reha.proghome+" "+Reha.aktIK);
1063 jtf[cICD10].setText("");
1064 SwingUtilities.invokeLater(new Runnable(){
1065 public void run(){
1066 jtf[cICD10].requestFocus();
1069 return;
1071 if(hmpositionen.size() > 0){
1072 String[] idiszi = {"Physio-Rezept","Massage/Lymphdrainage-Rezept",
1073 "Ergotherapie-Rezept","Logopädie-Rezept","REHA-Verordnung"}; // Lemmi Fehler: Wa ist die Podologie ? Warum müssen diese "Standard-Strings immer neu aufgeführt werden? (genau EINAML an zentraler Stelle reicht! dt. für die 2-Buchstaben-Kürzel !
1074 String letztbeginn = jtf[cBEGINDAT].getText().trim();
1075 if(letztbeginn.equals(". .")){
1076 //Preisgruppe holen
1077 int pg = Integer.parseInt(jtf[cPREISGR].getText())-1;
1078 //Frist zwischen Rezeptdatum und erster Behandlung
1079 int frist = (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(0)).get(pg);
1080 //Kalendertage
1081 if((Boolean) ((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(1)).get(pg)){
1082 letztbeginn = DatFunk.sDatPlusTage(jtf[cREZDAT].getText().trim(), frist);
1083 }else{ //Werktage
1084 boolean mitsamstag = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(4)).get(pg);
1085 letztbeginn = HMRCheck.hmrLetztesDatum(jtf[cREZDAT].getText().trim(), (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(0)).get(pg),mitsamstag );
1088 boolean checkok = new HMRCheck(
1089 indi,
1090 Arrays.asList(idiszi).indexOf((String)jcmb[cRKLASSE].getSelectedItem().toString()),
1091 anzahlen,
1092 hmpositionen,
1093 preisgruppen[jcmb[cRKLASSE].getSelectedIndex()],
1094 preisvec,
1095 jcmb[cVERORD].getSelectedIndex(),
1096 (this.neu ? "" : this.vec.get(1).trim()),
1097 jtf[cREZDAT].getText().trim(),
1098 letztbeginn
1099 ).check();
1100 if(checkok){
1101 JOptionPane.showMessageDialog(null, "<html><b>Das Rezept <font color='#ff0000'>entspricht</font> den geltenden Heilmittelrichtlinien</b></html>");
1103 }else{
1104 JOptionPane.showMessageDialog(null, "Keine Behandlungspositionen angegeben, HMR-Check nicht möglich!!!");
1110 private boolean komplettTest(){
1111 if(jtf[cREZDAT].getText().trim().equals(". .")){
1112 JOptionPane.showMessageDialog(null, "Ohne ein gültiges 'Rezeptdatum' kann ein Rezept nicht abgespeichert werden.");
1113 SwingUtilities.invokeLater(new Runnable(){
1114 public void run()
1116 jtf[cREZDAT].requestFocus();
1118 });
1119 return false;
1122 if(jtf[cKTRAEG].getText().trim().equals("")){
1123 JOptionPane.showMessageDialog(null, "Ohne die Angabe 'Kostenträger' kann ein Rezept nicht abgespeichert werden.");
1124 SwingUtilities.invokeLater(new Runnable(){
1125 public void run()
1127 jtf[cKTRAEG].requestFocus();
1129 });
1130 return false;
1132 if(jtf[cARZT].getText().trim().equals("")){
1133 JOptionPane.showMessageDialog(null, "Ohne die Angabe 'verordn. Arzt' kann ein Rezept nicht abgespeichert werden.");
1134 SwingUtilities.invokeLater(new Runnable(){
1135 public void run()
1137 jtf[cARZT].requestFocus();
1139 });
1140 return false;
1142 if(jtf[cDAUER].getText().trim().equals("")){
1143 JOptionPane.showMessageDialog(null, "Ohne die Angabe 'Behandlungsdauer' kann ein Rezept nicht abgespeichert werden.");
1144 SwingUtilities.invokeLater(new Runnable(){
1145 public void run()
1147 jtf[cDAUER].requestFocus();
1149 });
1150 return false;
1152 if(jtf[cANGEL].getText().trim().equals("")){
1153 JOptionPane.showMessageDialog(null, "Ohne die Angabe 'Angelegt von' kann ein Rezept nicht abgespeichert werden.");
1154 SwingUtilities.invokeLater(new Runnable(){
1155 public void run()
1157 jtf[cANGEL].requestFocus();
1159 });
1160 return false;
1162 if( SystemPreislisten.hmHMRAbrechnung.get(aktuelleDisziplin).get(preisgruppen[jcmb[cRKLASSE].getSelectedIndex()])==1 ){
1163 if(jtf[cFREQ].getText().trim().equals("")){
1164 JOptionPane.showMessageDialog(null, "Ohne Angabe der 'Behandlungsfrequenz' kann ein GKV-Rezept nicht abgespeichert werden.");
1165 SwingUtilities.invokeLater(new Runnable(){
1166 public void run()
1168 jtf[cFREQ].requestFocus();
1170 });
1171 return false;
1174 return true;
1176 private void ladePreisliste(String item,int preisgruppe){
1177 String[] artdbeh=null;
1178 if(!this.neu && jcmb[cLEIST1].getItemCount()>0){
1179 artdbeh = new String[]{
1180 String.valueOf(jcmb[cLEIST1].getValueAt(1)),String.valueOf(jcmb[cLEIST2].getValueAt(1)),
1181 String.valueOf(jcmb[cLEIST3].getValueAt(1)),String.valueOf(jcmb[cLEIST4].getValueAt(1))};
1183 jcmb[cLEIST1].removeAllItems();
1184 jcmb[cLEIST2].removeAllItems();
1185 jcmb[cLEIST3].removeAllItems();
1186 jcmb[cLEIST4].removeAllItems();
1188 if(item.toLowerCase().contains("physio") ){
1189 aktuelleDisziplin = "Physio";
1190 nummer = "kg";
1191 }else if(item.toLowerCase().contains("massage")){
1192 aktuelleDisziplin = "Massage";
1193 nummer = "ma";
1194 }else if(item.toLowerCase().contains("ergo")){
1195 aktuelleDisziplin = "Ergo";
1196 nummer = "er";
1197 }else if(item.toLowerCase().contains("logo")){
1198 aktuelleDisziplin = "Logo";
1199 nummer = "lo";
1200 }else if(item.toLowerCase().contains("rehasport")){
1201 aktuelleDisziplin = "Rsport";
1202 nummer = "rs";
1203 }else if(item.toLowerCase().contains("funktions")){
1204 aktuelleDisziplin = "Ftrain";
1205 nummer = "ft";
1206 }else if(item.toLowerCase().contains("reha") && (!item.toLowerCase().contains("rehasport")) ){
1207 aktuelleDisziplin = "Reha";
1208 nummer = "rh";
1209 }else if(item.toLowerCase().contains("podo")){
1210 aktuelleDisziplin = "Podo";
1211 nummer = "po";
1214 preisvec = SystemPreislisten.hmPreise.get(aktuelleDisziplin).get(preisgruppe);
1216 //System.out.println("Aktuelle Disziplin = "+aktuelleDisziplin);
1217 //System.out.println("Preisvektor = "+preisvec);
1219 if(artdbeh!=null){
1220 ladePreise(artdbeh);
1221 }else{
1222 ladePreise(null);
1224 if(this.neu && SystemPreislisten.hmHMRAbrechnung.get(aktuelleDisziplin).get(preisgruppe) == 1){
1225 if(aktuelleDisziplin.equals("Physio") || aktuelleDisziplin.equals("Massage") || aktuelleDisziplin.equals("Ergo")){
1226 jcmb[cBARCOD].setSelectedItem("Muster 13/18");
1227 }else if(aktuelleDisziplin.equals("Logo")){
1228 jcmb[cBARCOD].setSelectedItem("Muster 14");
1229 }else if(aktuelleDisziplin.equals("Reha")){
1230 jcmb[cBARCOD].setSelectedItem("DIN A4 (REHA)");
1231 }else{
1232 jcmb[cBARCOD].setSelectedItem("Muster 13/18");
1234 }else if(this.neu && aktuelleDisziplin.equals("Reha")){
1235 jcmb[cBARCOD].setSelectedItem("DIN A4 (REHA)");
1236 }else{
1237 if(this.neu){
1238 jcmb[cBARCOD].setSelectedItem("Muster 13/18");
1244 // Lemmi-Doku: Holt die passenden Inikationsschlüssel gemäß aktiver Disziplin
1245 private void fuelleIndis(String item){
1246 if(jcmb[cINDI].getItemCount() > 0){
1247 jcmb[cINDI].removeAllItems();
1249 if(item.toLowerCase().contains("reha") && (!item.toLowerCase().startsWith("rehasport")) ){
1250 return;
1252 int anz = 0;
1253 String[] indis = null;
1254 if( item.toLowerCase().contains("physio")
1255 || item.toLowerCase().contains("massage")
1256 || item.toLowerCase().contains("rehasport")
1257 || item.toLowerCase().contains("funktions")){
1258 anz = Reha.thisClass.patpanel.aktRezept.indphysio.length;
1259 indis = Reha.thisClass.patpanel.aktRezept.indphysio;
1260 }else if(item.toLowerCase().contains("ergo")){
1261 anz = Reha.thisClass.patpanel.aktRezept.indergo.length;
1262 indis = Reha.thisClass.patpanel.aktRezept.indergo;
1263 }else if(item.toLowerCase().contains("logo")){
1264 anz = Reha.thisClass.patpanel.aktRezept.indlogo.length;
1265 indis = Reha.thisClass.patpanel.aktRezept.indlogo;
1266 }else if(item.toLowerCase().contains("podo")){
1267 anz = Reha.thisClass.patpanel.aktRezept.indpodo.length;
1268 indis = Reha.thisClass.patpanel.aktRezept.indpodo;
1270 for(int i = 0; i < anz; i++){
1271 jcmb[cINDI].addItem(indis[i]);
1274 return;
1277 public void ladePreise(String[] artdbeh){
1278 try{
1279 if(preisvec.size()<=0){
1280 JOptionPane.showMessageDialog(null,"In der erforderlichen Preisliste sind noch keine Preise vorhanden!\nRezept kann nicht angelegt werden");
1281 return;
1283 }catch(Exception ex){
1284 JOptionPane.showMessageDialog(null,"In der erforderlichen Preisliste sind noch keine Preise vorhanden!\nRezept kann nicht angelegt werden");
1285 return;
1287 jcmb[cLEIST1].setDataVectorWithStartElement(preisvec,0,9,"./.");
1288 jcmb[cLEIST2].setDataVectorWithStartElement(preisvec,0,9,"./.");
1289 jcmb[cLEIST3].setDataVectorWithStartElement(preisvec,0,9,"./.");
1290 jcmb[cLEIST4].setDataVectorWithStartElement(preisvec,0,9,"./.");
1291 if(artdbeh != null){
1292 for (int i = 0; i < 4; i++){
1293 if(artdbeh[i].equals("")){
1294 // Lemmi 20110116 ersetzt durch Zeile unten drunter.
1295 //Alt: jcmb[i+2].setSelectedIndex(0);
1296 jcmb[cLEIST1+i].setSelectedIndex(0);
1297 }else{
1298 // Lemmi 20110116 ersetzt durch Zeile unten drunter.
1299 //Alt: jcmb[i+2].setSelectedVecIndex(1, artdbeh[i]);
1300 jcmb[cLEIST1+i].setSelectedVecIndex(1, artdbeh[i]);
1304 return;
1308 // static int x = 1;
1310 @Override
1311 public void keyPressed(KeyEvent arg0) {
1312 if(arg0.getKeyChar()=='?' && ((JComponent)arg0.getSource()).getName().equals("arzt")){
1313 String[] suchkrit = new String[] {jtf[cARZT].getText().replace("?", ""),jtf[cARZTID].getText()};
1314 jtf[cARZT].setText(String.valueOf(suchkrit[0]));
1315 arztAuswahl(suchkrit);
1317 if(arg0.getKeyChar()=='?' && ((JComponent)arg0.getSource()).getName().equals("ktraeger")){
1318 String[] suchkrit = new String[] {jtf[cKTRAEG].getText().replace("?", ""),jtf[cKASID].getText()};
1319 jtf[cKTRAEG].setText(suchkrit[0]);
1320 kassenAuswahl(suchkrit);
1322 if(arg0.getKeyCode()==27){ // Lemmi Doku: Taste "ESC" gedrückt: besser wäre die Abfrage nach "KeyEvent.VK_ESCAPE"
1323 doAbbrechen();
1326 /* Lemmi Experimental
1327 if(arg0.getKeyCode()==KeyEvent.VK_S && arg0.isControlDown()){ // Lemmi Doku: Taste "Strg+S" gedrückt: besser wäre die Abfrage nach "KeyEvent.VK_ESCAPE"
1328 System.out.println("ausgelöst " + x++ );
1329 jcb[1].se
1330 ansehen: Favoriten: key map bei jta,, actiomap bei jcmb und jcb
1332 else
1333 System.out.println("irgendwas" );
1337 /* Lemmi 20110101: Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
1338 if(arg0.getKeyCode() == KeyEvent.VK_CONTROL){ // Lemmi Doku: Taste "Ctrl" gedrückt
1339 if( this.neu ) // nur dann, wenn ein neues Rezept angelegt werden soll !
1340 doKopiereletztesRezeptDesPatienten();
1345 @Override
1346 public void keyReleased(KeyEvent arg0) {
1349 @Override
1350 public void keyTyped(KeyEvent arg0) {
1353 @Override
1354 public void focusGained(FocusEvent arg0) {
1357 @Override
1358 public void focusLost(FocusEvent arg0) {
1359 if( ((JComponent)arg0.getSource()).getName() != null){
1360 if( ((JComponent)arg0.getSource()).getName().equals("rez_datum") ){
1361 return;
1363 if( ((JComponent)arg0.getSource()).getName().equals("anzahl1") && neu ){
1364 String text = jtf[cANZ1].getText();
1365 jtf[cANZ2].setText(text);
1366 jtf[cANZ3].setText(text);
1367 jtf[cANZ4].setText(text);
1368 return;
1370 //Die ICD-10 Prüfung ist im HMR-Check wohl besser aufgehoben
1372 if( ((JComponent)arg0.getSource()).getName().equals("icd10") ){
1373 new SwingWorker<Void,Void>(){
1374 @Override
1375 protected Void doInBackground() throws Exception {
1376 if(SqlInfo.holeEinzelFeld("select id from icd10 where schluessel1 like '"+jtf[cICD10].getText().trim()+"%' LIMIT 1").equals("")){
1377 int frage = JOptionPane.showConfirmDialog(null, "<html>Achtung!!<br><br>Der ICD-10 Code <b>"+jtf[cICD10].getText().trim()+
1378 "</b> existiert nicht!<br>"+
1379 "Wollen Sie jetzt das ICD-10-Tool starten?<br><br></html>", "falscher ICD-10",JOptionPane.YES_NO_OPTION);
1380 if(frage==JOptionPane.YES_OPTION){
1381 new LadeProg(Reha.proghome+"ICDSuche.jar"+" "+Reha.proghome+" "+Reha.aktIK);
1384 return null;
1386 }.execute();
1387 return;
1393 private void arztAuswahl(String[] suchenach){
1394 jtf[cREZDAT].requestFocus();
1395 JRtaTextField tfArztNum = new JRtaTextField("",false);
1396 // einbauen A-Name +" - " +LANR;
1397 ArztAuswahl awahl = new ArztAuswahl(null,"ArztAuswahl",suchenach,new JRtaTextField[] {jtf[cARZT],new JRtaTextField("",false),jtf[cARZTID]},String.valueOf(jtf[cARZT].getText().trim()));
1398 awahl.setModal(true);
1399 awahl.setLocationRelativeTo(this);
1400 awahl.setVisible(true);
1401 SwingUtilities.invokeLater(new Runnable(){
1402 public void run(){
1403 jtf[cREZDAT].requestFocus();
1406 try{
1407 String aneu = "";
1408 if(! Reha.thisClass.patpanel.patDaten.get(63).contains( ("@"+(aneu = jtf[cARZTID].getText().trim())+"@\n")) ){
1409 String aliste = Reha.thisClass.patpanel.patDaten.get(63)+ "@"+aneu+"@\n";
1410 Reha.thisClass.patpanel.patDaten.set(63,aliste+ "@"+aneu+"@\n");
1411 Reha.thisClass.patpanel.getLogic().arztListeSpeichernString(aliste,false,Reha.thisClass.patpanel.aktPatID);
1412 SwingUtilities.invokeLater(new Runnable(){
1413 public void run(){
1414 jtf[cREZDAT].requestFocus();
1419 String msg = "Dieser Arzt ist bislang nicht in der Arztliste dieses Patienten.\n"+
1420 "Soll dieser Arzt der Ärzteliste des Patienten zugeordnet werden?";
1421 int frage = JOptionPane.showConfirmDialog(null,msg,"Wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1422 if(frage == JOptionPane.YES_OPTION){
1423 String aliste = Reha.thisClass.patpanel.patDaten.get(63)+ "@"+aneu+"@\n";
1424 Reha.thisClass.patpanel.patDaten.set(63,aliste+ "@"+aneu+"@\n");
1425 Reha.thisClass.patpanel.getLogic().arztListeSpeichernString(aliste,false,Reha.thisClass.patpanel.aktPatID);
1426 SwingUtilities.invokeLater(new Runnable(){
1427 public void run(){
1428 jtf[REZDAT].requestFocus();
1431 }else{
1432 SwingUtilities.invokeLater(new Runnable(){
1433 public void run(){
1434 jtf[REZDAT].requestFocus();
1440 }catch(Exception ex){
1441 ex.printStackTrace();
1442 JOptionPane.showMessageDialog(null, "Fehler beim Speichern der Arztliste!\n"+
1443 "Bitte notieren Sie Patient, Rezeptnummer und den Arzt den Sie der\n"+
1444 "Arztliste hinzufügen wollten und informieren Sie umgehend den Administrator.\n\nDanke");
1446 awahl.dispose();
1447 awahl = null;
1450 private void kassenAuswahl(String[] suchenach){
1451 jtf[cARZT].requestFocus();
1452 KassenAuswahl kwahl = new KassenAuswahl(null,"KassenAuswahl",suchenach,new JRtaTextField[] {jtf[cKTRAEG],jtf[cPATID],jtf[cKASID]},jtf[cKTRAEG].getText().trim());
1453 kwahl.setModal(true);
1454 kwahl.setLocationRelativeTo(this);
1455 kwahl.setVisible(true);
1456 SwingUtilities.invokeLater(new Runnable(){
1457 public void run(){
1458 if(jtf[cKASID].getText().equals("")){
1459 String meldung = "Achtung - kann Preisgruppe nicht ermitteln!\n"+
1460 "Das bedeutet diese Rezept kann später nicht abgerechnet werden!\n\n"+
1461 "Und bedenken Sie bitte Ihr Kürzel wird dauerhaft diesem Rezept zugeordnet....";
1462 JOptionPane.showMessageDialog(null,meldung);
1463 }else{
1464 holePreisGruppe(jtf[cKASID].getText().trim());
1465 ladePreisliste(jcmb[cRKLASSE].getSelectedItem().toString().trim(), preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]);
1466 jtf[cARZT].requestFocus();
1470 kwahl.dispose();
1471 kwahl = null;
1474 @SuppressWarnings("unused")
1475 private void holePreisGruppeMitWorker(String id){
1476 final String xid = id;
1477 new SwingWorker<Void,Void>(){
1478 @Override
1479 protected Void doInBackground() throws Exception {
1480 try{
1482 Vector<Vector<String>> vec = null;
1483 if(SystemConfig.mitRs){
1484 vec = SqlInfo.holeFelder("select preisgruppe,pgkg,pgma,pger,pglo,pgrh,pgpo,pgrs,pgft from kass_adr where id='"+xid+"' LIMIT 1");
1485 }else{
1486 vec = SqlInfo.holeFelder("select preisgruppe,pgkg,pgma,pger,pglo,pgrh,pgpo from kass_adr where id='"+xid+"' LIMIT 1");
1488 //System.out.println(vec);
1489 if(vec.size()>0){
1490 for(int i = 1; i < vec.get(0).size();i++){
1491 preisgruppen[i-1] = Integer.parseInt(vec.get(0).get(i))-1;
1493 preisgruppe = Integer.parseInt((String)vec.get(0).get(0))-1;
1494 jtf[cPREISGR].setText((String)vec.get(0).get(0));
1495 ladePreisliste(jcmb[cRKLASSE].getSelectedItem().toString().trim(), preisgruppen[jcmb[cRKLASSE].getSelectedIndex()]);
1496 fuelleIndis(jcmb[cRKLASSE].getSelectedItem().toString().trim());
1497 ladeZusatzDatenNeu();
1498 }else{
1499 JOptionPane.showMessageDialog(null,"Achtung - kann Preisgruppe nicht ermitteln - Rezept kann später nicht abgerechnet werden!");
1501 }catch(Exception ex){
1502 ex.printStackTrace();
1504 return null;
1507 }.execute();
1509 private void holePreisGruppe(String id){
1510 try{
1511 Vector<Vector<String>> vec = null;
1512 if(SystemConfig.mitRs){
1513 vec = SqlInfo.holeFelder("select preisgruppe,pgkg,pgma,pger,pglo,pgrh,pgpo,pgrs,pgft from kass_adr where id='"+id+"' LIMIT 1");
1514 }else{
1515 vec = SqlInfo.holeFelder("select preisgruppe,pgkg,pgma,pger,pglo,pgrh,pgpo from kass_adr where id='"+id+"' LIMIT 1");
1517 //Vector<Vector<String>> vec = SqlInfo.holeFelder("select preisgruppe,pgkg,pgma,pger,pglo,pgrh,pgpo from kass_adr where id='"+id+"' LIMIT 1");
1518 //System.out.println(vec);
1519 if(vec.size()>0){
1520 for(int i = 1; i < vec.get(0).size();i++){
1521 preisgruppen[i-1] = Integer.parseInt(vec.get(0).get(i))-1;
1523 preisgruppe = Integer.parseInt((String)vec.get(0).get(0))-1;
1524 jtf[cPREISGR].setText((String)vec.get(0).get(0));
1525 }else{
1526 JOptionPane.showMessageDialog(null,"Achtung - kann Preisgruppe nicht ermitteln - Rezept kann später nicht abgerechnet werden!");
1528 }catch(Exception ex){
1529 JOptionPane.showMessageDialog(null,"Achtung - kann Preisgruppe nicht ermitteln - Rezept kann später nicht abgerechnet werden!\n"+
1530 "Untersuchen Sie die Krankenkasse im Kassenstamm un weisen Sie dieser Kasse die entsprechend Preisgruppe zu");
1534 /***********
1538 // Lemmi Doku: holt Daten aus dem aktuellen Patienten und trägt sie im Rezept ein
1539 private void ladeZusatzDatenNeu(){
1540 //String tests = "";
1541 jtf[cKTRAEG].setText(Reha.thisClass.patpanel.patDaten.get(13));
1542 jtf[cKASID].setText(Reha.thisClass.patpanel.patDaten.get(68)); //kassenid
1543 if(jtf[cKASID].getText().trim().equals("")){
1544 JOptionPane.showMessageDialog(null,"Achtung - kann Preisgruppe nicht ermitteln - Rezept kann später nicht abgerechnet werden!");
1546 jtf[cARZT].setText(Reha.thisClass.patpanel.patDaten.get(25)+ " - "+Reha.thisClass.patpanel.patDaten.get(26));
1547 // einbauen A-Name +" - " +LANR;
1548 jtf[cARZTID].setText(Reha.thisClass.patpanel.patDaten.get(67)); //arztid
1549 //tests = Reha.thisClass.patpanel.patDaten.get(31); // bef_dat = Datum der Befreiung
1550 jtf[cHEIMBEW].setText(Reha.thisClass.patpanel.patDaten.get(44)); //heimbewohn
1551 jtf[cBEFREIT].setText(Reha.thisClass.patpanel.patDaten.get(30)); //befreit
1552 jtf[cANZKM].setText(Reha.thisClass.patpanel.patDaten.get(48)); //kilometer
1553 jtf[cPATID].setText(Reha.thisClass.patpanel.patDaten.get(66)); //id von Patient
1554 jtf[cPATINT].setText(Reha.thisClass.patpanel.patDaten.get(29)); //pat_intern von Patient
1557 /***********
1561 // Lemmi Doku: lädt die Daten aus dem übergebenen Rezept-Vektor in die Dialog-Felder des Rezepts
1562 // und setzt auch dei ComboBoxen und CheckBoxen
1563 private void ladeZusatzDatenAlt(){
1564 String test = StringTools.NullTest(this.vec.get(36));
1565 jtf[cKTRAEG].setText(test); //kasse
1566 test = StringTools.NullTest(this.vec.get(37));
1567 jtf[cKASID].setText(test); //kid
1568 test = StringTools.NullTest(this.vec.get(15));
1569 jtf[cARZT].setText(test); //arzt
1570 test = StringTools.NullTest(this.vec.get(16));
1571 jtf[cARZTID].setText(test); //arztid
1572 test = StringTools.NullTest(this.vec.get(2));
1573 if(!test.equals("")){
1574 jtf[cREZDAT].setText(DatFunk.sDatInDeutsch(test));
1576 test = StringTools.NullTest(this.vec.get(40));
1577 if(!test.equals("")){
1578 jtf[cBEGINDAT].setText(DatFunk.sDatInDeutsch(test));
1580 int itest = StringTools.ZahlTest(this.vec.get(27));
1581 if(itest >=0){
1582 jcmb[cVERORD].setSelectedIndex(itest);
1584 test = StringTools.NullTest(this.vec.get(42));
1585 jcb[cBEGRADR].setSelected((test.equals("T")?true:false));
1586 test = StringTools.NullTest(this.vec.get(43));
1587 jcb[cHAUSB].setSelected((test.equals("T")?true:false));
1589 test = StringTools.NullTest(this.vec.get(61));
1590 jcb[cVOLLHB].setSelected((test.equals("T")?true:false));
1592 test = StringTools.NullTest(this.vec.get(55));
1593 jcb[cTBANGEF].setSelected((test.equals("T")?true:false));
1594 test = StringTools.NullTest(this.vec.get(3));
1595 jtf[cANZ1].setText(test);
1596 test = StringTools.NullTest(this.vec.get(4));
1597 jtf[cANZ2].setText(test);
1598 test = StringTools.NullTest(this.vec.get(5));
1599 jtf[cANZ3].setText(test);
1600 test = StringTools.NullTest(this.vec.get(6));
1601 jtf[cANZ4].setText(test);
1603 itest = StringTools.ZahlTest(this.vec.get(8));
1604 jcmb[cLEIST1].setSelectedIndex(leistungTesten(0,itest));
1605 itest = StringTools.ZahlTest(this.vec.get(9));
1606 jcmb[cLEIST2].setSelectedIndex(leistungTesten(1,itest));
1607 itest = StringTools.ZahlTest(this.vec.get(10));
1608 jcmb[cLEIST3].setSelectedIndex(leistungTesten(2,itest));
1609 itest = StringTools.ZahlTest(this.vec.get(11));
1610 jcmb[cLEIST4].setSelectedIndex(leistungTesten(3,itest));
1612 test = StringTools.NullTest(this.vec.get(52));
1613 jtf[cFREQ].setText(test);
1614 test = StringTools.NullTest(this.vec.get(47));
1615 jtf[cDAUER].setText(test);
1617 test = StringTools.NullTest(this.vec.get(44));
1618 jcmb[cINDI].setSelectedItem(test);
1620 itest = StringTools.ZahlTest(this.vec.get(46));
1621 jcmb[cBARCOD].setSelectedIndex(itest);
1623 test = StringTools.NullTest(this.vec.get(45));
1624 jtf[cANGEL].setText(test);
1625 if(!test.trim().equals("")){
1626 jtf[cANGEL].setEnabled(false);
1628 jta.setText( StringTools.NullTest(this.vec.get(23)) );
1629 if(!jtf[cKASID].getText().equals("")){
1630 holePreisGruppe(jtf[cKASID].getText().trim());
1631 }else{
1632 JOptionPane.showMessageDialog(null, "Ermittlung der Preisgruppen erforderlich");
1635 jtf[cHEIMBEW].setText(Reha.thisClass.patpanel.patDaten.get(44)); //heimbewohn
1636 jtf[cBEFREIT].setText(Reha.thisClass.patpanel.patDaten.get(30)); //befreit
1637 jtf[cANZKM].setText(Reha.thisClass.patpanel.patDaten.get(48)); //kilometer
1638 jtf[cPATID].setText(this.vec.get(38)); //id von Patient
1639 jtf[cPATINT].setText(this.vec.get(0)); //pat_intern von Patient
1641 //ICD-10
1642 jtf[cICD10].setText(this.vec.get(71));
1644 itest = StringTools.ZahlTest(this.vec.get(57));
1645 if(itest >= 0){
1646 jcmb[cFARBCOD].setSelectedItem( (String)SystemConfig.vSysColsBedeut.get(itest) );
1651 /********************************/
1652 @SuppressWarnings("unused")
1653 private Double holePreisDoubleX(String pos,int ipreisgruppe){
1654 Double dbl = 0.0;
1655 for(int i = 0; i < preisvec.size();i++){
1656 if(this.preisvec.get(i).get(0).equals(pos)){
1657 if(this.preisvec.get(i).get(3).equals("")){
1658 return dbl;
1660 return Double.parseDouble(this.preisvec.get(i).get(3));
1663 return dbl;
1665 private Double holePreisDouble(String id,int ipreisgruppe){
1666 Double dbl = 0.0;
1667 for(int i = 0; i < preisvec.size();i++){
1668 if(this.preisvec.get(i).get(9).equals(id)){
1669 if(this.preisvec.get(i).get(1).equals("")){
1670 return dbl;
1672 return Double.parseDouble(this.preisvec.get(i).get(3));
1675 return dbl;
1678 /*********************************/
1679 @SuppressWarnings("unused")
1680 private String[] holePreis(int ivec,int ipreisgruppe){
1681 if(ivec > 0){
1682 int prid = Integer.valueOf((String) this.preisvec.get(ivec).get(this.preisvec.get(ivec).size()-1));
1683 Vector<?> xvec = ((Vector<?>)this.preisvec.get(ivec));
1684 return new String[] {(String)xvec.get(3),(String)xvec.get(2)};
1685 }else{
1686 return new String[] {"0.00",""};
1689 /***********
1693 /**************************************/
1694 private void doSpeichernAlt(){
1695 try{
1696 if(!komplettTest()){
1697 return;
1699 setCursor(Reha.thisClass.wartenCursor);
1700 String stest = "";
1701 int itest = -1;
1702 StringBuffer sbuf = new StringBuffer();
1703 sbuf.append("update verordn set ktraeger='"+jtf[cKTRAEG].getText()+"', ");
1704 sbuf.append("kid='"+jtf[cKASID].getText()+"', ");
1705 sbuf.append("arzt='"+jtf[cARZT].getText()+"', ");
1706 sbuf.append("arztid='"+jtf[cARZTID].getText()+"', ");
1707 stest = jtf[cREZDAT].getText().trim();
1708 if(stest.equals(". .")){
1709 stest = DatFunk.sHeute();
1711 boolean neuerpreis = RezTools.neuePreisNachRezeptdatumOderStichtag(aktuelleDisziplin, preisgruppe, String.valueOf(stest),false,Reha.thisClass.patpanel.vecaktrez);
1712 sbuf.append("rez_datum='"+DatFunk.sDatInSQL(stest)+"', ");
1713 int row = Reha.thisClass.patpanel.aktRezept.tabaktrez.getSelectedRow();
1714 if(row >= 0){
1715 Reha.thisClass.patpanel.aktRezept.tabaktrez.getModel().setValueAt(stest, row, 2);
1717 String stest2 = jtf[cBEGINDAT].getText().trim();
1718 if(stest2.equals(". .")){
1719 //Preisgruppe holen
1720 int pg = Integer.parseInt(jtf[cPREISGR].getText())-1;
1721 //Frist zwischen Rezeptdatum und erster Behandlung
1722 int frist = (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(0)).get(pg);
1723 //Kalendertage
1724 if((Boolean) ((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(1)).get(pg)){
1725 stest2 = DatFunk.sDatPlusTage(stest, frist);
1726 }else{ //Werktage
1727 boolean mitsamstag = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(4)).get(pg);
1728 stest2 = HMRCheck.hmrLetztesDatum(stest, (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(0)).get(pg),mitsamstag );
1731 if(row >= 0){
1732 Reha.thisClass.patpanel.aktRezept.tabaktrez.getModel().setValueAt(stest2, row, 4);
1734 sbuf.append("lastdate='"+DatFunk.sDatInSQL(stest2)+"', ");
1735 sbuf.append("lasteddate='"+DatFunk.sDatInSQL(DatFunk.sHeute())+"', ");
1736 sbuf.append("lastedit='"+Reha.aktUser+"', ");
1737 sbuf.append("rezeptart='"+Integer.valueOf(jcmb[cVERORD].getSelectedIndex()).toString()+"', ");
1738 sbuf.append("begruendadr='"+(jcb[cBEGRADR].isSelected() ? "T" : "F")+"', ");
1739 sbuf.append("hausbes='"+(jcb[cHAUSB].isSelected() ? "T" : "F")+"', ");
1740 if(jcb[cHAUSB].isSelected()){
1741 if(!this.vec.get(64).equals(jtf[cANZ1].getText())){
1742 int frage = JOptionPane.showConfirmDialog(null,"Achtung!\n\nDie Anzahl Hausbesuche = "+this.vec.get(64)+"\n"+
1743 "Die Anzahl des ersten Heilmittels = "+jtf[cANZ1].getText()+"\n\n"+
1744 "Soll die Anzahl Hausbesuche ebenfalls auf "+jtf[cANZ1].getText()+" gesetzt werden?","Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1745 if(frage == JOptionPane.YES_OPTION){
1746 sbuf.append("anzahlhb='"+jtf[cANZ1].getText()+"', ");
1750 sbuf.append("arztbericht='"+(jcb[cTBANGEF].isSelected() ? "T" : "F")+"', ");
1751 sbuf.append("anzahl1='"+jtf[cANZ1].getText()+"', ");
1752 sbuf.append("anzahl2='"+jtf[cANZ2].getText()+"', ");
1753 sbuf.append("anzahl3='"+jtf[cANZ3].getText()+"', ");
1754 sbuf.append("anzahl4='"+jtf[cANZ4].getText()+"', ");
1755 itest = jcmb[cLEIST1].getSelectedIndex();
1757 if(itest > 0){
1758 sbuf.append("art_dbeh1='"+preisvec.get(itest-1).get(9)+"', ");
1759 sbuf.append("preise1='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
1760 sbuf.append("pos1='"+preisvec.get(itest-1).get(2)+"', ");
1761 sbuf.append("kuerzel1='"+preisvec.get(itest-1).get(1)+"', ");
1763 }else{
1764 sbuf.append("art_dbeh1='0', ");
1765 sbuf.append("preise1='0.00', ");
1766 sbuf.append("pos1='', ");
1767 sbuf.append("kuerzel1='', ");
1770 itest = jcmb[cLEIST2].getSelectedIndex();
1771 if(itest > 0){
1772 sbuf.append("art_dbeh2='"+preisvec.get(itest-1).get(9)+"', ");
1773 sbuf.append("preise2='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
1774 sbuf.append("pos2='"+preisvec.get(itest-1).get(2)+"', ");
1775 sbuf.append("kuerzel2='"+preisvec.get(itest-1).get(1)+"', ");
1776 }else{
1777 sbuf.append("art_dbeh2='0', ");
1778 sbuf.append("preise2='0.00', ");
1779 sbuf.append("pos2='', ");
1780 sbuf.append("kuerzel2='', ");
1782 itest = jcmb[cLEIST3].getSelectedIndex();
1783 if(itest > 0){
1784 sbuf.append("art_dbeh3='"+preisvec.get(itest-1).get(9)+"', ");
1785 sbuf.append("preise3='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
1786 sbuf.append("pos3='"+preisvec.get(itest-1).get(2)+"', ");
1787 sbuf.append("kuerzel3='"+preisvec.get(itest-1).get(1)+"', ");
1788 }else{
1789 sbuf.append("art_dbeh3='0', ");
1790 sbuf.append("preise3='0.00', ");
1791 sbuf.append("pos3='', ");
1792 sbuf.append("kuerzel3='', ");
1794 itest = jcmb[cLEIST4].getSelectedIndex();
1795 if(itest > 0){
1796 sbuf.append("art_dbeh4='"+preisvec.get(itest-1).get(9)+"', ");
1797 sbuf.append("preise4='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
1798 sbuf.append("pos4='"+preisvec.get(itest-1).get(2)+"', ");
1799 sbuf.append("kuerzel4='"+preisvec.get(itest-1).get(1)+"', ");
1800 }else{
1801 sbuf.append("art_dbeh4='0', ");
1802 sbuf.append("preise4='0.00', ");
1803 sbuf.append("pos4='', ");
1804 sbuf.append("kuerzel4='', ");
1806 sbuf.append("frequenz='"+jtf[cFREQ].getText()+"', ");
1807 sbuf.append("dauer='"+jtf[cDAUER].getText()+"', ");
1808 if(jcmb[cINDI].getSelectedIndex() > 0){
1809 sbuf.append("indikatschl='"+(String)jcmb[cINDI].getSelectedItem()+"', ");
1810 }else{
1811 sbuf.append("indikatschl='"+"kein IndiSchl."+"', ");
1813 sbuf.append("barcodeform='"+Integer.valueOf(jcmb[cBARCOD].getSelectedIndex()).toString()+"', ");
1814 sbuf.append("angelegtvon='"+jtf[cANGEL].getText()+"', ");
1815 sbuf.append("preisgruppe='"+jtf[cPREISGR].getText()+"', ");
1817 if(jcmb[cFARBCOD].getSelectedIndex() > 0){
1818 // Lemmi Frage: was bedeutet "14+" in der folgenden Zeile:
1819 sbuf.append("farbcode='"+Integer.valueOf(14+jcmb[cFARBCOD].getSelectedIndex()-1).toString()+"', ");
1820 }else{
1821 sbuf.append("farbcode='-1', ");
1823 ////System.out.println("Speichern bestehendes Rezept -> Preisgruppe = "+jtf[cPREISGR].getText());
1824 Integer izuzahl = Integer.valueOf(jtf[cPREISGR].getText());
1825 String szzstatus = "";
1826 @SuppressWarnings("unused")
1827 String unter18 = "F";
1828 for(int i = 0; i < 1;i++){
1829 if(SystemPreislisten.hmZuzahlRegeln.get(aktuelleDisziplin).get(izuzahl-1) <= 0){
1830 szzstatus = "0";
1831 break;
1833 if(aktuelleDisziplin.equals("Reha")){
1834 szzstatus = "0";
1835 break;
1837 if(aktuelleDisziplin.equals("Rsport") || aktuelleDisziplin.equals("Ftrain")){
1838 szzstatus = "0";
1839 break;
1841 ////System.out.println("ZuzahlStatus = Zuzahlung (zunächst) erforderlich, prüfe ob befreit oder unter 18");
1842 if(Reha.thisClass.patpanel.patDaten.get(30).equals("T")){
1843 //System.out.println("aktuelles Jahr ZuzahlStatus = Patient ist befreit");
1844 if(this.vec.get(14).equals("T")){
1845 szzstatus = "1";
1846 }else{
1848 if(RezTools.mitJahresWechsel(DatFunk.sDatInDeutsch(this.vec.get(2)))){
1850 String vorjahr = Reha.thisClass.patpanel.patDaten.get(69);
1851 if(vorjahr.trim().equals("")){
1852 //Nur einspringen wenn keine Vorjahrbefreiung vorliegt.
1853 //Tabelle mit Einzelterminen auslesen ob Sätze vorhanden
1854 //wenn Sätze = 0 und bereits im Befreiungszeitraum dann "0", ansonsten "2"
1855 //Wenn Sätze > 0 dann ersten Satz auslesen Wenn Datum < Befreiung-ab dann "2" ansonsten "0"
1856 if(Reha.thisClass.patpanel.aktRezept.tabaktterm.getRowCount() > 0){
1857 // es sind bereits Tage verzeichnet.
1858 String ersterTag = Reha.thisClass.patpanel.aktRezept.tabaktterm.getValueAt(0, 0).toString();
1859 if(DatFunk.TageDifferenz(DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(41)), ersterTag) >= 0){
1860 //Behandlung liegt nach befr_ab
1861 szzstatus = "0";
1862 }else{
1863 //Behandlung liegt vor befr_ab
1864 szzstatus = "2";
1866 }else{
1867 //es sind noch keine Sätze verzeichnet
1868 if(DatFunk.TageDifferenz(DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(41)), DatFunk.sHeute()) >= 0){
1869 //Behandlung muß nach befr_ab liegen
1870 szzstatus = "0";
1871 }else{
1872 //Behandlung kann auch vor befr_ab liegen
1873 szzstatus = "2";
1877 if(this.vec.get(34).indexOf(vorjahr)>=0){
1878 szzstatus = "2";
1879 }else{
1880 szzstatus = "0";
1883 }else{
1884 szzstatus = "0";
1886 }else{
1887 szzstatus = "0";
1890 //Im Patientenstamm liegt eine aktuelle befreiung vor
1891 //testen ob sich das Rezept über den Jahreswechsel erstreckt
1892 //wenn ja war er damals auch befreit, wenn ja Status == 0
1893 //wenn nein Status == 2 == nicht befreit und nicht bezahlt
1894 //szzstatus = "0";
1896 if(Reha.thisClass.patpanel.aktRezept.tabaktterm.getRowCount() > 0){
1897 String ersterTag = Reha.thisClass.patpanel.aktRezept.tabaktterm.getValueAt(0, 0).toString();
1898 if(DatFunk.TageDifferenz(Reha.thisClass.patpanel.patDaten.get(41), ersterTag) >= 0){
1901 }else{
1902 //noch keine Behandlung
1903 if(DatFunk.TageDifferenz(Reha.thisClass.patpanel.patDaten.get(41), DatFunk.sHeute()) >= 0){
1904 System.out.println("Noch keine Behandlung vermerkt aber bereits im Befr.Zeitraum angekommen");
1905 System.out.println(DatFunk.TageDifferenz(Reha.thisClass.patpanel.patDaten.get(41), DatFunk.sHeute()));
1906 szzstatus = "0";
1912 break;
1915 if(DatFunk.Unter18(DatFunk.sHeute(), DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)))){
1916 //System.out.println("ZuzahlStatus = Patient ist unter 18 also befreit...");
1917 int aj = Integer.parseInt(SystemConfig.aktJahr)-18;
1918 String gebtag = DatFunk.sHeute().substring(0,6)+Integer.toString(aj);
1919 long tage = DatFunk.TageDifferenz(DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)) ,gebtag);
1921 //System.out.println("Differenz in Tagen = "+tage);
1922 //System.out.println("Geburtstag = "+gebtag);
1924 if(tage < 0 && tage >= -45){
1925 JOptionPane.showMessageDialog(null ,"Achtung es sind noch "+(tage*-1)+" Tage bis zur Volljährigkeit\n"+
1926 "Unter Umständen wechselt der Zuzahlungsstatus im Verlauf dieses Rezeptes");
1927 szzstatus = "3";
1928 }else{
1929 szzstatus = "0";
1931 //szzstatus = "0";
1932 unter18 = "T";
1933 break;
1935 /**********************/
1936 if(this.vec.get(14).equals("T") ||
1937 (new Double((String)this.vec.get(13)) > 0.00) ){
1938 szzstatus = "1";
1939 }else{
1940 // hier testen ob erster Behandlungstag bereits ab dem Befreiungszeitraum
1941 szzstatus = "2";
1944 /******/
1946 String[] lzv= holeLFV("anamnese", "pat5", "pat_intern", jtf[cPATINT].getText(), nummer.toUpperCase().substring(0,2));
1947 if(! lzv[0].equals("") ){
1948 if(!jta.getText().contains(lzv[0]) ){
1949 int frage = JOptionPane.showConfirmDialog(null, "Für den Patient ist eine Langfristverordnung eingetragen die diese Verordnung noch nicht einschließt.\n\n"+lzv[1]+
1950 "\n\nWollen Sie diesen Eintrag dieser Verordnung zuweisen?",
1951 "Achtung wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1952 if(frage==JOptionPane.YES_OPTION){
1953 jta.setText(jta.getText()+"\n"+lzv[0]);
1957 /*****/
1959 sbuf.append("unter18='"+((DatFunk.Unter18(DatFunk.sHeute(), DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)))) ? "T', " : "F', "));
1960 sbuf.append("zzstatus='"+szzstatus+"', ");
1961 //int leistung;
1962 //String[] str;
1963 sbuf.append("diagnose='"+StringTools.Escaped(jta.getText())+"', ");
1964 sbuf.append("jahrfrei='"+Reha.thisClass.patpanel.patDaten.get(69)+"', ");
1965 sbuf.append("heimbewohn='"+jtf[cHEIMBEW].getText()+"', ");
1966 sbuf.append("hbvoll='"+(jcb[cVOLLHB].isSelected() ? "T" : "F")+"', ");
1967 sbuf.append("anzahlkm='"+(jtf[cANZKM].getText().trim().equals("") ? "0.00" : jtf[cANZKM].getText().trim())+"', ");
1968 sbuf.append("zzregel='"+SystemPreislisten.hmZuzahlRegeln.get(aktuelleDisziplin).get(Integer.parseInt(jtf[cPREISGR].getText())-1 )+"', ");
1969 sbuf.append("icd10='"+jtf[cICD10].getText().trim().replace(" ", "")+"' ");
1970 sbuf.append(" where id='"+this.vec.get(35)+"' LIMIT 1");
1972 SqlInfo.sqlAusfuehren(sbuf.toString());
1973 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).setVisible(false);
1974 aufraeumen();
1975 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
1976 //System.out.println("Rezept wurde mit Preisgruppe "+jtf[cPREISGR].getText()+" gespeichert");
1977 setCursor(Reha.thisClass.cdefault);
1978 //System.out.println(sbuf.toString());
1979 }catch(Exception ex){
1980 ex.printStackTrace();
1981 setCursor(Reha.thisClass.cdefault);
1982 JOptionPane.showMessageDialog(null, "Fehler beim Abspeichern dieses Rezeptes.\n"+
1983 "Bitte notieren Sie den Namen des Patienten und die Rezeptnummer\n"+
1984 "und informieren Sie umgehend den Administrator");
1988 /**************************************/
1989 /**************************************/
1990 public static String[] holeLFV(String hole_feld, String db,String where_feld, String suchen,String voart){
1991 String cmd = "select "+hole_feld+" from "+db+" where "+where_feld+"='"+suchen+"' LIMIT 1";
1992 String anamnese = SqlInfo.holeEinzelFeld(cmd);
1993 String[] retstring = {"",""};
1994 if(anamnese.indexOf("$$LFV$$"+voart.toUpperCase()+"$$") >= 0){
1995 String[] zeilen = anamnese.split("\n");
1996 for(int i = 0; i < zeilen.length;i++){
1997 if(zeilen[i].startsWith("$$LFV$$"+voart.toUpperCase()+"$$")){
1998 String[] woerter = zeilen[i].split(Pattern.quote("$$"));
1999 try{
2000 retstring[1] = "LangfristVerordnung: "+woerter[1]+"\n"+
2001 "Disziplin: "+woerter[2]+"\n"+
2002 "Aktenzeichen: "+woerter[3]+"\n"+
2003 "Genehmigungsdatum: "+woerter[4]+"\n"+
2004 "Gültig ab: "+woerter[5]+"\n"+
2005 "Gültig bis: "+woerter[6]+"\n";
2006 retstring[0] = String.valueOf(zeilen[i]);
2007 }catch(Exception ex){
2008 ex.printStackTrace();
2010 return retstring;
2015 return retstring;
2017 /**************************************/
2018 /**************************************/
2019 /**************************************/
2020 private void doSpeichernNeu(){
2021 try{
2022 int reznr = -1;
2023 if(!komplettTest()){
2024 ////System.out.println("Komplett-Test fehlgeschlagen");
2025 return;
2027 long dattest = DatFunk.TageDifferenz(DatFunk.sHeute(),jtf[cREZDAT].getText().trim() );
2028 //long min = -364;
2029 //long max = 364;
2030 if( (dattest <= -364) || (dattest >= 364) ){
2031 int frage = JOptionPane.showConfirmDialog(null, "<html><b>Das Rezeptdatum ist etwas kritisch....<br><br><font color='#ff0000'> "+
2032 "Rezeptdatum = "+jtf[cREZDAT].getText().trim()+"</font></b><br>Das sind ab Heute "+Long.toString(dattest)+" Tage<br><br><br>"+
2033 "Wollen Sie dieses Rezeptdatum tatsächlich abspeichern?", "Bedenkliches Rezeptdatum",JOptionPane.YES_NO_OPTION);
2034 if(frage!=JOptionPane.YES_OPTION){
2035 SwingUtilities.invokeLater(new Runnable(){
2036 public void run()
2038 jtf[cREZDAT].requestFocus();
2040 });
2041 return;
2045 setCursor(Reha.thisClass.wartenCursor);
2046 String stest = "";
2047 int itest = -1;
2048 StringBuffer sbuf = new StringBuffer();
2049 //System.out.println("Nummer = "+nummer);
2050 reznr = SqlInfo.erzeugeNummer(nummer);
2051 if(reznr < 0){
2052 JOptionPane.showMessageDialog(null,"Schwerwiegender Fehler beim Bezug einer neuen Rezeptnummer!");
2053 setCursor(Reha.thisClass.cdefault);
2054 return;
2056 int rezidneu = SqlInfo.holeId("verordn", "diagnose");
2057 sbuf.append("update verordn set rez_nr='"+nummer.toUpperCase()+
2058 Integer.valueOf(reznr).toString()+"', ");
2059 sbuf.append("pat_intern='"+jtf[cPATINT].getText()+"', ");
2060 sbuf.append("patid='"+jtf[cPATID].getText()+"', ");
2061 sbuf.append("ktraeger='"+jtf[cKTRAEG].getText()+"', ");
2062 sbuf.append("kid='"+jtf[cKASID].getText()+"', ");
2063 sbuf.append("arzt='"+jtf[cARZT].getText()+"', ");
2064 sbuf.append("arztid='"+jtf[cARZTID].getText()+"', ");
2065 stest = DatFunk.sHeute();
2066 sbuf.append("datum='"+DatFunk.sDatInSQL(stest)+"', ");
2067 stest = jtf[cREZDAT].getText().trim();
2068 if(stest.equals(". .")){
2069 stest = DatFunk.sHeute();
2073 boolean neuerpreis = RezTools.neuePreisNachRezeptdatumOderStichtag(aktuelleDisziplin, preisgruppe, String.valueOf(stest),true,null);
2074 //Zunächst ermitteln welche Fristen und ob Kalender oder Werktage gelten
2075 //Dann das Rezeptdatum übergeben, Rückgabewert ist spätester Beginn.
2076 sbuf.append("rez_datum='"+DatFunk.sDatInSQL(stest)+"', ");
2077 String stest2 = jtf[cBEGINDAT].getText().trim();
2078 if(stest2.equals(". .")){
2079 //Preisgruppe holen
2080 int pg = Integer.parseInt(jtf[cPREISGR].getText())-1;
2081 //Frist zwischen Rezeptdatum und erster Behandlung holen
2082 int frist = (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(0)).get(pg);
2083 //Kalendertage
2084 if((Boolean) ((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(1)).get(pg)){
2085 stest2 = DatFunk.sDatPlusTage(stest, frist);
2086 }else{ //Werktage
2087 boolean mitsamstag = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(4)).get(pg);
2088 stest2 = HMRCheck.hmrLetztesDatum(stest, (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(aktuelleDisziplin).get(0)).get(pg),mitsamstag );
2091 sbuf.append("lastdate='"+DatFunk.sDatInSQL(stest2)+"', ");
2092 sbuf.append("lasteddate='"+DatFunk.sDatInSQL(DatFunk.sHeute())+"', ");
2093 sbuf.append("lastedit='"+Reha.aktUser+"', ");
2094 sbuf.append("rezeptart='"+Integer.valueOf(jcmb[cVERORD].getSelectedIndex()).toString()+"', ");
2095 sbuf.append("begruendadr='"+(jcb[cBEGRADR].isSelected() ? "T" : "F")+"', ");
2096 sbuf.append("hausbes='"+(jcb[cHAUSB].isSelected() ? "T" : "F")+"', ");
2097 sbuf.append("arztbericht='"+(jcb[cTBANGEF].isSelected() ? "T" : "F")+"', ");
2098 sbuf.append("anzahl1='"+jtf[cANZ1].getText()+"', ");
2099 sbuf.append("anzahl2='"+jtf[cANZ2].getText()+"', ");
2100 sbuf.append("anzahl3='"+jtf[cANZ3].getText()+"', ");
2101 sbuf.append("anzahl4='"+jtf[cANZ4].getText()+"', ");
2102 sbuf.append("anzahlhb='"+jtf[cANZ1].getText()+"', ");
2103 itest = jcmb[cLEIST1].getSelectedIndex();
2104 if(itest > 0){
2105 sbuf.append("art_dbeh1='"+preisvec.get(itest-1).get(9)+"', ");
2106 sbuf.append("preise1='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
2107 sbuf.append("pos1='"+preisvec.get(itest-1).get(2)+"', ");
2108 sbuf.append("kuerzel1='"+preisvec.get(itest-1).get(1)+"', ");
2109 }else{
2110 sbuf.append("art_dbeh1='0', ");
2112 itest = jcmb[cLEIST2].getSelectedIndex();
2113 if(itest > 0){
2114 sbuf.append("art_dbeh2='"+preisvec.get(itest-1).get(9)+"', ");
2115 sbuf.append("preise2='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
2116 sbuf.append("pos2='"+preisvec.get(itest-1).get(2)+"', ");
2117 sbuf.append("kuerzel2='"+preisvec.get(itest-1).get(1)+"', ");
2118 }else{
2119 sbuf.append("art_dbeh2='0', ");
2121 itest = jcmb[cLEIST3].getSelectedIndex();
2122 if(itest > 0){
2123 sbuf.append("art_dbeh3='"+preisvec.get(itest-1).get(9)+"', ");
2124 sbuf.append("preise3='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
2125 sbuf.append("pos3='"+preisvec.get(itest-1).get(2)+"', ");
2126 sbuf.append("kuerzel3='"+preisvec.get(itest-1).get(1)+"', ");
2127 }else{
2128 sbuf.append("art_dbeh3='0', ");
2130 itest = jcmb[cLEIST4].getSelectedIndex();
2131 if(itest > 0){
2132 sbuf.append("art_dbeh4='"+preisvec.get(itest-1).get(9)+"', ");
2133 sbuf.append("preise4='"+preisvec.get(itest-1).get((neuerpreis ? 3 : 4))+"', ");
2134 sbuf.append("pos4='"+preisvec.get(itest-1).get(2)+"', ");
2135 sbuf.append("kuerzel4='"+preisvec.get(itest-1).get(1)+"', ");
2136 }else{
2137 sbuf.append("art_dbeh4='0', ");
2139 sbuf.append("frequenz='"+jtf[cFREQ].getText()+"', ");
2140 sbuf.append("dauer='"+jtf[cDAUER].getText()+"', ");
2141 if(jcmb[cINDI].getSelectedIndex() > 0){
2142 sbuf.append("indikatschl='"+(String)jcmb[cINDI].getSelectedItem()+"', ");
2143 }else{
2144 sbuf.append("indikatschl='"+"kein IndiSchl."+"', ");
2146 sbuf.append("barcodeform='"+Integer.toString(jcmb[cBARCOD].getSelectedIndex())+"', ");
2147 sbuf.append("angelegtvon='"+jtf[cANGEL].getText()+"', ");
2148 sbuf.append("preisgruppe='"+jtf[cPREISGR].getText()+"', ");
2149 if(jcmb[cFARBCOD].getSelectedIndex() > 0){
2150 sbuf.append("farbcode='"+Integer.toString(14+jcmb[cFARBCOD].getSelectedIndex()-1).toString()+"', ");
2151 }else{
2152 sbuf.append("farbcode='-1', ");
2155 /*******************************************/
2156 Integer izuzahl = Integer.valueOf(jtf[cPREISGR].getText());
2157 String unter18 = "F";
2158 String szzstatus = "";
2159 for(int i = 0; i < 1;i++){
2160 //if(SystemConfig.vZuzahlRegeln.get(izuzahl-1) <= 0){
2161 if(SystemPreislisten.hmZuzahlRegeln.get(aktuelleDisziplin).get(izuzahl-1) <= 0){
2162 //System.out.println("1. ZuzahlStatus = Zuzahlung nicht erforderlich");
2163 szzstatus = "0";
2164 break;
2166 if(nummer.equalsIgnoreCase("rh")){
2167 szzstatus = "0";
2168 break;
2170 if(nummer.equalsIgnoreCase("rs") || nummer.equalsIgnoreCase("ft")){
2171 szzstatus = "0";
2172 break;
2174 ////System.out.println("ZuzahlStatus = Zuzahlung (zun�chst) erforderlich, pr�fe ob befreit oder unter 18");
2175 if(Reha.thisClass.patpanel.patDaten.get(30).equals("T")){
2176 //System.out.println("2. ZuzahlStatus = Patient ist befreit");
2177 szzstatus = "0";
2178 break;
2180 if(DatFunk.Unter18(DatFunk.sHeute(), DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)))){
2181 ////System.out.println("ZuzahlStatus = Patient ist unter 18 also befreit...");
2182 String gebtag = DatFunk.sHeute().substring(0,6)+Integer.valueOf(Integer.valueOf(SystemConfig.aktJahr)-18).toString();
2183 long tage = DatFunk.TageDifferenz(DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)) ,gebtag);
2184 //System.out.println("Differenz in Tagen = "+tage);
2185 //System.out.println("Geburtstag = "+gebtag);
2186 if(tage < 0 && tage >= -45){
2187 JOptionPane.showMessageDialog(null ,"Achtung es sind noch "+(tage*-1)+" Tage bis zur Volljährigkeit\n"+
2188 "Unter Umständen wechselt der Zuzahlungsstatus im Verlauf dieses Rezeptes");
2189 szzstatus = "3";
2190 }else{
2191 szzstatus = "0";
2193 unter18 = "T";
2194 break;
2196 ////System.out.println("Normale Zuzahlung -> status noch nicht bezahlt");
2197 szzstatus = "2";
2199 String[] lzv= holeLFV("anamnese", "pat5", "pat_intern", jtf[cPATINT].getText(), nummer.toUpperCase().substring(0,2));
2200 if(! lzv[0].equals("") ){
2201 if(!jta.getText().contains(lzv[0]) ){
2202 int frage = JOptionPane.showConfirmDialog(null, "Für den Patient ist eine Langfristverordnung eingetragen.\n\n"+lzv[1]+
2203 "\n\nWollen Sie diesen Eintrag dieser Verordnung zuweisen?",
2204 "Achtung wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
2205 if(frage==JOptionPane.YES_OPTION){
2206 jta.setText(jta.getText()+"\n"+lzv[0]);
2210 sbuf.append("zzstatus='"+szzstatus+"', ");
2211 sbuf.append("diagnose='"+StringTools.Escaped(jta.getText())+"', ");
2212 sbuf.append("unter18='"+unter18+"', ");
2213 sbuf.append("jahrfrei='"+Reha.thisClass.patpanel.patDaten.get(69)+"', ");
2214 sbuf.append("heimbewohn='"+jtf[cHEIMBEW].getText()+"', ");
2215 sbuf.append("hbvoll='"+(jcb[cVOLLHB].isSelected() ? "T" : "F")+"', ");
2216 sbuf.append("anzahlkm='"+(jtf[cANZKM].getText().trim().equals("") ? "0.00" : jtf[cANZKM].getText().trim())+"', ");
2217 sbuf.append("befr='"+Reha.thisClass.patpanel.patDaten.get(30)+"', ");
2218 sbuf.append("zzregel='"+SystemPreislisten.hmZuzahlRegeln.get(aktuelleDisziplin).get(Integer.valueOf(jtf[cPREISGR].getText())-1 )+"',");
2219 sbuf.append("icd10='"+jtf[cICD10].getText().trim().replace(" ", "")+"' ");
2220 sbuf.append("where id='"+Integer.toString(rezidneu)+"' LIMIT 1");
2221 SqlInfo.sqlAusfuehren(sbuf.toString());
2222 //System.out.println("Rezept wurde mit Preisgruppe "+jtf[cPREISGR].getText()+" gespeichert");
2223 Reha.thisClass.patpanel.aktRezept.holeRezepte(jtf[cPATINT].getText(),nummer.toUpperCase()+Integer.toString(reznr));
2224 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).setVisible(false);
2225 aufraeumen();
2226 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
2227 setCursor(Reha.thisClass.cdefault);
2228 }catch(Exception ex){
2229 ex.printStackTrace();
2230 setCursor(Reha.thisClass.cdefault);
2231 JOptionPane.showMessageDialog(null, "Fehler beim Abspeichern dieses Rezeptes.\n"+
2232 "Bitte notieren Sie den Namen des Patienten und die Rezeptnummer\n"+
2233 "und informieren Sie umgehend den Administrator");
2238 // Lemmi 20110101: Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
2239 @SuppressWarnings("unused")
2240 private void doKopiereLetztesRezeptDesPatienten() {
2241 /** KONZEPT
2242 holle alle Rezepte aus den Tabellen "verordn" und "lza" zum aktuellen Patienten sortiert und finde das neueste als erstes in der Liste
2243 falls es Rezepte zu mehreren Disziplinen gibt, müßte man hier noch interaktiv abfragen, welches gemeint sein soll (nicht eingebaut)
2244 dann hole die Daten aus dem alten Rezept in einen Vektor analog vekcaktrez und schiebe sie in das Rezept via ladeZusatzDatenAlt()
2245 lösche alle Felder aus dem Vektor, die im akt. rezept gar nicht sein können (zB cREZDAT)
2246 dann setzte nochmal neue Daten drüber ladeZusatzDatenNeu()
2249 // Lemmi 20110106: Lieber Hr. Steinhilber: Diese Funktion an andere Stelle verlegt, weil Architekturänderung
2250 //if(rezToCopy == null){return;}
2252 // Definition der Inices für den Vektor "vecaktrez"
2253 // Lemmi Todo: DAS MUSS VOLLSTÄNDIG GEMACHT UND AN ZENTRALE STELLE VERSCHOBEN WERDEN !!!
2254 final int cVAR_PATID = 0;
2255 final int cVAR_REZNR = 1;
2256 final int cVAR_REZDATUM = 2;
2257 final int cVAR_ANZAHL1 = 3;
2258 final int cVAR_ANZAHL2 = 4;
2259 final int cVAR_ANZAHL3 = 5;
2260 final int cVAR_ANZAHL4 = 6;
2261 final int cVAR_ANZAHLKM = 7;
2262 final int cVAR_ARTDBEH1 = 8; // Art der Behandlung
2263 final int cVAR_ARTDBEH2 = 9;
2264 final int cVAR_ARTDBEH3 = 10;
2265 final int cVAR_ARTDBEH4 = 11;
2266 final int cVAR_BEFREIT = 12; // BEFR
2267 final int cVAR_REZGEBUEHR = 13;
2268 final int cVAR_BEZAHLT = 14; // REZ_BEZ
2269 final int cVAR_ARZTNAM = 15;
2270 final int cVAR_ARZTID = 16;
2271 final int cVAR_AERZTE = 17;
2272 final int cVAR_PREIS1 = 18;
2273 final int cVAR_PREIS2 = 19;
2274 final int cVAR_PREIS3 = 20;
2275 final int cVAR_PREIS4 = 21;
2276 final int cVAR_DATANGEL = 22;
2277 final int cVAR_DIAGNOSE = 23;
2279 final int cVAR_TERMINE = 34;
2281 final int cVAR_ZZSTAT = 39;
2282 final int cVAR_LASTDAT = 40; // spätester Behandlungsbginn
2283 final int cVAR_PREISGR = 41;
2284 final int cVAR_BEGRUENDADR = 42;
2285 final int cVAR_HAUSBES = 43;
2286 final int cVAR_INDI = 44;
2287 final int cVAR_ANGEL = 45;
2288 final int cVAR_BARCOD = 46; // BARCODEFORM
2289 final int cVAR_DAUER = 47;
2290 final int cVAR_POS1 = 48;
2291 final int cVAR_POS2 = 49;
2292 final int cVAR_POS3 = 50;
2293 final int cVAR_POS4 = 51;
2294 final int cVAR_FREQ = 52;
2295 final int cVAR_LASTEDIT = 53;
2296 final int cVAR_BERID = 54;
2297 final int cVAR_ARZTBER = 55;
2298 final int cVAR_LASTEDDATE = 56;
2299 final int cVAR_FARBCOD = 57;
2300 final int cVAR_RSPLIT = 58;
2301 final int cVAR_JAHRFREI = 59;
2303 final int cVAR_HBVOLL = 61;
2305 final int cVAR_ICD10 = 71;
2306 //Funktion ist immer noch suboptimal, da der Kostenträger des Rezeptes noch nicht übernommen wird.
2308 //String strPat_Intern = jtf[cPATINT].getText();
2310 // Lemmi 20110106: Lieber Hr. Steinhilber: Diese Funktion an andere Stelle verlegt, weil Architekturänderung
2311 //vec = ((Vector<String>)SqlInfo.holeSatz( "verordn", " * ", "REZ_NR = '"+rezToCopy+"'", Arrays.asList(new String[] {}) ));
2314 // für die Rückmeldung zum Setezen der Dailogüberschrift
2315 strKopiervorlage = "";
2317 if ( vec.size() > 0 ) { // nur wenn etwas gefunden werden konnte !
2319 // Titel des Dialogs individualisieren für die Rückmeldung zum Setezen der Dailogüberschrift
2320 strKopiervorlage = vec.get(cVAR_REZNR);
2322 // Lemmi 20110106: Lieber Hr. Steinhilber: Das fkt. nicht, weil jcmb nicht den hier angebenen Inhalt besitzt !
2323 /// jcmb[cRKLASSE].setSelectedIndex( Arrays.asList(new String[] {"KG","MA","ER","LO","RH","PO"}).indexOf(rezToCopy.substring(0,2)) );
2324 jcmb[cRKLASSE].setSelectedIndex( Arrays.asList(strRezepklassenAktiv).indexOf(strKopiervorlage.substring(0,2)) );
2327 // Löschen der auf jeden Fall "falsch weil alt" Komponenten
2328 vec.set(cVAR_REZNR, "");
2329 vec.set(cVAR_REZDATUM, "");
2330 vec.set(cVAR_TERMINE, "");
2331 vec.set(cVAR_ZZSTAT, "");
2332 vec.set(cVAR_LASTDAT, "");
2334 if(SystemConfig.AngelegtVonUser){
2335 vec.set(cVAR_ANGEL, Reha.aktUser);
2336 }else{
2337 vec.set(cVAR_ANGEL, "");
2339 vec.set(cVAR_LASTEDIT, "");
2341 vec.set(cVAR_BEFREIT, "");
2343 vec.set(cVAR_BEZAHLT, "F" ); // Das kann noch nicht bezahlt sein (Rezeptgebühr)
2345 ladeZusatzDatenAlt(); // Eintragen von vec in die Dialog-Felder
2347 ladeZusatzDatenNeu(); // Hier nochmals die neuen Daten ermitteln - schließlich haben wir ein neues Rezept !
2349 jtf[cKTRAEG].setText(vec.get(36)); //ktraeger
2350 jtf[cKASID].setText(vec.get(37)); //kassenid
2351 jtf[cARZT].setText(vec.get(15)); //arzt
2352 jtf[cARZTID].setText(vec.get(16)); //arztid
2354 jtf[cICD10].setText(vec.get(71)); //icd10
2356 preisgruppe = Integer.parseInt(vec.get(41));
2358 // Lemmi 20110106: Lieber Hr. Steinhilber: Das fkt. nicht, weil hier nicht alle Disziplinen aktiv sein müssen !
2359 //erneuter Aufruf damit die korrekte Preisgruppe genommen wird GKV vs. BGE etc.
2360 /// jcmb[cRKLASSE].setSelectedIndex( Arrays.asList(new String[] {"KG","MA","ER","LO","RH","PO"}).indexOf(rezToCopy.substring(0,2)) );
2361 // Lemmi 20110116: die ganze Zeile ist überflüssig, weil das vorab alles schon korrekt gesetzt worden ist !
2362 // wenn man die Zeile benutzt wird zudem der gewählte INDI-Schlüssel wieder gelöscht !
2363 // jcmb[cRKLASSE].setSelectedIndex( Arrays.asList(strRezepklassenAktiv).indexOf(strKopiervorlage.substring(0,2)) );
2366 /* Lemmi 20110116: Lieber Hr. Steinhilber: Die Leistungen werden bereits durch den obigen Aufruf von "ladeZusatzDatenAlt()" gesetzt.
2367 * Lemmi Frage: warum sollte das hier nochmals gemacht werden?
2368 if(!vec.get(cVAR_ARTDBEH1).equals("0")){
2369 jcmb[cLEIST1].setSelectedVecIndex(9, vec.get(cVAR_ARTDBEH1));//art_dbeh1
2371 if(!vec.get(cVAR_ARTDBEH2).equals("0")){
2372 jcmb[cLEIST2].setSelectedVecIndex(9, vec.get(cVAR_ARTDBEH2));//art_dbeh2
2374 if(!vec.get(cVAR_ARTDBEH3).equals("0")){
2375 jcmb[cLEIST3].setSelectedVecIndex(9, vec.get(cVAR_ARTDBEH3));//art_dbeh3
2377 if(!vec.get(cVAR_ARTDBEH4).equals("0")){
2378 jcmb[cLEIST4].setSelectedVecIndex(9, vec.get(cVAR_ARTDBEH4));//art_dbeh4
2382 // vec wieder löschen - er hat seinen Transport-Dienst für das Kopieren geleistet
2383 vec.clear();
2385 } // end of doKopiereLetztesRezeptDesPatienten()
2387 private void doAbbrechen(){
2388 // Lemmi 20101231: Verhinderung von Datenverlust bei unbeabsichtigtem Zumachen des geänderten Rezept-Dialoges
2389 //Solche gravierenden Änderungen der Programmlogik dürfen erst dann eingeführt werden
2390 //wenn sich der Benutzer auf einer System-Init-Seite entscheiden kann ob er diese
2391 //Funktionalität will oder nicht
2392 //Wir im RTA wollen die Abfagerei definitiv nicht!
2393 //Wenn meine Damen einen Vorgang abbrechen wollen, dann wollen sie den Vorgang abbrechen
2394 //und nicht gefrag werden ob sie den Vorgang abbrechen wollen.
2395 //Steinhilber
2396 // Lemmi 20110116: Gerne auch mit Steuer-Parameter
2397 if( (Boolean)SystemConfig.hmRezeptDlgIni.get("RezAendAbbruchWarn")) {
2398 if ( HasChanged() && askForCancelUsaved() == JOptionPane.NO_OPTION )
2399 return;
2402 aufraeumen();
2403 ((JXDialog)this.getParent().getParent().getParent().getParent().getParent()).dispose();
2406 @Override
2407 public void rehaTPEventOccurred(RehaTPEvent evt) {
2408 try{
2409 if(evt.getDetails()[0] != null){
2410 if(evt.getDetails()[0].equals(this.getName())){
2411 this.setVisible(false);
2412 rtp.removeRehaTPEventListener((RehaTPEventListener) this);
2413 rtp = null;
2414 aufraeumen();
2417 }catch(NullPointerException ne){
2418 JOptionPane.showMessageDialog(null, "Fehler beim abhängen des Listeners Rezept-Neuanlage\n"+
2419 "Bitte informieren Sie den Administrator über diese Fehlermeldung");
2422 public void aufraeumen(){
2423 new SwingWorker<Void,Void>(){
2424 @Override
2425 protected Void doInBackground() throws Exception {
2426 for(int i = 0; i < jtf.length;i++){
2427 ListenerTools.removeListeners(jtf[i]);
2429 for(int i = 0; i < jcb.length;i++){
2430 ListenerTools.removeListeners(jcb[i]);
2432 for(int i = 0; i < jcmb.length;i++){
2433 ListenerTools.removeListeners(jcmb[i]);
2435 ListenerTools.removeListeners(jta);
2436 ListenerTools.removeListeners(getInstance());
2437 if(rtp != null){
2438 rtp.removeRehaTPEventListener((RehaTPEventListener) getInstance());
2439 rtp = null;
2441 return null;
2443 }.execute();