3 import hauptFenster
.AktiveFenster
;
4 import hauptFenster
.Reha
;
5 import hauptFenster
.UIFSplitPane
;
7 import java
.awt
.BorderLayout
;
9 import java
.awt
.Component
;
10 import java
.awt
.Dimension
;
11 import java
.awt
.MouseInfo
;
12 import java
.awt
.Point
;
13 import java
.awt
.PointerInfo
;
14 import java
.awt
.event
.ActionEvent
;
15 import java
.awt
.event
.ActionListener
;
16 import java
.awt
.event
.MouseEvent
;
17 import java
.awt
.event
.MouseListener
;
18 import java
.io
.BufferedWriter
;
20 import java
.io
.FileWriter
;
21 import java
.io
.IOException
;
22 import java
.math
.BigDecimal
;
23 import java
.security
.cert
.X509Certificate
;
24 import java
.sql
.SQLException
;
25 import java
.text
.DecimalFormat
;
26 import java
.util
.ArrayList
;
27 import java
.util
.Arrays
;
28 import java
.util
.Date
;
29 import java
.util
.HashMap
;
30 import java
.util
.Vector
;
32 import javax
.swing
.ButtonGroup
;
33 import javax
.swing
.Icon
;
34 import javax
.swing
.JButton
;
35 import javax
.swing
.JComponent
;
36 import javax
.swing
.JEditorPane
;
37 import javax
.swing
.JOptionPane
;
38 import javax
.swing
.JScrollPane
;
39 import javax
.swing
.JSplitPane
;
40 import javax
.swing
.JTree
;
41 import javax
.swing
.SwingUtilities
;
42 import javax
.swing
.event
.TreeSelectionEvent
;
43 import javax
.swing
.event
.TreeSelectionListener
;
44 import javax
.swing
.tree
.DefaultMutableTreeNode
;
45 import javax
.swing
.tree
.DefaultTreeCellRenderer
;
46 import javax
.swing
.tree
.DefaultTreeModel
;
47 import javax
.swing
.tree
.TreeNode
;
48 import javax
.swing
.tree
.TreePath
;
50 import org
.jdesktop
.swingworker
.SwingWorker
;
51 import org
.jdesktop
.swingx
.JXPanel
;
52 import org
.jdesktop
.swingx
.JXTree
;
53 import org
.thera_pi
.nebraska
.crypto
.NebraskaCryptoException
;
54 import org
.thera_pi
.nebraska
.crypto
.NebraskaEncryptor
;
55 import org
.thera_pi
.nebraska
.crypto
.NebraskaFileException
;
56 import org
.thera_pi
.nebraska
.crypto
.NebraskaKeystore
;
57 import org
.thera_pi
.nebraska
.crypto
.NebraskaNotInitializedException
;
59 import rehaInternalFrame
.JAbrechnungInternal
;
60 import CommonTools
.SqlInfo
;
61 import stammDatenTools
.RezTools
;
62 import systemEinstellungen
.SystemConfig
;
63 import systemEinstellungen
.SystemPreislisten
;
64 import CommonTools
.JCompTools
;
65 import CommonTools
.JRtaCheckBox
;
66 import CommonTools
.JRtaComboBox
;
67 import CommonTools
.JRtaRadioButton
;
68 import CommonTools
.StringTools
;
69 import terminKalender
.DatFunk
;
71 import com
.jgoodies
.forms
.builder
.PanelBuilder
;
72 import com
.jgoodies
.forms
.layout
.CellConstraints
;
73 import com
.jgoodies
.forms
.layout
.FormLayout
;
74 import com
.mysql
.jdbc
.PreparedStatement
;
76 import emailHandling
.EmailSendenExtern
;
77 import events
.PatStammEvent
;
78 import events
.PatStammEventClass
;
79 import events
.PatStammEventListener
;
81 public class AbrechnungGKV
extends JXPanel
implements PatStammEventListener
,ActionListener
,TreeSelectionListener
, MouseListener
{
85 private static final long serialVersionUID
= -3580427603080353812L;
86 private JAbrechnungInternal jry
;
87 private UIFSplitPane jSplitLR
= null;
89 final String plus
= "+";
90 final String EOL
= "'"+System
.getProperty("line.separator");
91 final String SOZ
= "?";
92 public String abzurechnendeKassenID
= "";
93 String ik_kasse
,ik_kostent
,ik_nutzer
,ik_physika
,ik_papier
,ik_email
,ik_preisgruppe
;
98 String aktDisziplin
= "";
99 String
[] diszis
= {"KG","MA","ER","LO","PO"};
101 boolean annahmeAdresseOk
= false;
102 /*******Controls für die linke Seite*********/
103 ButtonGroup bg
= new ButtonGroup();
104 JRtaRadioButton
[] rbLinks
= {null,null,null,null};
105 JButton
[] butLinks
= {null,null,null,null};
106 public JRtaComboBox cmbDiszi
= null;
107 JXTree treeKasse
= null;
111 AbrechnungDlg abrDlg
= null;
113 // public DefaultMutableTreeNode rootKasse;
114 // public DefaultTreeModel treeModelKasse;
116 public JXTTreeNode rootKasse
;
117 public KassenTreeModel treeModelKasse
;
118 public JXTTreeNode aktuellerKnoten
;
119 public JXTTreeNode aktuellerKassenKnoten
;
120 public int kontrollierteRezepte
;
122 public StringBuffer positionenBuf
= new StringBuffer();
123 public StringBuffer unbBuf
= new StringBuffer();
124 public StringBuffer unzBuf
= new StringBuffer();
125 public StringBuffer gesamtBuf
= new StringBuffer();
126 public StringBuffer auftragsBuf
= new StringBuffer();
127 public StringBuffer buf
= new StringBuffer();
128 public StringBuffer htmlBuf
= new StringBuffer();
129 public StringBuffer rechnungBuf
= new StringBuffer();
130 public StringBuffer historieBuf
= new StringBuffer();
131 public int positionenAnzahl
= 0;
132 public String abrDateiName
= "";
133 JEditorPane htmlPane
= null;
135 Double
[] preis00
= {0.00,0.00,0.00};
136 Double
[] preis11
= {0.00,0.00,0.00};
137 Double
[] preis31
= {0.00,0.00,0.00};
138 Double
[] preis51
= {0.00,0.00,0.00};
140 Double
[] kassenUmsatz
= {0.00,0.00};
141 DecimalFormat dfx
= new DecimalFormat( "0.00" );
143 Vector
<String
> existiertschon
= new Vector
<String
>();
144 Vector
<Vector
<String
>> kassenIKs
= new Vector
<Vector
<String
>>();
145 /*******Controls für die rechte Seite*********/
146 AbrechnungRezept abrRez
= null;
147 AbrechnungDrucken abrDruck
= null;
148 Vector
<String
> abgerechneteRezepte
= new Vector
<String
>();
149 Vector
<String
> abgerechnetePatienten
= new Vector
<String
>();
150 Vector
<Vector
<String
>> preisVector
= null;
151 HashMap
<String
,String
> hmAnnahme
= null;
152 HashMap
<String
,String
> hmKostentraeger
= new HashMap
<String
,String
>();
153 int abrechnungRezepte
= 0;
154 public String aktuellerPat
= "";
160 JRtaCheckBox soll302
= null;
161 HashMap
<String
,String
> hmAlternativeKasse
= new HashMap
<String
,String
>();
162 JButton alternativeKK
= null;
164 public String abrechnungsModus
= "abrechnung302";
165 final String ABR_MODE_302
= "abrechnung302";
166 final String ABR_MODE_IV
= "abrechnungIV";
167 public String SlgaVersion
= null;
168 public String SllaVersion
= null;
169 public boolean zuzahlModusDefault
= true;
171 public AbrechnungGKV(JAbrechnungInternal xjry
){
174 setLayout(new BorderLayout());
175 jSplitLR
= UIFSplitPane
.createStrippedSplitPane(JSplitPane
.HORIZONTAL_SPLIT
,
178 jSplitLR
.setDividerSize(7);
179 jSplitLR
.setDividerBorderVisible(true);
180 jSplitLR
.setName("BrowserSplitLinksRechts");
181 jSplitLR
.setOneTouchExpandable(true);
182 jSplitLR
.setDividerLocation(230);
183 add(jSplitLR
,BorderLayout
.CENTER
);
185 SlgaVersion
= ( DatFunk
.TageDifferenz("30.09.2013",DatFunk
.sHeute()) <= 0 ?
"08" : "09");
186 SllaVersion
= ( DatFunk
.TageDifferenz("30.09.2013",DatFunk
.sHeute()) <= 0 ?
"08" : "09");
187 new SwingWorker
<Void
,Void
>(){
189 protected Void
doInBackground() throws Exception
{
190 SystemConfig
.certState
= checkCert("IK"+Reha
.aktIK
);
191 if(SystemConfig
.certState
> 0){
192 abrRez
.tbbuts
[3].setEnabled(false);
198 public static int checkCert(String alias
){
200 String keystore
= Reha
.proghome
+"keystore/"+Reha
.aktIK
+"/"+Reha
.aktIK
+".p12";
201 NebraskaKeystore store
= new NebraskaKeystore(keystore
, SystemConfig
.hmAbrechnung
.get("hmkeystorepw"),"123456", Reha
.aktIK
);
202 Vector
<X509Certificate
> certs
= store
.getAllCerts();
205 for(int i
= 0; i
< certs
.size();i
++){
206 dn
=certs
.get(i
).getSubjectDN().toString().split(",");
208 ik
= (String
)dn
[3].split("=")[1];
209 if(ik
.equals(alias
)){
210 String verfall
= certs
.get(i
).getNotAfter().toLocaleString().split(" ")[0].trim();
211 long tage
= DatFunk
.TageDifferenz(DatFunk
.sHeute(),verfall
);
213 JOptionPane
.showMessageDialog(null,"Ihr Zertifikat ist abgelaufen.\nEine Verschlüsselung mit diesem Zertifikat ist nicht mehr möglich");
214 return SystemConfig
.certIsExpired
;
215 }else if(tage
<= 30){
216 JOptionPane
.showMessageDialog(null,"Achtung!!!\nIhr Zertifikat läuft in "+Long
.toString(tage
)+" Tage(n) ab.\nBitte rechtzeitig neues Zertifikat beantragen");
218 return SystemConfig
.certOK
;
222 }catch(Exception ex
){
223 return SystemConfig
.certNotFound
;
225 return SystemConfig
.certNotFound
;
233 private void mandantenCheck(){
234 if(SystemConfig
.hmFirmenDaten
.get("Steuernummer").trim().equals("")){
235 String msg
= "Achtung(!!!!!!) für diesen Mandant wurde keine Steuernummer angegeben!\n\n"+
236 "Eine Abrechnung ohne Steuernummer wird von der GKV nicht(!!!!) akzeptiert\n\"+" +
237 "Schließen Sie die Abrechnung starten Sie die System-Initialisierung -> Mandanten Datenbank -> Firmenangaben...\n"+
238 "und tragen Sie hier im Feld Steuernummer die vom Finanzamt vergebene Steuernummer ein.";
239 JOptionPane
.showMessageDialog(null,msg
);
241 if(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung").trim().equals("")){
242 String msg
= "Achtung(!!!!!!) für diesen Mandant wurde keine Firmenbezeichnung angegeben!\n\n"+
243 "Schließen Sie die Abrechnung starten Sie die System-Initialisierung -> Mandanten Datenbank -> Firmenangaben...\n"+
244 "und tragen Sie hier im Feld 'Mandanten-Bezeichnung' eine Kurzfassung Ihres Firmennamens ein (max 30 Zeichen)";
245 JOptionPane
.showMessageDialog(null,msg
);
247 if(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung").length() > 30){
248 String msg
= "Achtung(!!!!!!) für diesen Mandant wurde eine zu lange Firmenbezeichnung angegeben.\n\n"+
249 "Schließen Sie die Abrechnung starten Sie die System-Initialisierung -> Mandanten Datenbank -> Firmenangaben...\n"+
250 "und tragen Sie hier im Feld 'Mandanten-Bezeichnung' eine Kurzfassung Ihres Firmennamens ein (max 30 Zeichen)";
251 JOptionPane
.showMessageDialog(null,msg
);
254 private JScrollPane
getLeft(){
255 FormLayout lay
= new FormLayout("5dlu,fill:0:grow(1.0),5dlu",
256 //1 2 3 4 5 6 7 8 9 10 11
257 "5dlu,p,5dlu,p,15dlu,p,20dlu,p,15dlu,fill:0:grow(1.0),5dlu");
258 PanelBuilder pb
= new PanelBuilder(lay
);
259 CellConstraints cc
= new CellConstraints();
260 pb
.getPanel().setBackground(Color
.WHITE
);
261 //pb.add(getIVPanel(),cc.xy(2,1));
262 pb
.addLabel("Heilmittel auswählen",cc
.xy(2,2));
263 cmbDiszi
= new JRtaComboBox(new String
[] {"Physio-Rezept","Massage/Lymphdrainage-Rezept","Ergotherapie-Rezept","Logopädie-Rezept","Podologie-Rezept"});
264 cmbDiszi
.setSelectedItem(SystemConfig
.initRezeptKlasse
);
265 cmbDiszi
.setActionCommand("einlesen");
267 pb
.add(cmbDiszi
,cc
.xy(2,4));
269 butLinks[0] = new JButton("Abrechnungsdaten einlesen");
270 butLinks[0].setActionCommand("einlesen");
271 butLinks[0].addActionListener(this);
272 pb.addLabel("",cc.xy(2,6));
273 pb.add(butLinks[0],cc.xy(2,8));
275 //rootKasse = new DefaultMutableTreeNode( "Abrechnung für Kasse..." );
276 //rootKasse = new DefaultMutableTreeNode( "Abrechnung für Kasse..." );
277 rootKasse
= new JXTTreeNode(new KnotenObjekt("Abrechnung für Kasse...","",false,"",""),true);
278 treeModelKasse
= new KassenTreeModel((JXTTreeNode
) rootKasse
);
280 treeKasse
= new JXTree(treeModelKasse
);
281 treeKasse
.setModel(treeModelKasse
);
282 treeKasse
.setName("kassentree");
283 treeKasse
.getSelectionModel().addTreeSelectionListener(this);
284 treeKasse
.setCellRenderer(new MyRenderer(SystemConfig
.hmSysIcons
.get("zuzahlok")));
285 treeKasse
.addMouseListener(this);
286 JScrollPane jscrk
= JCompTools
.getTransparentScrollPane(treeKasse
);
288 pb
.add(jscrk
,cc
.xy(2, 6));
289 new SwingWorker
<Void
,Void
>(){
291 protected Void
doInBackground() throws Exception
{
292 Reha
.thisFrame
.setCursor(Reha
.thisClass
.wartenCursor
);
300 htmlPane
= new JEditorPane(/*initialURL*/);
301 htmlPane
.setContentType("text/html");
302 htmlPane
.setEditable(false);
303 htmlPane
.setOpaque(false);
304 jscrk
= JCompTools
.getTransparentScrollPane(htmlPane
);
306 pb
.add(jscrk
,cc
.xy(2,10));
308 pb
.getPanel().validate();
310 JScrollPane jscr
= JCompTools
.getTransparentScrollPane(pb
.getPanel());
312 cmbDiszi
.addActionListener(this);
316 private JXPanel getIVPanel(){
317 JXPanel jpan = new JXPanel();
318 jpan.setOpaque(false);
319 String xwerte = "0dlu,fill:0:grow(1.0),0dlu";
321 String ywerte = "5dlu,p,3dlu,p,25dlu";
322 FormLayout lay = new FormLayout(xwerte,ywerte);
323 CellConstraints cc = new CellConstraints();
325 soll302 = new JRtaCheckBox("Abrechnung nach §302 erstellen");
326 soll302.setSelected(true);
327 soll302.setOpaque(false);
328 jpan.add(soll302,cc.xy(2,2));
329 alternativeKK = new JButton("Adresse...");
330 alternativeKK.setActionCommand("alternativeadresse");
331 alternativeKK.addActionListener(this);
332 Image img = new ImageIcon(Reha.proghome+"icons/krankenkasse.png").getImage().getScaledInstance(22, 22, Image.SCALE_SMOOTH);
333 alternativeKK.setIcon(new ImageIcon(img));
334 jpan.add(alternativeKK,cc.xy(2,4));
338 private JXPanel
getRight(){
339 this.abrRez
= new AbrechnungRezept(this);
340 this.abrRez
.setRechtsAufNull();
343 public boolean getTageDrucken(){
344 return this.abrRez
.getTageDrucken();
347 public void patStammEventOccurred(PatStammEvent evt
) {
348 // TODO Auto-generated method stub
352 public void setJry(JAbrechnungInternal jry
) {
356 public JAbrechnungInternal
getJry() {
359 public JXTTreeNode
getaktuellerKassenKnoten(){
360 return aktuellerKassenKnoten
;
363 public void actionPerformed(ActionEvent arg0
) {
364 String cmd
= arg0
.getActionCommand();
365 if(cmd
.equals("einlesen")){
366 //rootKasse.removeAllChildren();
367 //String[] reznr = {"KG","MA","ER","LO"};
368 String
[] diszis
= {"Physio","Massage","Ergo","Logo","Podo"};
369 aktDisziplin
= diszis
[cmbDiszi
.getSelectedIndex()];
370 //abrRez.setKuerzelVec(reznr[cmbDiszi.getSelectedIndex()]);
371 if(abrRez
.rezeptSichtbar
){
372 abrRez
.setRechtsAufNull();
376 //setPreisVec(cmbDiszi.getSelectedIndex());
378 if(cmd
.equals("alternativeadresse")){
382 private String
getDiszis(){
383 String
[] diszis
= {"Physio","Massage","Ergo","Logo","Podo"};
384 return String
.valueOf(diszis
[cmbDiszi
.getSelectedIndex()]);
386 public void einlesenErneuern(){
387 String
[] diszis
= {"Physio","Massage","Ergo","Logo","Podo"};
388 aktDisziplin
= diszis
[cmbDiszi
.getSelectedIndex()];
389 //abrRez.setKuerzelVec(reznr[cmbDiszi.getSelectedIndex()]);
390 if(abrRez
.rezeptSichtbar
){
391 abrRez
.setRechtsAufNull();
397 private void setPreisVec(int pos){
398 String[] reznr = {"KG","MA","ER","LO"};
399 //abrRez.setPreisVec(reznr[pos]);
400 JOptionPane.showMessageDialog(null, "Aufruf von setPreisVec in AbrechnungGKV");
405 * Einlesen der abrechnungsdaten
407 public void doEinlesen(JXTTreeNode aktKassenNode
){
408 //final JXTTreeNode xaktKassenNode = aktKassenNode;
409 new SwingWorker
<Void
,Void
>(){
411 protected Void
doInBackground() throws Exception
{
413 new SwingWorker
<Void
,Void
>(){
415 protected Void
doInBackground() throws Exception
{
416 Reha
.thisClass
.progressStarten(true);
420 existiertschon
.clear();
421 String dsz
= diszis
[cmbDiszi
.getSelectedIndex()];
423 String cmd
= "select name1,ikktraeger,ikkasse,id from fertige where rezklasse='"+dsz
+"' ORDER BY ikktraeger , id";
425 Vector
<Vector
<String
>> vecKassen
= SqlInfo
.holeFelder(cmd
);
427 if(vecKassen
.size() <= 0){
428 kassenBaumLoeschen();
429 Reha
.thisClass
.progressStarten(false);
432 kassenBaumLoeschen();
433 treeKasse
.setEnabled(true);
434 String kas
= vecKassen
.get(0).get(0).trim().toUpperCase();
435 String ktraeger
= vecKassen
.get(0).get(1).trim();
436 String ikkasse
= vecKassen
.get(0).get(2).trim();
437 existiertschon
.add(ktraeger
);
440 astAnhaengen(kas
,ktraeger
,ikkasse
);
448 for(int i
= 0; i
< vecKassen
.size();i
++){
449 if(! existiertschon
.contains(vecKassen
.get(i
).get(1).trim().toUpperCase())){
450 kas
= vecKassen
.get(i
).get(0).trim().toUpperCase();
451 ktraeger
= vecKassen
.get(i
).get(1);
452 ikkasse
= vecKassen
.get(i
).get(2);
453 existiertschon
.add(ktraeger
);
454 astAnhaengen(kas
,ktraeger
,ikkasse
);
455 rezepteAnhaengen(aeste
);
461 treeKasse
.validate();
462 treeKasse
.setRootVisible(true);
464 treeKasse
.expandRow(0);
468 }catch(Exception ex
){
469 ex
.printStackTrace();
471 Reha
.thisFrame
.setCursor(Reha
.thisClass
.cdefault
);
472 Reha
.thisClass
.progressStarten(false);
477 private void rezepteAnhaengen(int knoten
){
478 String ktraeger
= ((JXTTreeNode
)rootKasse
.getChildAt(knoten
)).knotenObjekt
.ktraeger
;
479 String dsz
= diszis
[cmbDiszi
.getSelectedIndex()];
480 String cmd
= "select rez_nr,pat_intern,ediok,ikkasse from fertige where rezklasse='"+dsz
+"' AND ikktraeger='"+
481 ktraeger
+"' ORDER BY id,pat_intern";
483 Vector
<Vector
<String
>> vecKassen
= SqlInfo
.holeFelder(cmd
);
485 JXTTreeNode node
= (JXTTreeNode
) rootKasse
.getChildAt(knoten
);
486 //JXTTreeNode treeitem = null;
488 JXTTreeNode meinitem
= null;
489 for(int i
= 0;i
<vecKassen
.size();i
++){
491 cmd
= "select n_name from pat5 where pat_intern='"+
492 vecKassen
.get(i
).get(1)+"' LIMIT 1";
494 String name
= SqlInfo
.holeFelder(cmd
).get(0).get(0);
495 cmd
= "select preisgruppe from verordn where rez_nr='"+vecKassen
.get(i
).get(0)+"' LIMIT 1";;
496 ////System.out.println(cmd);
497 String preisgr
= SqlInfo
.holeEinzelFeld(cmd
);
498 ////System.out.println("Preisgruppe="+preisgr);
500 KnotenObjekt rezeptknoten
= new KnotenObjekt(vecKassen
.get(i
).get(0)+"-"+name
,
501 vecKassen
.get(i
).get(0),
502 (vecKassen
.get(i
).get(2).equals("T")?
true : false),
503 vecKassen
.get(i
).get(3),
505 rezeptknoten
.ktraeger
= ktraeger
;
506 rezeptknoten
.pat_intern
= vecKassen
.get(i
).get(1);
507 meinitem
= new JXTTreeNode(rezeptknoten
,true);
509 treeModelKasse
.insertNodeInto(meinitem
,node
,node
.getChildCount());
510 treeKasse
.validate();
511 }catch(Exception ex
){
517 private void astAnhaengen(String ast
,String ktraeger
,String ikkasse
){
518 KnotenObjekt knoten
= new KnotenObjekt(ast
,"",false,"","");
519 knoten
.ktraeger
= ktraeger
;
520 knoten
.ikkasse
= ikkasse
;
521 JXTTreeNode node
= new JXTTreeNode(knoten
,true);
522 treeModelKasse
.insertNodeInto(node
, rootKasse
, rootKasse
.getChildCount());
523 treeKasse
.validate();
525 private void kassenBaumLoeschen(){
528 while( (rootKasse
.getChildCount()) > 0){
529 treeModelKasse
.removeNodeFromParent((JXTTreeNode
) ((JXTTreeNode
) treeModelKasse
.getRoot()).getChildAt(0));
531 treeKasse
.validate();
533 }catch(Exception ex
){
534 ex
.printStackTrace();
537 /*******************************************/
538 private void doKassenTreeAuswerten(KnotenObjekt node
){
540 setCursor(Reha
.thisClass
.wartenCursor
);
541 Reha
.thisClass
.progressStarten(true);
543 if(! this.abrRez
.setNewRez(node
.rez_num
,node
.fertig
,aktDisziplin
) ){
544 Reha
.thisClass
.progressStarten(false);
545 setCursor(Reha
.thisClass
.normalCursor
);
546 JOptionPane
.showMessageDialog(null,"Rezept konnte nicht ausgewertet werden");
549 }catch(Exception ex
){
550 ex
.printStackTrace();
552 ////System.out.println("Rezept "+node.rez_num+" fertig eingestellt");
553 setCursor(Reha
.thisClass
.normalCursor
);
554 SwingUtilities
.invokeLater(new Runnable(){
556 Reha
.thisClass
.progressStarten(false);
564 /*******************************************/
566 private void doAufraeumen(){
567 butLinks[0].removeActionListener(this);
568 cmbDiszi.removeActionListener(this);
569 treeKasse.getSelectionModel().removeTreeSelectionListener(this);
572 public void loescheKnoten(){
573 //rezept aus fertige löschen
574 //Verschluß des Rezeptes aufheben
576 //wenn einziger Knoten den kassenKnoten löschen
577 String rez_nr
= this.aktuellerKnoten
.knotenObjekt
.rez_num
;
578 String cmd
= "delete from fertige where rez_nr='"+rez_nr
+"' LIMIT 1";
579 SqlInfo
.sqlAusfuehren(cmd
);
580 cmd
= "update verordn set abschluss='F' where rez_nr='"+rez_nr
+"' LIMIT 1";
581 SqlInfo
.sqlAusfuehren(cmd
);
583 treeModelKasse
.removeNodeFromParent(this.aktuellerKnoten
);
584 }catch(Exception ex
){
585 JOptionPane
.showMessageDialog(null, "Kritische Situation bei Aktion aufschließen des Rezeptes");
587 this.aktuellerKassenKnoten
.getNextNode();
588 int anzahlrez
= this.aktuellerKassenKnoten
.getChildCount();
590 treeModelKasse
.removeNodeFromParent(this.aktuellerKassenKnoten
);
592 this.rechneKasse(this.aktuellerKassenKnoten
);
594 this.abrRez
.setRechtsAufNull();
597 public void valueChanged(TreeSelectionEvent arg0
) {
598 //TreePath path = arg0.getNewLeadSelectionPath();
599 TreePath tp
= treeKasse
.getSelectionPath();
600 kontrollierteRezepte
= 0;
605 JXTTreeNode node
= (JXTTreeNode
) tp
.getLastPathComponent();
606 String rez_nr
= ((JXTTreeNode
)node
).knotenObjekt
.rez_num
;
607 if(!rez_nr
.trim().equals("")){
608 aktuellerKnoten
= node
;
609 doKassenTreeAuswerten(node
.knotenObjekt
);
610 aktuellerPat
= node
.knotenObjekt
.pat_intern
;
611 aktuellerKassenKnoten
=(JXTTreeNode
) ((JXTTreeNode
)aktuellerKnoten
).getParent();
613 if(! ((JXTTreeNode
)node
).knotenObjekt
.preisgruppe
.trim().equals("")){
614 ////System.out.println("Aktuelle Disziplin = "+getDiszis()+" / Aktuelle Preisgruppe = "+pgr);
615 pgr
= Integer
.parseInt(((JXTTreeNode
)node
).knotenObjekt
.preisgruppe
.trim());
616 zuzahlModusDefault
= (SystemPreislisten
.hmZuzahlModus
.get(getDiszis()).get(pgr
-1)==1 ?
true : false);
619 JOptionPane
.showMessageDialog(null,"Achtung Preisgruppe kann nicht ermittelt werden!\nBitte dieses Rezept nicht abrechnen!");
621 ////System.out.println("Preisguppe = "+Integer.toString(pgr)+"\nZuhahlmodus = "+(zuzahlModusDefault ? "Normal" : "Bayrisch"));
624 abrRez
.setRechtsAufNull();
625 aktuellerKnoten
= (JXTTreeNode
)node
;
626 if(aktuellerKnoten
.getParent() != null){
627 if(((JXTTreeNode
)aktuellerKnoten
.getParent()).isRoot()){
628 aktuellerKassenKnoten
=(JXTTreeNode
) ((JXTTreeNode
)aktuellerKnoten
);
629 //////System.out.println("Aktueller Knoten ist Root");
631 //////System.out.println("Aktueller Knoten ungleich Root");
633 //////System.out.println("Pfad zu Parent = "+new TreePath(aktuellerKnoten.getParent()).toString());
635 aktuellerKassenKnoten
= null;
640 kassenUmsatz
[0] = 0.00;
641 kassenUmsatz
[1] = 0.00;
642 if(aktuellerKassenKnoten
!= null){
643 rechneKasse(aktuellerKassenKnoten
);
647 public void setKassenUmsatzNeu(){
648 kassenUmsatz
[0] = 0.00;
649 kassenUmsatz
[1] = 0.00;
650 if(aktuellerKassenKnoten
!= null){
651 rechneKasse(aktuellerKassenKnoten
);
654 public String
getAbrechnungKasse(){
655 ////System.out.println(((JXTTreeNode)aktuellerKnoten).knotenObjekt.ktraeger);
656 return ((JXTTreeNode
)aktuellerKnoten
).knotenObjekt
.ktraeger
;
658 public void rechneKasse(JXTTreeNode aktKasse
){
659 kontrollierteRezepte
= 0;
660 final JXTTreeNode xaktKasse
= aktKasse
;
661 new SwingWorker
<Void
,Void
>(){
663 protected Void
doInBackground() throws Exception
{
665 int lang
= xaktKasse
.getChildCount();
666 Reha
.thisClass
.progressStarten(true);
667 getInstance().setCursor(Reha
.thisClass
.wartenCursor
);
668 for(int i
= 0; i
< lang
;i
++){
669 if( ((JXTTreeNode
)xaktKasse
.getChildAt(i
)).knotenObjekt
.fertig
){
670 kontrollierteRezepte
++;
671 holeUmsaetze(((JXTTreeNode
)xaktKasse
.getChildAt(i
)).knotenObjekt
.rez_num
);
674 setHtmlLinksUnten(lang
,kontrollierteRezepte
);
675 Reha
.thisClass
.progressStarten(false);
676 getInstance().setCursor(Reha
.thisClass
.cdefault
);
677 }catch(Exception ex
){
678 ex
.printStackTrace();
684 public void setHtmlLinksUnten(int gesamt
,int gut
){
685 htmlBuf
.setLength(0);
686 htmlBuf
.trimToSize();
687 htmlBuf
.append("<html><head>");
688 htmlBuf
.append("<STYLE TYPE=\"text/css\">");
689 htmlBuf
.append("<!--");
690 htmlBuf
.append("A{text-decoration:none;background-color:transparent;border:none}");
691 htmlBuf
.append("TD{font-family: Tahoma; font-size: 11pt; padding-left:5px;padding-right:30px}");
692 htmlBuf
.append(".spalte1{color:#0000FF;}");
693 htmlBuf
.append(".spalte2{color:#FF0000;}");
694 htmlBuf
.append(".spalte3{color:#333333;}");
695 htmlBuf
.append("--->");
696 htmlBuf
.append("</STYLE>");
697 htmlBuf
.append("</head>");
698 htmlBuf
.append("<div style=margin-left:0px;>");
699 htmlBuf
.append("<font face=\"Tahoma\"><style=margin-left=0px;>");
700 htmlBuf
.append("<br>");
701 htmlBuf
.append("<table>");
702 htmlBuf
.append("<tr><td>fertige Rezepte:</td>");
703 htmlBuf
.append("<td class=\"spalte1\" align=\"right\"><b>"+gesamt
+"</b></td></tr>");
704 htmlBuf
.append("<tr><td>abrechnungsfähig:</td>");
705 htmlBuf
.append((gesamt
!= gut ?
"<td class=\"spalte2\" align=\"right\">" : "<td class=\"spalte1\" align=\"right\">" )+
706 "<b>"+gut
+"</b></td></tr>");
707 htmlBuf
.append("<tr><td>Umsatz:</td>");
708 htmlBuf
.append("<td class=\"spalte1\" align=\"right\">"+dfx
.format(kassenUmsatz
[0])+"</td></tr>");
709 htmlBuf
.append("<tr><td>enth. Rezeptgeb.: </td>");
710 htmlBuf
.append("<td class=\"spalte1\" align=\"right\">"+dfx
.format(kassenUmsatz
[1])+"</td></tr>");
711 htmlBuf
.append("</table>");
712 htmlBuf
.append("</div>");
713 htmlBuf
.append("</html>");
714 htmlPane
.setText(htmlBuf
.toString());
716 public void holeUmsaetze(String rez_nr
){
720 buf
.append(SqlInfo
.holeFelder("select edifact from fertige where rez_nr='"+rez_nr
+"'").get(0).get(0));
721 }catch(Exception ex
){}
723 JOptionPane
.showMessageDialog(null,"Kassenumsatz für Rezept + "+rez_nr
+" kann nicht abgeholt werden. Modul holeUmsatz() (Edifact)");
725 //////System.out.println(buf.toString());
726 String
[] zeilen
= buf
.toString().split("\n");
727 String
[] positionen
= zeilen
[0].split(":");
728 //PG=1:PATINTERN=16961:REZNUM=KG57747:GESAMT=102,30:REZGEB=20,26:REZANTEIL=10,26:REZPAUSCHL=10,00:KASSENID=116
729 kassenUmsatz
[0] = kassenUmsatz
[0]+ Double
.valueOf(positionen
[3].split("=")[1].replace(",", "."));
730 kassenUmsatz
[1] = kassenUmsatz
[1]+ Double
.valueOf(positionen
[4].split("=")[1].replace(",", "."));
732 /**************************************************/
734 public void starteAbrechnung(){
736 hmKostentraeger
.clear();
737 if(!Reha
.officeapplication
.isActive()){
739 Reha
.starteOfficeApplication();
740 if(!Reha
.officeapplication
.isActive()){
742 JOptionPane
.showMessageDialog(null, "Das OpenOffice-System reagiert nicht korrekt!\nAbrechnung wird nicht gestartet");
745 }catch(Exception ex
){
747 JOptionPane
.showMessageDialog(null, "Das OpenOffice-System reagiert nicht korrekt!\nAbrechnung wird nicht gestartet");
752 if(aktuellerKassenKnoten
==null){
753 abrDlg
.setVisible(false);
756 Reha
.thisClass
.progressStarten(false);
757 JOptionPane
.showMessageDialog(null, "Keine Kasse für die Abrechnung ausgewählt!");
760 if(kontrollierteRezepte
<=0){
761 abrDlg
.setVisible(false);
764 Reha
.thisClass
.progressStarten(false);
765 JOptionPane
.showMessageDialog(null, "Für die ausgewählte Kasse sind keine Rezepte zur Abrechnung freigegeben!");
770 abgerechneteRezepte
.clear();
771 abgerechnetePatienten
.clear();
772 abrechnungRezepte
= 0;
773 preis00
= setzePreiseAufNull(preis00
);
774 preis11
= setzePreiseAufNull(preis11
);
775 preis31
= setzePreiseAufNull(preis31
);
776 preis51
= setzePreiseAufNull(preis51
);
777 positionenBuf
.setLength(0);positionenBuf
.trimToSize();
778 unbBuf
.setLength(0);unbBuf
.trimToSize();
779 unzBuf
.setLength(0);unzBuf
.trimToSize();
780 gesamtBuf
.setLength(0);gesamtBuf
.trimToSize();
781 auftragsBuf
.setLength(0);auftragsBuf
.trimToSize();
782 positionenAnzahl
= 0;
784 annahmeAdresseOk
= false;
785 /**********************************/
787 abzurechnendeKassenID
= getAktKTraeger();
788 String preisgr
= getPreisgruppenKuerzel(aktDisziplin
);
789 String cmd
= "select ik_kasse,ik_kostent,ik_nutzer,ik_physika,ik_papier,"+preisgr
+" from kass_adr where ik_kasse='"+abzurechnendeKassenID
+"' LIMIT 1";
791 kassenIKs
= SqlInfo
.holeFelder(cmd
);
792 ////System.out.println(cmd);
793 if(kassenIKs
.size()<=0){
794 Reha
.thisClass
.progressStarten(false);
795 abrDlg
.setVisible(false);
798 JOptionPane
.showMessageDialog(null, "Fehler - Daten der Krankenkasse konnten nicht ermittelt werden");
799 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
803 public String abrechnungsModus = "abrechnung302";
804 final String ABR_MODE_302 = "abrechnung302";
805 final String ABR_MODE_IV = "abrechnungIV";
808 ik_kasse
= kassenIKs
.get(0).get(0);
809 ik_kostent
= kassenIKs
.get(0).get(1);
810 ik_nutzer
= kassenIKs
.get(0).get(2);
811 ik_physika
= kassenIKs
.get(0).get(3);
812 ik_papier
= kassenIKs
.get(0).get(4);
813 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_physika
+"' LIMIT 1");
815 //System.out.println(" kasse = "+ik_kasse);
816 //System.out.println("kostent = "+ik_kostent);
817 //System.out.println(" nutzer = "+ik_nutzer);
818 //System.out.println("physika = "+ik_physika);
819 //System.out.println(" email = "+ik_email);
822 if(abrechnungsModus
.equals(ABR_MODE_302
)){
823 if(ik_email
.equals("")){
824 ik_email
= SqlInfo
.holeEinzelFeld("select email1 from kass_adr where ik_kasse='"+ik_physika
+"' LIMIT 1");
826 if(ik_email
.equals("")){
827 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_kasse
+"' LIMIT 1");
829 if(ik_email
.equals("")){
830 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_kostent
+"' LIMIT 1");
832 if(ik_email
.equals("")){
833 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_physika
+"' LIMIT 1");
836 if(ik_email
.trim().equals("")){
837 JOptionPane
.showMessageDialog(null,"Emailadresse ist weder der Datenannahmestelle noch dem Kostenträger\noder der Kasse selbst zugeordnet."+
838 "\n\n Bitte geben Sie die Emailadresse von Hand ein");
839 Object ret
= JOptionPane
.showInputDialog(null, "Geben Sie bitte die Emailadresse der Datenannahmestelle ein","");
841 Reha
.thisClass
.progressStarten(false);
842 abrDlg
.setVisible(false);
845 JOptionPane
.showMessageDialog(null, "Fehler - keine Emailadresse eingegeben");
846 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
849 ik_email
= String
.valueOf(ret
);
852 preisVector
= RezTools
.holePreisVector(diszis
[cmbDiszi
.getSelectedIndex()],Integer
.parseInt(kassenIKs
.get(0).get(5))-1);
853 name_kostent
= holeNameKostentraeger();
856 if(abrechnungsModus
.equals(ABR_MODE_302
)){
857 test
= "IK der Krankenkasse: "+ik_kasse
+"\n"+
858 "IK des Kostenträgers: "+ik_kostent
+"\n"+
859 "IK des Nutzer mit EntschlüsselungsbefungnisKostenträgers: "+ik_nutzer
+"\n"+
860 "IK der Datenannahmestelle: "+ik_physika
+"\n"+
861 "IK der Papierannahmestelle: "+ik_papier
+"\n"+
862 "Emailadresse der Datenannahmestelle: "+ik_email
+"\n"+
863 "Name des Kostenträgers: "+name_kostent
;
865 /************************************************/
866 hmKostentraeger
.put("name1",String
.valueOf(name_kostent
));
867 /************************************************/
869 test
= "IK der Krankenkasse: "+ik_kasse
+"\n"+
870 "Keine Abrechnung nach § 302!!!\n\n"+
871 "Rechnungsanschrift:\n"+
872 hmAlternativeKasse
.get("<Ivnam1>")+"\n"+
873 hmAlternativeKasse
.get("<Ivnam2>")+"\n"+
874 hmAlternativeKasse
.get("<Ivstrasse>")+"\n"+
875 hmAlternativeKasse
.get("<Ivplz>")+" "+
876 hmAlternativeKasse
.get("<Ivort>");
877 //hmAlternativeKasse.get("<Ivid>");
878 hmKostentraeger
.put("name1",String
.valueOf(hmAlternativeKasse
.get("<Ivnam1>")));
880 int anfrage
= JOptionPane
.showConfirmDialog(null,test
, "Die Abrechnung mit diesen Parametern starten?", JOptionPane
.YES_NO_OPTION
);
881 if(anfrage
!= JOptionPane
.YES_OPTION
){
883 //SqlInfo.sqlAusfuehren("update nummern set rnr='"+aktRechnung+"' where mandant='"+Reha.aktIK+"' LIMIT 1");
886 /***********hier erst die Nummer erzeugen **************/
887 aktRechnung
= Integer
.toString(SqlInfo
.erzeugeNummer("rnr"));
888 if(abrechnungsModus
.equals(ABR_MODE_302
)){
889 aktEsol
= StringTools
.fuelleMitZeichen(Integer
.toString(SqlInfo
.erzeugeNummerMitMax("esol", 999)), "0", true, 3);
891 /************************************************/
892 hmKostentraeger
.put("aktesol",String
.valueOf(aktEsol
));
893 /************************************************/
894 aktDfue
= StringTools
.fuelleMitZeichen(Integer
.toString(SqlInfo
.erzeugeNummerMitMax("dfue", 99999)), "0", true, 5);
895 if(aktRechnung
.equals("-1")){
896 Reha
.thisClass
.progressStarten(false);
897 abrDlg
.setVisible(false);
900 JOptionPane
.showMessageDialog(null, "Fehler - Rechnungsnummer kann nicht bezogen werden");
905 /*****************************************/
906 if(abrechnungsModus
.equals(ABR_MODE_302
)){
907 if(ik_email
.trim().equals("")){
908 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Emailadresse zugewiesen\n"+
909 "Abrechnung nach §302 ist nicht möglich!");
911 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
914 if(ik_papier
.trim().equals("")){
915 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Papierannahmestelle zugewiesen\n"+
916 "Abrechnung nach §302 ist nicht möglich!");
918 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
921 if(ik_nutzer
.trim().equals("")){
922 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Nutzer mit Entschlüsselungsbefugnis zugewiesen\n"+
923 "Abrechnung nach §302 ist nicht möglich!");
924 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
928 if(ik_physika
.trim().equals("")){
929 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Empfänger der Abrechnungsdaten zugewiesen\n"+
930 "Abrechnung nach §302 ist nicht möglich!");
931 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
935 hmAnnahme
= holeAdresseAnnahmestelle(true);
936 annahmeAdresseOk
= true;
938 hmAnnahme
= holeAdresseAnnahmestelle(false);
939 annahmeAdresseOk
= true;
946 abrDlg
.setVisible(true);
955 gesamtBuf
.append(unbBuf
.toString());
956 gesamtBuf
.append(positionenBuf
.toString());
957 gesamtBuf
.append(unzBuf
.toString());
958 abrDlg
.setzeLabel("übertrage EDIFACT in Datenbank");
960 if(Reha
.vollbetrieb
&& abrechnungsModus
.equals(ABR_MODE_302
)){
961 PreparedStatement ps
= null;
963 ps
= (PreparedStatement
) Reha
.thisClass
.conn
.prepareStatement(
964 "insert into edifact (r_nummer, r_datum,r_edifact) VALUES (?,?,?)");
965 ps
.setString(1, aktRechnung
);
966 ps
.setString(2, DatFunk
.sDatInSQL(DatFunk
.sHeute()));
967 ps
.setBytes(3, gesamtBuf
.toString().getBytes());
971 } catch (SQLException e1
) {
972 e1
.printStackTrace();
978 } catch (SQLException e
) {
986 if(abrechnungsModus
.equals(ABR_MODE_302
)){
989 f
= new File(Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".org");
990 fw
= new FileWriter(f
);
991 bw
= new BufferedWriter(fw
);
992 bw
.write(gesamtBuf
.toString());
999 abrDlg
.setzeLabel("Rechnungsdatei verschlüsseln");
1000 int originalSize
= Integer
.parseInt(Long
.toString(f
.length()));
1001 int encryptedSize
= originalSize
;
1002 String skeystore
= Reha
.proghome
+"keystore/"+Reha
.aktIK
+"/"+Reha
.aktIK
+".p12";
1003 File fkeystore
= new File(skeystore
);
1004 if(! fkeystore
.exists()){
1005 abrDlg
.setzeLabel("Rechnungsdatei verschlüsseln - fehlgeschlagen!!!");
1006 String message
= "<html>Auf Ihrem System ist keine (ITSG) Zertifikatsdatenbank vorhanden.<br>"+
1007 "Eine Verschlüsselung gemäß §302 SGB V kann daher nicht durchgeführt werden.<br><br>"+
1008 "Melden Sie sich im Forum <a href='http://www.thera-pi.org'>www.Thera-Pi.org</a> und fragen Sie nach dem<br>Verschlüsseler <b>'Nebraska'</b></html>";
1009 Reha
.thisClass
.progressStarten(false);
1010 JOptionPane
.showMessageDialog(null, message
);
1014 encryptedSize
= doVerschluesseln(aktEsol
+".org");
1018 if(encryptedSize
< 0){
1019 JOptionPane
.showMessageDialog(null, "Es ist ein Fehler in der Verschlüsselung aufgetreten!");
1020 Reha
.thisClass
.progressStarten(false);
1021 abrDlg
.setVisible(false);
1027 doAuftragsDatei(originalSize
,encryptedSize
);
1030 f
= new File(Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".auf");
1031 fw
= new FileWriter(f
);
1032 bw
= new BufferedWriter(fw
);
1033 bw
.write(auftragsBuf
.toString());
1037 } catch (IOException e
) {
1038 e
.printStackTrace();
1040 abrDlg
.setzeLabel("erstelle Email an: "+ik_email
);
1044 if("1".equals(SystemConfig
.hmAbrechnung
.get("hmaskforemail"))){
1045 int frage
= JOptionPane
.showConfirmDialog(null,"Wollen Sie die Abrechnungsdatei esol0"+aktEsol
+" an die Adresse\n"+
1046 "--> "+ik_email
+" <-- versenden?","Benutzeranfrage",JOptionPane
.YES_NO_OPTION
);
1047 if(frage
==JOptionPane
.YES_OPTION
){
1055 String meldung = "Die Dateien "+"esol0"+aktEsol+".auf und "+"esol0"+aktEsol+" wurden erfolgreich\n"+
1056 "an die Adresse "+ik_email+" versandt.\n";
1057 JOptionPane.showMessageDialog(null, meldung);
1060 }catch(Exception ex
){
1061 String meldung
= "Die Dateien "+"esol0"+aktEsol
+".auf und "+"esol0"+aktEsol
+" sollten an die"+
1062 "Adresse "+ik_email
+" gesendet werden.\n\n"+
1063 "Versand ist fehlgeschlagen, bitte von Hand erneut senden";
1064 JOptionPane
.showMessageDialog(null, meldung
);
1069 /*********************************************/
1071 abrDlg
.setzeLabel("übertrage Rezepte in Historie");
1072 if(Reha
.vollbetrieb
){
1074 abrDlg
.setzeLabel("organisiere Abrechnungsprogramm");
1076 doLoescheRezepteAusTree();
1077 Reha
.thisClass
.progressStarten(false);
1078 abrDlg
.setVisible(false);
1081 }catch(Exception ex
){
1083 Reha
.thisClass
.progressStarten(false);
1084 abrDlg
.setVisible(false);
1088 JOptionPane
.showMessageDialog(null,"Fehler beim Abrechnungsvorgang:\n"+ex
.getMessage());
1089 ex
.printStackTrace();
1091 this.abrRez
.setRechtsAufNull();
1093 /********************************************************************/
1094 private void doDlgAbort(){
1096 Reha
.thisClass
.progressStarten(false);
1097 abrDlg
.setVisible(false);
1102 private void doEmail(){
1104 ////System.out.println("Erstelle Emailparameter.....");
1105 String smtphost
= SystemConfig
.hmEmailExtern
.get("SmtpHost");
1106 //String pophost = SystemConfig.hmEmailExtern.get("Pop3Host");
1107 String authent
= SystemConfig
.hmEmailExtern
.get("SmtpAuth");
1108 String benutzer
= SystemConfig
.hmEmailExtern
.get("Username") ;
1109 String pass1
= SystemConfig
.hmEmailExtern
.get("Password");
1110 String sender
= SystemConfig
.hmEmailExtern
.get("SenderAdresse");
1111 String secure
= SystemConfig
.hmEmailExtern
.get("SmtpSecure");
1112 String useport
= SystemConfig
.hmEmailExtern
.get("SmtpPort");
1113 //String recipient = "m.schuchmann@rta.de"+","+SystemConfig.hmEmailExtern.get("SenderAdresse");
1114 String recipient
= ik_email
+","+SystemConfig
.hmEmailExtern
.get("SenderAdresse");
1116 boolean authx
= (authent
.equals("0") ?
false : true);
1117 boolean bestaetigen
= false;
1118 String
[] encodedDat
= {Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
,"esol0"+aktEsol
};
1119 //String[] encodedDat = {Reha.proghome+"edifact/"+Reha.aktIK+"/"+"esol0"+aktEsol+".org","esol0"+aktEsol+".org"};
1120 String
[] aufDat
= {Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".auf","esol0"+aktEsol
+".auf"};
1121 ArrayList
<String
[]> attachments
= new ArrayList
<String
[]>();
1122 attachments
.add(encodedDat
);
1123 attachments
.add(aufDat
);
1124 EmailSendenExtern oMail
= new EmailSendenExtern();
1126 ////System.out.println("Starte Emailversand.....");
1127 oMail
.sendMail(smtphost
, benutzer
, pass1
, sender
, recipient
, Reha
.aktIK
, text
,attachments
,authx
,bestaetigen
,secure
,useport
);
1129 ////System.out.println("Emailversand beendet.....");
1131 }catch(Exception e
){
1132 e
.printStackTrace( );
1133 JOptionPane
.showMessageDialog(null, "Emailversand fehlgeschlagen\n\n"+
1134 "Mögliche Ursachen:\n"+
1135 "- falsche Angaben zu Ihrem Emailpostfach und/oder dem Provider\n"+
1136 "- Sie haben keinen Kontakt zum Internet");
1138 }catch(Exception ex
){
1139 ex
.printStackTrace();
1140 JOptionPane
.showMessageDialog(null, "Emailversand fehlgeschlagen\n\n"+
1141 "Mögliche Ursachen:\n"+
1142 "- falsche Angaben zu Ihrem Emailpostfach und/oder dem Provider\n"+
1143 "- Sie haben keinen Kontakt zum Internet - Fehlermeldung:\n"+ex
.getMessage());
1146 /********************************************************************/
1147 private void doLoescheRezepteAusTree(){
1149 int lang
= aktuellerKassenKnoten
.getChildCount();
1151 for(int i
= (lang
-1); i
>= 0;i
--){
1152 node
= (JXTTreeNode
) aktuellerKassenKnoten
.getChildAt(i
);
1153 if(node
.knotenObjekt
.fertig
){
1154 //////System.out.println("Lösche KindKnoten an "+i);
1155 //aktuellerKassenKnoten.remove(node);
1156 treeModelKasse
.removeNodeFromParent(node
);
1159 if(aktuellerKassenKnoten
.getChildCount() <= 0){
1160 //rootKasse.remove(aktuellerKassenKnoten);
1161 treeModelKasse
.removeNodeFromParent(aktuellerKassenKnoten
);
1163 treeKasse
.validate();
1164 this.treeKasse
.repaint();
1165 }catch(Exception ex
){
1166 ex
.printStackTrace();
1169 /***************************************************************/
1170 private void doUebertragen(){
1172 String aktiverPatient
= "";
1173 JComponent patient
= AktiveFenster
.getFensterAlle("PatientenVerwaltung");
1174 if(patient
!= null){
1175 aktiverPatient
= Reha
.thisClass
.patpanel
.aktPatID
;
1178 Vector
<String
> feldNamen
= SqlInfo
.holeFeldNamen("verordn",true,Arrays
.asList(new String
[] {"id"}) );
1179 ////System.out.println(feldNamen);
1181 rechnungBuf
.setLength(0);
1182 rechnungBuf
.trimToSize();
1183 rechnungBuf
.append("select ");
1186 int rezeptFelder
= 0;
1187 for(int i
= 0; i
< feldNamen
.size();i
++){
1189 rechnungBuf
.append(","+feldNamen
.get(i
));
1191 rechnungBuf
.append(feldNamen
.get(i
));
1194 rechnungBuf
.append(" from verordn where rez_nr='");
1195 Vector
<Vector
<String
>> vec
= null;
1196 rezepte
= abgerechneteRezepte
.size();
1197 for(int i2
= 0; i2
< rezepte
;i2
++){
1198 abrDlg
.setzeLabel("übertrage Rezepte in Historie, übertrage Rezept: "+abgerechneteRezepte
.get(i2
));
1199 vec
= SqlInfo
.holeFelder(rechnungBuf
.toString()+abgerechneteRezepte
.get(i2
)+"'");
1200 rezeptFelder
= vec
.get(0).size();
1201 historieBuf
.setLength(0);
1202 historieBuf
.trimToSize();
1203 historieBuf
.append("insert into lza set ");
1204 for(int i3
= 0; i3
< rezeptFelder
;i3
++){
1205 if(!vec
.get(0).get(i3
).equals("")){
1207 historieBuf
.append(","+feldNamen
.get(i3
)+"='"+StringTools
.Escaped(vec
.get(0).get(i3
))+"'");
1209 historieBuf
.append(feldNamen
.get(i3
)+"='"+StringTools
.Escaped(vec
.get(0).get(i3
))+"'");
1213 //////System.out.println(historieBuf.toString());
1214 //////System.out.println("Übertrage Rezept "+abgerechneteRezepte.get(i2)+" in Langzeitarchiv = Historie");
1216 SqlInfo
.sqlAusfuehren(historieBuf
.toString());
1222 * In der Echtfunktion muß das Löschen in der rezept-Datenbank eingeschaltet werden
1223 * und das sofortige Löschen aus der Historie auscheschaltet werden
1228 //SqlInfo.sqlAusfuehren("delete from lza where rez_nr='"+abgerechneteRezepte.get(i2)+"' LIMIT 1");
1229 String delrez
= String
.valueOf(abgerechneteRezepte
.get(i2
));
1230 SqlInfo
.sqlAusfuehren("delete from fertige where rez_nr='"+delrez
+"' LIMIT 1");
1231 SqlInfo
.sqlAusfuehren("delete from verordn where rez_nr='"+delrez
+"' LIMIT 1");
1232 SqlInfo
.sqlAusfuehren("delete from volle where rez_nr='"+delrez
+"'");
1233 if(aktiverPatient
.equals(abgerechnetePatienten
.get(i2
)) ){
1234 posteAktualisierung(aktiverPatient
.toString());
1235 //Reha.thisClass.patpanel.aktRezept.setzeKarteiLasche();
1240 }catch(Exception ex
){
1241 ex
.printStackTrace();
1244 private void posteAktualisierung(String patid
){
1245 final String xpatid
= patid
;
1246 new SwingWorker
<Void
,Void
>(){
1248 protected Void
doInBackground() throws Exception
{
1249 String s1
= String
.valueOf("#PATSUCHEN");
1251 PatStammEvent pEvt
= new PatStammEvent(getInstance());
1252 pEvt
.setPatStammEvent("PatSuchen");
1253 pEvt
.setDetails(s1
,s2
,"") ;
1254 PatStammEventClass
.firePatStammEvent(pEvt
);
1260 /***************************************************************/
1261 private int doVerschluesseln(String datei
){
1263 String keystore
= Reha
.proghome
+"keystore/"+Reha
.aktIK
+"/"+Reha
.aktIK
+".p12";
1265 NebraskaKeystore store
= new NebraskaKeystore(keystore
, SystemConfig
.hmAbrechnung
.get("hmkeystorepw"),"123456", Reha
.aktIK
);
1266 //NebraskaKeystore store = new NebraskaKeystore(keystore, "123456","123456", Reha.aktIK);
1267 NebraskaEncryptor encryptor
= store
.getEncryptor(ik_nutzer
);
1268 String inFile
= Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".org";
1269 long size
= encryptor
.encrypt(inFile
, inFile
.replace(".org", ""));
1270 return Integer
.parseInt(Long
.toString(size
));
1271 } catch (NebraskaCryptoException e
) {
1272 e
.printStackTrace();
1273 } catch (NebraskaFileException e
) {
1274 e
.printStackTrace();
1275 } catch (NebraskaNotInitializedException e
) {
1276 e
.printStackTrace();
1280 /***************************************************************/
1281 private void doAuftragsDatei(int originalSize
,int encryptedSize
){
1282 auftragsBuf
.append("500000"+"01"+"00000348"+"000");
1283 auftragsBuf
.append("ESOL0"+aktEsol
);
1284 auftragsBuf
.append(" ");
1285 auftragsBuf
.append(StringTools
.fuelleMitZeichen(Reha
.aktIK
, " ", false, 15));
1286 auftragsBuf
.append(StringTools
.fuelleMitZeichen(Reha
.aktIK
, " ", false, 15));
1287 auftragsBuf
.append(StringTools
.fuelleMitZeichen(ik_nutzer
, " ", false, 15));
1288 auftragsBuf
.append(StringTools
.fuelleMitZeichen(ik_physika
, " ", false, 15));
1289 auftragsBuf
.append("000000");
1290 auftragsBuf
.append("000000");
1291 auftragsBuf
.append(abrDateiName
);
1292 auftragsBuf
.append(getEdiDatumFromDeutsch(DatFunk
.sHeute())+getEdiTimeString(true));
1293 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", false, 14));
1294 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", false, 14));
1295 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", false, 14));
1296 auftragsBuf
.append("000000");
1297 auftragsBuf
.append("0");
1298 auftragsBuf
.append(StringTools
.fuelleMitZeichen(Integer
.toString(originalSize
), "0", true, 12) );
1299 auftragsBuf
.append(StringTools
.fuelleMitZeichen(Integer
.toString(encryptedSize
), "0", true, 12) );
1300 auftragsBuf
.append("I800");
1301 auftragsBuf
.append("0303");
1302 auftragsBuf
.append(" ");
1303 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 5) );
1304 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 8) );
1305 auftragsBuf
.append("0");
1306 auftragsBuf
.append("00");
1307 auftragsBuf
.append("0");
1308 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 10) );
1309 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 6) );
1310 auftragsBuf
.append(StringTools
.fuelleMitZeichen(" ", " ", true, 28) );
1311 auftragsBuf
.append(StringTools
.fuelleMitZeichen(" ", " ", true, 44) );
1312 auftragsBuf
.append(StringTools
.fuelleMitZeichen(" ", " ", true, 30) );
1313 rlisteesol
= String
.valueOf(aktEsol
); //aktEsol.toString();
1314 rlistekasse
= String
.valueOf(getAbrechnungKasse());
1316 /*************************************************/
1317 private void macheEndeDaten(){
1318 String zeilenzahl
= StringTools
.fuelleMitZeichen(Integer
.toString(positionenAnzahl
+4), "0", true, 6);
1319 unzBuf
.append("UNT"+plus
+zeilenzahl
+plus
+"00002"+EOL
);
1320 unzBuf
.append("UNZ"+plus
+"000002"+plus
+aktDfue
+EOL
);
1323 /***************************************************************/
1325 private void macheKopfDaten(){
1326 //aktRechnung = Integer.toString(SqlInfo.erzeugeNummer("rnr"));
1327 new SwingWorker
<Void
,Void
>(){
1329 protected Void
doInBackground() throws Exception
{
1330 //hmAnnahme = holeAdresseAnnahmestelle();
1331 if(!annahmeAdresseOk
){
1332 long zeit
= System
.currentTimeMillis();
1333 while(!annahmeAdresseOk
){
1335 if(System
.currentTimeMillis()-zeit
> 5000){
1336 JOptionPane
.showMessageDialog(null,"Adresse der Annahmestelle konnte nicht ermittelt werden");
1342 if(abrDruck
!= null){
1343 abrDruck
.setIKundRnr(ik_papier
, aktRechnung
,hmAnnahme
);
1346 JOptionPane
.showMessageDialog(null, "Fehler im Rechnungsdruck - Fehler = abrDruck==null");
1349 rezepteUebertragen();
1351 }catch(Exception ex
){
1352 ex
.printStackTrace();
1353 JOptionPane
.showMessageDialog(null, "Fehler im Modul Rezept übertragen und Rechnung anlegen\n"+ex
.getMessage());
1355 if(abrechnungsModus
.equals(ABR_MODE_302
)){
1358 new BegleitzettelDrucken(getInstance(),abrechnungRezepte
,ik_kostent
,name_kostent
,hmAnnahme
, aktRechnung
,Reha
.proghome
+"vorlagen/"+Reha
.aktIK
+"/"+SystemConfig
.hmAbrechnung
.get("hmgkvbegleitzettel"));
1359 }catch(Exception ex
){
1360 JOptionPane
.showMessageDialog(null, "Fehler im Modul BegleitzettlDrucken - Fehler-Exception: ex\n"+ex
.getMessage());
1366 //////System.out.println(aktEsol + " - "+aktDfue);
1367 unbBuf
.append("UNB+UNOC:3+"+Reha
.aktIK
+plus
+ik_nutzer
+plus
);
1368 unbBuf
.append(getEdiDatumFromDeutsch(DatFunk
.sHeute())+":"+getEdiTimeString(false)+plus
);
1369 unbBuf
.append(aktDfue
+plus
+"B"+plus
);
1370 abrDateiName
= "SL"+Reha
.aktIK
.substring(2,8)+"S"+getEdiMonat();
1371 unbBuf
.append(abrDateiName
+plus
);
1372 unbBuf
.append("2"+EOL
);
1373 //unbBuf.append(aktDfue+plus+"B"+plus+"SL"+Reha.aktIK.substring(2,8)+"S"+getEdiMonat()+plus+"2"+EOL);
1375 unbBuf
.append("UNH+00001+SLGA:"+SlgaVersion
+":0:0"+EOL
);
1376 unbBuf
.append("FKT+01"+plus
+plus
+Reha
.aktIK
+plus
+ik_kostent
+plus
+ik_kasse
+plus
+Reha
.aktIK
+EOL
);
1377 unbBuf
.append("REC"+plus
+aktRechnung
+":0"+plus
+getEdiDatumFromDeutsch(DatFunk
.sHeute())+plus
+"1"+EOL
);
1378 unbBuf
.append("UST"+plus
+SystemConfig
.hmFirmenDaten
.get("Steuernummer")+plus
+"J"+EOL
);
1379 unbBuf
.append("GES"+plus
+"00"+plus
+dfx
.format(preis00
[0])+plus
+dfx
.format(preis00
[1])+plus
+dfx
.format(preis00
[2])+EOL
);
1380 unbBuf
.append("GES"+plus
+"11"+plus
+dfx
.format(preis11
[0])+plus
+dfx
.format(preis11
[1])+plus
+dfx
.format(preis11
[2])+EOL
);
1381 unbBuf
.append("GES"+plus
+"31"+plus
+dfx
.format(preis31
[0])+plus
+dfx
.format(preis31
[1])+plus
+dfx
.format(preis31
[2])+EOL
);
1382 unbBuf
.append("GES"+plus
+"51"+plus
+dfx
.format(preis51
[0])+plus
+dfx
.format(preis51
[1])+plus
+dfx
.format(preis51
[2])+EOL
);
1383 unbBuf
.append("NAM"+plus
+
1384 (SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung").length() > 30 ?
1385 SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung").substring(0,30) :
1386 SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung") )+plus
+
1387 SystemConfig
.hmFirmenDaten
.get("Anrede").trim()+" "+
1388 (SystemConfig
.hmFirmenDaten
.get("Nachname").trim().length() > 25 ?
1389 SystemConfig
.hmFirmenDaten
.get("Nachname").trim().substring(0,25) :
1390 SystemConfig
.hmFirmenDaten
.get("Nachname").trim() )+
1391 plus
+SystemConfig
.hmFirmenDaten
.get("Telefon")+EOL
);
1392 unbBuf
.append("UNT+000010+00001"+EOL
);
1393 unbBuf
.append("UNH+00002+SLLA:"+SllaVersion
+":0:0"+EOL
);
1394 unbBuf
.append("FKT+01"+plus
+plus
+Reha
.aktIK
+plus
+ik_kostent
+plus
+ik_kasse
+EOL
);
1395 unbBuf
.append("REC"+plus
+aktRechnung
+":0"+plus
+getEdiDatumFromDeutsch(DatFunk
.sHeute())+plus
+"1"+EOL
);
1396 getEdiTimeString(false);
1399 /***************************************************************/
1401 AbrechnungGKV
getInstance(){
1405 /***************************************************************/
1407 private String
holeNameKostentraeger(){
1408 Vector
<Vector
<String
>> vec
= SqlInfo
.holeFelder("select name1 from ktraeger where ikkasse ='"+ik_kostent
+"' LIMIT 1");
1412 return vec
.get(0).get(0);
1415 private void holeAlleKostentraegerDaten(){
1416 abzurechnendeKassenID = getAktKTraeger();
1417 String preisgr = getPreisgruppenKuerzel(aktDisziplin);
1418 String cmd = "select ik_kasse,ik_kostent,ik_nutzer,ik_physika,ik_papier,"+preisgr+" from kass_adr where ik_kasse='"+abzurechnendeKassenID+"' LIMIT 1";
1420 kassenIKs = SqlInfo.holeFelder(cmd);
1421 ////System.out.println(cmd);
1422 if(kassenIKs.size()<=0){
1423 Reha.thisClass.progressStarten(false);
1424 abrDlg.setVisible(false);
1427 JOptionPane.showMessageDialog(null, "Fehler - Daten der Krankenkasse konnten nicht ermittelt werden");
1430 ik_kasse = kassenIKs.get(0).get(0);
1431 ik_kostent = kassenIKs.get(0).get(1);
1432 ik_nutzer = kassenIKs.get(0).get(2);
1433 ik_physika = kassenIKs.get(0).get(3);
1434 ik_papier = kassenIKs.get(0).get(4);
1435 ik_email = SqlInfo.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_physika+"' LIMIT 1");
1436 preisVector = RezTools.holePreisVector(diszis[cmbDiszi.getSelectedIndex()],Integer.parseInt(kassenIKs.get(0).get(5))-1);
1437 name_kostent = holeNameKostentraeger();
1438 String test = "IK der Krankenkasse: "+ik_kasse+"\n"+
1439 "IK des Kostenträgers: "+ik_kostent+"\n"+
1440 "IK des Nutzer mit EntschlüsselungsbefungnisKostenträgers: "+ik_nutzer+"\n"+
1441 "IK der Datenannahmestelle: "+ik_physika+"\n"+
1442 "IK der Papierannahmestelle: "+ik_papier+"\n"+
1443 "Emailadresse der Datenannahmestelle: "+ik_email+"\n"+
1444 "Name des Kostenträgers: "+name_kostent;
1447 /***************************************************************/
1449 private HashMap
<String
,String
> holeAdresseAnnahmestelle(boolean nach302
){
1450 HashMap
<String
,String
> hmAdresse
= new HashMap
<String
,String
>();
1451 String
[] hmKeys
= {"<gkv1>","<gkv2>","<gkv3>","<gkv4>","<gkv5>","<gkv6>"};
1453 Vector
<Vector
<String
>> vec
= SqlInfo
.holeFelder("select kassen_nam1,kassen_nam2,strasse,plz,ort from kass_adr where ik_kasse ='"+ik_papier
+"' LIMIT 1");
1455 vec
= SqlInfo
.holeFelder("select name1,name2,adresse3,adresse1,adresse2 from ktraeger where ikkasse ='"+ik_papier
+"' LIMIT 1");
1457 for(int i
= 0; i
< hmKeys
.length
-1;i
++){
1458 hmAdresse
.put(hmKeys
[i
], "");
1460 hmAdresse
.put(hmKeys
[5],aktRechnung
);
1461 JOptionPane
.showMessageDialog(null,"Achtung Daten für die Papierannahmestelle konnt nicht ermittelt werden (vermutlich wieder mal AOK....)!\n\nBitte die Daten von Hand auf den Ausdrucken eintragen");
1465 hmAdresse
.put(hmKeys
[0],vec
.get(0).get(0) );
1466 hmAdresse
.put(hmKeys
[1],vec
.get(0).get(1) );
1467 hmAdresse
.put(hmKeys
[2],vec
.get(0).get(2) );
1468 hmAdresse
.put(hmKeys
[3],vec
.get(0).get(3)+" "+vec
.get(0).get(4));
1469 hmAdresse
.put(hmKeys
[4],"");
1470 hmAdresse
.put(hmKeys
[5],aktRechnung
);
1473 hmAdresse
.put(hmKeys
[0],hmAlternativeKasse
.get("<Ivnam1>") );
1474 hmAdresse
.put(hmKeys
[1],hmAlternativeKasse
.get("<Ivnam2>") );
1475 hmAdresse
.put(hmKeys
[2],hmAlternativeKasse
.get("<Ivstrasse>") );
1476 hmAdresse
.put(hmKeys
[3],hmAlternativeKasse
.get("<Ivplz>")+" "+hmAlternativeKasse
.get("<Ivort>"));
1477 hmAdresse
.put(hmKeys
[4],"");
1478 hmAdresse
.put(hmKeys
[5],aktRechnung
);
1483 /***************************************************************/
1485 private Double
[] setzePreiseAufNull(Double
[] preis
){
1491 private String
getEdiMonat(){
1492 String tag
= DatFunk
.sHeute();
1493 return tag
.substring(3,5);
1495 private String
getEdiDatumFromDeutsch(String deutschDat
){
1496 if(deutschDat
.trim().length()<10){
1499 return deutschDat
.substring(6)+deutschDat
.substring(3,5)+deutschDat
.substring(0,2);
1501 private String
getEdiTimeString(boolean mitsekunden
){
1502 Date date
= new Date();
1503 String
[] datesplit
= date
.toString().split(" ");
1504 //////System.out.println(date.toString());
1506 //////System.out.println("Zeit mit Sekunden"+datesplit[3].substring(0,2)+datesplit[3].substring(3,5)+datesplit[3].substring(6,8));
1507 return datesplit
[3].substring(0,2)+datesplit
[3].substring(3,5)+datesplit
[3].substring(6,8);
1509 return datesplit
[3].substring(0,2)+datesplit
[3].substring(3,5);
1513 /***************************************************************/
1515 private void holeEdifact(){
1517 if(SystemConfig
.hmAbrechnung
.get("hmgkvrauchdrucken").equals("1")){
1518 abrDruck
= new AbrechnungDrucken(this,Reha
.proghome
+
1522 SystemConfig
.hmAbrechnung
.get("hmgkvformular"));
1525 } catch (Exception e
) {
1526 JOptionPane
.showMessageDialog(null,"Fehler im Modul Rechnungdruck in AbrechnungGKV.java");
1528 e
.printStackTrace();
1530 int lang
= aktuellerKassenKnoten
.getChildCount();
1532 Vector
<Vector
<String
>> vec
;
1533 for(int i
= 0; i
< lang
;i
++){
1534 node
= (JXTTreeNode
) aktuellerKassenKnoten
.getChildAt(i
);
1535 if(node
.knotenObjekt
.fertig
){
1536 vec
= SqlInfo
.holeFelder("select edifact from fertige where rez_nr='"+(String
) node
.knotenObjekt
.rez_num
+"'");
1537 //abrDlg.setzeLabel("Edifact-Daten holen von Rezept:"+(String) node.knotenObjekt.rez_num);
1539 if(!annahmeAdresseOk
){
1540 long zeit
= System
.currentTimeMillis();
1541 while(!annahmeAdresseOk
){
1543 if(System
.currentTimeMillis()-zeit
> 5000){
1544 JOptionPane
.showMessageDialog(null,"Adresse der Annahmestelle konnte nicht ermittelt werden");
1550 //abzurechnendeKassenID = holeAbrechnungsKasse(vec.get(0).get(0));
1551 abgerechneteRezepte
.add((String
) node
.knotenObjekt
.rez_num
);
1552 abgerechnetePatienten
.add((String
) node
.knotenObjekt
.pat_intern
);
1553 //hier den Edifact-Code analysieren und die Rechnungsdatei erstellen;
1555 analysierenEdifact(vec
.get(0).get(0),(String
) node
.knotenObjekt
.rez_num
);
1556 }catch(Exception ex
){
1557 ex
.printStackTrace();
1558 JOptionPane
.showMessageDialog(null,"Unbekannter Fehler bei Edifact analysierenEdifact()\n"+ex
.getLocalizedMessage());
1562 anhaengenEdifact(vec
.get(0).get(0));
1563 }catch(Exception ex
){
1564 JOptionPane
.showMessageDialog(null,"Unbekannter Fehler bei Edifact anhaengenEdifact()\n"+ex
.getLocalizedMessage());
1567 }catch(Exception ex
){
1568 JOptionPane
.showMessageDialog(null,"Unbekannter Fehler bei Edifact anhängen");
1572 if(abgerechneteRezepte
.size() > 0){
1573 /**************Hier den offenen Posten anlegen***************/
1574 abrDlg
.setzeLabel("Offene Posten anlegen für Rechnung Nr.: "+aktRechnung
);
1575 ////System.out.println(" abgerechnete Rezepte = "+abgerechneteRezepte);
1576 ////System.out.println("abgerechnete Patienten = "+abgerechnetePatienten);
1577 ////System.out.println("abger. Bruttovolumen = "+preis00[1]);
1578 ////System.out.println(" abger. Rezeptanteil = "+preis00[2]);
1579 ////System.out.println(" abger. Nettovolumen = "+preis00[0]);
1580 ////System.out.println("Name der abger. Kasse = "+name_kostent);
1581 ////System.out.println(" IK-Kostenträger = "+ik_kostent);
1582 ////System.out.println(" Disziplin = "+diszis[cmbDiszi.getSelectedIndex()]);
1583 ////System.out.println(" Rechnung Nr. = "+aktRechnung);
1584 if(Reha
.vollbetrieb
){
1591 /***************************************************************/
1593 private void anlegenOP(){
1594 /************************************************/
1595 rechnungBuf
.setLength(0);
1596 rechnungBuf
.trimToSize();
1597 rechnungBuf
.append("insert into rliste set ");
1598 rechnungBuf
.append("r_nummer='"+aktRechnung
+"', ");
1599 rechnungBuf
.append("r_datum='"+DatFunk
.sDatInSQL(DatFunk
.sHeute())+"', ");
1600 rechnungBuf
.append("r_kasse='"+hmKostentraeger
.get("name1")+", "+"esol0"+hmKostentraeger
.get("aktesol")+"', ");
1601 rechnungBuf
.append("r_klasse='"+diszis
[cmbDiszi
.getSelectedIndex()]+"', ");
1602 rechnungBuf
.append("r_betrag='"+dfx
.format(preis00
[0]).replace(",", ".")+"', ");
1603 rechnungBuf
.append("r_offen='"+dfx
.format(preis00
[0]).replace(",", ".")+"', ");
1604 rechnungBuf
.append("r_zuzahl='"+dfx
.format(preis00
[2]).replace(",", ".")+"', ");
1605 rechnungBuf
.append("ikktraeger='"+ik_kostent
+"',");
1606 rechnungBuf
.append("ik='"+Reha
.aktIK
+"'");
1607 SqlInfo
.sqlAusfuehren(rechnungBuf
.toString());
1610 /***************************************************************/
1612 private void analysierenEdifact(String edifact
,String rez_num
){
1613 //////System.out.println(edifact);
1614 Vector
<String
> position
= new Vector
<String
>();
1615 Vector
<BigDecimal
>anzahl
= new Vector
<BigDecimal
>();
1616 Vector
<BigDecimal
>preis
= new Vector
<BigDecimal
>();
1617 Vector
<BigDecimal
>einzelpreis
= new Vector
<BigDecimal
>();
1618 Vector
<BigDecimal
>einzelzuzahlung
= new Vector
<BigDecimal
>();
1619 Vector
<BigDecimal
>rezgeb
= new Vector
<BigDecimal
>();
1620 Vector
<BigDecimal
>abrtage
= new Vector
<BigDecimal
>();
1621 BigDecimal bdAnzahl
= null;
1622 BigDecimal einzelPreisTest
= null;
1623 //BigDecimal zuzahlTest = null;
1624 String
[] zeilen
= edifact
.split("\n");
1625 boolean preisUmstellung
= false;
1626 boolean zuzahlUmstellung
= false;
1630 for(int i
= 0; i
< zeilen
.length
;i
++){
1631 if(zeilen
[i
].startsWith("EHE+")){
1632 woerter
= zeilen
[i
].split("\\+");
1633 if(!position
.contains(woerter
[2])){
1634 position
.add(woerter
[2]);
1635 bdAnzahl
= BigDecimal
.valueOf(Double
.valueOf(woerter
[3].replace(",", ".")));
1636 anzahl
.add(bdAnzahl
);
1637 abrtage
.add(BigDecimal
.valueOf(Double
.valueOf("1.00")));
1638 preis
.add(BigDecimal
.valueOf(Double
.valueOf(woerter
[4].replace(",", "."))).multiply(
1640 if(woerter
.length
==7){
1641 //Einstieg2 für Kilometer
1642 dummy
= woerter
[6].replace("'", "").replace(",", ".");
1643 if(zuzahlModusDefault
){
1644 rezgeb
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)));
1645 einzelzuzahlung
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)));
1648 System.out.println("Dummy = "+dummy);
1649 System.out.println("Muliplikator = "+bdAnzahl);
1651 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1652 rezgeb
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
));
1653 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1654 einzelzuzahlung
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
));
1657 rezgeb
.add(BigDecimal
.valueOf(Double
.valueOf("0.00")));
1658 einzelzuzahlung
.add(BigDecimal
.valueOf(Double
.valueOf("0.00")));
1661 einzelpreis
.add(BigDecimal
.valueOf(Double
.valueOf(woerter
[4].replace(",", "."))));
1664 pos
= position
.indexOf(woerter
[2]);
1665 einzelPreisTest
= BigDecimal
.valueOf(Double
.valueOf(woerter
[4].replace(",", ".")));
1666 if(!einzelPreisTest
.equals(einzelpreis
.get(pos
))){
1667 preisUmstellung
= true;
1669 bdAnzahl
= BigDecimal
.valueOf(Double
.valueOf(woerter
[3].replace(",", ".")));
1670 anzahl
.set(pos
, anzahl
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(woerter
[3].replace(",", ".")))));
1671 preis
.set(pos
, preis
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(woerter
[4].replace(",", "."))).multiply(
1673 abrtage
.set(pos
,abrtage
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf("1.00"))));
1674 if(woerter
.length
==7){
1675 //Einstieg3 für Kilometer
1676 dummy
= woerter
[6].replace("'", "").replace(",", ".");
1677 if(zuzahlModusDefault
){
1678 rezgeb
.set(pos
,rezgeb
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(dummy
))));
1679 if(! BigDecimal
.valueOf(Double
.valueOf(dummy
)).equals(einzelzuzahlung
.get(pos
))){
1680 zuzahlUmstellung
= true;
1683 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1685 System.out.println("Dummy = "+dummy);
1686 System.out.println("Muliplikator (falsch) = "+anzahl.get(pos));
1687 System.out.println("Muliplikator (richtig) = "+bdAnzahl);
1689 rezgeb
.set(pos
,rezgeb
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
)));
1690 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1691 if(! BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
).equals(einzelzuzahlung
.get(pos
))){
1692 zuzahlUmstellung
= true;
1695 rezgeb.set(pos,rezgeb.get(pos).add(BigDecimal.valueOf(Double.valueOf(dummy)).multiply(anzahl.get(pos))));
1696 if(! BigDecimal.valueOf(Double.valueOf(dummy)).multiply(bdAnzahl).equals(einzelzuzahlung.get(pos))){
1697 zuzahlUmstellung = true;
1702 //System.out.println("Keine Zuzahlung Dummy = ");
1703 //System.out.println("Keine Zuzahlung Muliplikator = "+anzahl.get(pos));
1704 rezgeb
.set(pos
,rezgeb
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf("0.00"))));
1705 if(!BigDecimal
.valueOf(Double
.valueOf("0.00")).equals(einzelzuzahlung
.get(pos
))){
1706 //////System.out.println("Einzelzuzahlung = "+einzelzuzahlung.get(pos));
1707 //////System.out.println("Vergleichswert = 0.00 ");
1708 zuzahlUmstellung
= true;
1709 //System.out.println("Umstellung der Zuzahlung = "+zuzahlUmstellung);
1716 } catch (InterruptedException e
) {
1717 e
.printStackTrace();
1718 JOptionPane
.showMessageDialog(null,"Fehler in Thread.sleep(25) analysierenEdifact\n"+e
.getMessage());
1721 String
[] splits
= zeilen
[0].split(":");
1724 abrechnungRezepte
++;
1725 if(abrDruck
!= null){
1726 abrDruck
.setDaten(splits
[9].split("=")[1],
1727 splits
[10].split("=")[1],
1728 splits
[2].split("=")[1],
1735 (splits
[6].split("=")[1].equals("10,00") ?
true : false));
1738 ////System.out.println(" Rezept Nr. ="+abrechnungRezepte+" ********Abrechnungsposition Anfang********");
1739 ////System.out.println(" Name = "+splits[9].split("=")[1]);
1740 ////System.out.println(" Status = "+splits[10].split("=")[1]);
1741 ////System.out.println(" RezeptNr. = "+splits[2].split("=")[1]);
1742 ////System.out.println(" Positionen Vector = "+position);
1743 ////System.out.println(" Anzahl Vector = "+anzahl);
1744 ////System.out.println(" Abr.tage Vector = "+abrtage);
1745 ////System.out.println(" Einzelpreis Vector = "+einzelpreis);
1746 ////System.out.println(" Kummulierte Preise = "+preis);
1747 ////System.out.println(" Kummulierte Zuzahl.= "+rezgeb);
1748 ////System.out.println(" Zuzahlungen einzel = "+einzelzuzahlung);
1749 ////System.out.println(" mit Pauschale = "+(splits[6].split("=")[1].equals("10,00") ? true : false));
1750 ////System.out.println("mit Preisumstellung = "+preisUmstellung);
1751 ////System.out.println(" mit Zuzahlwechsel = "+zuzahlUmstellung);
1752 ////System.out.println("bislang abgerechnet = "+abgerechneteRezepte);
1753 ////System.out.println(" Rechnungsadresse = "+hmAnnahme);
1754 ////System.out.println("Rezept Nr. ="+abrechnungRezepte+" ********Abrechnungsposition Ende********");
1756 /////////////////Hier die Sätze in der Rechnungsdatei anlegen///////////////
1757 if(Reha
.vollbetrieb
){
1758 schreibeInRechnungDB(
1770 } catch (Exception e
) {
1771 e
.printStackTrace();
1775 /***************************************************************/
1777 private void schreibeInRechnungDB(
1779 Vector
<String
> positionen
,
1780 Vector
<BigDecimal
>anzahl
,
1781 Vector
<BigDecimal
>abrtage
,
1782 Vector
<BigDecimal
>einzelpreis
,
1783 Vector
<BigDecimal
>preis
,
1784 Vector
<BigDecimal
>rezgeb
,
1785 boolean preisUmstellung
,
1786 boolean zuzahlUmstellung
){
1788 if(hmAnnahme
.get("<gkv1>").trim().equals("")){
1789 holeAdresseAnnahmestelle(true);
1791 }catch(Exception ex
){
1792 holeAdresseAnnahmestelle(true);
1794 abrDlg
.setzeLabel("Rechnungssatz erstellen für Rezept: "+kopf
[2].split("=")[1]);
1795 String cmdKopf
= "insert into faktura set ";
1796 for(int i
= 0; i
< positionen
.size();i
++){
1797 rechnungBuf
.setLength(0);
1798 rechnungBuf
.trimToSize();
1799 rechnungBuf
.append(cmdKopf
);
1801 rechnungBuf
.append("kassen_nam='"+hmAnnahme
.get("<gkv1>")+"', ");
1802 rechnungBuf
.append("kassen_na2='"+hmAnnahme
.get("<gkv2>")+"', ");
1803 rechnungBuf
.append("strasse='"+hmAnnahme
.get("<gkv3>")+"', ");
1805 rechnungBuf
.append("plz='"+hmAnnahme
.get("<gkv4>").split(" ")[0]+"', ");
1806 rechnungBuf
.append("ort='"+hmAnnahme
.get("<gkv4>").split(" ")[1]+"', ");
1807 rechnungBuf
.append("name='"+kopf
[9].split("=")[1]+"', ");
1808 }catch(Exception ex
){
1809 JOptionPane
.showMessageDialog(null, "Fehler in der Adressaufbereitung - Tabelle=Faktura");
1810 ex
.printStackTrace();
1813 rechnungBuf
.append("lfnr='"+Integer
.toString(i
)+"', ");
1814 rechnungBuf
.append("status='"+ kopf
[10].split("=")[1]+"', ");
1815 rechnungBuf
.append("pos_kas='"+ positionen
.get(i
) +"', ");
1816 rechnungBuf
.append("pos_int='"+ RezTools
.getIDFromPos(positionen
.get(i
),kopf
[0].split("=")[1] ,preisVector
) +"', ");
1817 rechnungBuf
.append("anzahl='"+ Integer
.toString(anzahl
.get(i
).intValue()) +"', ");
1818 rechnungBuf
.append("anzahltage='"+ Integer
.toString(abrtage
.get(i
).intValue()) +"', ");
1819 rechnungBuf
.append("preis='"+ dfx
.format(einzelpreis
.get(i
).doubleValue()).replace(",", ".") +"', ");
1820 rechnungBuf
.append("gesamt='"+ dfx
.format(preis
.get(i
).doubleValue()).replace(",", ".") +"', ");
1821 rechnungBuf
.append("zzbetrag='"+ dfx
.format(rezgeb
.get(i
).doubleValue()).replace(",", ".") +"', ");
1822 rechnungBuf
.append("netto='"+ dfx
.format((preis
.get(i
).subtract(rezgeb
.get(i
))).doubleValue()).replace(",", ".") +"', ");
1823 rechnungBuf
.append("pauschale='"+ kopf
[6].split("=")[1].replace(",", ".") +"', ");
1824 rechnungBuf
.append("rez_nr='"+ kopf
[2].split("=")[1] +"', ");
1825 if(! anzahl
.get(i
).equals(abrtage
.get(i
))){
1826 rechnungBuf
.append("kilometer='"+ dfx
.format((anzahl
.get(i
).divide(abrtage
.get(i
)).doubleValue())).replace(",",".") +"', ");
1828 rechnungBuf
.append("rezeptart='0', ");
1829 rechnungBuf
.append("pat_intern='"+kopf
[1].split("=")[1]+"', ");
1830 rechnungBuf
.append("rnummer='"+ aktRechnung
+"', ");
1831 rechnungBuf
.append("kassid='"+kopf
[7].split("=")[1]+"', ");
1832 rechnungBuf
.append("arztid='"+kopf
[8].split("=")[1]+"', ");
1833 rechnungBuf
.append("zzindex='"+ kopf
[12].split("=")[1] +"', ");
1834 rechnungBuf
.append("preisdiff='"+ (preisUmstellung ?
"T" : "F") +"', ");
1835 rechnungBuf
.append("zuzahldiff='"+ (zuzahlUmstellung ?
"T" : "F") +"', ");
1836 rechnungBuf
.append("disziplin='"+ kopf
[2].split("=")[1].subSequence(0, 2) +"', ");
1837 rechnungBuf
.append("rdatum='"+ DatFunk
.sDatInSQL(DatFunk
.sHeute()) +"',");
1838 rechnungBuf
.append("ik='"+ Reha
.aktIK
+"'");
1839 SqlInfo
.sqlAusfuehren(rechnungBuf
.toString());
1844 /***************************************************************/
1846 private String holeAbrechnungsKasse(String edifact){
1847 String[] komplett = edifact.split("\n");
1848 String[] zeile1 = komplett[0].split(":");
1849 return zeile1[7].split("=")[1];
1852 /*************************************************/
1853 private void anhaengenEdifact(String string
){
1854 String
[] edi
= string
.split("\n");
1855 //String[] preise = edi[0].split(":");
1858 status
= edi
[4].split("\\+")[2];
1859 }catch(Exception ex
){
1862 for(int i
= 4; i
< edi
.length
;i
++){
1863 positionenBuf
.append(edi
[i
]+System
.getProperty("line.separator") );
1868 } catch (InterruptedException e
) {
1869 e
.printStackTrace();
1871 if(status
.startsWith("1")){
1872 preis11
= addierePreise(preis11
,edi
[edi
.length
-1]);
1873 }else if(status
.startsWith("3")){
1874 preis31
= addierePreise(preis31
,edi
[edi
.length
-1]);
1875 }else if(status
.startsWith("5")){
1876 preis51
= addierePreise(preis51
,edi
[edi
.length
-1]);
1879 /*************************************************/
1880 private Double
[] addierePreise(Double
[] preis
,String zeile
){
1881 String
[] zahlen
= zeile
.split("\\+");
1882 Double brutto
= Double
.parseDouble(zahlen
[1].replace(",", "."));
1883 Double zuzahl
= Double
.parseDouble(zahlen
[2].replace(",", "."));
1884 preis
[1] = preis
[1]+ brutto
;
1885 preis
[2] = preis
[2]+ zuzahl
;
1886 preis
[0] = preis
[0] + (brutto
-zuzahl
);
1887 preis00
[0] = preis00
[0] + (brutto
-zuzahl
);
1888 preis00
[1] = preis00
[1] + (brutto
);
1889 preis00
[2] = preis00
[2] + (zuzahl
);
1892 /*************************************************/
1893 public boolean isRezeptSelected(){
1894 if(treeKasse
.getSelectionCount()<=0){
1897 TreePath path
= treeKasse
.getSelectionPath();
1898 return (path
.getPathCount()>=3);
1900 String
getAktKTraeger(){
1901 TreePath path
= treeKasse
.getSelectionPath();
1902 JXTTreeNode node
= (JXTTreeNode
) path
.getLastPathComponent();
1903 return ((KnotenObjekt
)node
.getUserObject()).ikkasse
;
1905 public void setRezeptOk(boolean ok
){
1907 treeKasse
.getSelectionCount();
1908 TreePath path
= treeKasse
.getSelectionPath();
1909 JXTTreeNode node
= (JXTTreeNode
) path
.getLastPathComponent();
1910 ((KnotenObjekt
)node
.getUserObject()).fertig
= ok
;
1912 kontrollierteRezepte
++;
1914 kontrollierteRezepte
--;
1916 treeKasse
.repaint();
1918 public String
getPreisgruppenKuerzel(String disziplin
){
1919 if(disziplin
.equals("Physio")){
1921 }else if(disziplin
.equals("Massage")){
1923 }else if(disziplin
.equals("Ergo")){
1925 }else if(disziplin
.equals("Logo")){
1927 }else if(disziplin
.equals("Reha")){
1929 }else if(disziplin
.equals("Podo")){
1935 /***************************************/
1937 private static class JXTTreeNode
extends DefaultMutableTreeNode
{
1941 private static final long serialVersionUID
= 2195590211796817012L;
1942 @SuppressWarnings("unused")
1943 public boolean enabled
= false;
1944 private KnotenObjekt knotenObjekt
= null;
1945 public JXTTreeNode(KnotenObjekt obj
,boolean enabled
){
1947 this.enabled
= enabled
;
1948 this.knotenObjekt
= obj
;
1950 this.setUserObject(obj
);
1954 public boolean isEnabled() {
1959 public KnotenObjekt
getObject(){
1960 return knotenObjekt
;
1964 /***************************************/
1966 public String titel
;
1967 public boolean fertig
;
1968 public String rez_num
;
1969 public String ktraeger
;
1970 public String pat_intern
;
1971 public String entschluessel
;
1972 public String ikkasse
;
1973 public String preisgruppe
;
1974 public String ohnepauschale
;
1975 public boolean langfrist
;
1976 public String langfristaz
;
1978 public KnotenObjekt(String titel
,String rez_num
,boolean fertig
,String ikkasse
,String preisgruppe
){
1980 this.fertig
= fertig
;
1981 this.rez_num
= rez_num
;
1982 this.ikkasse
= ikkasse
;
1983 this.preisgruppe
= preisgruppe
;
1986 /*************************************/
1987 private class KassenTreeModel
extends DefaultTreeModel
{
1991 private static final long serialVersionUID
= 6391618556224740611L;
1992 public KassenTreeModel(JXTTreeNode node
) {
1993 super((TreeNode
) node
);
1995 @SuppressWarnings("unused")
1996 public Object
getValueAt(Object node
, int column
) {
1997 JXTTreeNode jXnode
= (JXTTreeNode
) node
;
1999 KnotenObjekt o
= null;
2000 o
= (KnotenObjekt
) jXnode
.getUserObject();
2008 return jXnode
.getObject().titel
;
2010 @SuppressWarnings("unused")
2011 public int getColumnCount() {
2014 @SuppressWarnings("unused")
2015 public void setValueAt(Object value
, Object node
, int column
){
2016 JXTTreeNode jXnode
= (JXTTreeNode
) node
;
2018 o
= jXnode
.getObject();
2021 o
.titel
=((String
) value
) ;
2024 o
.fertig
=((Boolean
) value
) ;
2028 @SuppressWarnings("unused")
2029 public Class
<?
> getColumnClass(int column
) {
2032 return String
.class;
2034 return Boolean
.class;
2036 return Object
.class;
2039 /*****************************************/
2040 private class MyRenderer
extends DefaultTreeCellRenderer
{
2044 private static final long serialVersionUID
= 2333990367290526356L;
2047 public MyRenderer(Icon icon
) {
2051 public Component
getTreeCellRendererComponent(
2060 super.getTreeCellRendererComponent(
2062 expanded
, leaf
, row
,
2064 KnotenObjekt o
= ((JXTTreeNode
)value
).knotenObjekt
;
2065 if (leaf
&& istFertig(value
)) {
2066 setIcon(fertigIcon
);
2067 this.setText(o
.titel
);
2068 setToolTipText("Verordnung "+o
.rez_num
+" kann dirket abgerechnet werden.");
2070 setToolTipText(null);
2071 this.setText(o
.titel
);
2077 protected boolean istFertig(Object value
) {
2078 DefaultMutableTreeNode node
=
2079 (DefaultMutableTreeNode
)value
;
2080 KnotenObjekt fertig
=
2081 (KnotenObjekt
)(node
.getUserObject());
2082 boolean istfertig
= fertig
.fertig
;
2088 private void rezepteUebertragen(){
2091 private void rechnungAnlegen(){
2095 public void mouseClicked(MouseEvent e
) {
2096 // TODO Auto-generated method stub
2100 public void mousePressed(MouseEvent e
) {
2101 if(e
.getButton()==3){
2102 TreePath tp
= treeKasse
.getSelectionPath();
2104 kontrollierteRezepte
= 0;
2108 JXTTreeNode node
= (JXTTreeNode
) tp
.getLastPathComponent();
2109 String rez_nr
= ((JXTTreeNode
)node
).knotenObjekt
.rez_num
;
2110 if(!rez_nr
.trim().equals("")){
2111 if(node
.knotenObjekt
.fertig
){
2112 String msg
= "<html>Achtung Sie editieren im Anschluß den EDIFACT-Code!<br>"+
2113 "Wenn Sie den Code in unzulässiger Weise manipulieren<br>wird <b>der gesamte Abrechnungslauf unbrauchbar</b><br><br>"+
2114 "<b>Rufen Sie diese Funktion nur dann auf wenn Sie genau wissen was Sie tun!!!</b><br><br>"+
2115 "Soll die Funktion jetzt aufgerufen werden?<br></html>";
2116 int frage
= JOptionPane
.showConfirmDialog(null,msg
,"Achtung wichtige Benutzeranfrage",JOptionPane
.YES_NO_OPTION
);
2117 if(frage
!= JOptionPane
.YES_OPTION
){
2120 PointerInfo info
= MouseInfo
.getPointerInfo();
2121 Point location
= info
.getLocation();
2122 EditEdifact editEdifact
= new EditEdifact(Reha
.thisFrame
,"EDIFACT - editieren",rez_nr
.trim());
2123 editEdifact
.getContentPane().setPreferredSize(new Dimension(600,500));
2124 editEdifact
.setLocation(e
.getXOnScreen()-50,e
.getYOnScreen()-50);
2125 //editEdifact.setLocation(location.x-50,location.y-50);
2127 editEdifact
.setVisible(true);
2128 this.abrRez
.setNewRez(rez_nr
,node
.knotenObjekt
.fertig
,aktDisziplin
);
2130 JOptionPane
.showMessageDialog(null,"Abrechnungsdaten im Edifact-Format kann nur\nbei bereits markierten Rezepten manipuliert werden!");
2138 public void mouseReleased(MouseEvent e
) {
2139 // TODO Auto-generated method stub
2143 public void mouseEntered(MouseEvent e
) {
2144 // TODO Auto-generated method stub
2148 public void mouseExited(MouseEvent e
) {
2149 // TODO Auto-generated method stub