*** empty log message ***
[thera-pi.git] / Reha / src / org / therapi / reha / patient / AktuelleRezepte.java
blobb636ee568fc70dae5a3b8455ed94299d494e0922
1 package org.therapi.reha.patient;
5 import hauptFenster.AktiveFenster;
6 import hauptFenster.Reha;
7 import hmrCheck.HMRCheck;
9 import java.awt.BorderLayout;
10 import java.awt.Component;
11 import java.awt.Dimension;
12 import java.awt.Font;
13 import java.awt.MouseInfo;
14 import java.awt.Point;
15 import java.awt.PointerInfo;
16 import java.awt.Toolkit;
17 import java.awt.datatransfer.StringSelection;
18 import java.awt.event.ActionEvent;
19 import java.awt.event.ActionListener;
20 import java.awt.event.KeyAdapter;
21 import java.awt.event.KeyEvent;
22 import java.awt.event.MouseAdapter;
23 import java.awt.event.MouseEvent;
24 import java.awt.event.WindowEvent;
25 import java.awt.event.WindowListener;
26 import java.beans.PropertyChangeEvent;
27 import java.beans.PropertyChangeListener;
28 import java.text.DecimalFormat;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collections;
32 import java.util.Comparator;
33 import java.util.EventObject;
34 import java.util.HashMap;
35 import java.util.List;
36 import java.util.Map;
37 import java.util.Vector;
39 import javax.mail.MessagingException;
40 import javax.mail.internet.AddressException;
41 import javax.swing.ImageIcon;
42 import javax.swing.JButton;
43 import javax.swing.JComponent;
44 import javax.swing.JLabel;
45 import javax.swing.JList;
46 import javax.swing.JMenuItem;
47 import javax.swing.JOptionPane;
48 import javax.swing.JPopupMenu;
49 import javax.swing.JScrollPane;
50 import javax.swing.JToolBar;
51 import javax.swing.ListSelectionModel;
52 import javax.swing.SwingUtilities;
53 import javax.swing.event.ChangeEvent;
54 import javax.swing.event.ListSelectionEvent;
55 import javax.swing.event.ListSelectionListener;
56 import javax.swing.event.TableColumnModelEvent;
57 import javax.swing.event.TableModelEvent;
58 import javax.swing.event.TableModelListener;
59 import javax.swing.table.DefaultTableModel;
60 import javax.swing.table.TableCellEditor;
61 import javax.swing.table.TableCellRenderer;
63 import jxTableTools.MyTableStringDatePicker;
64 import jxTableTools.TableTool;
65 import krankenKasse.KassenFormulare;
66 import oOorgTools.OOTools;
68 import org.jdesktop.swingworker.SwingWorker;
69 import org.jdesktop.swingx.JXPanel;
70 import org.jdesktop.swingx.JXTable;
71 import org.jdesktop.swingx.decorator.HighlighterFactory;
72 import org.jdesktop.swingx.event.TableColumnModelExtListener;
73 import org.jdesktop.swingx.renderer.DefaultTableRenderer;
74 import org.jdesktop.swingx.renderer.IconValues;
75 import org.jdesktop.swingx.renderer.MappedValue;
76 import org.jdesktop.swingx.renderer.StringValues;
78 import patientenFenster.KeinRezept;
79 import patientenFenster.RezNeuanlage;
80 import patientenFenster.RezTest;
81 import patientenFenster.RezTestPanel;
82 import patientenFenster.RezeptGebuehren;
83 import patientenFenster.RezeptVorlage;
84 import rechteTools.Rechte;
85 import CommonTools.ExUndHop;
86 import CommonTools.SqlInfo;
87 import stammDatenTools.KasseTools;
88 import stammDatenTools.RezTools;
89 import stammDatenTools.ZuzahlTools;
91 import systemEinstellungen.SystemConfig;
92 import systemEinstellungen.SystemPreislisten;
93 import CommonTools.Colors;
94 import systemTools.IconListRenderer;
95 import CommonTools.JCompTools;
96 import CommonTools.JRtaTextField;
97 import systemTools.ListenerTools;
98 import CommonTools.StringTools;
99 import terminKalender.DatFunk;
100 import CommonTools.INIFile;
101 import CommonTools.INITool;
102 import abrechnung.AbrechnungPrivat;
103 import abrechnung.AbrechnungRezept;
104 import abrechnung.RezeptGebuehrRechnung;
106 import com.jgoodies.forms.builder.PanelBuilder;
107 import com.jgoodies.forms.layout.CellConstraints;
108 import com.jgoodies.forms.layout.FormLayout;
110 import dialoge.PinPanel;
111 import dialoge.RehaSmartDialog;
112 import dialoge.ToolsDialog;
113 import emailHandling.EmailSendenExtern;
114 import events.RehaTPEvent;
115 import events.RehaTPEventClass;
116 import events.RehaTPEventListener;
119 public class AktuelleRezepte extends JXPanel implements ListSelectionListener,TableModelListener,TableColumnModelExtListener,PropertyChangeListener, ActionListener{
123 private static final long serialVersionUID = 5440388431022834348L;
124 //public AktuelleRezepte aktRez = null;
125 JXPanel leerPanel = null;
126 JXPanel vollPanel = null;
127 JXPanel wechselPanel = null;
128 public JLabel anzahlTermine= null;
129 public JLabel anzahlRezepte= null;
130 public String aktPanel = "";
131 public JXTable tabaktrez = null;
132 public JXTable tabaktterm = null;
133 public MyAktRezeptTableModel dtblm;
134 public MyTermTableModel dtermm;
135 public TableCellEditor tbl = null;
136 public boolean rezneugefunden = false;
137 public boolean neuDlgOffen = false;
138 public String[] indphysio = null;
139 public String[] indergo = null;
140 public String[] indlogo = null;
141 public String[] indpodo = null;
142 public RezeptDaten rezDatenPanel = null;
143 public JButton[] aktrbut = {null,null,null,null,null,null,null,null,null};
144 public boolean suchePatUeberRez = false;
145 public String rezAngezeigt = "";
146 public static boolean inRezeptDaten = false;
147 public static boolean inEinzelTermine = false;
148 public static boolean initOk = false;
149 public JLabel dummyLabel = null;
150 private JRtaTextField formularid = new JRtaTextField("NIX",false);
151 Vector<String> titel = new Vector<String>() ;
152 Vector<String> formular = new Vector<String>();
153 Vector<String> aktTerminBuffer = new Vector<String>();
154 int aktuellAngezeigt = -1;
155 int iformular = -1;
157 int idInTable = 8;
158 int termineInTable = 9;
160 AbrechnungRezept abrRez = null;
163 //public boolean lneu = false;
164 public AktuelleRezepte(PatientHauptPanel eltern){
165 super();
166 //aktRez = this;
168 setOpaque(false);
169 setBorder(null);
170 setLayout(new BorderLayout());
172 leerPanel = new KeinRezept("Keine Rezepte angelegt für diesen Patient");
173 leerPanel.setName("leerpanel");
174 leerPanel.setOpaque(false);
176 JXPanel allesrein = new JXPanel(new BorderLayout());
177 allesrein.setOpaque(false);
178 allesrein.setBorder(null);
180 FormLayout lay = new FormLayout("5dlu,fill:0:grow(1.00),0dlu",
181 "0dlu,p,2dlu,p,2dlu,fill:0:grow(1.00),5dlu");
182 CellConstraints cc = new CellConstraints();
183 allesrein.setLayout(lay);
186 wechselPanel = new JXPanel(new BorderLayout());
187 wechselPanel.setOpaque(false);
188 wechselPanel.setBorder(null);
189 //leerPanel = new KeinRezept();
191 wechselPanel.add(leerPanel,BorderLayout.CENTER);
193 aktPanel = "leerPanel";
195 //wechselPanel.add(getDatenpanel(),BorderLayout.CENTER);
196 allesrein.add(getToolbar(),cc.xy(2, 2));
197 //allesrein.add(getTabelle(),cc.xy(2, 4));
198 allesrein.add(wechselPanel,cc.xy(2, 6));
200 add(JCompTools.getTransparentScrollPane(allesrein),BorderLayout.CENTER);
201 validate();
202 final PatientHauptPanel xeltern = eltern;
203 new SwingWorker<Void,Void>(){
205 @Override
206 protected Void doInBackground() throws Exception {
207 try{
208 vollPanel = new JXPanel();
209 // Lemmi 20110105: Layout etwas dynamischer gestaltet
210 FormLayout vplay = new FormLayout("fill:0:grow(0.75),5dlu,fill:0:grow(0.25),5dlu","13dlu,53dlu,5dlu,fill:0:grow(1.00),0dlu");
211 //Das soll nicht "dynamische" gestaltet werden sondern genau so belassen werden
212 //wie es ist! Ansonsten muß bei den meisten Diagnosen gescrollt werden
213 //und genau das ist Murks in einer View die einem einen schnellen Gesamtüberblick verschaffen soll!
214 //Steinhilber
216 //FormLayout vplay = new FormLayout("fill:0:grow(0.6),5dlu,fill:0:grow(0.4),5dlu",
217 // "13dlu,53dlu,5dlu,fill:0:grow(1.00),0dlu");
218 CellConstraints vpcc = new CellConstraints();
219 vollPanel.setLayout(vplay);
220 vollPanel.setOpaque(false);
221 vollPanel.setBorder(null);
223 Font font = new Font("Tahome",Font.PLAIN,11);
224 anzahlRezepte = new JLabel("Anzahl Rezepte: 0");
225 anzahlRezepte.setFont(font);
226 vollPanel.add(anzahlRezepte,vpcc.xy(1,1));
227 vollPanel.add(getTabelle(),vpcc.xywh(1,2,1,1));
228 anzahlTermine = new JLabel("Anzahl Termine: 0");
229 anzahlTermine.setFont(font);
230 anzahlTermine.setOpaque(false);
231 vollPanel.add(anzahlTermine,vpcc.xywh(3,1,1,1));
233 JXPanel dummy = new JXPanel();
234 dummy.setOpaque(false);
235 //dummy.setBackground(Color.BLACK);
236 FormLayout dumlay = new FormLayout("fill:0:grow(0.25),p,fill:0:grow(0.25),p,fill:0:grow(0.25),p,fill:0:grow(0.25)",
237 "fill:0:grow(1.00),2dlu,p,2dlu");
238 CellConstraints dumcc = new CellConstraints();
239 dummy.setLayout(dumlay);
240 vollPanel.add(dummy,vpcc.xywh(3,2,1,3));
243 dummy.add(getTermine(),dumcc.xyw(1, 1, 7));
244 dummy.add(getTerminToolbar(),dumcc.xyw(1, 3, 7));
246 rezDatenPanel = new RezeptDaten(xeltern);
247 vollPanel.add(rezDatenPanel,vpcc.xyw(1,4,1));
248 indiSchluessel();
249 initOk = true;
250 }catch(Exception ex){
251 ex.printStackTrace();
252 initOk = true;
254 return null;
257 }.execute();
258 new Thread(){
259 public void run(){
260 SwingUtilities.invokeLater(new Runnable(){
261 public void run(){
262 holeFormulare();
263 return;
265 });
267 }.start();
271 public void getAktDates(){
274 public void setDtblmValues(ImageIcon ico,int row,int col){
275 dtblm.setValueAt(ico,row,col);
277 public void formulareAuswerten(){
278 int row = tabaktrez.getSelectedRow();
279 if(row >= 0){
280 iformular = -1;
281 KassenFormulare kf = new KassenFormulare(Reha.thisFrame,titel,formularid);
282 Point pt = aktrbut[8].getLocationOnScreen();
283 kf.setLocation(pt.x-100,pt.y+32);
284 kf.setModal(true);
285 kf.setVisible(true);
286 if(!formularid.getText().equals("")){
287 iformular = Integer.valueOf(formularid.getText());
289 kf = null;
290 if(iformular >= 0){
291 new SwingWorker<Void,Void>(){
293 @Override
294 protected Void doInBackground() throws Exception {
295 RezTools.constructRawHMap();
297 System.out.println("Anzahl Termine = "+SystemConfig.hmAdrRDaten.get("<Ranzahltage>"));
298 System.out.println("Wegpos = "+SystemConfig.hmAdrRDaten.get("<Rwegpos>"));
299 System.out.println("Wegpreis = "+SystemConfig.hmAdrRDaten.get("<Rwegpreis>"));
300 System.out.println("Rkuerzel1 = "+SystemConfig.hmAdrRDaten.get("<Rkuerzel1>"));
301 System.out.println("Rlangtext1 = "+SystemConfig.hmAdrRDaten.get("<Rlangtext1>"));
302 //RezTools.constructFormularHMap();
304 OOTools.starteStandardFormular(Reha.proghome+"vorlagen/"+Reha.aktIK+"/"+formular.get(iformular),null);
305 return null;
307 }.execute();
310 }else{
311 iformular = -1;
317 public void setzeRezeptPanelAufNull(boolean aufnull){
318 if(aufnull){
319 if(aktPanel.equals("vollPanel")){
320 wechselPanel.remove(vollPanel);
321 wechselPanel.add(leerPanel);
322 aktPanel = "leerPanel";
323 aktrbut[0].setEnabled(true);
324 for(int i = 1; i < 9;i++){
325 try{
326 aktrbut[i].setEnabled(false);
327 }catch(Exception ex){}
329 //PatGrundPanel.thisClass.jtab.setIconAt(0, SystemConfig.hmSysIcons.get("zuzahlnichtok"));
330 }else{
331 aktrbut[0].setEnabled(true);
336 }else{
337 if(aktPanel.equals("leerPanel")){
338 wechselPanel.remove(leerPanel);
339 wechselPanel.add(vollPanel);
340 aktPanel = "vollPanel";
341 for(int i = 0; i < 9;i++){
342 try{
343 aktrbut[i].setEnabled(true);
344 }catch(Exception ex){}
346 //PatGrundPanel.thisClass.jtab.setIconAt(0, SystemConfig.hmSysIcons.get("zuzahlok"));
351 public JXPanel getDatenpanel(){
352 FormLayout datenlay = new FormLayout("","");
353 PanelBuilder builder = new PanelBuilder(datenlay);
354 builder.getPanel().setOpaque(false);
355 //CellConstraints cc = new CellConstraints();
356 JXPanel dumm = new JXPanel(new BorderLayout());
357 dumm.setOpaque(false);
358 dumm.setBorder(null);
359 dumm.add(builder.getPanel(),BorderLayout.CENTER);
360 return dumm;
362 public JToolBar getToolbar(){
363 JToolBar jtb = new JToolBar();
364 jtb.setOpaque(false);
365 jtb.setRollover(true);
366 jtb.setBorder(null);
367 jtb.setOpaque(false);
369 aktrbut[0] = new JButton();
370 aktrbut[0].setIcon(SystemConfig.hmSysIcons.get("neu"));
371 //Strg-Funktion in normalen Betrieben eher nutzlos und erheblich gehleranfällig /st.
372 aktrbut[0].setToolTipText("<html>neues Rezept anlegen<br><br>" +
373 "Halten sie gleichzeitig Die Taste <b><font color='#0000ff'>Shift</font></b> gedrückt,<br>"+
374 "wird das aktuell unterlegte bzw. <font color='#0000ff'>aktive Rezept</font> das Patienten kopiert!<br><br>"+
375 "Halten sie gleichzeitig Die Taste <b><font color='#0000ff'>Strg</font></b> gedrückt,"+
376 "<br>wird <font color='#0000ff'>das jüngste Rezept</font> das Patienten kopiert!<br><br></html>"
378 aktrbut[0].setActionCommand("rezneu");
379 aktrbut[0].addActionListener(this);
380 jtb.add(aktrbut[0]);
381 aktrbut[1] = new JButton();
382 aktrbut[1].setIcon(SystemConfig.hmSysIcons.get("edit"));
383 aktrbut[1].setToolTipText("aktuelles Rezept ändern/editieren");
384 aktrbut[1].setActionCommand("rezedit");
385 aktrbut[1].addActionListener(this);
386 jtb.add(aktrbut[1]);
387 aktrbut[2] = new JButton();
388 aktrbut[2].setIcon(SystemConfig.hmSysIcons.get("delete"));
389 aktrbut[2].setToolTipText("aktuelles Rezept löschen");
390 aktrbut[2].setActionCommand("rezdelete");
391 aktrbut[2].addActionListener(this);
392 jtb.add(aktrbut[2]);
393 jtb.addSeparator(new Dimension(30,0));
395 aktrbut[8] = new JButton();
396 aktrbut[8].setIcon(SystemConfig.hmSysIcons.get("print"));
397 aktrbut[8].setToolTipText("Rezeptbezogenen Brief/Formular erstellen");
398 aktrbut[8].setActionCommand("rezeptbrief");
399 aktrbut[8].addActionListener(this);
400 jtb.add(aktrbut[8]);
402 aktrbut[7] = new JButton();
403 aktrbut[7].setIcon(SystemConfig.hmSysIcons.get("arztbericht"));
404 aktrbut[7].setToolTipText("Arztbericht erstellen/ändern");
405 aktrbut[7].setActionCommand("arztbericht");
406 aktrbut[7].addActionListener(this);
407 jtb.add(aktrbut[7]);
408 jtb.addSeparator(new Dimension(30,0));
410 aktrbut[3] = new JButton();
411 aktrbut[3].setIcon(SystemConfig.hmSysIcons.get("tools"));
412 aktrbut[3].setToolTipText("Werkzeugkiste für aktuelle Rezepte");
413 aktrbut[3].setActionCommand("werkzeuge");
414 aktrbut[3].addActionListener(this);
415 jtb.add(aktrbut[3]);
420 for(int i = 0; i < 9;i++){
421 try{
422 aktrbut[i].setEnabled(false);
423 }catch(Exception ex){};
425 return jtb;
428 // Lemmi Doku: Liste mit den aktuellen Rezepten
429 public JXPanel getTabelle(){
430 JXPanel dummypan = new JXPanel(new BorderLayout());
431 dummypan.setOpaque(false);
432 dummypan.setBorder(null);
433 dtblm = new MyAktRezeptTableModel();
434 String[] column = {"Rezept-Nr.","bezahlt","Rez-Datum","angelegt am","spät.Beginn","Status","Pat-Nr.","Indi.Schl.",""};
435 dtblm.setColumnIdentifiers(column);
436 tabaktrez = new JXTable(dtblm);
437 tabaktrez.setHighlighters(HighlighterFactory.createSimpleStriping(Colors.PiOrange.alpha(0.25f)));
438 tabaktrez.setDoubleBuffered(true);
439 tabaktrez.setEditable(false);
440 tabaktrez.setSortable(false);
441 tabaktrez.getColumn(0).setMaxWidth(75);
442 TableCellRenderer renderer = new DefaultTableRenderer(new MappedValue(StringValues.EMPTY, IconValues.ICON), JLabel.CENTER);
443 tabaktrez.getColumn(1).setCellRenderer(renderer);
444 tabaktrez.getColumn(1).setMaxWidth(45);
445 tabaktrez.getColumn(3).setMaxWidth(75);
446 tabaktrez.getColumn(5).setMaxWidth(45);
447 tabaktrez.getColumn(5).setCellRenderer(renderer);
449 //tabaktrez.getColumn(4).setMaxWidth(70);
450 tabaktrez.getColumn(6).setMinWidth(0);
451 tabaktrez.getColumn(6).setMaxWidth(0);
452 tabaktrez.getColumn(idInTable).setMinWidth(0);
453 tabaktrez.getColumn(idInTable).setMaxWidth(0);
455 tabaktrez.getColumn(1).setCellRenderer(renderer);
456 tabaktrez.getColumn(1).setMaxWidth(45);
457 tabaktrez.getColumn(3).setMaxWidth(75);
459 // Lemmi 20110105: Maximal Spaltenbreite dieser Datumsangaben auch begrenzen
460 tabaktrez.getColumn(2).setMaxWidth(75);
461 tabaktrez.getColumn(4).setMaxWidth(75);
463 tabaktrez.getColumn(5).setMaxWidth(45);
464 tabaktrez.getColumn(5).setCellRenderer(renderer);
466 //tabaktrez.getColumn(4).setMaxWidth(70);
467 tabaktrez.getColumn(6).setMinWidth(0);
468 tabaktrez.getColumn(6).setMaxWidth(0);
469 tabaktrez.getColumn(7).setMinWidth(0);
470 tabaktrez.getColumn(7).setMaxWidth(0);
471 tabaktrez.getColumn(0).setMaxWidth(75);
473 tabaktrez.getColumn(1).setCellRenderer(renderer);
474 tabaktrez.getColumn(1).setMaxWidth(45);
475 tabaktrez.getColumn(3).setMaxWidth(75);
476 tabaktrez.getColumn(5).setMaxWidth(45);
477 tabaktrez.getColumn(5).setCellRenderer(renderer);
479 //tabaktrez.getColumn(4).setMaxWidth(70);
480 tabaktrez.getColumn(6).setMinWidth(0);
481 tabaktrez.getColumn(6).setMaxWidth(0);
482 tabaktrez.getColumn(7).setMinWidth(0);
483 tabaktrez.getColumn(7).setMaxWidth(0);
485 tabaktrez.validate();
486 tabaktrez.setName("AktRez");
487 tabaktrez.setSelectionMode(0);
488 //tabaktrez.addPropertyChangeListener(this);
489 tabaktrez.getSelectionModel().addListSelectionListener( new RezepteListSelectionHandler());
490 tabaktrez.addMouseListener(new MouseAdapter(){
491 public void mouseClicked(MouseEvent arg0) {
492 // TODO Auto-generated method stub
493 if(arg0.getClickCount()==2 && arg0.getButton()==1){
494 //while(inRezeptDaten && !RezeptDaten.feddisch){
495 long zeit = System.currentTimeMillis();
496 while(!RezeptDaten.feddisch){
497 try {
498 Thread.sleep(20);
499 if(System.currentTimeMillis()-zeit > 5000){
500 JOptionPane.showMessageDialog(null,"Fehler beim Bezug der Rezeptdaten");
501 return;
503 } catch (InterruptedException e) {
504 JOptionPane.showMessageDialog(null,"Fehler beim Bezug der Rezeptdaten\n Bitte Administrator verständigen (Exception)\n\n"+e.getMessage());
505 e.printStackTrace();
508 if(rezGeschlossen()){return;}
509 neuanlageRezept(false,"","");
511 if(arg0.getClickCount()==1 && arg0.getButton()==3){
512 if(Rechte.hatRecht(Rechte.Funktion_rezgebstatusedit, false)){
513 Point point = arg0.getPoint();
514 int row = tabaktrez.rowAtPoint(point);
515 if(row < 0){return;}
516 tabaktrez.columnAtPoint(point);
517 tabaktrez.setRowSelectionInterval(row, row);
518 ZeigePopupMenu(arg0);
519 }else{
521 EmailSendenExtern oMail = new EmailSendenExtern();
522 String smtphost = SystemConfig.hmEmailExtern.get("SmtpHost");
523 String authent = SystemConfig.hmEmailExtern.get("SmtpAuth");
524 String benutzer = SystemConfig.hmEmailExtern.get("Username") ;
525 String pass1 = SystemConfig.hmEmailExtern.get("Password");
526 String sender = SystemConfig.hmEmailExtern.get("SenderAdresse");
527 String recipient = SystemConfig.hmEmailExtern.get("SenderAdresse");
528 ArrayList<String[]> attachments = new ArrayList<String[]>();
529 boolean authx = (authent.equals("0") ? false : true);
530 boolean bestaetigen = false;
531 try {
532 oMail.sendMail(smtphost, benutzer, pass1, sender, recipient, "Fehler", "Rechte-Maustaste im Rezept ausgelöst",attachments,authx,bestaetigen);
533 } catch (AddressException e) {
534 e.printStackTrace();
535 } catch (MessagingException e) {
536 e.printStackTrace();
543 tabaktrez.addKeyListener(new KeyAdapter(){
544 public void keyPressed(KeyEvent arg0) {
545 if(arg0.getKeyCode()==10){
546 arg0.consume();
547 if(rezGeschlossen()){return;}
548 neuanlageRezept(false,"","");
550 if(arg0.getKeyCode()==27){
551 arg0.consume();
553 if(arg0.getKeyCode()==65 && arg0.isControlDown()){
554 arg0.consume();
560 dummypan.setPreferredSize(new Dimension(0,100));
561 JScrollPane aktrezscr = JCompTools.getTransparentScrollPane((Component)tabaktrez);
562 aktrezscr.getVerticalScrollBar().setUnitIncrement(15);
563 dummypan.add(aktrezscr,BorderLayout.CENTER);
564 dummypan.validate();
565 return dummypan;
567 private void ZeigePopupMenu(java.awt.event.MouseEvent me){
568 JPopupMenu jPop = getTerminPopupMenu();
570 jPop.show( me.getComponent(), me.getX(), me.getY() );
572 private void ZeigePopupMenu2(java.awt.event.MouseEvent me){
573 JPopupMenu jPop = getBehandlungsartLoeschenMenu();
574 jPop.show( me.getComponent(), me.getX(), me.getY() );
577 // Lemmi Doku: RMT Menü in "aktuelle Rezepte" zur Einstellung des Zuzahlungsstatus
578 private JPopupMenu getTerminPopupMenu(){
579 JPopupMenu jPopupMenu = new JPopupMenu();
580 // Lemmi 20101231: Icon zugefügt
581 JMenuItem item = new JMenuItem("Zuzahlungsstatus auf befreit setzen", new ImageIcon(Reha.proghome+"icons/frei.png"));
582 item.setActionCommand("statusfrei");
583 item.addActionListener(this);
584 jPopupMenu.add(item);
585 // Lemmi 20101231: Icon zugefügt
586 item = new JMenuItem("... auf bereits bezahlt setzen", new ImageIcon(Reha.proghome+"icons/Haken_klein.gif"));
587 item.setActionCommand("statusbezahlt");
588 item.addActionListener(this);
589 jPopupMenu.add(item);
590 // Lemmi 20101231: Icon zugefügt
591 item = new JMenuItem("... auf nicht befreit und nicht bezahlt", new ImageIcon(Reha.proghome+"icons/Kreuz.png"));
592 item.setActionCommand("statusnichtbezahlt");
593 item.addActionListener(this);
594 jPopupMenu.add(item);
596 jPopupMenu.addSeparator();
598 // Lemmi 201110106: Knopf zum Kopieren des aktiven Rezeptes zugefügt
599 item = new JMenuItem("Angewähltes Rezept kopieren"); // new ImageIcon(Reha.proghome+"icons/Kreuz.png"));
600 item.setActionCommand("KopiereAngewaehltes");
601 item.addActionListener(this);
602 jPopupMenu.add(item);
604 // Lemmi 201110113: Knopf zum Kopieren des jüngsten Rezeptes zugefügt
605 item = new JMenuItem("Jüngstes Rezept kopieren"); // new ImageIcon(Reha.proghome+"icons/Kreuz.png"));
606 item.setActionCommand("KopiereLetztes");
607 item.addActionListener(this);
608 jPopupMenu.add(item);
610 jPopupMenu.addSeparator();
612 item = new JMenuItem("Angewähltes Rezept aufteilen"); // new ImageIcon(Reha.proghome+"icons/Kreuz.png"));
613 item.setActionCommand("RezeptTeilen");
614 item.addActionListener(this);
615 jPopupMenu.add(item);
618 return jPopupMenu;
620 private JPopupMenu getBehandlungsartLoeschenMenu(){
621 JPopupMenu jPopupMenu = new JPopupMenu();
622 JMenuItem item = new JMenuItem("alle im Rezept gespeicherten Behandlungsarten löschen");
623 item.setActionCommand("deletebehandlungen");
624 item.addActionListener(this);
625 jPopupMenu.add(item);
627 item = new JMenuItem("alle Behandlungsarten den Rezeptdaten angleichen");
628 item.setActionCommand("angleichenbehandlungen");
629 item.addActionListener(this);
630 jPopupMenu.add(item);
632 jPopupMenu.addSeparator();
634 // vvv Lemmi 20110105: aktuellen Behandler auf alle leeren Behandler kopieren
635 item = new JMenuItem("gewählten Behandler in alle leeren Behandler-Felder kopieren");
636 item.setActionCommand("behandlerkopieren");
637 // aktuell gewählte Zeile finden - mit Sicherung, wenn keine angewählt worden ist !
638 int iPos = tabaktterm.getSelectedRow();
639 if ( iPos < 0 || iPos >= tabaktterm.getRowCount() || tabaktterm.getStringAt(tabaktterm.getSelectedRow(), 1).isEmpty() )
640 item.setEnabled(false);
641 item.addActionListener(this);
642 jPopupMenu.add(item);
643 // ^^^ Lemmi 20110105: aktuellen Behandler auf alle leeren Behandler kopieren
645 return jPopupMenu;
647 public JToolBar getTerminToolbar(){
648 JToolBar jtb = new JToolBar();
649 jtb.setOpaque(false);
650 jtb.setRollover(true);
651 jtb.setBorder(null);
652 jtb.setOpaque(false);
654 JButton jbut = new JButton();
655 jbut.setIcon(SystemConfig.hmSysIcons.get("neu"));
656 jbut.setToolTipText("Neuen Termin eintragen");
657 jbut.setActionCommand("terminplus");
658 jbut.addActionListener(this);
659 jtb.add(jbut);
660 jbut = new JButton();
661 jbut.setIcon(SystemConfig.hmSysIcons.get("delete"));
662 jbut.setToolTipText("Termin löschen");
663 jbut.setActionCommand("terminminus");
664 jbut.addActionListener(this);
665 jtb.add(jbut);
666 jtb.addSeparator(new Dimension(40,0));
667 jbut = new JButton();
668 jbut.setIcon(SystemConfig.hmSysIcons.get("sort"));
670 jbut.setActionCommand("terminsortieren");
671 jbut.addActionListener(this);
672 jbut.setToolTipText("Termine nach Datum sortieren");
673 jtb.add(jbut);
674 return jtb;
677 // Lemmi-Doku: Liste mit den Terminen am aktuellen Rezept
678 public JScrollPane getTermine(){
680 dtermm = new MyTermTableModel();
681 dtermm.addTableModelListener(this);
682 String[] column = {"Beh.Datum","Behandler","Text","Beh.Art",""};
683 dtermm.setColumnIdentifiers(column);
684 tabaktterm = new JXTable(dtermm){
689 private static final long serialVersionUID = 1L;
690 @Override
691 public boolean editCellAt(int row, int column, EventObject e) {
692 ////System.out.println("edit! in Zeile: "+row+" Spalte: "+column);
693 ////System.out.println("Event = "+e);
694 if (e == null) {
695 return false;
696 ////System.out.println("edit! in Zeile: "+row+" Spalte: "+column);
698 if (e instanceof MouseEvent) {
699 MouseEvent mouseEvent = (MouseEvent) e;
700 if (mouseEvent.getClickCount() > 1) {
701 //System.out.println("edit!");
702 return super.editCellAt(row, column, e);
704 }else if (e instanceof KeyEvent) {
705 KeyEvent keyEvent = (KeyEvent) e;
706 if (keyEvent.getKeyChar()==10) {
707 //System.out.println("edit!");
708 return super.editCellAt(row, column, e);
712 return false;
717 //abaktterm.setSurrendersFocusOnKeystroke(false);
718 //tabaktterm.setVerifyInputWhenFocusTarget(true);
720 tabaktterm.setHighlighters(HighlighterFactory.createSimpleStriping(Colors.PiOrange.alpha(0.25f)));
721 tabaktterm.setDoubleBuffered(true);
722 tabaktterm.addPropertyChangeListener(this);
723 tabaktterm.setEditable(true);
724 tabaktterm.setSortable(false);
725 //SortOrder setSort = SortOrder.ASCENDING;
726 //tabaktterm.setSortOrder(4,(SortOrder) setSort);
727 tabaktterm.setSelectionMode(0);
728 tabaktterm.setHorizontalScrollEnabled(true);
731 //tbl = new DateTableCellEditor();
732 //tabaktterm.getColumnModel().getColumn(0).setCellEditor(tbl);
733 //tabaktterm.getColumnModel().getColumn(0).setCellEditor(tbl);
735 MyTableStringDatePicker pic = new MyTableStringDatePicker();
736 tabaktterm.getColumnModel().getColumn(0).setCellEditor(pic);
738 //tabaktterm.getColumn(0).setCellEditor(new DatumTableCellEditor(new JFormattedTextField()));
739 //tabaktterm.getColumnModel().getColumn(0).setCellEditor(new DatumTableCellEditor(new JFormattedTextField()));
740 //tabaktterm.getColumn(0).setCellEditor(new MyDateEditor(new SimpleDateFormat("dd.mm.yyyyy")));
741 tabaktterm.setAutoStartEditOnKeyStroke(true);
742 tabaktterm.getColumn(0).setMinWidth(40);
744 // vvv Lemmi 20110105: Layout etwas dynamischer gestaltet
745 tabaktterm.getColumn(0).setMaxWidth(80);
746 tabaktterm.getColumn(1).setMaxWidth(80);
747 // ^^^ Lemmi 20110105: Layout etwas dynamischer gestaltet
749 tabaktterm.getColumn(1).setMinWidth(60);
750 tabaktterm.getColumn(2).setMinWidth(40);
751 tabaktterm.getColumn(3).setMinWidth(40);
752 tabaktterm.getColumn(4).setMinWidth(0);
753 tabaktterm.getColumn(4).setMaxWidth(0);
754 tabaktterm.setOpaque(true);
755 tabaktterm.setAutoStartEditOnKeyStroke(false);
756 tabaktterm.addMouseListener(new MouseAdapter(){
758 public void mousePressed(MouseEvent arg0){
759 arg0.consume();
760 //tabaktterm.requestFocus();
761 final MouseEvent xarg0 = arg0;
762 SwingUtilities.invokeLater(new Runnable(){
763 public void run(){
764 if(xarg0.getButton() == 1){
765 int row = tabaktterm.getSelectedRow();
766 int col = tabaktterm.getSelectedColumn();
767 if(row >=0){
768 tabaktterm.setRowSelectionInterval(row, row);
769 tabaktterm.setColumnSelectionInterval(col, col);
776 if(arg0.getClickCount()==2 ){
777 startCellEditing(tabaktterm,row,col);
781 public void mouseReleased(MouseEvent arg0){
782 arg0.consume();
784 public void mouseClicked(MouseEvent arg0) {
785 arg0.consume();
786 //System.out.println("Im eigenen Mouseadapter");
787 if(arg0.getClickCount()==2){
788 SwingUtilities.invokeLater(new Runnable(){
789 public void run(){
790 int row = tabaktterm.getSelectedRow();
791 int col = tabaktterm.getSelectedColumn();
792 if(row >= 0){
793 startCellEditing(tabaktterm,row,col);
797 return;
799 if(arg0.getButton()==3){
800 if(!Rechte.hatRecht(Rechte.Sonstiges_rezeptbehandlungsartloeschen, false)){
801 return;
803 ZeigePopupMenu2(arg0);
807 tabaktterm.addKeyListener(new KeyAdapter(){
808 public void keyPressed(KeyEvent arg0) {
809 // TODO Auto-generated method stub
810 ////System.out.println("keypressed in Editor");
811 if(arg0.getKeyCode()==10){
812 //arg0.consume();
813 //tbl.stopCellEditing();
814 }else if(arg0.getKeyCode()==27){
816 ////System.out.println("cancel in tabelle");
817 tbl.cancelCellEditing();
818 }else{/*
819 int row = tabaktterm.getSelectedRow();
820 int col = tabaktterm.getSelectedColumn();
821 boolean success = tabaktterm.editCellAt(row, col);
822 if (success) {
823 // Select cell
824 boolean toggle = false;
825 boolean extend = false;
826 tabaktterm.changeSelection(row, col, toggle, extend);
827 } else {
828 // Cell could not be edited
836 tabaktterm.validate();
837 tabaktterm.setName("AktTerm");
838 //tabaktterm.setPreferredSize(new Dimension(300,300));
839 //tabaktterm.addPropertyChangeListener(this);
840 JScrollPane termscr = JCompTools.getTransparentScrollPane(tabaktterm);
841 termscr.getVerticalScrollBar().setUnitIncrement(15);
842 return termscr;
844 private void startCellEditing(JXTable table,int row,int col){
845 final int xrows = row;
846 final int xcols = col;
847 final JXTable xtable = table;
848 SwingUtilities.invokeLater(new Runnable(){
849 public void run(){
850 //xtable.setRowSelectionInterval(xrows, xrows);
851 //xtable.setColumnSelectionInterval(xcols, xcols);
852 //xtable.scrollRowToVisible(xrows);
853 xtable.editCellAt(xrows,xcols );
859 private String macheHtmlTitel(int anz,String titel){
861 String ret = titel+" - "+Integer.toString(anz);
864 String ret = "<html>"+titel+
865 (anz > 0 ? " - <font color='#ff0000'>"+Integer.valueOf(anz).toString()+"<font></html>" : " - <font color='#000000'>"+Integer.valueOf(anz).toString()+"</font>");
867 return ret;
870 public void holeRezepte(String patint,String rez_nr){
871 final String xpatint = patint;
872 final String xrez_nr = rez_nr;
874 new SwingWorker<Void,Void>(){
875 @SuppressWarnings("rawtypes")
876 @Override
877 protected Void doInBackground() throws Exception {
878 try{
879 aktTerminBuffer.clear();
880 aktTerminBuffer.trimToSize();
882 //String sstmt = "select * from verordn where PAT_INTERN ='"+xpatint+"' ORDER BY REZ_DATUM";
883 Vector<Vector<String>> vec = SqlInfo.holeSaetze("verordn", "rez_nr,zzstatus,DATE_FORMAT(rez_datum,'%d.%m.%Y') AS drez_datum,DATE_FORMAT(datum,'%d.%m.%Y') AS datum," +
884 "DATE_FORMAT(lastdate,'%d.%m.%Y') AS datum,abschluss,pat_intern,indikatschl,id,termine",
885 "pat_intern='"+xpatint+"' ORDER BY rez_datum", Arrays.asList(new String[]{}));
886 int anz = vec.size();
888 for(int i = 0; i < anz;i++){
889 if(i==0){
890 dtblm.setRowCount(0);
892 aktTerminBuffer.add(String.valueOf(vec.get(i).get(termineInTable)));
893 int zzbild = 0;
894 int rezstatus = 0;
895 if( ((Vector)vec.get(i)).get(1) == null){
896 zzbild = 0;
897 }else if(!((Vector)vec.get(i)).get(1).equals("")){
898 zzbild = Integer.valueOf((String) ((Vector)vec.get(i)).get(1) );
900 if(((Vector)vec.get(i)).get(5).equals("T")){
901 rezstatus = 1;
903 //((Vector)vec.get(i)).set(3, PatGrundPanel.thisClass.imgzuzahl[zzbild]);
905 ////System.out.println("Inhalt von zzstatus ="+zzbild);
906 dtblm.addRow((Vector)vec.get(i));
908 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[zzbild], i, 1);
909 dtblm.setValueAt(Reha.thisClass.patpanel.imgrezstatus[rezstatus],i,5);
911 if(vec.get(i).get(0).startsWith("RH") && Reha.thisClass.dta301panel != null){
912 final String testreznum = String.valueOf(vec.get(i).get(0));
913 new SwingWorker<Void,Void>(){
914 @Override
915 protected Void doInBackground()
916 throws Exception {
917 Reha.thisClass.dta301panel.aktualisieren(testreznum);
918 return null;
920 }.execute();
923 if(i==0){
924 //final int ix = i;
925 if(suchePatUeberRez){
926 suchePatUeberRez = false;
927 }else{
929 if(!inEinzelTermine){
930 new SwingWorker<Void,Void>(){
931 @Override
932 protected Void doInBackground()
933 throws Exception {
934 try{
935 inEinzelTermine = true;
936 holeEinzelTermine(ix,null,"aus suche (hole Rezepte)");
937 inEinzelTermine = false;
938 }catch(Exception ex){
939 inEinzelTermine = false;
941 return null;
944 }.execute();
950 /************** Bis hierher hat man die Sätze eingelesen ********************/
951 try{
952 Reha.thisClass.patpanel.multiTab.setTitleAt(0,macheHtmlTitel(anz,"aktuelle Rezepte"));
953 }catch(Exception ex){
954 System.out.println("Timingprobleme beim setzen des Reitertitels - Reiter: aktuelle Rezepte");
956 int row = 0;
957 if(anz > 0){
958 setzeRezeptPanelAufNull(false);
959 //int anzeigen = -1;
960 if(xrez_nr.length() > 0){
961 row = 0;
962 rezneugefunden = true;
963 for(int ii = 0; ii < anz;ii++){
964 if(tabaktrez.getValueAt(ii,0).equals(xrez_nr)){
965 row = ii;
966 break;
970 //tabaktrez.setRowSelectionInterval(row, row);
971 Reha.thisClass.patpanel.vecaktrez = ((Vector<String>)SqlInfo.holeSatz("verordn", " * ", "id = '"+(String)tabaktrez.getValueAt(row, idInTable)+"'", Arrays.asList(new String[] {}) ));
972 rezDatenPanel.setRezeptDaten((String)tabaktrez.getValueAt(row, 0),(String)tabaktrez.getValueAt(row, idInTable));
973 //RezTools.constructRawHMap();
975 if(!inEinzelTermine){
976 try{
977 inEinzelTermine = true;
978 holeEinzelTermine(row,null,"in if anz > 0 ebenfalls in hole rezepte");
979 inEinzelTermine = false;
980 }catch(Exception ex){
981 inEinzelTermine = false;
985 ////System.out.println("rezeptdaten akutalisieren in holeRezepte 1");
986 }else{
987 rezneugefunden = true;
988 //tabaktrez.setRowSelectionInterval(0, 0);
989 Reha.thisClass.patpanel.vecaktrez = ((Vector<String>)SqlInfo.holeSatz("verordn", " * ", "id = '"+(String)tabaktrez.getValueAt(row, idInTable)+"'", Arrays.asList(new String[] {}) ));
990 rezDatenPanel.setRezeptDaten((String)tabaktrez.getValueAt(0, 0),(String)tabaktrez.getValueAt(0, idInTable));
991 //RezTools.constructRawHMap();
992 ////System.out.println("rezeptdaten akutalisieren in holeRezepte 1");
995 try{
996 if(! inEinzelTermine){
997 inEinzelTermine = true;
998 try{
999 if(aktTerminBuffer.size() > row){
1000 holeEinzelTermineAusRezept("",aktTerminBuffer.get(row));
1001 }else{
1002 termineInTabelle( null);
1005 }catch(Exception ex){
1006 ex.printStackTrace();
1007 //JOptionPane.showMessageDialog(null, "Fehler in holeEinzelTermine-1");
1008 //JOptionPane.showMessageDialog(null, ex.getMessage());
1010 aktuellAngezeigt = row;
1011 //holeEinzelTermineAktuell(0,null,aktTerminBuffer.get(row));
1012 tabaktrez.setRowSelectionInterval(row, row);
1013 tabaktrez.scrollRowToVisible(row);
1014 rezAngezeigt = tabaktrez.getValueAt(row,0).toString().trim();
1015 inEinzelTermine = false;
1018 }catch(Exception ex){
1019 JOptionPane.showMessageDialog(null, "Fehler in holeEinzelTermine-2");
1020 JOptionPane.showMessageDialog(null, ex.getMessage());
1021 inEinzelTermine = false;
1024 anzahlRezepte.setText("Anzahl Rezepte: "+anz);
1025 wechselPanel.revalidate();
1026 wechselPanel.repaint();
1028 }else{
1029 setzeRezeptPanelAufNull(true);
1030 rezAngezeigt = "";
1031 anzahlRezepte.setText("Anzahl Rezepte: "+anz);
1032 wechselPanel.revalidate();
1033 wechselPanel.repaint();
1034 dtblm.setRowCount(0);
1035 dtermm.setRowCount(0);
1036 aktuellAngezeigt = -1;
1037 if(Reha.thisClass.patpanel.vecaktrez != null){
1038 Reha.thisClass.patpanel.vecaktrez.clear();
1041 }catch(Exception ex){
1042 ex.printStackTrace();
1043 JOptionPane.showMessageDialog(null,"Fehler in der Funktion holeRezepte()");
1044 inEinzelTermine = false;
1046 return null;
1049 }.execute();
1052 public void setzeKarteiLasche(){
1053 if(tabaktrez.getRowCount()==0){
1054 holeRezepte(Reha.thisClass.patpanel.patDaten.get(29),"");
1055 Reha.thisClass.patpanel.multiTab.setTitleAt(0,macheHtmlTitel(tabaktrez.getRowCount(),"aktuelle Rezepte"));
1056 }else{
1057 Reha.thisClass.patpanel.multiTab.setTitleAt(0,macheHtmlTitel(tabaktrez.getRowCount(),"aktuelle Rezepte"));
1060 public void aktualisiereVector(String rid){
1061 String[] strg = {};
1062 Reha.thisClass.patpanel.vecaktrez = ((Vector<String>)SqlInfo.holeSatz("verordn", " * ", "id = '"+rid+"'", Arrays.asList(strg) ));
1063 setRezeptDaten();
1065 public void setRezeptDaten(){
1066 int row = this.tabaktrez.getSelectedRow();
1067 if(row >= 0){
1068 //final int xrow = row;
1069 String reznr = (String)tabaktrez.getValueAt(row,0);
1070 rezAngezeigt = reznr;
1071 String id = (String)tabaktrez.getValueAt(row,idInTable);
1072 rezDatenPanel.setRezeptDaten(reznr,id);
1075 public void updateEinzelTermine(String einzel){
1076 String[] tlines = einzel.split("\n");
1077 int lines = tlines.length;
1078 ////System.out.println("Anzahl Termine = "+lines);
1079 Vector<String> tvec = new Vector<String>();
1080 dtermm.setRowCount(0);
1081 String[] terdat = null;
1082 for(int i = 0;i<lines;i++){
1083 terdat = tlines[i].split("@");
1084 int ieinzel = terdat.length;
1085 ////System.out.println("Anzahl Splits = "+ieinzel);
1086 tvec.clear();
1087 for(int y = 0; y < ieinzel;y++){
1088 if(y==0){
1089 tvec.add(String.valueOf((terdat[y].trim().equals("") ? " . . " : terdat[y])));
1090 if(i==0){
1091 SystemConfig.hmAdrRDaten.put("<Rerstdat>",(terdat[y].trim().equals("") ? " . . " : terdat[y]));
1093 }else{
1094 tvec.add(terdat[y]);
1096 ////System.out.println("Feld "+y+" = "+terdat[y]);
1098 ////System.out.println("Termivector = "+tvec);
1099 dtermm.addRow((Vector<?>)tvec.clone());
1101 tabaktterm.validate();
1102 tabaktterm.repaint();
1103 anzahlTermine.setText("Anzahl Termine: "+lines);
1104 if(lines > 0){
1105 tabaktterm.setRowSelectionInterval(lines-1, lines-1);
1107 SystemConfig.hmAdrRDaten.put("<Rletztdat>",(terdat[0].trim().equals("") ? " . . " : terdat[0]));
1108 SystemConfig.hmAdrRDaten.put("<Ranzahltage>", Integer.toString(lines));
1111 public void setzeBild(int satz,int icon){
1112 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[icon],satz,1);
1113 tabaktrez.validate();
1114 tabaktrez.repaint();
1116 private void termineAufNull(){
1117 dtermm.setRowCount(0);
1118 tabaktterm.validate();
1119 anzahlTermine.setText("Anzahl Termine: 0");
1120 SystemConfig.hmAdrRDaten.put("<Rletztdat>","");
1121 SystemConfig.hmAdrRDaten.put("<Rerstdat>","");
1122 SystemConfig.hmAdrRDaten.put("<Ranzahltage>","0");
1124 @SuppressWarnings({ "unchecked", "rawtypes" })
1125 public void holeEinzelTermineAusRezept(String xreznr,String termine){
1126 try{
1127 Vector<String> xvec = null;
1128 Vector<Vector<String>> retvec = new Vector<Vector<String>>();
1129 String terms = null;
1130 if(termine == null){
1131 xvec = SqlInfo.holeSatz("verordn", "termine,pat_intern", "rez_nr='"+xreznr+"'", Arrays.asList(new String[] {}));
1132 if(xvec.size()==0){
1133 termineAufNull();
1134 return;
1135 }else{
1136 terms = (String) xvec.get(0);
1138 }else{
1139 terms = termine;
1141 if(terms==null){
1142 termineAufNull();
1143 return;
1145 if(terms.equals("")){
1146 termineAufNull();
1147 return;
1149 String[] tlines = terms.split("\n");
1150 int lines = tlines.length;
1151 Vector<String> tvec = new Vector<String>();
1152 String stage ="";
1154 for(int i = 0;i<lines;i++){
1155 tvec.clear();
1156 String[] terdat = tlines[i].split("@");
1157 int ieinzel = terdat.length;
1158 for(int y = 0; y < ieinzel;y++){
1159 if(y==0){
1160 tvec.add(String.valueOf((terdat[y].trim().equals("") ? " . . " : terdat[y])));
1161 stage=stage+(i>0 ? ", " : "")+(terdat[y].trim().equals("") ? " . . " : terdat[y]);
1162 }else{
1163 tvec.add(String.valueOf(terdat[y]));
1166 retvec.add((Vector<String>)tvec.clone());
1169 SystemConfig.hmAdrRDaten.put("<Rtage>", String.valueOf(stage));
1170 Comparator<Vector> comparator = new Comparator<Vector>() {
1171 @Override
1172 public int compare(Vector o1, Vector o2) {
1173 // TODO Auto-generated method stub
1174 String s1 = (String)o1.get(4);
1175 String s2 = (String)o2.get(4);
1176 return s1.compareTo(s2);
1179 Collections.sort(retvec,comparator);
1180 //System.out.println(retvec);
1181 termineInTabelle((Vector)retvec.clone());
1182 }catch(Exception ex){
1183 ex.printStackTrace();
1184 termineInTabelle(null);
1187 private void termineInTabelle( Vector<Vector<String>> terms){
1188 dtermm.setRowCount(0);
1189 //System.out.println(terms);
1190 if(terms != null){
1191 for(int i = 0; i < terms.size();i++){
1192 if(i==0){
1193 SystemConfig.hmAdrRDaten.put("<Rerstdat>",(terms.get(i).get(0).equals("") ? " . . " : String.valueOf(terms.get(i).get(0))) );
1195 dtermm.addRow((Vector<?>)terms.get(i));
1197 SystemConfig.hmAdrRDaten.put("<Rletztdat>",(terms.get(terms.size()-1).get(0).equals("") ? " . . " : String.valueOf(terms.get(terms.size()-1).get(0))) );
1198 tabaktterm.validate();
1199 anzahlTermine.setText("Anzahl Termine: "+terms.size());
1200 SystemConfig.hmAdrRDaten.put("<Ranzahltage>",Integer.toString(terms.size()));
1201 }else{
1202 SystemConfig.hmAdrRDaten.put("<Rletztdat>", " . . " );
1203 tabaktterm.validate();
1204 anzahlTermine.setText("Anzahl Termine: "+"0");
1205 SystemConfig.hmAdrRDaten.put("<Ranzahltage>","0");
1208 @SuppressWarnings({ "unchecked", "unused" })
1209 private void holeEinzelTermineAktuell(int row,Vector<String> vvec,String aufruf){
1210 //System.out.println("Aufruf aus --> "+aufruf);
1211 inEinzelTermine = true;
1212 Vector<String> xvec = null;
1213 if(vvec == null){
1214 xvec = (Vector<String>) SqlInfo.holeSatz("verordn", "termine", "id='"+tabaktrez.getValueAt(row,idInTable)+"'", Arrays.asList(new String[] {}));
1215 }else{
1216 xvec = vvec;
1219 String terms = (String) xvec.get(0);
1220 ////System.out.println(terms+" / id der rezeptes = "+tabaktrez.getValueAt(row,4));
1221 ////System.out.println("Inhalt von Termine = *********\n"+terms+"**********");
1222 if(terms==null){
1223 dtermm.setRowCount(0);
1224 tabaktterm.validate();
1225 anzahlTermine.setText("Anzahl Termine: 0");
1226 SystemConfig.hmAdrRDaten.put("<Rletztdat>","");
1227 SystemConfig.hmAdrRDaten.put("<Rerstdat>","");
1228 SystemConfig.hmAdrRDaten.put("<Ranzahltage>","0");
1229 inEinzelTermine = false;
1230 return;
1232 if(terms.equals("")){
1233 dtermm.setRowCount(0);
1234 tabaktterm.validate();
1235 anzahlTermine.setText("Anzahl Termine: 0");
1236 SystemConfig.hmAdrRDaten.put("<Rletztdat>","");
1237 SystemConfig.hmAdrRDaten.put("<Rerstdat>","");
1238 SystemConfig.hmAdrRDaten.put("<Ranzahltage>","0");
1239 inEinzelTermine = false;
1240 return;
1242 String[] tlines = terms.split("\n");
1243 int lines = tlines.length;
1244 ////System.out.println("Anzahl Termine = "+lines);
1245 @SuppressWarnings("rawtypes")
1246 Vector tvec = new Vector();
1247 dtermm.setRowCount(0);
1248 String[] terdat = null;
1249 for(int i = 0;i<lines;i++){
1250 terdat = tlines[i].split("@");
1251 int ieinzel = terdat.length;
1252 ////System.out.println("Anzahl Splits = "+ieinzel);
1253 tvec.clear();
1254 for(int y = 0; y < ieinzel;y++){
1255 if(y==0){
1256 tvec.add(String.valueOf((terdat[y].trim().equals("") ? " . . " : terdat[y])));
1257 if(i==0){
1258 SystemConfig.hmAdrRDaten.put("<Rerstdat>",String.valueOf((terdat[y].trim().equals("") ? " . . " : terdat[y])));
1260 }else{
1261 tvec.add(String.valueOf(terdat[y]));
1264 dtermm.addRow((Vector<?>)tvec.clone());
1266 tabaktterm.validate();
1267 tabaktterm.repaint();
1268 anzahlTermine.setText("Anzahl Terimine: "+lines);
1269 if(lines > 0){
1270 //tabaktterm.setRowSelectionInterval(lines-1, lines-1);
1272 SystemConfig.hmAdrRDaten.put("<Rletztdat>",(terdat[0].trim().equals("") ? " . . " : terdat[0]));
1273 SystemConfig.hmAdrRDaten.put("<Ranzahltage>",Integer.toString(lines));
1274 inEinzelTermine = false;
1277 public void termineSpeichern(){
1278 int reihen = dtermm.getRowCount();
1279 StringBuffer sb = new StringBuffer();
1280 String sdat = "";
1281 for(int i = 0;i<reihen;i++){
1282 sdat = (dtermm.getValueAt(i,0)!= null ? ((String)dtermm.getValueAt(i,0)).trim() : ". .");
1283 if(i==0){SystemConfig.hmAdrRDaten.put("<Rerstdat>",sdat);}
1284 if(i==(reihen-1)){SystemConfig.hmAdrRDaten.put("<Rletztdat>",sdat);}
1286 dtermm.setValueAt((sdat.equals(". .") ? " " : DatFunk.sDatInSQL(sdat)), i, 4);
1287 sb.append((sdat.equals(". .") ? " . . @" : sdat)+"@");
1288 sb.append((dtermm.getValueAt(i,1)!= null ? ((String)dtermm.getValueAt(i,1)).trim() : "")+"@");
1289 sb.append((dtermm.getValueAt(i,2)!= null ? ((String)dtermm.getValueAt(i,2)).trim() : "")+"@");
1290 sb.append((dtermm.getValueAt(i,3)!= null ? ((String)dtermm.getValueAt(i,3)).trim() : "")+"@");
1291 sb.append((dtermm.getValueAt(i,4)!= null ? ((String)dtermm.getValueAt(i,4)).trim() : "")+"\n");
1293 SystemConfig.hmAdrRDaten.put("<Ranzahltage>",Integer.toString(reihen));
1294 SqlInfo.aktualisiereSatz("verordn", "termine='"+sb.toString()+"'","id='"+(String)tabaktrez.getValueAt(tabaktrez.getSelectedRow(), idInTable)+"'");
1295 Reha.thisClass.patpanel.vecaktrez.set(34,sb.toString());
1296 if(aktuellAngezeigt>=0){
1297 try{
1298 aktTerminBuffer.set(aktuellAngezeigt, sb.toString());
1299 }catch(Exception ex){
1300 ex.printStackTrace();
1304 @Override
1305 public void propertyChange(PropertyChangeEvent arg0) {
1307 @Override
1308 public void tableChanged(TableModelEvent arg0) {
1309 //boolean update = false;
1310 //int fi = arg0.getFirstRow();
1311 //int fl = arg0.getLastRow();
1312 int col = arg0.getColumn();
1313 int type = arg0.getType();
1315 String stype; // = "";
1316 if(type == TableModelEvent.UPDATE){
1317 stype = "Update";
1319 if(type == TableModelEvent.INSERT){
1320 stype = "Insert";
1322 if(type == TableModelEvent.DELETE){
1323 stype = "Delete";
1327 if( (col >= 0 && col < 4 && type == TableModelEvent.UPDATE) ){
1328 final int xcol = col;
1329 new Thread(){
1330 public void run(){
1331 termineSpeichern();
1332 if(xcol==0){
1333 //starteTests();
1337 }.start();
1343 private void starteTests(){
1344 new Thread(){
1345 public void run(){
1346 //System.out.println("Hier den Termintest");
1347 if(Reha.thisClass.patpanel.vecaktrez.get(60).equals("T")){
1348 Vector<String>tage = new Vector<String>();
1349 Vector<?> v = dtermm.getDataVector();
1350 for(int i = 0; i < v.size();i++){
1351 tage.add((String) ((Vector<?>)v.get(i)).get(0));
1353 /*Object[] ret = */ZuzahlTools.unter18TestDirekt(tage,true,false);
1354 //String resultgleich = "";
1356 if(!Reha.thisClass.patpanel.patDaten.get(69).equals("")){
1357 ZuzahlTools.jahresWechselTest((String)Reha.thisClass.patpanel.vecaktrez.get(1),true,false);
1360 }.start();
1363 @Override
1364 public void valueChanged(ListSelectionEvent arg0) {
1365 //int index;
1366 if( (/*index = */arg0.getFirstIndex()) >= 0){
1367 if(! arg0.getValueIsAdjusting()){
1373 class RezepteListSelectionHandler implements ListSelectionListener {
1375 public void valueChanged(ListSelectionEvent e) {
1376 if(rezneugefunden){
1377 rezneugefunden = false;
1378 return;
1380 if(!RezeptDaten.feddisch){
1381 return;
1383 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
1385 //int firstIndex = e.getFirstIndex();
1386 //int lastIndex = e.getLastIndex();
1387 boolean isAdjusting = e.getValueIsAdjusting();
1388 if(isAdjusting){
1389 return;
1391 //StringBuffer output = new StringBuffer();
1392 if (lsm.isSelectionEmpty()) {
1394 } else {
1395 int minIndex = lsm.getMinSelectionIndex();
1396 int maxIndex = lsm.getMaxSelectionIndex();
1397 for (int i = minIndex; i <= maxIndex; i++) {
1398 if (lsm.isSelectedIndex(i)) {
1399 RezeptDaten.feddisch = false;
1400 final int ix = i;
1401 new SwingWorker<Void,Void>(){
1402 @Override
1403 protected Void doInBackground() throws Exception {
1404 try{
1405 if(suchePatUeberRez){
1406 suchePatUeberRez = false;
1407 return null;
1409 setCursor(Reha.thisClass.wartenCursor);
1410 if(!inEinzelTermine ){
1411 try{
1412 inEinzelTermine = true;
1413 //holeEinzelTermineAktuell(0,null,aktTerminBuffer.get(ix));
1414 //holeEinzelTermine(ix,null,"aus rezeptselect Listener");
1415 //System.out.println(aktTerminBuffer.get(ix));
1416 try{
1417 holeEinzelTermineAusRezept("",aktTerminBuffer.get(ix));
1418 }catch(Exception ex){
1419 ex.printStackTrace();
1421 aktuellAngezeigt = ix;
1422 inEinzelTermine = false;
1424 }catch(Exception ex){
1425 inEinzelTermine = false;
1428 Reha.thisClass.patpanel.vecaktrez = ((Vector<String>)SqlInfo.holeSatz("verordn", " * ", "id = '"+(String)tabaktrez.getValueAt(ix, idInTable)+"'", Arrays.asList(new String[] {}) ));
1429 Reha.thisClass.patpanel.aktRezept.rezAngezeigt = (String)tabaktrez.getValueAt(ix, 0);
1430 rezDatenPanel.setRezeptDaten((String)tabaktrez.getValueAt(ix, 0),(String)tabaktrez.getValueAt(ix, idInTable));
1431 setCursor(Reha.thisClass.normalCursor);
1432 final String testreznum = (String)tabaktrez.getValueAt(ix, 0).toString();
1433 //System.out.println("**********"+testreznum+" "+Reha.thisClass.dta301panel);
1434 new SwingWorker<Void,Void>(){
1435 @Override
1436 protected Void doInBackground()
1437 throws Exception {
1438 try{
1439 if( (testreznum.startsWith("RH")) && (Reha.thisClass.dta301panel != null) ){
1440 Reha.thisClass.dta301panel.aktualisieren(testreznum);
1442 //RezTools.constructRawHMap();
1443 }catch(Exception ex){
1444 ex.printStackTrace();
1446 return null;
1449 }.execute();
1450 }catch(Exception ex){
1451 setCursor(Reha.thisClass.normalCursor);
1452 ex.printStackTrace();
1453 inEinzelTermine = false;
1454 //JOptionPane.showMessageDialog(null, "Fehler im ListSelection-Listener aktuelle Rezepte");
1456 return null;
1459 }.execute();
1460 break;
1464 ////System.out.println(output.toString());
1468 public void indiSchluessel(){
1469 indphysio = new String[] {
1470 "kein IndiSchl.",
1471 "AT1 a","AT1 b","AT1 c",
1472 "AT2 a","AT2 b","AT2 c",
1473 "AT3 a","AT3 b","AT3 c",
1474 "CS a","CS b",
1475 "EX1 a","EX1 b","EX1 c",
1476 "EX2 a","EX2 b","EX2 c","EX2 d",
1477 "EX3 a","EX3 b","EX3 c","EX3 d",
1478 "EX4 a",
1479 "GE a",
1480 "LY1 a", "LY1 b","LY2 a","LY3 a",
1481 "PN a","PN b","PN c",
1482 "SO1 a","SO2 a","SO3 a","SO4 a","SO5 a",
1483 "WS1 a","WS1 b","WS1 c","WS1 d","WS1 e",
1484 "WS2 a","WS2 b","WS2 c","WS2 d","WS2 e","WS2 f","WS2 g",
1485 "ZN1 a","ZN1 b","ZN1 c",
1486 "ZN2 a","ZN2 b","ZN2 c",
1489 indergo = new String[] {
1490 "kein IndiSchl.",
1491 "EN1","EN2","EN3","EN4",
1492 "SB1","SB2","SB3","SB4","SB5","SB6","SB7",
1493 "PS1","PS2","PS3","PS4","PS5",
1495 indlogo = new String[] {
1496 "kein IndiSchl.",
1497 "RE1","RE2",
1498 "SC1","SC2",
1499 "SF",
1500 "SP1","SP2","SP3","SP4","SP5","SP6",
1501 "ST1","ST2","ST3","ST4",
1503 indpodo = new String[] {
1504 "kein IndiSchl.",
1505 "DFa","DFb",
1506 "DFc",
1510 String[] indischluessel = {
1511 "WS1 a","WS1 b","WS1 c","WS1 d","WS1 e",
1512 "WS2 a","WS2 b","WS2 c","WS2 d","WS2 e","WS2 f","WS2 g",
1513 "EX1 a","EX1 b","EX1 c",
1514 "EX2 a","EX2 b","EX2 c","EX2 d",
1515 "EX3 a","EX3 b","EX3 c","EX3 d","EX4 a",
1516 "CS a","CS b",
1517 "ZN1 a","ZN1 b","ZN1 c",
1518 "ZN2 a","ZN2 b","ZN2 c",
1519 "PN a","PN b","PN c",
1520 "AT1 a","AT1 b","AT1 c",
1521 "AT2 a","AT2 b","AT2 c",
1522 "AT3 a","AT3 b","AT3 c",
1523 "GE a","LY1 a",
1524 "LY1 b","LY2 a","LY3 a",
1525 "SO1 a","SO2 a","SO3 a","SO4 a","SO5 a",
1526 "SB1","SB2","SB3","SB4","SB5","SB6","SB7",
1527 "EN1","EN2","EN3","EN4",
1528 "PS1","PS2","PS3","PS4","PS5",
1529 "ST1","ST2","ST3","ST4",
1530 "SP1","SP2","SP3","SP4","SP5","SP6",
1531 "RE1","RE2",
1532 "SF",
1533 "SC1","SC2"
1538 @Override
1539 public void columnPropertyChange(PropertyChangeEvent arg0) {
1540 // TODO Auto-generated method stub
1541 ////System.out.println("model-listener"+arg0);
1543 @Override
1544 public void columnAdded(TableColumnModelEvent arg0) {
1545 // TODO Auto-generated method stub
1548 @Override
1549 public void columnMarginChanged(ChangeEvent arg0) {
1550 // TODO Auto-generated method stub
1553 @Override
1554 public void columnMoved(TableColumnModelEvent arg0) {
1555 // TODO Auto-generated method stub
1558 @Override
1559 public void columnRemoved(TableColumnModelEvent arg0) {
1560 // TODO Auto-generated method stub
1563 @Override
1564 public void columnSelectionChanged(ListSelectionEvent arg0) {
1565 // TODO Auto-generated method stub
1568 public void holeFormulare(){
1569 new SwingWorker<Void,Void>(){
1570 @Override
1571 protected Void doInBackground() throws Exception {
1572 // TODO Auto-generated method stub
1573 INIFile inif = INITool.openIni(Reha.proghome+"ini/"+Reha.aktIK+"/", "rezept.ini");
1574 int forms = inif.getIntegerProperty("Formulare", "RezeptFormulareAnzahl");
1575 for(int i = 1; i <= forms; i++){
1576 titel.add(inif.getStringProperty("Formulare","RFormularText"+i));
1577 formular.add(inif.getStringProperty("Formulare","RFormularName"+i));
1579 return null;
1582 }.execute();
1587 @SuppressWarnings("unchecked")
1588 @Override
1589 public void actionPerformed(ActionEvent arg0) {
1590 // TODO Auto-generated method stub
1592 String cmd = arg0.getActionCommand();
1594 for(int i = 0; i < 1; i++){
1595 if(cmd.equals("terminplus")){
1596 if(rezGeschlossen()){return;}
1597 try{
1598 Object[] objTerm = RezTools.BehandlungenAnalysieren(Reha.thisClass.patpanel.vecaktrez.get(1),
1599 false,false,false,null,null,null,DatFunk.sHeute()); //hier noch ein Point Object übergeben
1600 //System.out.println("objTerm[0]="+objTerm[0]);
1601 //System.out.println("objTerm[1]="+objTerm[1]);
1603 if(objTerm==null){return;}
1605 if( (Integer)objTerm[1] == RezTools.REZEPT_IST_BEREITS_VOLL){
1607 }else if((Integer)objTerm[1] == RezTools.REZEPT_ABBRUCH){
1608 return;
1609 }else{
1610 Vector<String> vec = new Vector<String>();
1611 vec.add(DatFunk.sHeute());
1612 vec.add("");
1613 vec.add("");
1614 vec.add( ((String)objTerm[0]).split("@")[3]);
1615 dtermm.addRow((Vector<String>)vec.clone());
1616 termineSpeichern();
1617 starteTests();
1618 if( (Integer)objTerm[1] == RezTools.REZEPT_IST_JETZ_VOLL){
1619 try{
1620 RezTools.fuelleVolleTabelle( ((String)Reha.thisClass.patpanel.vecaktrez.get(1)) , Reha.aktUser);
1621 }catch(Exception ex){
1622 JOptionPane.showMessageDialog(null,"Fehler beim Aufruf von 'fuelleVolleTabelle'");
1626 tabaktterm.validate();
1627 int tanzahl = tabaktterm.getRowCount();
1628 anzahlTermine.setText("Anzahl Terimine: "+Integer.toString(tanzahl));
1629 if(tanzahl > 0){
1630 tabaktterm.setRowSelectionInterval(tanzahl-1, tanzahl-1);
1632 SwingUtilities.invokeLater(new Runnable(){
1633 public void run(){
1634 tabaktterm.scrollRowToVisible(tabaktterm.getRowCount());
1638 tabaktterm.validate();
1639 tabaktterm.repaint();
1640 break;
1641 }catch(Exception ex){
1642 ex.printStackTrace();
1646 if(cmd.equals("terminminus")){
1647 if(rezGeschlossen()){return;}
1648 int row = tabaktterm.getSelectedRow();
1649 if(row>=0){
1650 dtermm.removeRow(row);
1651 tabaktterm.validate();
1652 if(tabaktterm.getRowCount() > 0){
1653 tabaktterm.setRowSelectionInterval(tabaktterm.getRowCount()-1, tabaktterm.getRowCount()-1);
1655 anzahlTermine.setText("Anzahl Termine: "+tabaktterm.getRowCount());
1657 new Thread(){
1658 public void run(){
1659 termineSpeichern();
1660 starteTests();
1662 }.start();
1665 break;
1667 if(cmd.equals("terminsortieren")){
1668 if(rezGeschlossen()){return;}
1669 int row = tabaktterm.getRowCount();
1670 if(row > 1){
1672 Vector<Vector<String>> vec = (Vector<Vector<String>>)dtermm.getDataVector().clone();
1674 ////System.out.println("Unsortiert = "+vec);
1676 Comparator<Vector<String>> comparator = new Comparator<Vector<String>>() {
1677 @Override
1678 public int compare(Vector<String> o1, Vector<String> o2) {
1679 String s1 = (String)o1.get(4);
1680 String s2 = (String)o2.get(4);
1681 return s1.compareTo(s2);
1684 Collections.sort(vec,comparator);
1685 dtermm.setRowCount(0);
1686 ////System.out.println("Sortiert = "+vec);
1687 for(int y = 0;y < vec.size();y++){
1688 dtermm.addRow(vec.get(y));
1690 tabaktterm.validate();
1691 new Thread(){
1692 public void run(){
1693 termineSpeichern();
1694 //starteTests();
1695 fuelleTage();
1697 }.start();
1699 break;
1701 if(cmd.equals("rezneu")){
1702 if(!Rechte.hatRecht(Rechte.Rezept_anlegen, true)){
1703 return;
1705 if(Reha.thisClass.patpanel.autoPatid <= 0){
1706 JOptionPane.showMessageDialog(null,"Oh Herr laß halten...\n\n"+
1707 "....und für welchen Patienten wollen Sie ein neues Rezept anlegen....");
1708 return;
1710 // Lemmi 20110101: Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage wenn Ctrl gedrückt ist
1711 //neuanlageRezept(true,"");
1712 //int iCtrlPressed = arg0.CTRL_MASK;
1713 //int iModifier = arg0.getModifiers();
1714 //System.out.println ( "iCtrlPressed=" + iCtrlPressed + ", iModifier=" + iModifier + "");
1716 //neuanlageRezept(true,"", false);
1717 //Kopieren funktioniert mit der aktuellen Version von
1718 //RezNeuanlage.java nicht
1719 boolean bCtrlPressed = ( (arg0.getModifiers() & KeyEvent.CTRL_MASK) == KeyEvent.CTRL_MASK );
1720 boolean bShiftPressed = ( (arg0.getModifiers() & KeyEvent.SHIFT_MASK) == KeyEvent.SHIFT_MASK );
1721 String strModus = "";
1722 if ( bCtrlPressed ) strModus = "KopiereLetztes";
1723 else if ( bShiftPressed ) strModus = "KopiereAngewaehltes";
1724 neuanlageRezept( true,"", strModus );
1726 break;
1728 if(cmd.equals("rezedit")){
1729 if(aktPanel.equals("leerPanel")){
1730 JOptionPane.showMessageDialog(null,"Oh Herr laß halten...\n\n"+
1731 "....und welches der nicht vorhandenen Rezepte möchten Sie bitteschön ändern....");
1732 return;
1734 if(rezGeschlossen()){return;}
1735 neuanlageRezept(false,"", "");
1736 break;
1738 if(cmd.equals("rezdelete")){
1739 if(!Rechte.hatRecht(Rechte.Rezept_delete, true)){
1740 return;
1742 if(aktPanel.equals("leerPanel")){
1743 JOptionPane.showMessageDialog(null,"Oh Herr laß halten...\n\n"+
1744 "....und welches der nicht vorhandenen Rezepte möchten Sie bitteschön löschen....");
1745 return;
1747 if(rezGeschlossen()){return;}
1748 int currow = tabaktrez.getSelectedRow();
1749 //int anzrow = tabaktrez.getRowCount();
1750 if(currow == -1){
1751 JOptionPane.showMessageDialog(null,"Kein Rezept zum -> löschen <- ausgewählt");
1752 return;
1754 String reznr = (String)tabaktrez.getValueAt(currow, 0);
1755 String rezid = (String)tabaktrez.getValueAt(currow, idInTable);
1756 int frage = JOptionPane.showConfirmDialog(null,"Wollen Sie das Rezept "+reznr+" wirklich löschen?","Wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1757 if(frage == JOptionPane.NO_OPTION){
1758 return;
1760 String sqlcmd = "delete from verordn where id='"+rezid+"'";
1761 SqlInfo.sqlAusfuehren(sqlcmd);
1762 sqlcmd = "delete from fertige where id='"+rezid+"'";
1763 new ExUndHop().setzeStatement(sqlcmd);
1764 RezTools.loescheRezAusVolleTabelle(reznr);
1765 aktTerminBuffer.remove(currow);
1767 currow = TableTool.loescheRow(tabaktrez, Integer.valueOf(currow));
1768 int uebrig = tabaktrez.getRowCount();
1770 anzahlRezepte.setText("Anzahl Rezepte: "+Integer.toString(uebrig));
1771 Reha.thisClass.patpanel.multiTab.setTitleAt(0,macheHtmlTitel(uebrig,"aktuelle Rezepte"));
1772 if(uebrig <= 0){
1773 holeRezepte(Reha.thisClass.patpanel.patDaten.get(29),"");
1774 }else{
1778 /******************************/
1779 if(cmd.equals("rezeptgebuehr")){
1780 if(!Rechte.hatRecht(Rechte.Rezept_gebuehren, true)){
1781 return;
1783 rezeptGebuehr();
1785 if(cmd.equals("barcode")){
1786 doBarcode();
1789 if(cmd.equals("arztbericht")){
1790 if(!Rechte.hatRecht(Rechte.Rezept_thbericht, true)){
1791 return;
1793 // hier muß noch getestet werden:
1794 // 1 ist es eine Neuanlage oder soll ein bestehender Ber. editiert werden
1795 // 2 ist ein Ber. überhaupt angefordert
1796 // 3 gibt es einen Rezeptbezug oder nicht
1797 if(aktPanel.equals("leerPanel")){
1798 JOptionPane.showMessageDialog(null,"Ich sag jetz nix....\n\n"+
1799 "....außer - und für welches der nicht vorhandenen Rezepte wollen Sie einen Therapiebericht erstellen....");
1800 return;
1804 boolean neuber = true;
1805 int berid = 0;
1806 String xreznr;
1807 String xverfasser = "";
1808 int currow = tabaktrez.getSelectedRow();
1809 if(currow >=0){
1810 xreznr = (String)tabaktrez.getValueAt(currow,0);
1811 }else{
1812 xreznr = "";
1814 int iexistiert = Reha.thisClass.patpanel.berichte.berichtExistiert(xreznr);
1815 if(iexistiert > 0){
1816 xverfasser = Reha.thisClass.patpanel.berichte.holeVerfasser();
1817 neuber = false;
1818 berid = iexistiert;
1819 String meldung = "<html>Für das Rezept <b>"+xreznr+"</b> existiert bereits ein Bericht.<br>Vorhandener Bericht wird jetzt geöffnet</html>";
1820 JOptionPane.showMessageDialog(null, meldung);
1822 ////System.out.println("ArztberichtFenster erzeugen!");
1823 final boolean xneuber = neuber;
1824 final String xxreznr = xreznr;
1825 final int xberid = berid;
1826 final int xcurrow = currow;
1827 final String xxverfasser = xverfasser;
1828 new SwingWorker<Void,Void>(){
1829 @Override
1830 protected Void doInBackground() throws Exception {
1831 try{
1832 ArztBericht ab = new ArztBericht(null,"arztberichterstellen",xneuber,xxreznr,xberid,0,xxverfasser,"",xcurrow);
1833 ab.setModal(true);
1834 ab.setLocationRelativeTo(null);
1835 ab.toFront();
1836 ab.setVisible(true);
1837 ab = null;
1838 }catch(Exception ex){
1839 ex.printStackTrace();
1840 JOptionPane.showMessageDialog(null, ex.getMessage());
1842 return null;
1845 }.execute();
1847 if(cmd.equals("ausfallrechnung")){
1848 if(!Rechte.hatRecht(Rechte.Rezept_ausfallrechnung, true)){
1849 return;
1851 ausfallRechnung();
1853 if(cmd.equals("statusfrei")){
1854 if(!Rechte.hatRecht(Rechte.Rezept_editvoll, true)){
1855 return;
1857 if(rezGeschlossen()){return;}
1858 int currow = tabaktrez.getSelectedRow();
1859 String xreznr;
1860 if(currow >=0){
1861 xreznr = (String)tabaktrez.getValueAt(currow,0);
1862 String xcmd = "update verordn set zzstatus='"+0+"', befr='T',rez_bez='F' where rez_nr='"+xreznr+"' LIMIT 1";
1863 SqlInfo.sqlAusfuehren(xcmd);
1864 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[0],currow,1);
1865 tabaktrez.validate();
1866 doVectorAktualisieren(new int[]{12,14,39},new String[] {"T","F","0"});
1867 SqlInfo.sqlAusfuehren("delete from kasse where rez_nr='"+xreznr+"' LIMIT 1");
1871 if(cmd.equals("statusbezahlt")){
1872 if(!Rechte.hatRecht(Rechte.Rezept_editvoll, true)){
1873 return;
1875 if(rezGeschlossen()){return;}
1876 int currow = tabaktrez.getSelectedRow();
1877 String xreznr;
1878 if(currow >=0){
1879 xreznr = (String)tabaktrez.getValueAt(currow,0);
1880 String xcmd = "update verordn set zzstatus='"+1+"', befr='F',rez_bez='T' where rez_nr='"+xreznr+"' LIMIT 1";
1881 SqlInfo.sqlAusfuehren(xcmd);
1882 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[1],currow,1);
1883 tabaktrez.validate();
1884 doVectorAktualisieren(new int[]{12,14,39},new String[] {"F","T","1"});
1888 if(cmd.equals("statusnichtbezahlt")){
1889 if(!Rechte.hatRecht(Rechte.Rezept_editvoll, true)){
1890 return;
1892 if(rezGeschlossen()){return;}
1893 int currow = tabaktrez.getSelectedRow();
1894 String xreznr;
1895 if(currow >=0){
1896 xreznr = (String)tabaktrez.getValueAt(currow,0);
1897 String xcmd = "update verordn set zzstatus='"+2+"', befr='F', rez_geb='0.00',rez_bez='F' where rez_nr='"+xreznr+"' LIMIT 1";
1898 SqlInfo.sqlAusfuehren(xcmd);
1899 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[2],currow,1);
1900 tabaktrez.validate();
1901 doVectorAktualisieren(new int[]{12,13,14,39},new String[] {"F","0.00","F","2"});
1902 SqlInfo.sqlAusfuehren("delete from kasse where rez_nr='"+xreznr+"' LIMIT 1");
1907 // Lemmi 201110106: Knopf zum Kopieren des aktiven Rezeptes zugefügt
1908 if(cmd.equals("KopiereAngewaehltes")) {
1909 neuanlageRezept( true,"", "KopiereAngewaehltes" );
1912 // Lemmi 201110113: Knopf zum Kopieren des jüngsten Rezeptes zugefügt
1913 if(cmd.equals("KopiereLetztes")) {
1914 neuanlageRezept( true,"", "KopiereLetztes" );
1917 if(cmd.equals("rezeptbrief")){
1918 formulareAuswerten();
1920 if(cmd.equals("rezeptabschliessen")){
1921 rezeptAbschliessen();
1923 if(cmd.equals("werkzeuge")){
1924 new ToolsDlgAktuelleRezepte("",aktrbut[3].getLocationOnScreen());
1926 if(cmd.equals("deletebehandlungen")){
1927 doDeleteBehandlungen();
1929 if(cmd.equals("angleichenbehandlungen")){
1930 doAngleichenBehandlungen();
1933 // Lemmi 20110105: aktuellen Behandler auf alle leeren Behandler kopieren
1934 if(cmd.equals("behandlerkopieren")){
1935 doBehandlerKopieren();
1937 if(cmd.equals("RezeptTeilen")){
1938 JOptionPane.showMessageDialog(null, "<html>Diese Funktion ist noch nicht implementiert.<br><br>Bitte wenden Sie sich "+
1939 "im Forum unter www.Thera-Pi.org an Teilnehmern <b>letzter3</b>!<br>Das wäre nämlich seine "+
1940 "Lieblingsfunktion - so es sie gäbe....<br><br><html>");
1945 public static String getActiveRezNr(){
1946 int row = Reha.thisClass.patpanel.aktRezept.tabaktrez.getSelectedRow();
1947 if(row >= 0){
1948 return Reha.thisClass.patpanel.aktRezept.tabaktrez.getValueAt(row, 0).toString();
1950 return null;
1952 public void doVectorAktualisieren(int[]elemente,String[] werte){
1953 for(int i = 0; i < elemente.length;i++){
1954 Reha.thisClass.patpanel.vecaktrez.set(elemente[i],werte[i]);
1958 // Lemmi 20110105: aktuellen Behandler auf alle leeren Behandler kopieren
1959 // Neue Routine
1960 // nimmt den Behandler aus der aktuell markierten Zeile und kopiert ihn auf alle leeren Behandlerfelder
1961 private void doBehandlerKopieren(){
1962 if(this.tabaktterm.getRowCount() <= 0){
1963 return;
1966 // aktuell gewählte Zeile finden - mit Sicherung, wenn keine angewählt worden ist !
1967 int iPos = tabaktterm.getSelectedRow();
1968 if ( iPos < 0 || iPos >= tabaktterm.getRowCount() )
1969 return;
1971 // Behandler aus aktuell angewähler Zeile holen
1972 String strBehandler = tabaktterm.getStringAt(tabaktterm.getSelectedRow(), 1);
1973 if ( !strBehandler.isEmpty() ) {
1974 for (int i = 0; i < tabaktterm.getRowCount(); i++ ) {
1975 if ( tabaktterm.getStringAt(i, 1).isEmpty() ) // nur wenn der Behandler leer ist eintragen.
1976 tabaktterm.setValueAt(strBehandler, i, 1);
1978 termineSpeichern();
1982 private void doDeleteBehandlungen(){
1983 if(this.tabaktterm.getRowCount() <= 0){
1984 return;
1986 //String akttermine = this.aktTerminBuffer.get(aktuellAngezeigt);
1987 Vector<Vector<String>> vec = RezTools.macheTerminVector(this.aktTerminBuffer.get(aktuellAngezeigt));
1988 //System.out.println(vec);
1989 dtermm.setRowCount(0);
1990 for(int i = 0; i < vec.size();i++){
1991 vec.get(i).set(3,"");
1992 dtermm.addRow(vec.get(i));
1994 termineSpeichern();
1997 private void doAngleichenBehandlungen(){
1998 if(this.tabaktterm.getRowCount() <= 0){
1999 return;
2001 //String akttermine = this.aktTerminBuffer.get(aktuellAngezeigt);
2002 Vector<Vector<String>> vec = RezTools.macheTerminVector(this.aktTerminBuffer.get(aktuellAngezeigt));
2003 //System.out.println(vec);
2004 dtermm.setRowCount(0);
2005 for(int i = 0; i < vec.size();i++){
2006 vec.get(i).set(3, (((String)Reha.thisClass.patpanel.vecaktrez.get(48)).trim().equals("") ? "" : (String)Reha.thisClass.patpanel.vecaktrez.get(48)) +
2007 (((String)Reha.thisClass.patpanel.vecaktrez.get(49)).trim().equals("") ? "" : ","+(String)Reha.thisClass.patpanel.vecaktrez.get(49)) +
2008 (((String)Reha.thisClass.patpanel.vecaktrez.get(50)).trim().equals("") ? "" : ","+(String)Reha.thisClass.patpanel.vecaktrez.get(50)) +
2009 (((String)Reha.thisClass.patpanel.vecaktrez.get(51)).trim().equals("") ? "" : ","+(String)Reha.thisClass.patpanel.vecaktrez.get(51))
2011 dtermm.addRow(vec.get(i));
2013 termineSpeichern();
2017 private void rezeptAbschliessen(){
2018 try{
2019 if(this.neuDlgOffen){return;}
2020 int pghmr = Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(41));
2021 String disziplin = StringTools.getDisziplin(Reha.thisClass.patpanel.vecaktrez.get(1));
2022 //if(SystemConfig.vHMRAbrechnung.get(pghmr-1) < 1){
2023 if(SystemPreislisten.hmHMRAbrechnung.get(disziplin).get(pghmr-1) < 1){
2024 String meldung = "Die Tarifgruppe dieser Verordnung unterliegt nicht den Heilmittelrichtlinien.\n\n"+
2025 "Abschließen des Rezeptes ist nicht erforderlich";
2026 JOptionPane.showMessageDialog(null,meldung);
2027 return;
2029 doAbschlussTest();
2030 if(Reha.thisClass.abrechnungpanel != null){
2031 String[] diszis = {"Physio","Massage","Ergo","Logo","Podo"};
2032 String aktDisziplin = diszis[Reha.thisClass.abrechnungpanel.cmbDiszi.getSelectedIndex()];
2033 if(RezTools.putRezNrGetDisziplin(Reha.thisClass.patpanel.vecaktrez.get(1)).equals(aktDisziplin)){
2034 Reha.thisClass.abrechnungpanel.einlesenErneuern();
2037 }catch(Exception ex){
2038 ex.printStackTrace();
2041 private void ausfallRechnung(){
2042 new SwingWorker<Void,Void>(){
2043 @Override
2044 protected Void doInBackground() throws Exception {
2045 //System.out.println("in Ausfallrechnung");
2046 AusfallRechnung ausfall = new AusfallRechnung( aktrbut[3].getLocationOnScreen() );
2047 ausfall.setModal(true);
2048 ausfall.toFront();
2049 ausfall.setVisible(true);
2050 ausfall = null;
2051 return null;
2053 }.execute();
2055 private void rezeptGebuehr(){
2056 if(aktPanel.equals("leerPanel")){
2057 JOptionPane.showMessageDialog(null,"Ich sag jetz nix....\n\n"+
2058 "....außer - und von welchem der nicht vorhandenen Rezepte wollen Sie Rezeptgebühren kassieren....");
2059 return;
2061 int currow = tabaktrez.getSelectedRow();
2062 //int anzrow = tabaktrez.getRowCount();
2063 if(currow == -1){
2064 JOptionPane.showMessageDialog(null,"Kein Rezept zum -> kassieren <- ausgewählt");
2065 return;
2067 doRezeptGebuehr( aktrbut[3].getLocationOnScreen() );
2070 private void doAbschlussTest(){
2071 int currow = tabaktrez.getSelectedRow();
2072 if(currow < 0){return;}
2073 if(dtblm.getValueAt(currow,5)==null){
2074 // derzeit offen also abschliessen
2075 if(!Rechte.hatRecht(Rechte.Rezept_lock, true)){
2076 return;
2079 int anzterm = dtermm.getRowCount();
2080 if(anzterm <= 0){return;}
2081 String vgldat1 = (String) tabaktrez.getValueAt(currow, 2);
2082 String vgldat2 = (String) dtermm.getValueAt(0,0);
2083 String vgldat3 = (String) tabaktrez.getValueAt(currow, 4);
2084 String vglreznum = tabaktrez.getValueAt(currow,0).toString();
2085 //System.out.println(vgldat1+" / "+vgldat2);
2086 /***Kann ausgeschaltet werden wenn die HMRCheck-Tabelle vollständig befüll ist**/
2087 // ist ohnehin nur halblebig
2088 int dummypeisgruppe = Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(41))-1;
2090 long differenz = HMRCheck.hmrTageErmitteln(dummypeisgruppe,vglreznum,vgldat1,vgldat2,vgldat3);
2091 if(differenz < 0){
2092 JOptionPane.showMessageDialog(null, "Behandlungsbeginn ist vor dem Rezeptdatum!");
2093 return;
2094 }else if(differenz > 10){
2095 if(DatFunk.TageDifferenz(vgldat3, vgldat2) > 0){
2096 int anfrage = JOptionPane.showConfirmDialog(null, "Behandlungsbeginn länger als 10 Tage nach Ausstellung des Rezeptes!!!\nSpätester Behandlungsbeginn wurde ebenfalls überschritten\n\nRezept trotzdem abschließen", "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2097 if(anfrage != JOptionPane.YES_OPTION){
2098 return;
2099 }else{
2102 }else if(differenz <= 10 && differenz >= 0){
2103 if(DatFunk.TageDifferenz(vgldat3, vgldat2) > 0){
2104 int anfrage = JOptionPane.showConfirmDialog(null, "Behandlungsbeginn nach der Angabe --> spätester Beginn, Frist ist somit überschritten.\n\nRezept trotzdem abschließen", "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2105 if(anfrage != JOptionPane.YES_OPTION){
2106 return;
2107 }else{
2112 /***/
2113 if(Reha.thisClass.patpanel.patDaten.get(23).trim().length() != 5){
2114 JOptionPane.showMessageDialog(null, "Die im Patientenstamm zugewiesene Postleitzahl ist fehlerhaft");
2115 return;
2117 if(Reha.thisClass.patpanel.patDaten.get(14).trim().equals("")){
2118 JOptionPane.showMessageDialog(null, "Die im Patientenstamm zugewiesene Krankenkasse hat keine Kassennummer");
2119 return;
2121 if(Reha.thisClass.patpanel.patDaten.get(15).trim().equals("")){
2122 JOptionPane.showMessageDialog(null, "Der Mitgliedsstatus fehlt im Patientenstamm, bitte eintragen");
2123 return;
2125 if("135".indexOf(Reha.thisClass.patpanel.patDaten.get(15).substring(0,1)) < 0){
2126 JOptionPane.showMessageDialog(null, "Der im Patientenstamm vermerkte Mitgliedsstatus ist ungültig\n\n"+
2127 "Fehlerhafter Status = "+Reha.thisClass.patpanel.patDaten.get(15)+"\n");
2128 return;
2130 if(Reha.thisClass.patpanel.patDaten.get(16).trim().equals("")){
2131 JOptionPane.showMessageDialog(null, "Die Krankenkassen-Mitgliedsnummer fehlt im Patientenstamm, bitte eintragen");
2132 return;
2134 if(!Reha.thisClass.patpanel.patDaten.get(68).trim().equals(
2135 Reha.thisClass.patpanel.vecaktrez.get(37))){
2136 JOptionPane.showMessageDialog(null, "ID der Krankenkasse im Patientenstamm paßt nicht zu der ID der Krankenkasse im Rezept");
2137 return;
2140 /*********************/
2141 String diszi = RezTools.putRezNrGetDisziplin(Reha.thisClass.patpanel.vecaktrez.get(1));
2142 String preisgruppe = Reha.thisClass.patpanel.vecaktrez.get(41);
2144 if(! doTageTest(vgldat3,vgldat2,anzterm,diszi,Integer.parseInt(preisgruppe)-1)){return;}
2146 Vector<Vector<String>> doublette = null;
2147 if( ((doublette=doDoublettenTest(anzterm)).size() > 0) ){
2148 String msg = "<html><b><font color='#ff0000'>Achtung!</font><br><br>Ein oder mehrere Behandlungstage wurden in anderen Rezepten entdeckt/abgerechnet</b><br><br>";
2149 for(int i = 0; i < doublette.size();i++){
2150 msg = msg+"Behandlungstag: "+doublette.get(i).get(1)+" - enthalten in Rezept: "+doublette.get(i).get(0)+" - Standort: "+doublette.get(i).get(2)+"<br>";
2152 msg = msg+"<br><br>Wollen Sie das Rezept trotzdem abschließen?</html>";
2153 int frage = JOptionPane.showConfirmDialog(null, msg, "Behandlungsdaten in anderen Rezepten erfaßt",JOptionPane.YES_NO_OPTION);
2154 if(frage!=JOptionPane.YES_OPTION){
2155 return;
2160 /*********************/
2161 //String diszi = RezTools.putRezNrGetDisziplin(Reha.thisClass.patpanel.vecaktrez.get(1));
2162 //String preisgruppe = Reha.thisClass.patpanel.vecaktrez.get(41);
2164 int idtest = 0;
2165 String indi = Reha.thisClass.patpanel.vecaktrez.get(44);
2166 if(indi.equals("") || indi.contains("kein IndiSchl.")){
2167 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>");
2168 return;
2170 if(Reha.thisClass.patpanel.vecaktrez.get(71).trim().length() > 0){
2171 //für die Suche alles entfernen das nicht in der icd10-Tabelle aufgeführt sein kann
2172 //String suchenach = Reha.thisClass.patpanel.vecaktrez.get(71).trim();
2173 String String1 = Reha.thisClass.patpanel.vecaktrez.get(71).trim().substring(0,1).toUpperCase();
2174 String String2 = Reha.thisClass.patpanel.vecaktrez.get(71).trim().substring(1).toUpperCase().replace(" ", "").replace("*", "").replace("!", "").replace("+","").replace("R", "").replace("L","").replace("B","").replace("G","").replace("V","").replace("Z","");;
2175 String suchenach = String1+String2;
2176 //suchenach = suchenach.replace(" ", "").replace("*", "").replace("!", "").replace("R", "").replace("L","").replace("B","").replace("G","").replace("V","").replace("Z","");
2177 if(SqlInfo.holeEinzelFeld("select id from icd10 where schluessel1 like '"+suchenach+"%' LIMIT 1").equals("")){
2178 //if(SqlInfo.holeEinzelFeld("select id from icd10 where schluessel1 like '"+suchenach+"%' LIMIT 1").equals("")){
2180 int frage = JOptionPane.showConfirmDialog(null, "<html>Achtung!!<br><br>Der ICD-10 Code <b>"+jtf[cICD10].getText().trim()+
2181 "</b> existiert nicht!<br>"+
2182 "Wollen Sie jetzt das ICD-10-Tool starten?<br><br></html>", "falscher ICD-10",JOptionPane.YES_NO_OPTION);
2183 if(frage==JOptionPane.YES_OPTION){
2184 new LadeProg(Reha.proghome+"ICDSuche.jar"+" "+Reha.proghome+" "+Reha.aktIK);
2187 int frage = JOptionPane.showConfirmDialog(null, "<html><b>Der eingetragene ICD-10-Code ist falsch: <font color='#ff0000'>"+
2188 Reha.thisClass.patpanel.vecaktrez.get(71).trim()+"</font></b><br>"+
2189 "HMR-Check nicht möglich!<br><br>"+
2190 "Wollen Sie jetzt das ICD-10-Tool starten?<br><br></html>", "falscher ICD-10",JOptionPane.YES_NO_OPTION);
2191 if(frage==JOptionPane.YES_OPTION){
2192 new LadeProg(Reha.proghome+"ICDSuche.jar"+" "+Reha.proghome+" "+Reha.aktIK);
2194 return;
2198 indi = indi.replace(" ", "");
2199 Vector<Integer> anzahlen = new Vector<Integer>();
2200 Vector<String> hmpositionen = new Vector<String>();
2202 String position = "";
2203 String[] diszis = {"Physio","Massage","Ergo","Logo","Reha"};
2204 List<String> list = Arrays.asList(diszis);
2205 for(int i = 2;i <= 5;i++ ){
2206 try{
2207 idtest = Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(6+i));
2208 }catch(Exception ex){
2209 idtest = 0;
2211 if(idtest > 0){
2212 try{
2213 anzahlen.add( Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(1+i)) );
2214 }catch(Exception ex){
2215 anzahlen.add(0);
2217 try{
2218 position = RezTools.getPosFromID(Integer.toString(idtest),preisgruppe , SystemPreislisten.hmPreise.get(diszi).get(Integer.parseInt(preisgruppe)-1) );
2219 hmpositionen.add(position);
2220 }catch(Exception ex){
2221 hmpositionen.add("");
2227 System.out.println("Anzahlen="+anzahlen);
2228 System.out.println("Positionen="+hmpositionen);
2229 System.out.println("Disziplin="+diszi);
2230 System.out.println("Preisgruppe"+preisgruppe);
2231 System.out.println("Preisvector"+SystemPreislisten.hmPreise.get(diszi).get(Integer.parseInt(preisgruppe)-1));
2233 if(hmpositionen.size() > 0){
2234 boolean checkok = new HMRCheck(
2235 indi,
2236 list.indexOf(diszi),
2237 anzahlen,hmpositionen,
2238 Integer.parseInt(preisgruppe)-1,
2239 SystemPreislisten.hmPreise.get(diszi).get(Integer.parseInt(preisgruppe)-1),
2240 Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(27)),
2241 (Reha.thisClass.patpanel.vecaktrez.get(1)),
2242 DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.vecaktrez.get(2)),
2243 DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.vecaktrez.get(40))
2244 ).check();
2245 //System.out.println("Rückgabewert des HMR-Checks="+checkok);
2246 if(!checkok){
2247 int anfrage = JOptionPane.showConfirmDialog(null, "Das Rezept entspricht nicht den geltenden Heilmittelrichtlinien\nWollen Sie diesen Rezept trotzdem abschließen?", "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2248 if(anfrage != JOptionPane.YES_OPTION){
2249 return;
2252 }else{
2253 JOptionPane.showMessageDialog(null, "Keine Behandlungspositionen angegeben, HMR-Check nicht möglich!!!");
2254 return;
2256 /*********************/
2257 /********************************************************************************/
2258 dtblm.setValueAt(Reha.thisClass.patpanel.imgrezstatus[1],currow,5);
2259 doAbschliessen();
2260 String xcmd = "update verordn set abschluss='T' where id='"+Reha.thisClass.patpanel.vecaktrez.get(35)+"' LIMIT 1";
2261 SqlInfo.sqlAusfuehren(xcmd);
2262 Reha.thisClass.patpanel.vecaktrez.set(62,(String)"T");
2263 Vector<Vector<String>> kdat = SqlInfo.holeFelder("select ik_kasse,ik_kostent from kass_adr where id='"+
2264 Reha.thisClass.patpanel.vecaktrez.get(37)+"' LIMIT 1");
2265 String ikkass="",ikkost="",kname="",rnr="",patint="";
2266 if(kdat.size()>0){
2267 ikkass = kdat.get(0).get(0);
2268 ikkost = kdat.get(0).get(1);
2269 }else{
2270 ikkass = "";
2271 ikkost = "";
2273 kname = (String) Reha.thisClass.patpanel.vecaktrez.get(36);
2274 patint=(String) Reha.thisClass.patpanel.vecaktrez.get(0);
2275 rnr = (String) Reha.thisClass.patpanel.vecaktrez.get(1);
2276 String cmd = "insert into fertige set ikktraeger='"+ikkost+"', ikkasse='"+ikkass+"', "+
2277 "name1='"+kname+"', rez_nr='"+rnr+"', pat_intern='"+patint+"', rezklasse='"+rnr.substring(0,2)+"'";
2278 SqlInfo.sqlAusfuehren(cmd);
2279 JComponent abrech1 = AktiveFenster.getFensterAlle("Abrechnung-1");
2280 /********************************************************************************/
2282 if(abrech1 != null){
2283 Reha.thisClass.abrechnungpanel.doEinlesen(Reha.thisClass.abrechnungpanel.getaktuellerKassenKnoten());
2286 }else{
2287 if(!Rechte.hatRecht(Rechte.Rezept_unlock, true)){
2288 return;
2290 // bereits abgeschlossen muß geöffnet werden
2291 dtblm.setValueAt(Reha.thisClass.patpanel.imgrezstatus[0],currow,5);
2292 doAufschliessen();
2293 String xcmd = "update verordn set abschluss='F' where id='"+Reha.thisClass.patpanel.vecaktrez.get(35)+"' LIMIT 1";
2294 Reha.thisClass.patpanel.vecaktrez.set(62,(String)"F");
2295 SqlInfo.sqlAusfuehren(xcmd);
2296 ////System.out.println(xcmd);
2297 String rnr = (String) Reha.thisClass.patpanel.vecaktrez.get(1);
2298 String cmd = "delete from fertige where rez_nr='"+rnr+"' LIMIT 1";
2299 SqlInfo.sqlAusfuehren(cmd);
2300 JComponent abrech1 = AktiveFenster.getFensterAlle("Abrechnung-1");
2301 if(abrech1 != null){
2302 Reha.thisClass.abrechnungpanel.doEinlesen(Reha.thisClass.abrechnungpanel.getaktuellerKassenKnoten());
2306 private Vector<Vector<String>> doDoublettenTest(int anzahl){
2307 Vector<Vector<String>> doublette = new Vector<Vector<String>>();
2309 try{
2311 Vector<Vector<String>> tests = null;
2312 Vector<String> dummy = new Vector<String>();
2313 String lastrezdate = DatFunk.sDatInSQL(DatFunk.sDatPlusTage(DatFunk.sDatInDeutsch((String) Reha.thisClass.patpanel.vecaktrez.get(2)),-90));
2314 String diszi = ((String) Reha.thisClass.patpanel.vecaktrez.get(1)).substring(0,2);
2315 String cmd = "select rez_datum,rez_nr,termine from verordn where pat_intern = '"+
2316 (String) Reha.thisClass.patpanel.vecaktrez.get(0)+"' and rez_nr != '"+(String) Reha.thisClass.patpanel.vecaktrez.get(1)+"'";
2318 tests = SqlInfo.holeFelder(cmd);
2319 //zuerst in den aktuellen Rezepten nachsehen
2320 //wir holen uns Rezeptnummer,Rezeptdatum und die Termine
2321 //Anzahl der Termine
2322 //dtermm.getValueAt(i-1,0);
2323 //1. for next für jeden einzelnen Tag des Rezeptes, darin enthalten eine neue for next für alle vorhandenen Rezepte
2324 //2. nur dieselbe Disziplin überpüfen
2325 //3. dann durch alle Rezepte hangeln und testen ob irgend ein Tag in den Terminen enthalten ist
2327 for(int i = 0; i < tests.size();i++){
2328 if(tests.get(i).get(1).startsWith(diszi)){
2329 for(int i2 = 0; i2 < anzahl; i2++){
2330 if(tests.get(i).get(2).contains(dtermm.getValueAt(i2,0).toString())){
2331 dummy.clear();
2332 dummy.add(tests.get(i).get(1));
2333 dummy.add(dtermm.getValueAt(i2,0).toString());
2334 dummy.add("aktuelle Rezepte");
2335 doublette.add( (Vector<String>)dummy.clone() );
2340 //dann in der Historie
2341 //1. for next für jeden einzelnen Tag, darin enthalten eine neue for next für alle vorhandenen Rezepte
2342 //2. nur dieselbe Disziplin überpüfen
2343 //3. dann durch alle Rezepte hangeln und testen ob irgend ein Tag in den Terminen enthalten ist
2344 //4. dann testen ob der Rezeptdatumsvergleich > als 3 Monate trifft dies zu abbruch
2345 cmd = "select rez_datum,rez_nr,termine from lza where pat_intern = '"+
2346 (String) Reha.thisClass.patpanel.vecaktrez.get(0)+"' and rez_nr != '"+(String) Reha.thisClass.patpanel.vecaktrez.get(1)+"' and rez_datum >= '"+lastrezdate+"'";
2348 tests = SqlInfo.holeFelder(cmd);
2349 for(int i = 0; i < tests.size();i++){
2350 if(tests.get(i).get(1).startsWith(diszi)){
2351 for(int i2 = 0; i2 < anzahl; i2++){
2352 if(tests.get(i).get(2).contains(dtermm.getValueAt(i2,0).toString())){
2353 dummy.clear();
2354 dummy.add(tests.get(i).get(1));
2355 dummy.add(dtermm.getValueAt(i2,0).toString());
2356 dummy.add("Historie");
2357 doublette.add( (Vector<String>)dummy.clone() );
2362 }catch(Exception ex){
2363 ex.printStackTrace();
2364 JOptionPane.showMessageDialog(null,"Fehler im Doublettentest\n"+ex.getMessage());
2367 /*****************/
2368 return doublette;
2370 private boolean doTageTest(String latestdat,String starttag,int tageanzahl,String disziplin, int preisgruppe){
2371 String vglalt;
2372 String vglneu;
2373 String kommentar;
2374 String ret;
2375 //Frist zwischen RezDat (bzw. spätester BehBeginn) und tatsächlichem BehBeginn
2376 int fristbeginn = (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(disziplin).get(0)).get(preisgruppe);
2377 //Frist zwischen den Behjandlungen
2378 int fristbreak = (Integer)((Vector<?>)SystemPreislisten.hmFristen.get(disziplin).get(2)).get(preisgruppe);
2379 //Beginn-Berechnung nach Kalendertagen
2380 boolean ktagebeginn = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(disziplin).get(1)).get(preisgruppe);
2381 //Unterbrechung-Berechnung nach Kalendertagen
2382 boolean ktagebreak = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(disziplin).get(3)).get(preisgruppe);
2383 //Beginnfrist: Samstag als Werktag werten (wirk nur bei Werktagregel)
2384 boolean beginnsamstag = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(disziplin).get(4)).get(preisgruppe);
2385 //Unterbrechungsfrist: Samstag als Werktag werten (wirk nur bei Werktagregel)
2386 boolean breaksamstag = (Boolean)((Vector<?>)SystemPreislisten.hmFristen.get(disziplin).get(5)).get(preisgruppe);
2387 for(int i = 0; i < tageanzahl;i++){
2388 if(i > 0){
2389 // hier die neue Prüfung einbauen Unterbrechungstest
2390 vglalt = (String) dtermm.getValueAt(i-1,0);
2391 vglneu = (String) dtermm.getValueAt(i,0);
2392 if(vglalt.equals(vglneu)){
2393 JOptionPane.showMessageDialog(null,"Zwei identische Behandlungstage sind nicht zulässig - Abschluß des Rezeptes fehlgeschlagen");
2394 return false;
2396 if(DatFunk.TageDifferenz(vglalt, vglneu) < 0 ){
2397 JOptionPane.showMessageDialog(null,"Bitte sortieren Sie zuerst die Behandlungstage - Abschluß des Rezeptes fehlgeschlagen");
2398 return false;
2401 kommentar = (String) dtermm.getValueAt(i,2);
2403 //Wenn nach Kalendertagen ermittelt werden soll
2404 if(ktagebreak){
2405 //System.out.println("Kalendertage zwischen den Behandlungen = "+DatFunk.TageDifferenz(vglalt, vglneu)+"\n"+
2406 //"erlaubt sind "+fristbreak);
2407 if( (DatFunk.TageDifferenz(vglalt, vglneu) > fristbreak) && (kommentar.trim().equals("")) ){
2408 ret = rezUnterbrechung(true,"",i+1);// Unterbrechungsgrund
2409 if(ret.equals("")){
2410 return false;
2411 }else{
2412 dtermm.setValueAt(ret,i,2);
2415 }else{
2416 //System.out.println("Differenz zwischen dem letzt möglichen und dem tatsächlichen Zeitaum\n"+
2417 //HMRCheck.hmrTageDifferenz(vglalt,vglneu,fristbreak,breaksamstag));
2418 if(HMRCheck.hmrTageDifferenz(vglalt,vglneu,fristbreak,breaksamstag) > 0 && kommentar.trim().equals("")){
2419 ret = rezUnterbrechung(true,"",i+1);// Unterbrechungsgrund
2420 if(ret.equals("")){
2421 return false;
2422 }else{
2423 dtermm.setValueAt(ret,i,2);
2428 }else{
2430 //hier die neue Prüfung einbauen Frist bis erste Behandlung
2431 if(ktagebeginn){ //Frist bis Rezeptbeginn in Kalendertagen
2432 if(DatFunk.TageDifferenz(latestdat, starttag) < 0){
2433 System.out.println("Letzter Behandlungsbeginn wurde überschritten");
2435 }else{//Frist bis Rezeptbeginn in Werktagen
2442 return true;
2444 private boolean rezGeschlossen(){
2445 if(Reha.thisClass.patpanel.vecaktrez.get(62).equals("T")){
2446 JOptionPane.showMessageDialog(null,"Das Rezept ist bereits abgeschlossen\nÄnderungen sind nur noch durch berechtigte Personen möglich");
2447 return true;
2448 }else{
2449 return false;
2452 private void privatRechnung(){
2453 try{
2454 //Preisgruppe ermitteln
2455 int preisgruppe = 0;
2456 KasseTools.constructKasseHMap(Reha.thisClass.patpanel.vecaktrez.get(37));
2457 try{
2458 preisgruppe = Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(41));
2459 }catch(Exception ex){
2460 JOptionPane.showMessageDialog(null,"Fehler in Preisgruppe "+ex.getMessage());
2461 ex.printStackTrace();
2463 Point pt = aktrbut[3].getLocationOnScreen();
2464 pt.x = pt.x-75;
2465 pt.y = pt.y+30;
2466 AbrechnungPrivat abrechnungPrivat = new AbrechnungPrivat(Reha.thisFrame,"Privat-/BG-/Nachsorge-Rechnung erstellen",-1,preisgruppe);
2467 abrechnungPrivat.setLocation(pt);
2468 abrechnungPrivat.pack();
2469 abrechnungPrivat.setModal(true);
2470 abrechnungPrivat.setVisible(true);
2471 int rueckgabe = abrechnungPrivat.rueckgabe;
2472 abrechnungPrivat = null;
2473 if(rueckgabe==-2){
2474 neuanlageRezept(false,"","");
2476 }catch(Exception ex){
2477 JOptionPane.showMessageDialog(null, "Funktion privatRechnung(), Exception = "+ex.getMessage());
2478 ex.printStackTrace();
2483 private void doAbschliessen(){
2486 private void doAufschliessen(){
2489 /*****************************************************/
2490 class MyTermClass{
2491 String ddatum;
2492 String behandler;
2493 String stext;
2494 String sart;
2495 String qdatum;
2496 public MyTermClass(String s1, String s2,String s3,String s4,String s5){
2497 ddatum = s1;
2498 behandler = s2;
2499 stext = s3;
2500 sart = s4;
2501 qdatum = (s5==null ? " " : s5);
2504 public String getDDatum(){
2505 return ddatum;
2507 public String getBehandler(){
2508 return behandler;
2510 public String getStext(){
2511 return stext;
2513 public String getSArt(){
2514 return sart;
2516 public String getQDatum(){
2517 return qdatum;
2521 class MyTermTableModel extends DefaultTableModel{
2525 private static final long serialVersionUID = 1L;
2527 public Class<?> getColumnClass(int columnIndex) {
2528 if(columnIndex==0){return String.class;}
2529 /*else if(columnIndex==1){return JLabel.class;}*/
2530 else{return String.class;}
2531 //return (columnIndex == 0) ? Boolean.class : String.class;
2534 public boolean isCellEditable(int row, int col) {
2535 //Note that the data/cell address is constant,
2536 //no matter where the cell appears onscreen.
2537 if(Reha.thisClass.patpanel.vecaktrez.get(62).equals("T")){
2538 return false;
2540 if (col == 0){
2541 return true;
2542 }else if(col == 1){
2543 return true;
2544 }else if(col == 2){
2545 return true;
2546 }else if(col == 3){
2547 return true;
2548 }else if(col == 11){
2549 return true;
2550 } else{
2551 return false;
2555 class MyAktRezeptTableModel extends DefaultTableModel{
2559 private static final long serialVersionUID = 1L;
2561 public Class<?> getColumnClass(int columnIndex) {
2562 if(columnIndex==1 || columnIndex==5 ){
2563 return JLabel.class;}
2564 else{
2565 return String.class;
2567 //return (columnIndex == 0) ? Boolean.class : String.class;
2570 public boolean isCellEditable(int row, int col) {
2571 //Note that the data/cell address is constant,
2572 //no matter where the cell appears onscreen.
2574 if (col == 0){
2575 return true;
2576 }else if(col == 3){
2577 return true;
2578 }else if(col == 7){
2579 return true;
2580 }else if(col == 11){
2581 return true;
2582 } else{
2583 return false;
2588 public void doRezeptGebuehr(Point pt){ // Lemmi Doku: Bares Kassieren der Rezeptgebühr
2589 boolean bereitsbezahlt = false;
2591 // vvv Lemmi 20101218: Prüfung, ob es eine RGR-RECHNUNG bereits gibt, falls ja, geht hier gar nix !
2592 Vector<Vector<String>> testvec = SqlInfo.holeFelder("select rnr from rgaffaktura where reznr='"+
2593 (String)Reha.thisClass.patpanel.vecaktrez.get(1)+
2594 "' AND rnr LIKE 'RGR-%' LIMIT 1");
2596 if(testvec.size() > 0){
2597 JOptionPane.showMessageDialog(null, "<html>Für dieses Rezept <b>" + (String)Reha.thisClass.patpanel.vecaktrez.get(1)
2598 + "</b> wurde bereits eine Rezeptgebühren-Rechnung <b>" + testvec.get(0) + "</b> angelegt!<br>"
2599 + "Eine Barzahlungs-Quittung kann nicht mehr erstellt werden.</html>",
2600 "Bar-Quittung nicht mehr möglich", JOptionPane.WARNING_MESSAGE, null);
2601 return;
2603 // ^^^ Lemmi 20101218: Prüfung, ob es eine RGR-RECHNUNG bereits gibt, falls ja, geht hier gar nix !
2606 // noch zu erledigen
2607 // erst prüfen ob Zuzahlstatus = 0, wenn ja zurück;
2608 // dann prüfen ob bereits bezahlt wenn ja fragen ob Kopie erstellt werden soll;
2609 if( (boolean)Reha.thisClass.patpanel.vecaktrez.get(39).equals("0") ){
2610 JOptionPane.showMessageDialog(null,"Zuzahlung nicht erforderlich!");
2611 return;
2613 if(DatFunk.Unter18(DatFunk.sHeute(), DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)))){
2614 JOptionPane.showMessageDialog(null,"Stand heute ist der Patient noch nicht Volljährig - Zuzahlung deshalb (bislang) noch nicht erforderlich");
2615 return;
2618 if( (boolean)Reha.thisClass.patpanel.vecaktrez.get(39).equals("1") ||
2619 (Double.parseDouble((String)Reha.thisClass.patpanel.vecaktrez.get(13)) > 0.00) ){
2620 String reznr = (String)Reha.thisClass.patpanel.vecaktrez.get(1);
2621 int frage = JOptionPane.showConfirmDialog(null,"<html>Zuzahlung für Rezept <b>" + reznr + "</b> bereits in bar geleistet!<br><br> Wollen Sie eine Kopie erstellen?</html>",
2622 "Wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
2623 if(frage == JOptionPane.NO_OPTION){
2624 return;
2626 bereitsbezahlt = true;
2628 // Lemmi Doku: Hier werden die Variablen für die Vorlage initialisiert bzw. zurückgesetzt
2629 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
2630 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
2631 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
2632 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
2633 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
2634 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
2635 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
2636 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
2637 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", "0,00" );
2638 SystemConfig.hmAdrRDaten.put("<Rwert>", "0,00" );
2639 /*int art = */RezTools.testeRezGebArt(false,false,(String)Reha.thisClass.patpanel.vecaktrez.get(1),(String)Reha.thisClass.patpanel.vecaktrez.get(34));
2640 //System.out.println(SystemConfig.hmAdrRDaten);
2641 new RezeptGebuehren(this,bereitsbezahlt,false,pt);
2643 public void setZuzahlImage(int imageno){
2644 int row = tabaktrez.getSelectedRow();
2645 if(row < 0){
2646 JOptionPane.showMessageDialog(null,"Achtung kann Icon für korrekte Zuzahlung nicht setzen.\n"+
2647 "Bitte notieren Sie den Namen des Patienten und die Rezeptnummer und verständigen\n"+
2648 "Sie den Administrator");
2649 return;
2651 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[imageno], row, 1);
2652 tabaktrez.repaint();
2654 private void doBarcode(){
2655 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
2656 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
2657 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
2658 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
2659 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
2660 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
2661 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
2662 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
2663 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", "0,00" );
2664 SystemConfig.hmAdrRDaten.put("<Rwert>", "0,00" );
2665 /*int art = */RezTools.testeRezGebArt(true,false,(String)Reha.thisClass.patpanel.vecaktrez.get(1),(String)Reha.thisClass.patpanel.vecaktrez.get(34));
2666 //String ik = "510884019";
2667 SystemConfig.hmAdrRDaten.put("<Bcik>",Reha.aktIK);
2668 SystemConfig.hmAdrRDaten.put("<Bcode>","*"+(String)Reha.thisClass.patpanel.vecaktrez.get(1)+"*");
2669 //SystemConfig.hmAdrRDaten.put("<Bcode>","*"+"KG500000"+"*");
2670 int iurl = Integer.valueOf((String)Reha.thisClass.patpanel.vecaktrez.get(46));
2671 String url = SystemConfig.rezBarCodForm.get((iurl < 0 ? 0 : iurl));
2672 SystemConfig.hmAdrRDaten.put("<Bzu>",StringTools.fuelleMitZeichen(
2673 SystemConfig.hmAdrRDaten.get("<Rendbetrag>"), " ", true, 5));
2674 SystemConfig.hmAdrRDaten.put("<Bges>",StringTools.fuelleMitZeichen(
2675 SystemConfig.hmAdrRDaten.get("<Rwert>"), " ", true, 6));
2676 SystemConfig.hmAdrRDaten.put("<Bnr>",SystemConfig.hmAdrRDaten.get("<Rnummer>"));
2677 SystemConfig.hmAdrRDaten.put("<Buser>", Reha.aktUser);
2678 SystemConfig.hmAdrRDaten.put("<Rpatid>", Reha.thisClass.patpanel.vecaktrez.get(0));
2679 //System.out.println("Es wird folgender Bacrode genommen "+url);
2680 OOTools.starteBacrodeFormular(Reha.proghome+"vorlagen/"+Reha.aktIK+"/"+url,SystemConfig.rezBarcodeDrucker);
2683 public String rezUnterbrechung(boolean lneu,String feldname,int behandlung){
2684 if(neuDlgOffen){return "";}
2685 try{
2686 neuDlgOffen = true;
2687 String ret;
2688 RezTest rezTest = new RezTest();
2689 PinPanel pinPanel = new PinPanel();
2690 pinPanel.setName("RezeptTest");
2691 pinPanel.getGruen().setVisible(false);
2692 rezTest.setSize(200,200);
2693 rezTest.setPreferredSize(new Dimension(250,200));
2694 rezTest.getSmartTitledPanel().setPreferredSize(new Dimension (250,200));
2695 rezTest.setPinPanel(pinPanel);
2696 RezTestPanel testPan = new RezTestPanel((dummyLabel = new JLabel()));
2697 rezTest.getSmartTitledPanel().setContentContainer(testPan );
2698 rezTest.getSmartTitledPanel().setTitle("Unterbrechung bei der "+behandlung+". Behandlung");
2699 rezTest.setName("RezeptTest");
2700 rezTest.setModal(true);
2701 Point pt = tabaktterm.getLocationOnScreen();
2702 pt.x= pt.x-250;
2703 pt.y= pt.y-15;
2704 rezTest.setLocation(pt);
2705 rezTest.pack();
2706 rezTest.setVisible(true);
2707 rezTest.dispose();
2708 //System.out.println("Rez unterbrechung geschlossen - Ergebnis = "+dummyLabel.getText());
2709 ret = String.valueOf(dummyLabel.getText());
2710 testPan.dummylab = null;
2711 testPan = null;
2712 rezTest = null;
2713 neuDlgOffen = false;
2714 return ret;
2715 }catch(Exception ex){
2716 ex.printStackTrace();
2718 return "";
2722 // Lemmi 20110101: bCtrlPressed zugefügt. Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
2723 // public void neuanlageRezept( boolean lneu, String feldname ) {
2724 public void neuanlageRezept( boolean lneu, String feldname, String strModus ){
2726 if(Reha.thisClass.patpanel.aid < 0 || Reha.thisClass.patpanel.kid < 0){
2727 String meldung = "Hausarzt und/oder Krankenkasse im Patientenstamm sind nicht verwertbar.\n"+
2728 "Die jeweils ungültigen Angaben sind -> kursiv <- dargestellt.\n\n"+
2729 "Bitte korrigieren Sie die entsprechenden Angaben";
2730 JOptionPane.showMessageDialog(null, meldung);
2731 return;
2733 if(neuDlgOffen){
2734 JOptionPane.showMessageDialog(null, "neuDlgOffen hat den wert true");
2735 return;
2737 try{
2738 neuDlgOffen = true;
2739 RezNeuDlg neuRez = new RezNeuDlg();
2740 PinPanel pinPanel = new PinPanel();
2741 pinPanel.setName("RezeptNeuanlage");
2742 pinPanel.getGruen().setVisible(false);
2743 if(lneu){
2744 neuRez.getSmartTitledPanel().setTitle("Rezept Neuanlage");
2746 neuRez.setSize(500,800);
2747 neuRez.setPreferredSize(new Dimension(490+Reha.zugabex,690+Reha.zugabey));
2748 neuRez.getSmartTitledPanel().setPreferredSize(new Dimension (490,800)); //Original 630
2749 neuRez.setPinPanel(pinPanel);
2750 if(lneu){
2751 // vvv Lemmi 20110101: Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
2752 Vector<String> vecKopiervorlage = new Vector<String>();
2753 if ( strModus.equals("KopiereLetztes") ) {
2754 RezeptVorlage vorlage = new RezeptVorlage(aktrbut[0].getLocationOnScreen());
2755 if ( !vorlage.bHasSelfDisposed ) { // wenn es nur eine Disziplin gibt, hat sich der Auswahl-Dialog bereits selbst disposed !
2756 vorlage.setModal(true);
2757 vorlage.toFront();
2758 vorlage.setVisible(true);
2760 //String strKopierDiszi = vorlage.strSelectedDiszi;
2761 // Die Rezept-Kopiervorlage steht jetzt in vorlage.vecResult oder es wurde nichts gefunden !
2762 vecKopiervorlage = vorlage.vecResult;
2764 if ( !vorlage.bHasSelfDisposed ) { // wenn es nur eine Disziplin gibt, hat sich der Auswahl-Dialog bereits selbst disposed !
2765 vorlage.dispose();
2767 vorlage= null;
2769 if ( strModus.equals("KopiereAngewaehltes") ) { // Vorschlag von J. Steinhilber integriert: Kopiere das angewählte Rezept
2770 String rezToCopy = AktuelleRezepte.getActiveRezNr();
2771 vecKopiervorlage = ((Vector<String>)SqlInfo.holeSatz( "verordn", " * ", "REZ_NR = '" +
2772 rezToCopy + "'", Arrays.asList(new String[] {}) ));
2775 if ( strModus.equals("KopiereHistorienRezept") ) {
2776 String rezToCopy = Historie.getActiveRezNr();
2777 vecKopiervorlage = ((Vector<String>)SqlInfo.holeSatz( "lza", " * ", "REZ_NR = '" +
2778 rezToCopy + "'", Arrays.asList(new String[] {}) ));
2780 // ^^^ Lemmi 20110101: Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
2781 @SuppressWarnings("unchecked")
2782 RezNeuanlage rezNeuAn = new RezNeuanlage((Vector<String>)vecKopiervorlage.clone(),lneu,feldname);
2783 neuRez.getSmartTitledPanel().setContentContainer( rezNeuAn );
2784 //if ( rezNeuAn.strKopiervorlage.isEmpty() )
2785 if ( vecKopiervorlage.size() < 1 )
2786 neuRez.getSmartTitledPanel().setTitle("Rezept Neuanlage");
2787 else // Lemmi 20110101: Kopieren des letzten Rezepts des selben Patienten bei Rezept-Neuanlage
2788 neuRez.getSmartTitledPanel().setTitle("Rezept Neuanlage als Kopie von <-- " + vecKopiervorlage.get(1) );
2790 }else{ // Lemmi Doku: Hier wird ein existierendes Rezept mittels Doppelklick geöffnet:
2791 neuRez.getSmartTitledPanel().setContentContainer(new RezNeuanlage(Reha.thisClass.patpanel.vecaktrez,lneu,feldname));
2792 neuRez.getSmartTitledPanel().setTitle("editieren Rezept ---> "+Reha.thisClass.patpanel.vecaktrez.get(1));
2794 neuRez.getSmartTitledPanel().getContentContainer().setName("RezeptNeuanlage");
2795 neuRez.setName("RezeptNeuanlage");
2796 neuRez.setModal(true);
2797 neuRez.setLocationRelativeTo(null);
2798 neuRez.pack();
2799 neuRez.setVisible(true);
2801 neuRez.dispose();
2802 neuRez = null;
2803 pinPanel = null;
2804 if(!lneu){
2805 if(tabaktrez.getRowCount()>0){
2806 try{
2807 RezeptDaten.feddisch = false;
2808 //System.out.println("rufe Rezeptnummer "+(String)tabaktrez.getValueAt(tabaktrez.getSelectedRow(), 7));
2809 aktualisiereVector((String)tabaktrez.getValueAt(tabaktrez.getSelectedRow(), idInTable));
2811 //Icon
2812 dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[Integer.parseInt((String)Reha.thisClass.patpanel.vecaktrez.get(39))],
2813 tabaktrez.getSelectedRow(),1);
2814 //IndiSchlüssel
2815 dtblm.setValueAt(Reha.thisClass.patpanel.vecaktrez.get(44), tabaktrez.getSelectedRow(), 7);
2816 tabaktrez.validate();
2817 tabaktrez.repaint();
2818 }catch(Exception ex){
2819 JOptionPane.showMessageDialog(null,"Fehler in der Darstellung eines abgespeicherten Rezeptes");
2820 ex.printStackTrace();
2823 }else{
2824 if(aktPanel.equals("leerPanel")){
2825 holeRezepte(Reha.thisClass.patpanel.patDaten.get(29),"");
2828 }catch(Exception ex){
2829 ex.printStackTrace();
2830 JOptionPane.showMessageDialog(null, "Fehler beim Öffnen des Rezeptfensters");
2832 ////System.out.println("Pat Neu/Andern ist disposed");
2833 neuDlgOffen = false;
2836 @SuppressWarnings("unchecked")
2837 public Vector<String> getModelTermine() {
2838 return (Vector<String>)dtermm.getDataVector().clone();
2840 private void doUebertrag(){
2841 int row = tabaktrez.getSelectedRow();
2842 if(row >= 0){
2843 try{
2844 int mod = tabaktrez.convertRowIndexToModel(row);
2845 String rez_nr = dtblm.getValueAt(mod, 0).toString().trim();
2846 SqlInfo.transferRowToAnotherDB("verordn", "lza","rez_nr", rez_nr, true, Arrays.asList(new String[] {"id"}));
2847 SqlInfo.sqlAusfuehren("delete from verordn where rez_nr='"+rez_nr+"'");
2848 Reha.thisClass.patpanel.aktRezept.holeRezepte(Reha.thisClass.patpanel.patDaten.get(29),"");
2849 final String xrez_nr = String.valueOf(rez_nr);
2850 SwingUtilities.invokeLater(new Runnable(){
2851 public void run(){
2852 Reha.thisClass.patpanel.historie.holeRezepte(Reha.thisClass.patpanel.patDaten.get(29), "");
2853 SqlInfo.sqlAusfuehren("delete from fertige where rez_nr='"+xrez_nr+"'");
2854 RezTools.loescheRezAusVolleTabelle(xrez_nr);
2855 if(Reha.thisClass.abrechnungpanel != null){
2856 String[] diszis = {"Physio","Massage","Ergo","Logo","Podo"};
2857 String aktDisziplin = diszis[Reha.thisClass.abrechnungpanel.cmbDiszi.getSelectedIndex()];
2858 if(RezTools.putRezNrGetDisziplin(xrez_nr).equals(aktDisziplin)){
2859 Reha.thisClass.abrechnungpanel.einlesenErneuern();
2865 setzeKarteiLasche();
2866 }catch(Exception ex){
2867 ex.printStackTrace();
2868 JOptionPane.showConfirmDialog(null, "Fehler in der Funktion AktuelleRezepte -> doUebertrag()");
2870 }else{
2871 JOptionPane.showMessageDialog(null, "Kein aktuelles Rezept für den Übertrag in die Historie ausgewählt!");
2875 private void fuelleTage(){
2876 int akt = this.tabaktrez.getSelectedRow();
2877 if(akt < 0){
2878 //JOptionPane.showMessageDialog(null, "Kein aktuelles Rezept für Übertrag in Clipboard ausgewählt");
2879 return;
2881 String stage = "";
2882 int tage = this.dtermm.getRowCount();
2885 for(int i = 0; i < tage;i++){
2886 stage = stage +(i > 0 ? ", " : "")+ dtermm.getValueAt(i, 0).toString();
2888 SystemConfig.hmAdrRDaten.put("<Rtage>", String.valueOf(stage));
2890 private void doTageDrucken(){
2891 int akt = this.tabaktrez.getSelectedRow();
2892 if(akt < 0){
2893 JOptionPane.showMessageDialog(null, "Kein aktuelles Rezept für Übertrag in Clipboard ausgewählt");
2894 return;
2896 String stage = "Rezeptnummer: "+this.tabaktrez.getValueAt(akt,0).toString()+" - Rezeptdatum: "+this.tabaktrez.getValueAt(akt,2).toString()+"\n";
2897 int tage = this.dtermm.getRowCount();
2900 for(int i = 0; i < tage;i++){
2901 stage = stage + Integer.toString(i+1)+"\t"+dtermm.getValueAt(i, 0).toString()+"\n";
2903 copyToClipboard(stage);
2905 public static void copyToClipboard(String s) {
2906 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(s), null);
2908 private void do301FallSteuerung(){
2909 if(!Rechte.hatRecht(Rechte.Sonstiges_Reha301, true)){return;}
2910 int row = tabaktrez.getSelectedRow();
2911 if(row < 0){JOptionPane.showMessageDialog(null,"Kein Rezept für Fallsteuerung ausgewählt"); return;}
2912 //String aktrez = tabaktrez.getValueAt(row,0).toString().trim();
2913 //int rezepte = Integer.parseInt(SqlInfo.holeEinzelFeld("select count(*) from dta301 where rez_nr ='"+aktrez+"'"));
2915 if(rezepte <= 0){
2916 String meldung = "<html>Diese Verordnung wurde vom Kostenträger <b>nicht elektronisch</b> übermittelt!<br>"+
2917 "Verwendung für die Fallsteuerung nach §301 ist deshalb <b>nicht möglich.</b><br></html>";
2918 JOptionPane.showMessageDialog(null,meldung);
2919 return;
2923 Reha.thisClass.progLoader.Dta301Fenster(1, (String)Reha.thisClass.patpanel.vecaktrez.get(1));
2924 // Hier der Aufruf der Fallsteuerungs .JAR
2927 // Lemmi 20101218: kopiert aus AbrechnungRezept.java und die Datenherkunfts-Variablen verändert bzw. angepasst.
2928 private void doRezeptgebuehrRechnung(Point location){
2929 boolean buchen = true;
2930 DecimalFormat dfx = new DecimalFormat( "0.00" );
2932 // Vector<Vector<String>> testvec = SqlInfo.holeFelder("select reznr from rgaffaktura where reznr='"+aktRezNum.getText()+
2933 // "' AND rnr LIKE 'RGR-%' LIMIT 1");
2934 Vector<Vector<String>> testvec = SqlInfo.holeFelder("select reznr from rgaffaktura where reznr='"+
2935 (String)Reha.thisClass.patpanel.vecaktrez.get(1) + "' AND rnr LIKE 'RGR-%' LIMIT 1");
2937 if(testvec.size() > 0){
2938 int anfrage = JOptionPane.showConfirmDialog(null, "Für dieses Rezept wurde bereits eine Rezeptgebührrechnung angelegt!"+
2939 "Wollen Sie eine Kopie erstellen?", "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2940 if(anfrage != JOptionPane.YES_OPTION){
2941 return;
2943 buchen = false;
2944 } else {
2945 // vvv Prüfungen aus der Bar-Quittung auch hier !
2946 if( (boolean)Reha.thisClass.patpanel.vecaktrez.get(39).equals("0") ){
2947 JOptionPane.showMessageDialog(null,"Zuzahlung nicht erforderlich!");
2948 return;
2950 if(DatFunk.Unter18(DatFunk.sHeute(), DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)))){
2951 JOptionPane.showMessageDialog(null,"Stand heute ist der Patient noch nicht Volljährig - Zuzahlung deshalb (bislang) noch nicht erforderlich");
2952 return;
2955 if( (boolean)Reha.thisClass.patpanel.vecaktrez.get(39).equals("1") ||
2956 (Double.parseDouble((String)Reha.thisClass.patpanel.vecaktrez.get(13)) > 0.00) ){
2957 JOptionPane.showMessageDialog(null, "<html>Zuzahlung für Rezept <b>" + (String)Reha.thisClass.patpanel.vecaktrez.get(1)
2958 + "</b> wurde bereits in bar geleistet.<br>"
2959 + "Eine Rezeptgebühren-Rechnung kann deshalb nicht mehr erstellt werden.</html>",
2960 "Rezeptgebühren-Rechnung nicht mehr möglich", JOptionPane.WARNING_MESSAGE, null);
2961 return;
2963 // ^^^ Prüfungen aus der Bar-Quittung auch hier !
2969 HashMap<String,String> hmRezgeb = new HashMap<String,String>();
2970 int rueckgabe = -1;
2971 int i;
2972 String behandl = "";
2973 String strZuzahlung = "0.00";
2975 // Lemmi: Nutzung der Routine aus der RG-Barzahlung, um "geprüft" einige Varibalen vorzubelegen
2976 // Lemmi Doku: Hier werden die Variablen für die Vorlage initialisiert bzw. zurückgesetzt
2977 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
2978 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
2979 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
2980 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
2981 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
2982 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
2983 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
2984 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
2985 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", "0,00" );
2986 SystemConfig.hmAdrRDaten.put("<Rwert>", "0,00" );
2987 RezTools.testeRezGebArt(false,false,(String)Reha.thisClass.patpanel.vecaktrez.get(1),(String)Reha.thisClass.patpanel.vecaktrez.get(34));
2989 // for(int i = 0; i < vec_poskuerzel.size();i++){
2990 // behandl=behandl+vec_posanzahl.get(i)+"*"+vec_poskuerzel.get(i)+(i < (vec_poskuerzel.size()-1) ? "," : "" );
2991 // String mit den Anzahlen und HM-Kürzeln erzeugen
2992 for(i = 0; i < 4; i++){
2993 if ( ( Reha.thisClass.patpanel.vecaktrez.get(65+i) != null)
2994 && ((String)Reha.thisClass.patpanel.vecaktrez.get(65+i)).length() > 0 ) {
2995 behandl += ((behandl.length() > 0) ? ", " : "") + (String)Reha.thisClass.patpanel.vecaktrez.get(3+i) + " * " + (String)Reha.thisClass.patpanel.vecaktrez.get(65+i);
2999 // Zuzahlung zusammenziehen
3000 Double dZuzahl = 0.0;
3001 for(i = 0; i < 4; i++){
3002 if ( Double.parseDouble(SystemConfig.hmAdrRDaten.get("<Rproz"+(i+1)+">").replaceAll(",", ".")) > 0.00 ) {
3003 dZuzahl += Double.parseDouble(SystemConfig.hmAdrRDaten.get("<Rgesamt"+(i+1)+">").replaceAll(",", "."));
3005 // dZuzahl += Double.parseDouble(SystemConfig.hmAdrRDaten.get("<Rproz"+(i+1)+">").replaceAll(",", ".")) *
3006 // Double.parseDouble(SystemConfig.hmAdrRDaten.get("<Ranzahl"+(i+1)+">").replaceAll(",", "."));
3009 dZuzahl += Double.parseDouble(SystemConfig.hmAdrRDaten.get("<Rpauschale>").replaceAll(",", ".")); // 10 Euro dazu
3011 strZuzahlung = (String)Reha.thisClass.patpanel.vecaktrez.get(13);
3012 strZuzahlung = dfx.format(dZuzahl);
3013 strZuzahlung = SystemConfig.hmAdrRDaten.get("<Rendbetrag>");
3015 /* String test1 = ""; // Mal die Rezeptdaten auflisten !
3016 int iMax = Reha.thisClass.patpanel.vecaktrez.size();
3017 for( i = 0; i < iMax; i++){
3018 test1 = test1 + i + " = " + (String)Reha.thisClass.patpanel.vecaktrez.get(i) + "\n";
3019 if ( i > 63 ){
3020 int x = 5;
3021 x += 1;
3025 //anr=17,titel=18,nname=0,vname=1,strasse=3,plz=4,ort=5,abwadress=19
3026 //"anrede,titel,nachname,vorname,strasse,plz,ort"
3028 // String cmd = "select abwadress,id from pat5 where pat_intern='"+vec_rez.get(0).get(0)+"' LIMIT 1";
3029 String cmd = "select abwadress,id from pat5 where pat_intern='"+(String)Reha.thisClass.patpanel.vecaktrez.get(0)+"' LIMIT 1";
3030 Vector<Vector<String>> adrvec = SqlInfo.holeFelder(cmd);
3031 String[] adressParams = null;
3033 abrRez = new AbrechnungRezept(null);
3034 if(adrvec.get(0).get(0).equals("T")){
3035 adressParams = abrRez.holeAbweichendeAdresse(adrvec.get(0).get(1));
3036 }else{
3037 adressParams = abrRez.getAdressParams(adrvec.get(0).get(1));
3039 // hmRezgeb.put("<rgreznum>",aktRezNum.getText());
3040 hmRezgeb.put("<rgreznum>",(String)Reha.thisClass.patpanel.vecaktrez.get(1));
3042 hmRezgeb.put("<rgbehandlung>",behandl);
3044 // hmRezgeb.put("<rgdatum>",DatFunk.sDatInDeutsch(vec_rez.get(0).get(2)));
3045 hmRezgeb.put("<rgdatum>",DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2)));
3047 // hmRezgeb.put("<rgbetrag>",dfx.format(zuzahlungWert)); Lemmi xxx
3048 hmRezgeb.put("<rgbetrag>",strZuzahlung);
3050 hmRezgeb.put("<rgpauschale>","5,00");
3051 hmRezgeb.put("<rggesamt>","0,00");
3052 hmRezgeb.put("<rganrede>",adressParams[0]);
3053 hmRezgeb.put("<rgname>",adressParams[1]);
3054 hmRezgeb.put("<rgstrasse>",adressParams[2]);
3055 hmRezgeb.put("<rgort>",adressParams[3]);
3056 hmRezgeb.put("<rgbanrede>",adressParams[4]);
3058 // hmRezgeb.put("<rgpatintern>",vec_rez.get(0).get(0));
3059 hmRezgeb.put("<rgpatintern>",(String)Reha.thisClass.patpanel.vecaktrez.get(0));
3061 RezeptGebuehrRechnung rgeb = new RezeptGebuehrRechnung(Reha.thisFrame,"Nachberechnung Rezeptgebühren",rueckgabe,hmRezgeb,buchen);
3062 rgeb.setSize(new Dimension(250,300));
3063 rgeb.setLocation(location.x-50,location.y-50);
3064 rgeb.pack();
3065 rgeb.setVisible(true);
3068 /**********************************************/
3070 class ToolsDlgAktuelleRezepte{
3071 public ToolsDlgAktuelleRezepte(String command,Point pt){
3072 //boolean testcase = true;
3073 Map<Object, ImageIcon> icons = new HashMap<Object, ImageIcon>();
3074 icons.put("Rezeptgebühren kassieren",SystemConfig.hmSysIcons.get("rezeptgebuehr"));
3075 icons.put("BarCode auf Rezept drucken",SystemConfig.hmSysIcons.get("barcode"));
3076 icons.put("Ausfallrechnung drucken",SystemConfig.hmSysIcons.get("ausfallrechnung"));
3077 icons.put("Rezept ab-/aufschließen",SystemConfig.hmSysIcons.get("statusset"));
3078 icons.put("Privat-/BG-/Nachsorge-Rechnung erstellen",SystemConfig.hmSysIcons.get("privatrechnung"));
3079 icons.put("Behandlungstage in Clipboard",SystemConfig.hmSysIcons.get("einzeltage"));
3080 icons.put("Transfer in Historie",SystemConfig.hmSysIcons.get("redo"));
3081 // Lemmi 20101218: angehängt Rezeptgebühr-Rechnung aus dem Rezept heraus erzeugen
3082 icons.put("Rezeptgebühr-Rechnung erstellen",SystemConfig.hmSysIcons.get("privatrechnung"));
3083 icons.put("§301 Reha-Fallsteuerung",SystemConfig.hmSysIcons.get("abrdreieins"));
3085 // create a list with some test data
3086 JList list = new JList( new Object[] {"Rezeptgebühren kassieren", "BarCode auf Rezept drucken", "Ausfallrechnung drucken",
3087 "Rezept ab-/aufschließen", "Privat-/BG-/Nachsorge-Rechnung erstellen",
3088 "Behandlungstage in Clipboard", "Transfer in Historie",
3089 "Rezeptgebühr-Rechnung erstellen",
3090 "§301 Reha-Fallsteuerung" }); // Lemmi 20101218: eingefügt Rezeptgebühr-Rechnung aus dem Rezept heraus erzeugen
3091 list.setCellRenderer(new IconListRenderer(icons));
3092 Reha.toolsDlgRueckgabe = -1;
3093 ToolsDialog tDlg = new ToolsDialog(Reha.thisFrame,"Werkzeuge: aktuelle Rezepte",list);
3094 tDlg.setPreferredSize(new Dimension(275, (255+28) + // Lemmi: Breite, Höhe des Werkzeug-Dialogs
3095 ((Boolean)SystemConfig.hmPatientenWerkzeugDlgIni.get("ToolsDlgShowButton") ? 25 : 0) ));
3096 tDlg.setLocation(pt.x-70,pt.y+30);
3097 tDlg.pack();
3098 tDlg.setModal(true);
3099 tDlg.activateListener();
3100 tDlg.setVisible(true);
3102 if(testcase){
3103 Reha.thisClass.dbLabel.setText("RWert von Tool = "+Reha.toolsDlgRueckgabe);
3106 if(Reha.toolsDlgRueckgabe > -1){
3107 if(Reha.toolsDlgRueckgabe==0){
3108 tDlg = null;
3109 if(!Rechte.hatRecht(Rechte.Rezept_gebuehren, true)){return;}
3110 RezTools.constructRawHMap();
3111 rezeptGebuehr();
3112 return;
3113 }else if(Reha.toolsDlgRueckgabe==1){
3114 tDlg = null;
3115 if(!Rechte.hatRecht(Rechte.Rezept_gebuehren, true)){return;}
3116 new SwingWorker<Void,Void>(){
3117 @Override
3118 protected Void doInBackground() throws Exception {
3119 doBarcode();
3120 return null;
3122 }.execute();
3124 return;
3125 }else if(Reha.toolsDlgRueckgabe==2){
3126 tDlg = null;
3127 if(!Rechte.hatRecht(Rechte.Rezept_ausfallrechnung, true)){return;}
3128 ausfallRechnung();
3129 return;
3130 }else if(Reha.toolsDlgRueckgabe==3){
3131 tDlg = null;
3132 rezeptAbschliessen();
3133 return;
3134 }else if(Reha.toolsDlgRueckgabe==4){
3135 tDlg = null;
3136 if(!Rechte.hatRecht(Rechte.Rezept_privatrechnung, true)){return;}
3137 try{
3139 new SwingWorker<Void,Void>(){
3140 @Override
3141 protected Void doInBackground() throws Exception {
3142 RezTools.constructRawHMap();
3143 return null;
3145 }.execute();
3147 fuelleTage();
3148 privatRechnung();
3149 }catch(Exception ex){
3150 JOptionPane.showMessageDialog(null, ex.getMessage());
3152 return;
3153 }else if(Reha.toolsDlgRueckgabe==5){
3154 tDlg = null;
3155 doTageDrucken();
3156 return;
3157 }else if(Reha.toolsDlgRueckgabe==6){
3158 tDlg = null;
3159 if(!Rechte.hatRecht(Rechte.Sonstiges_rezepttransfer, true)){
3160 return;
3162 int anfrage = JOptionPane.showConfirmDialog(null, "Das ausgewählte Rezept wirklich in die Historie transferieren?", "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
3163 if(anfrage == JOptionPane.YES_OPTION){
3164 doUebertrag();
3166 return;
3168 // Lemmi 20101218: neuer if Block: Rezeptgebühr-Rechnung aus dem Rezept heraus erzeugen
3169 else if(Reha.toolsDlgRueckgabe==7){
3170 tDlg = null;
3171 if(!Rechte.hatRecht(Rechte.Rezept_gebuehren, true)){return;}
3172 PointerInfo info = MouseInfo.getPointerInfo();
3173 Point location = info.getLocation();
3174 doRezeptgebuehrRechnung(location);
3176 // abrRez = new AbrechnungRezept(null);
3177 // this.abrRez.setRechtsAufNull();
3178 // return abrRez;
3179 // abrRez.doRezeptgebuehrRechnung(location);
3181 return;
3182 }else if(Reha.toolsDlgRueckgabe==8){
3183 do301FallSteuerung();
3187 tDlg = null;
3188 ////System.out.println("Rückgabewert = "+tDlg.rueckgabe);
3194 class RezNeuDlg extends RehaSmartDialog implements RehaTPEventListener,WindowListener{
3198 private static final long serialVersionUID = -7104716962577408414L;
3199 private RehaTPEventClass rtp = null;
3200 public RezNeuDlg(){
3201 super(null,"RezeptNeuanlage");
3202 this.setName("RezeptNeuanlage");
3203 //super.getPinPanel().setName("RezeptNeuanlage");
3204 rtp = new RehaTPEventClass();
3205 rtp.addRehaTPEventListener((RehaTPEventListener) this);
3208 public void rehaTPEventOccurred(RehaTPEvent evt) {
3209 // TODO Auto-generated method stub
3210 try{
3211 // Lemmi Doku: hier kommt der Event für den Abbruch des Rezept-Fensters mittels rotem Punkt!!!!!
3212 if(evt.getDetails()[0] != null){
3213 if(evt.getDetails()[0].equals(this.getName())){
3215 /* geht hier nicht, weil der Dialog PinPanel trotzdem alles zumacht !
3216 // Lemmi 20100102: Abbruch ohen Änderung-Speichern verhindern
3217 if ( ((RezNeuanlage)getSmartTitledPanel().getContentContainer()).HasChanged() &&
3218 ((RezNeuanlage)getSmartTitledPanel().getContentContainer()).askForCancelUsaved() == 1
3220 return;
3222 //System.out.println("In rezNeuDlg set Visible false***************");
3223 this.setVisible(false);
3224 this.dispose();
3225 rtp.removeRehaTPEventListener((RehaTPEventListener) this);
3226 rtp = null;
3227 ListenerTools.removeListeners(this);
3228 super.dispose();
3230 //System.out.println("****************Rezept Neu/ändern -> Listener entfernt**************");
3232 }else{
3233 //System.out.println("Details == null");
3235 }catch(NullPointerException ne){
3236 ne.printStackTrace();
3237 //System.out.println("In RezeptNeuanlage" +evt);
3238 }catch(Exception ex){
3242 public void windowClosed(WindowEvent arg0) {
3243 // TODO Auto-generated method stub
3244 if(rtp != null){
3245 this.setVisible(false);
3246 rtp.removeRehaTPEventListener((RehaTPEventListener) this);
3247 rtp = null;
3248 dispose();
3249 ListenerTools.removeListeners(this);
3250 super.dispose();
3251 //System.out.println("****************Rezept Neu/ändern -> Listener entfernt (Closed)**********");
3258 /************************************/