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","RS","FT"};
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 static String zertifikatVon
= SystemConfig
.hmAbrechnung
.get("hmkeystoreusecertof");
172 public static String originalTitel
= "";
173 public static boolean lOwnCert
= (SystemConfig
.hmAbrechnung
.get("hmkeystoreusecertof").equals(SystemConfig
.hmAbrechnung
.get("hmkeystorealias")) ?
true : false);
175 public AbrechnungGKV(JAbrechnungInternal xjry
){
178 setLayout(new BorderLayout());
179 jSplitLR
= UIFSplitPane
.createStrippedSplitPane(JSplitPane
.HORIZONTAL_SPLIT
,
182 jSplitLR
.setDividerSize(7);
183 jSplitLR
.setDividerBorderVisible(true);
184 jSplitLR
.setName("BrowserSplitLinksRechts");
185 jSplitLR
.setOneTouchExpandable(true);
186 jSplitLR
.setDividerLocation(230);
187 add(jSplitLR
,BorderLayout
.CENTER
);
189 SlgaVersion
= ( DatFunk
.TageDifferenz("30.09.2013",DatFunk
.sHeute()) <= 0 ?
"08" : "09");
190 SllaVersion
= ( DatFunk
.TageDifferenz("30.09.2013",DatFunk
.sHeute()) <= 0 ?
"08" : "09");
192 new SwingWorker
<Void
,Void
>(){
194 protected Void
doInBackground() throws Exception
{
195 SystemConfig
.certState
= checkCert(zertifikatVon
/*"IK"+Reha.aktIK*/);
196 if(SystemConfig
.certState
> 0){
197 abrRez
.tbbuts
[3].setEnabled(false);
199 //System.out.println(SystemConfig.hmAbrechnung);
200 //System.out.println("CertState = "+SystemConfig.certState);
204 originalTitel
= this.jry
.getTitel();
206 cmbDiszi
.setSelectedItem(SystemConfig
.initRezeptKlasse
);
209 public void setEncryptTitle(){
210 this.jry
.setzeTitel(originalTitel
+ " [Abrechnung für IK: "+Reha
.aktIK
+" - Zertifikat von IK: "+zertifikatVon
.replace("IK","")+"]");
213 public static int checkCert(String alias
){
215 String keystore
= SystemConfig
.hmAbrechnung
.get("hmkeystorefile");//Reha.proghome+"keystore/"+Reha.aktIK+"/"+Reha.aktIK+".p12";
216 //NebraskaKeystore store = new NebraskaKeystore(keystore, SystemConfig.hmAbrechnung.get("hmkeystorepw"),"123456", Reha.aktIK);
217 NebraskaKeystore store
= new NebraskaKeystore(keystore
, SystemConfig
.hmAbrechnung
.get("hmkeystorepw"),"123456", SystemConfig
.hmAbrechnung
.get("hmkeystoreusecertof").replace("IK", ""));
218 Vector
<X509Certificate
> certs
= store
.getAllCerts();
222 for(int i
= 0; i
< certs
.size();i
++){
223 dn
=certs
.get(i
).getSubjectDN().toString().split(",");
225 ik
= (String
)dn
[3].split("=")[1];
226 if(ik
.equals(alias
)){
227 String verfall
= certs
.get(i
).getNotAfter().toLocaleString().split(" ")[0].trim();
228 tage
= DatFunk
.TageDifferenz(DatFunk
.sHeute(),verfall
);
230 JOptionPane
.showMessageDialog(null,"Ihr Zertifikat ist abgelaufen.\nEine Verschlüsselung mit diesem Zertifikat ist nicht mehr möglich");
231 return SystemConfig
.certIsExpired
;
232 }else if(tage
<= 30){
233 JOptionPane
.showMessageDialog(null,"Achtung!!!\nIhr Zertifikat läuft in "+Long
.toString(tage
)+" Tage(n) ab.\nBitte rechtzeitig neues Zertifikat beantragen");
235 return SystemConfig
.certOK
;
237 String verfall
= certs
.get(i
).getNotAfter().toLocaleString().split(" ")[0].trim();
238 tage
= DatFunk
.TageDifferenz(DatFunk
.sHeute(),verfall
);
240 JOptionPane
.showMessageDialog(null,"Mindestens ein Zertifikat im Keystore ist abgelaufen.\nVerschlüsselung und damit die 302-er Abrechnung wird daher gesperrt");
241 return SystemConfig
.certIsExpired
;
246 }catch(Exception ex
){
247 return SystemConfig
.certNotFound
;
249 return SystemConfig
.certNotFound
;
257 private void mandantenCheck(){
258 if(SystemConfig
.hmFirmenDaten
.get("Steuernummer").trim().equals("")){
259 String msg
= "Achtung(!!!!!!) für diesen Mandant wurde keine Steuernummer angegeben!\n\n"+
260 "Eine Abrechnung ohne Steuernummer wird von der GKV nicht(!!!!) akzeptiert\n\"+" +
261 "Schließen Sie die Abrechnung starten Sie die System-Initialisierung -> Mandanten Datenbank -> Firmenangaben...\n"+
262 "und tragen Sie hier im Feld Steuernummer die vom Finanzamt vergebene Steuernummer ein.";
263 JOptionPane
.showMessageDialog(null,msg
);
265 if(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung").trim().equals("")){
266 String msg
= "Achtung(!!!!!!) für diesen Mandant wurde keine Firmenbezeichnung angegeben!\n\n"+
267 "Schließen Sie die Abrechnung starten Sie die System-Initialisierung -> Mandanten Datenbank -> Firmenangaben...\n"+
268 "und tragen Sie hier im Feld 'Mandanten-Bezeichnung' eine Kurzfassung Ihres Firmennamens ein (max 30 Zeichen)";
269 JOptionPane
.showMessageDialog(null,msg
);
271 if(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung").length() > 30){
272 String msg
= "Achtung(!!!!!!) für diesen Mandant wurde eine zu lange Firmenbezeichnung angegeben.\n\n"+
273 "Schließen Sie die Abrechnung starten Sie die System-Initialisierung -> Mandanten Datenbank -> Firmenangaben...\n"+
274 "und tragen Sie hier im Feld 'Mandanten-Bezeichnung' eine Kurzfassung Ihres Firmennamens ein (max 30 Zeichen)";
275 JOptionPane
.showMessageDialog(null,msg
);
278 private JScrollPane
getLeft(){
279 FormLayout lay
= new FormLayout("5dlu,fill:0:grow(1.0),5dlu",
280 //1 2 3 4 5 6 7 8 9 10 11
281 "5dlu,p,5dlu,p,15dlu,p,20dlu,p,15dlu,fill:0:grow(1.0),5dlu");
282 PanelBuilder pb
= new PanelBuilder(lay
);
283 CellConstraints cc
= new CellConstraints();
284 pb
.getPanel().setBackground(Color
.WHITE
);
285 //pb.add(getIVPanel(),cc.xy(2,1));
286 pb
.addLabel("Heilmittel auswählen",cc
.xy(2,2));
287 if(SystemConfig
.mitRs
){
288 cmbDiszi
= new JRtaComboBox(new String
[] {"Physio-Rezept","Massage/Lymphdrainage-Rezept","Ergotherapie-Rezept","Logopädie-Rezept","Podologie-Rezept","Rehasport-Rezept","Funktionstraining-Rezept"});
290 cmbDiszi
= new JRtaComboBox(new String
[] {"Physio-Rezept","Massage/Lymphdrainage-Rezept","Ergotherapie-Rezept","Logopädie-Rezept","Podologie-Rezept"});
293 cmbDiszi
.setActionCommand("einlesen");
294 cmbDiszi
.setSelectedItem(SystemConfig
.initRezeptKlasse
);
296 pb
.add(cmbDiszi
,cc
.xy(2,4));
298 butLinks[0] = new JButton("Abrechnungsdaten einlesen");
299 butLinks[0].setActionCommand("einlesen");
300 butLinks[0].addActionListener(this);
301 pb.addLabel("",cc.xy(2,6));
302 pb.add(butLinks[0],cc.xy(2,8));
304 //rootKasse = new DefaultMutableTreeNode( "Abrechnung für Kasse..." );
305 //rootKasse = new DefaultMutableTreeNode( "Abrechnung für Kasse..." );
306 rootKasse
= new JXTTreeNode(new KnotenObjekt("Abrechnung für Kasse...","",false,"",""),true);
307 treeModelKasse
= new KassenTreeModel((JXTTreeNode
) rootKasse
);
309 treeKasse
= new JXTree(treeModelKasse
);
310 treeKasse
.setModel(treeModelKasse
);
311 treeKasse
.setName("kassentree");
312 treeKasse
.getSelectionModel().addTreeSelectionListener(this);
313 treeKasse
.setCellRenderer(new MyRenderer(SystemConfig
.hmSysIcons
.get("zuzahlok")));
314 treeKasse
.addMouseListener(this);
315 JScrollPane jscrk
= JCompTools
.getTransparentScrollPane(treeKasse
);
317 pb
.add(jscrk
,cc
.xy(2, 6));
318 new SwingWorker
<Void
,Void
>(){
320 protected Void
doInBackground() throws Exception
{
321 Reha
.thisFrame
.setCursor(Reha
.thisClass
.wartenCursor
);
329 htmlPane
= new JEditorPane(/*initialURL*/);
330 htmlPane
.setContentType("text/html");
331 htmlPane
.setEditable(false);
332 htmlPane
.setOpaque(false);
333 jscrk
= JCompTools
.getTransparentScrollPane(htmlPane
);
335 pb
.add(jscrk
,cc
.xy(2,10));
337 pb
.getPanel().validate();
339 JScrollPane jscr
= JCompTools
.getTransparentScrollPane(pb
.getPanel());
341 cmbDiszi
.addActionListener(this);
344 //cmbDiszi.setSelectedIndex(cmbDiszi.getSelectedIndex());
348 private JXPanel getIVPanel(){
349 JXPanel jpan = new JXPanel();
350 jpan.setOpaque(false);
351 String xwerte = "0dlu,fill:0:grow(1.0),0dlu";
353 String ywerte = "5dlu,p,3dlu,p,25dlu";
354 FormLayout lay = new FormLayout(xwerte,ywerte);
355 CellConstraints cc = new CellConstraints();
357 soll302 = new JRtaCheckBox("Abrechnung nach §302 erstellen");
358 soll302.setSelected(true);
359 soll302.setOpaque(false);
360 jpan.add(soll302,cc.xy(2,2));
361 alternativeKK = new JButton("Adresse...");
362 alternativeKK.setActionCommand("alternativeadresse");
363 alternativeKK.addActionListener(this);
364 Image img = new ImageIcon(Reha.proghome+"icons/krankenkasse.png").getImage().getScaledInstance(22, 22, Image.SCALE_SMOOTH);
365 alternativeKK.setIcon(new ImageIcon(img));
366 jpan.add(alternativeKK,cc.xy(2,4));
370 private JXPanel
getRight(){
371 this.abrRez
= new AbrechnungRezept(this);
372 this.abrRez
.setRechtsAufNull();
375 public boolean getTageDrucken(){
376 return this.abrRez
.getTageDrucken();
379 public void patStammEventOccurred(PatStammEvent evt
) {
380 // TODO Auto-generated method stub
384 public void setJry(JAbrechnungInternal jry
) {
388 public JAbrechnungInternal
getJry() {
391 public JXTTreeNode
getaktuellerKassenKnoten(){
392 return aktuellerKassenKnoten
;
395 public void actionPerformed(ActionEvent arg0
) {
396 String cmd
= arg0
.getActionCommand();
397 if(cmd
.equals("einlesen")){
398 //rootKasse.removeAllChildren();
399 //String[] reznr = {"KG","MA","ER","LO"};
400 String
[] diszis
= null;
401 if(SystemConfig
.mitRs
){
402 diszis
= new String
[] {"Physio","Massage","Ergo","Logo","Podo","Rsport","Ftrain"};
404 diszis
= new String
[] {"Physio","Massage","Ergo","Logo","Podo"};
407 aktDisziplin
= diszis
[cmbDiszi
.getSelectedIndex()];
408 //System.out.println("aktDisziplin = "+aktDisziplin);
409 //abrRez.setKuerzelVec(reznr[cmbDiszi.getSelectedIndex()]);
410 if(abrRez
.rezeptSichtbar
){
411 abrRez
.setRechtsAufNull();
414 this.jry
.setzeTitel(originalTitel
+ " [Abrechnung für IK: "+Reha
.aktIK
+" - Zertifikat von IK: "+zertifikatVon
.replace("IK","")+"] [Disziplin: "+aktDisziplin
+"]");
416 //setPreisVec(cmbDiszi.getSelectedIndex());
418 if(cmd
.equals("alternativeadresse")){
422 private String
getDiszis(){
423 String
[] diszis
= null;
424 if(SystemConfig
.mitRs
){
425 diszis
= new String
[] {"Physio","Massage","Ergo","Logo","Podo","Rsport","Ftrain"};
427 diszis
= new String
[] {"Physio","Massage","Ergo","Logo","Podo"};
430 return String
.valueOf(diszis
[cmbDiszi
.getSelectedIndex()]);
432 public void einlesenErneuern(){
433 String
[] diszis
= null;
434 if(SystemConfig
.mitRs
){
435 diszis
= new String
[] {"Physio","Massage","Ergo","Logo","Podo","Rsport","Ftrain"};
437 diszis
= new String
[] {"Physio","Massage","Ergo","Logo","Podo"};
440 aktDisziplin
= diszis
[cmbDiszi
.getSelectedIndex()];
441 //abrRez.setKuerzelVec(reznr[cmbDiszi.getSelectedIndex()]);
442 if(abrRez
.rezeptSichtbar
){
443 abrRez
.setRechtsAufNull();
449 private void setPreisVec(int pos){
450 String[] reznr = {"KG","MA","ER","LO"};
451 //abrRez.setPreisVec(reznr[pos]);
452 JOptionPane.showMessageDialog(null, "Aufruf von setPreisVec in AbrechnungGKV");
457 * Einlesen der abrechnungsdaten
459 public void doEinlesen(JXTTreeNode aktKassenNode
){
460 //final JXTTreeNode xaktKassenNode = aktKassenNode;
461 new SwingWorker
<Void
,Void
>(){
463 protected Void
doInBackground() throws Exception
{
465 new SwingWorker
<Void
,Void
>(){
467 protected Void
doInBackground() throws Exception
{
468 Reha
.thisClass
.progressStarten(true);
472 existiertschon
.clear();
473 String dsz
= diszis
[cmbDiszi
.getSelectedIndex()];
475 String cmd
= "select name1,ikktraeger,ikkasse,id from fertige where rezklasse='"+dsz
+"' ORDER BY ikktraeger , id";
477 Vector
<Vector
<String
>> vecKassen
= SqlInfo
.holeFelder(cmd
);
479 if(vecKassen
.size() <= 0){
480 kassenBaumLoeschen();
481 Reha
.thisClass
.progressStarten(false);
484 kassenBaumLoeschen();
485 treeKasse
.setEnabled(true);
486 String kas
= vecKassen
.get(0).get(0).trim().toUpperCase();
487 String ktraeger
= vecKassen
.get(0).get(1).trim();
488 String ikkasse
= vecKassen
.get(0).get(2).trim();
489 existiertschon
.add(ktraeger
);
492 astAnhaengen(kas
,ktraeger
,ikkasse
);
500 for(int i
= 0; i
< vecKassen
.size();i
++){
501 if(! existiertschon
.contains(vecKassen
.get(i
).get(1).trim().toUpperCase())){
502 kas
= vecKassen
.get(i
).get(0).trim().toUpperCase();
503 ktraeger
= vecKassen
.get(i
).get(1);
504 ikkasse
= vecKassen
.get(i
).get(2);
505 existiertschon
.add(ktraeger
);
506 astAnhaengen(kas
,ktraeger
,ikkasse
);
507 rezepteAnhaengen(aeste
);
513 treeKasse
.validate();
514 treeKasse
.setRootVisible(true);
516 treeKasse
.expandRow(0);
520 }catch(Exception ex
){
521 ex
.printStackTrace();
523 Reha
.thisFrame
.setCursor(Reha
.thisClass
.cdefault
);
524 Reha
.thisClass
.progressStarten(false);
529 private void rezepteAnhaengen(int knoten
){
530 String ktraeger
= ((JXTTreeNode
)rootKasse
.getChildAt(knoten
)).knotenObjekt
.ktraeger
;
531 String dsz
= diszis
[cmbDiszi
.getSelectedIndex()];
532 String cmd
= "select rez_nr,pat_intern,ediok,ikkasse from fertige where rezklasse='"+dsz
+"' AND ikktraeger='"+
533 ktraeger
+"' ORDER BY id,pat_intern";
535 Vector
<Vector
<String
>> vecKassen
= SqlInfo
.holeFelder(cmd
);
537 JXTTreeNode node
= (JXTTreeNode
) rootKasse
.getChildAt(knoten
);
538 //JXTTreeNode treeitem = null;
540 JXTTreeNode meinitem
= null;
541 for(int i
= 0;i
<vecKassen
.size();i
++){
543 cmd
= "select n_name from pat5 where pat_intern='"+
544 vecKassen
.get(i
).get(1)+"' LIMIT 1";
546 String name
= SqlInfo
.holeFelder(cmd
).get(0).get(0);
547 cmd
= "select preisgruppe from verordn where rez_nr='"+vecKassen
.get(i
).get(0)+"' LIMIT 1";;
548 ////System.out.println(cmd);
549 String preisgr
= SqlInfo
.holeEinzelFeld(cmd
);
550 ////System.out.println("Preisgruppe="+preisgr);
552 KnotenObjekt rezeptknoten
= new KnotenObjekt(vecKassen
.get(i
).get(0)+"-"+name
,
553 vecKassen
.get(i
).get(0),
554 (vecKassen
.get(i
).get(2).equals("T")?
true : false),
555 vecKassen
.get(i
).get(3),
557 rezeptknoten
.ktraeger
= ktraeger
;
558 rezeptknoten
.pat_intern
= vecKassen
.get(i
).get(1);
559 meinitem
= new JXTTreeNode(rezeptknoten
,true);
561 treeModelKasse
.insertNodeInto(meinitem
,node
,node
.getChildCount());
562 treeKasse
.validate();
563 }catch(Exception ex
){
569 private void astAnhaengen(String ast
,String ktraeger
,String ikkasse
){
570 KnotenObjekt knoten
= new KnotenObjekt(ast
,"",false,"","");
571 knoten
.ktraeger
= ktraeger
;
572 knoten
.ikkasse
= ikkasse
;
573 JXTTreeNode node
= new JXTTreeNode(knoten
,true);
574 treeModelKasse
.insertNodeInto(node
, rootKasse
, rootKasse
.getChildCount());
575 treeKasse
.validate();
577 private void kassenBaumLoeschen(){
580 while( (rootKasse
.getChildCount()) > 0){
581 treeModelKasse
.removeNodeFromParent((JXTTreeNode
) ((JXTTreeNode
) treeModelKasse
.getRoot()).getChildAt(0));
583 treeKasse
.validate();
585 }catch(Exception ex
){
586 ex
.printStackTrace();
589 /*******************************************/
590 private void doKassenTreeAuswerten(KnotenObjekt node
){
592 setCursor(Reha
.thisClass
.wartenCursor
);
593 Reha
.thisClass
.progressStarten(true);
595 if(! this.abrRez
.setNewRez(node
.rez_num
,node
.fertig
,aktDisziplin
) ){
596 Reha
.thisClass
.progressStarten(false);
597 setCursor(Reha
.thisClass
.normalCursor
);
598 JOptionPane
.showMessageDialog(null,"Rezept konnte nicht ausgewertet werden");
601 }catch(Exception ex
){
602 ex
.printStackTrace();
604 ////System.out.println("Rezept "+node.rez_num+" fertig eingestellt");
605 setCursor(Reha
.thisClass
.normalCursor
);
606 SwingUtilities
.invokeLater(new Runnable(){
608 Reha
.thisClass
.progressStarten(false);
616 /*******************************************/
618 private void doAufraeumen(){
619 butLinks[0].removeActionListener(this);
620 cmbDiszi.removeActionListener(this);
621 treeKasse.getSelectionModel().removeTreeSelectionListener(this);
624 public void loescheKnoten(){
625 //rezept aus fertige löschen
626 //Verschluß des Rezeptes aufheben
628 //wenn einziger Knoten den kassenKnoten löschen
629 String rez_nr
= this.aktuellerKnoten
.knotenObjekt
.rez_num
;
630 String cmd
= "delete from fertige where rez_nr='"+rez_nr
+"' LIMIT 1";
631 SqlInfo
.sqlAusfuehren(cmd
);
632 cmd
= "update verordn set abschluss='F' where rez_nr='"+rez_nr
+"' LIMIT 1";
633 SqlInfo
.sqlAusfuehren(cmd
);
635 treeModelKasse
.removeNodeFromParent(this.aktuellerKnoten
);
636 }catch(Exception ex
){
637 JOptionPane
.showMessageDialog(null, "Kritische Situation bei Aktion aufschließen des Rezeptes");
639 this.aktuellerKassenKnoten
.getNextNode();
640 int anzahlrez
= this.aktuellerKassenKnoten
.getChildCount();
642 treeModelKasse
.removeNodeFromParent(this.aktuellerKassenKnoten
);
644 this.rechneKasse(this.aktuellerKassenKnoten
);
646 this.abrRez
.setRechtsAufNull();
649 public void valueChanged(TreeSelectionEvent arg0
) {
650 //TreePath path = arg0.getNewLeadSelectionPath();
651 TreePath tp
= treeKasse
.getSelectionPath();
652 kontrollierteRezepte
= 0;
657 JXTTreeNode node
= (JXTTreeNode
) tp
.getLastPathComponent();
658 String rez_nr
= ((JXTTreeNode
)node
).knotenObjekt
.rez_num
;
659 if(!rez_nr
.trim().equals("")){
660 aktuellerKnoten
= node
;
661 doKassenTreeAuswerten(node
.knotenObjekt
);
662 aktuellerPat
= node
.knotenObjekt
.pat_intern
;
663 aktuellerKassenKnoten
=(JXTTreeNode
) ((JXTTreeNode
)aktuellerKnoten
).getParent();
665 if(! ((JXTTreeNode
)node
).knotenObjekt
.preisgruppe
.trim().equals("")){
666 ////System.out.println("Aktuelle Disziplin = "+getDiszis()+" / Aktuelle Preisgruppe = "+pgr);
667 pgr
= Integer
.parseInt(((JXTTreeNode
)node
).knotenObjekt
.preisgruppe
.trim());
668 zuzahlModusDefault
= (SystemPreislisten
.hmZuzahlModus
.get(getDiszis()).get(pgr
-1)==1 ?
true : false);
671 JOptionPane
.showMessageDialog(null,"Achtung Preisgruppe kann nicht ermittelt werden!\nBitte dieses Rezept nicht abrechnen!");
673 ////System.out.println("Preisguppe = "+Integer.toString(pgr)+"\nZuhahlmodus = "+(zuzahlModusDefault ? "Normal" : "Bayrisch"));
676 abrRez
.setRechtsAufNull();
677 aktuellerKnoten
= (JXTTreeNode
)node
;
678 if(aktuellerKnoten
.getParent() != null){
679 if(((JXTTreeNode
)aktuellerKnoten
.getParent()).isRoot()){
680 aktuellerKassenKnoten
=(JXTTreeNode
) ((JXTTreeNode
)aktuellerKnoten
);
681 //////System.out.println("Aktueller Knoten ist Root");
683 //////System.out.println("Aktueller Knoten ungleich Root");
685 //////System.out.println("Pfad zu Parent = "+new TreePath(aktuellerKnoten.getParent()).toString());
687 aktuellerKassenKnoten
= null;
692 kassenUmsatz
[0] = 0.00;
693 kassenUmsatz
[1] = 0.00;
694 if(aktuellerKassenKnoten
!= null){
695 rechneKasse(aktuellerKassenKnoten
);
699 public void setKassenUmsatzNeu(){
700 kassenUmsatz
[0] = 0.00;
701 kassenUmsatz
[1] = 0.00;
702 if(aktuellerKassenKnoten
!= null){
703 rechneKasse(aktuellerKassenKnoten
);
706 public String
getAbrechnungKasse(){
707 ////System.out.println(((JXTTreeNode)aktuellerKnoten).knotenObjekt.ktraeger);
708 return ((JXTTreeNode
)aktuellerKnoten
).knotenObjekt
.ktraeger
;
710 public void rechneKasse(JXTTreeNode aktKasse
){
711 kontrollierteRezepte
= 0;
712 final JXTTreeNode xaktKasse
= aktKasse
;
713 new SwingWorker
<Void
,Void
>(){
715 protected Void
doInBackground() throws Exception
{
717 int lang
= xaktKasse
.getChildCount();
718 Reha
.thisClass
.progressStarten(true);
719 getInstance().setCursor(Reha
.thisClass
.wartenCursor
);
720 for(int i
= 0; i
< lang
;i
++){
721 if( ((JXTTreeNode
)xaktKasse
.getChildAt(i
)).knotenObjekt
.fertig
){
722 kontrollierteRezepte
++;
723 holeUmsaetze(((JXTTreeNode
)xaktKasse
.getChildAt(i
)).knotenObjekt
.rez_num
);
726 setHtmlLinksUnten(lang
,kontrollierteRezepte
);
727 Reha
.thisClass
.progressStarten(false);
728 getInstance().setCursor(Reha
.thisClass
.cdefault
);
729 }catch(Exception ex
){
730 ex
.printStackTrace();
736 public void setHtmlLinksUnten(int gesamt
,int gut
){
737 htmlBuf
.setLength(0);
738 htmlBuf
.trimToSize();
739 htmlBuf
.append("<html><head>");
740 htmlBuf
.append("<STYLE TYPE=\"text/css\">");
741 htmlBuf
.append("<!--");
742 htmlBuf
.append("A{text-decoration:none;background-color:transparent;border:none}");
743 htmlBuf
.append("TD{font-family: Tahoma; font-size: 11pt; padding-left:5px;padding-right:30px}");
744 htmlBuf
.append(".spalte1{color:#0000FF;}");
745 htmlBuf
.append(".spalte2{color:#FF0000;}");
746 htmlBuf
.append(".spalte3{color:#333333;}");
747 htmlBuf
.append("--->");
748 htmlBuf
.append("</STYLE>");
749 htmlBuf
.append("</head>");
750 htmlBuf
.append("<div style=margin-left:0px;>");
751 htmlBuf
.append("<font face=\"Tahoma\"><style=margin-left=0px;>");
752 htmlBuf
.append("<br>");
753 htmlBuf
.append("<table>");
754 htmlBuf
.append("<tr><td>fertige Rezepte:</td>");
755 htmlBuf
.append("<td class=\"spalte1\" align=\"right\"><b>"+gesamt
+"</b></td></tr>");
756 htmlBuf
.append("<tr><td>abrechnungsfähig:</td>");
757 htmlBuf
.append((gesamt
!= gut ?
"<td class=\"spalte2\" align=\"right\">" : "<td class=\"spalte1\" align=\"right\">" )+
758 "<b>"+gut
+"</b></td></tr>");
759 htmlBuf
.append("<tr><td>Umsatz:</td>");
760 htmlBuf
.append("<td class=\"spalte1\" align=\"right\">"+dfx
.format(kassenUmsatz
[0])+"</td></tr>");
761 htmlBuf
.append("<tr><td>enth. Rezeptgeb.: </td>");
762 htmlBuf
.append("<td class=\"spalte1\" align=\"right\">"+dfx
.format(kassenUmsatz
[1])+"</td></tr>");
763 htmlBuf
.append("</table>");
764 htmlBuf
.append("</div>");
765 htmlBuf
.append("</html>");
766 htmlPane
.setText(htmlBuf
.toString());
768 public void holeUmsaetze(String rez_nr
){
772 buf
.append(SqlInfo
.holeFelder("select edifact from fertige where rez_nr='"+rez_nr
+"'").get(0).get(0));
773 }catch(Exception ex
){}
775 JOptionPane
.showMessageDialog(null,"Kassenumsatz für Rezept + "+rez_nr
+" kann nicht abgeholt werden. Modul holeUmsatz() (Edifact)");
777 //////System.out.println(buf.toString());
778 String
[] zeilen
= buf
.toString().split("\n");
779 String
[] positionen
= zeilen
[0].split(":");
780 //PG=1:PATINTERN=16961:REZNUM=KG57747:GESAMT=102,30:REZGEB=20,26:REZANTEIL=10,26:REZPAUSCHL=10,00:KASSENID=116
781 kassenUmsatz
[0] = kassenUmsatz
[0]+ Double
.valueOf(positionen
[3].split("=")[1].replace(",", "."));
782 kassenUmsatz
[1] = kassenUmsatz
[1]+ Double
.valueOf(positionen
[4].split("=")[1].replace(",", "."));
784 /**************************************************/
786 public void starteAbrechnung(){
788 hmKostentraeger
.clear();
789 if(!Reha
.officeapplication
.isActive()){
791 Reha
.starteOfficeApplication();
792 if(!Reha
.officeapplication
.isActive()){
794 JOptionPane
.showMessageDialog(null, "Das OpenOffice-System reagiert nicht korrekt!\nAbrechnung wird nicht gestartet");
797 }catch(Exception ex
){
799 JOptionPane
.showMessageDialog(null, "Das OpenOffice-System reagiert nicht korrekt!\nAbrechnung wird nicht gestartet");
804 if(aktuellerKassenKnoten
==null){
805 abrDlg
.setVisible(false);
808 Reha
.thisClass
.progressStarten(false);
809 JOptionPane
.showMessageDialog(null, "Keine Kasse für die Abrechnung ausgewählt!");
812 if(kontrollierteRezepte
<=0){
813 abrDlg
.setVisible(false);
816 Reha
.thisClass
.progressStarten(false);
817 JOptionPane
.showMessageDialog(null, "Für die ausgewählte Kasse sind keine Rezepte zur Abrechnung freigegeben!");
822 abgerechneteRezepte
.clear();
823 abgerechnetePatienten
.clear();
824 abrechnungRezepte
= 0;
825 preis00
= setzePreiseAufNull(preis00
);
826 preis11
= setzePreiseAufNull(preis11
);
827 preis31
= setzePreiseAufNull(preis31
);
828 preis51
= setzePreiseAufNull(preis51
);
829 positionenBuf
.setLength(0);positionenBuf
.trimToSize();
830 unbBuf
.setLength(0);unbBuf
.trimToSize();
831 unzBuf
.setLength(0);unzBuf
.trimToSize();
832 gesamtBuf
.setLength(0);gesamtBuf
.trimToSize();
833 auftragsBuf
.setLength(0);auftragsBuf
.trimToSize();
834 positionenAnzahl
= 0;
836 annahmeAdresseOk
= false;
837 /**********************************/
839 abzurechnendeKassenID
= getAktKTraeger();
840 String preisgr
= getPreisgruppenKuerzel(aktDisziplin
);
841 String cmd
= "select ik_kasse,ik_kostent,ik_nutzer,ik_physika,ik_papier,"+preisgr
+" from kass_adr where ik_kasse='"+abzurechnendeKassenID
+"' LIMIT 1";
843 kassenIKs
= SqlInfo
.holeFelder(cmd
);
844 ////System.out.println(cmd);
845 if(kassenIKs
.size()<=0){
846 Reha
.thisClass
.progressStarten(false);
847 abrDlg
.setVisible(false);
850 JOptionPane
.showMessageDialog(null, "Fehler - Daten der Krankenkasse konnten nicht ermittelt werden");
851 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
855 public String abrechnungsModus = "abrechnung302";
856 final String ABR_MODE_302 = "abrechnung302";
857 final String ABR_MODE_IV = "abrechnungIV";
860 ik_kasse
= kassenIKs
.get(0).get(0);
861 ik_kostent
= kassenIKs
.get(0).get(1);
862 ik_nutzer
= kassenIKs
.get(0).get(2);
863 ik_physika
= kassenIKs
.get(0).get(3);
864 ik_papier
= kassenIKs
.get(0).get(4);
865 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_physika
+"' LIMIT 1");
867 //System.out.println(" kasse = "+ik_kasse);
868 //System.out.println("kostent = "+ik_kostent);
869 //System.out.println(" nutzer = "+ik_nutzer);
870 //System.out.println("physika = "+ik_physika);
871 //System.out.println(" email = "+ik_email);
874 if(abrechnungsModus
.equals(ABR_MODE_302
)){
875 if(ik_email
.equals("")){
876 ik_email
= SqlInfo
.holeEinzelFeld("select email1 from kass_adr where ik_kasse='"+ik_physika
+"' LIMIT 1");
878 if(ik_email
.equals("")){
879 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_kasse
+"' LIMIT 1");
881 if(ik_email
.equals("")){
882 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_kostent
+"' LIMIT 1");
884 if(ik_email
.equals("")){
885 ik_email
= SqlInfo
.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_physika
+"' LIMIT 1");
888 if(ik_email
.trim().equals("")){
889 JOptionPane
.showMessageDialog(null,"Emailadresse ist weder der Datenannahmestelle noch dem Kostenträger\noder der Kasse selbst zugeordnet."+
890 "\n\n Bitte geben Sie die Emailadresse von Hand ein");
891 Object ret
= JOptionPane
.showInputDialog(null, "Geben Sie bitte die Emailadresse der Datenannahmestelle ein","");
893 Reha
.thisClass
.progressStarten(false);
894 abrDlg
.setVisible(false);
897 JOptionPane
.showMessageDialog(null, "Fehler - keine Emailadresse eingegeben");
898 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
901 ik_email
= String
.valueOf(ret
);
904 preisVector
= RezTools
.holePreisVector(diszis
[cmbDiszi
.getSelectedIndex()],Integer
.parseInt(kassenIKs
.get(0).get(5))-1);
905 name_kostent
= holeNameKostentraeger();
908 if(abrechnungsModus
.equals(ABR_MODE_302
)){
909 //String keystore = Reha.proghome+"keystore/"+Reha.aktIK+"/"+Reha.aktIK+".p12";
910 //NebraskaKeystore store = new NebraskaKeystore(keystore, SystemConfig.hmAbrechnung.get("hmkeystorepw"),"123456", Reha.aktIK);
911 //Einbau Test ob Zertifikat abgelaufen
912 test
= "IK der Krankenkasse: "+ik_kasse
+"\n"+
913 "IK des Kostenträgers: "+ik_kostent
+"\n"+
914 "IK des Nutzer mit EntschlüsselungsbefungnisKostenträgers: "+ik_nutzer
+"\n"+
915 "IK der Datenannahmestelle: "+ik_physika
+"\n"+
916 "IK der Papierannahmestelle: "+ik_papier
+"\n"+
917 "Emailadresse der Datenannahmestelle: "+ik_email
+"\n"+
918 "Name des Kostenträgers: "+name_kostent
;
920 /************************************************/
921 hmKostentraeger
.put("name1",String
.valueOf(name_kostent
));
922 /************************************************/
924 test
= "IK der Krankenkasse: "+ik_kasse
+"\n"+
925 "Keine Abrechnung nach § 302!!!\n\n"+
926 "Rechnungsanschrift:\n"+
927 hmAlternativeKasse
.get("<Ivnam1>")+"\n"+
928 hmAlternativeKasse
.get("<Ivnam2>")+"\n"+
929 hmAlternativeKasse
.get("<Ivstrasse>")+"\n"+
930 hmAlternativeKasse
.get("<Ivplz>")+" "+
931 hmAlternativeKasse
.get("<Ivort>");
932 //hmAlternativeKasse.get("<Ivid>");
933 hmKostentraeger
.put("name1",String
.valueOf(hmAlternativeKasse
.get("<Ivnam1>")));
935 int anfrage
= JOptionPane
.showConfirmDialog(null,test
, "Die Abrechnung mit diesen Parametern starten?", JOptionPane
.YES_NO_OPTION
);
936 if(anfrage
!= JOptionPane
.YES_OPTION
){
938 //SqlInfo.sqlAusfuehren("update nummern set rnr='"+aktRechnung+"' where mandant='"+Reha.aktIK+"' LIMIT 1");
941 /***********hier erst die Nummer erzeugen **************/
942 aktRechnung
= Integer
.toString(SqlInfo
.erzeugeNummer("rnr"));
943 if(abrechnungsModus
.equals(ABR_MODE_302
)){
944 aktEsol
= StringTools
.fuelleMitZeichen(Integer
.toString(SqlInfo
.erzeugeNummerMitMax("esol", 999)), "0", true, 3);
946 /************************************************/
947 hmKostentraeger
.put("aktesol",String
.valueOf(aktEsol
));
948 /************************************************/
949 aktDfue
= StringTools
.fuelleMitZeichen(Integer
.toString(SqlInfo
.erzeugeNummerMitMax("dfue", 99999)), "0", true, 5);
950 if(aktRechnung
.equals("-1")){
951 Reha
.thisClass
.progressStarten(false);
952 abrDlg
.setVisible(false);
955 JOptionPane
.showMessageDialog(null, "Fehler - Rechnungsnummer kann nicht bezogen werden");
960 /*****************************************/
961 if(abrechnungsModus
.equals(ABR_MODE_302
)){
962 if(ik_email
.trim().equals("")){
963 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Emailadresse zugewiesen\n"+
964 "Abrechnung nach §302 ist nicht möglich!");
966 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
969 if(ik_papier
.trim().equals("")){
970 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Papierannahmestelle zugewiesen\n"+
971 "Abrechnung nach §302 ist nicht möglich!");
973 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
976 if(ik_nutzer
.trim().equals("")){
977 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Nutzer mit Entschlüsselungsbefugnis zugewiesen\n"+
978 "Abrechnung nach §302 ist nicht möglich!");
979 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
983 if(ik_physika
.trim().equals("")){
984 JOptionPane
.showMessageDialog(null, "Dieser Kasse ist keine Empfänger der Abrechnungsdaten zugewiesen\n"+
985 "Abrechnung nach §302 ist nicht möglich!");
986 SqlInfo
.sqlAusfuehren("update nummern set rnr='"+aktRechnung
+"' where mandant='"+Reha
.aktIK
+"' LIMIT 1");
990 hmAnnahme
= holeAdresseAnnahmestelle(true);
991 annahmeAdresseOk
= true;
993 hmAnnahme
= holeAdresseAnnahmestelle(false);
994 annahmeAdresseOk
= true;
1001 abrDlg
.setVisible(true);
1010 gesamtBuf
.append(unbBuf
.toString());
1011 gesamtBuf
.append(positionenBuf
.toString());
1012 gesamtBuf
.append(unzBuf
.toString());
1013 abrDlg
.setzeLabel("übertrage EDIFACT in Datenbank");
1015 if(Reha
.vollbetrieb
&& abrechnungsModus
.equals(ABR_MODE_302
)){
1016 PreparedStatement ps
= null;
1018 ps
= (PreparedStatement
) Reha
.thisClass
.conn
.prepareStatement(
1019 "insert into edifact (r_nummer, r_datum,r_edifact) VALUES (?,?,?)");
1020 ps
.setString(1, aktRechnung
);
1021 ps
.setString(2, DatFunk
.sDatInSQL(DatFunk
.sHeute()));
1022 ps
.setBytes(3, gesamtBuf
.toString().getBytes());
1026 } catch (SQLException e1
) {
1027 e1
.printStackTrace();
1033 } catch (SQLException e
) {
1034 e
.printStackTrace();
1041 if(abrechnungsModus
.equals(ABR_MODE_302
)){
1044 f
= new File(Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".org");
1045 fw
= new FileWriter(f
);
1046 bw
= new BufferedWriter(fw
);
1047 bw
.write(gesamtBuf
.toString());
1054 abrDlg
.setzeLabel("Rechnungsdatei verschlüsseln");
1055 int originalSize
= Integer
.parseInt(Long
.toString(f
.length()));
1056 int encryptedSize
= originalSize
;
1057 String skeystore
= SystemConfig
.hmAbrechnung
.get("hmkeystorefile");
1058 //String skeystore = Reha.proghome+"keystore/"+Reha.aktIK+"/"+Reha.aktIK+".p12";
1059 File fkeystore
= new File(skeystore
);
1060 if(! fkeystore
.exists()){
1061 abrDlg
.setzeLabel("Rechnungsdatei verschlüsseln - fehlgeschlagen!!!");
1062 String message
= "<html>Auf Ihrem System ist keine (ITSG) Zertifikatsdatenbank vorhanden.<br>"+
1063 "Eine Verschlüsselung gemäß §302 SGB V kann daher nicht durchgeführt werden.<br><br>"+
1064 "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>";
1065 Reha
.thisClass
.progressStarten(false);
1066 JOptionPane
.showMessageDialog(null, message
);
1070 encryptedSize
= doVerschluesseln(aktEsol
+".org");
1074 if(encryptedSize
< 0){
1075 JOptionPane
.showMessageDialog(null, "Es ist ein Fehler in der Verschlüsselung aufgetreten!");
1076 Reha
.thisClass
.progressStarten(false);
1077 abrDlg
.setVisible(false);
1083 doAuftragsDatei(originalSize
,encryptedSize
);
1086 f
= new File(Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".auf");
1087 fw
= new FileWriter(f
);
1088 bw
= new BufferedWriter(fw
);
1089 bw
.write(auftragsBuf
.toString());
1093 } catch (IOException e
) {
1094 e
.printStackTrace();
1096 abrDlg
.setzeLabel("erstelle Email an: "+ik_email
);
1100 if("1".equals(SystemConfig
.hmAbrechnung
.get("hmaskforemail"))){
1101 int frage
= JOptionPane
.showConfirmDialog(null,"Wollen Sie die Abrechnungsdatei esol0"+aktEsol
+" an die Adresse\n"+
1102 "--> "+ik_email
+" <-- versenden?","Benutzeranfrage",JOptionPane
.YES_NO_OPTION
);
1103 if(frage
==JOptionPane
.YES_OPTION
){
1111 String meldung = "Die Dateien "+"esol0"+aktEsol+".auf und "+"esol0"+aktEsol+" wurden erfolgreich\n"+
1112 "an die Adresse "+ik_email+" versandt.\n";
1113 JOptionPane.showMessageDialog(null, meldung);
1116 }catch(Exception ex
){
1117 String meldung
= "Die Dateien "+"esol0"+aktEsol
+".auf und "+"esol0"+aktEsol
+" sollten an die"+
1118 "Adresse "+ik_email
+" gesendet werden.\n\n"+
1119 "Versand ist fehlgeschlagen, bitte von Hand erneut senden";
1120 JOptionPane
.showMessageDialog(null, meldung
);
1125 /*********************************************/
1127 abrDlg
.setzeLabel("übertrage Rezepte in Historie");
1128 if(Reha
.vollbetrieb
){
1130 abrDlg
.setzeLabel("organisiere Abrechnungsprogramm");
1132 doLoescheRezepteAusTree();
1133 Reha
.thisClass
.progressStarten(false);
1134 abrDlg
.setVisible(false);
1137 }catch(Exception ex
){
1139 Reha
.thisClass
.progressStarten(false);
1140 abrDlg
.setVisible(false);
1144 JOptionPane
.showMessageDialog(null,"Fehler beim Abrechnungsvorgang:\n"+ex
.getMessage());
1145 ex
.printStackTrace();
1147 this.abrRez
.setRechtsAufNull();
1149 /********************************************************************/
1150 private void doDlgAbort(){
1152 Reha
.thisClass
.progressStarten(false);
1153 abrDlg
.setVisible(false);
1158 private void doEmail(){
1160 ////System.out.println("Erstelle Emailparameter.....");
1161 String smtphost
= SystemConfig
.hmEmailExtern
.get("SmtpHost");
1162 //String pophost = SystemConfig.hmEmailExtern.get("Pop3Host");
1163 String authent
= SystemConfig
.hmEmailExtern
.get("SmtpAuth");
1164 String benutzer
= SystemConfig
.hmEmailExtern
.get("Username") ;
1165 String pass1
= SystemConfig
.hmEmailExtern
.get("Password");
1166 String sender
= SystemConfig
.hmEmailExtern
.get("SenderAdresse");
1167 String secure
= SystemConfig
.hmEmailExtern
.get("SmtpSecure");
1168 String useport
= SystemConfig
.hmEmailExtern
.get("SmtpPort");
1169 //String recipient = "m.schuchmann@rta.de"+","+SystemConfig.hmEmailExtern.get("SenderAdresse");
1170 String recipient
= ik_email
+","+SystemConfig
.hmEmailExtern
.get("SenderAdresse");
1172 boolean authx
= (authent
.equals("0") ?
false : true);
1173 boolean bestaetigen
= false;
1174 String
[] encodedDat
= {Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
,"esol0"+aktEsol
};
1175 //String[] encodedDat = {Reha.proghome+"edifact/"+Reha.aktIK+"/"+"esol0"+aktEsol+".org","esol0"+aktEsol+".org"};
1176 String
[] aufDat
= {Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".auf","esol0"+aktEsol
+".auf"};
1177 ArrayList
<String
[]> attachments
= new ArrayList
<String
[]>();
1178 attachments
.add(encodedDat
);
1179 attachments
.add(aufDat
);
1180 EmailSendenExtern oMail
= new EmailSendenExtern();
1182 ////System.out.println("Starte Emailversand.....");
1183 oMail
.sendMail(smtphost
, benutzer
, pass1
, sender
, recipient
, zertifikatVon
.replace("IK", "")/*Reha.aktIK*/, text
,attachments
,authx
,bestaetigen
,secure
,useport
);
1185 ////System.out.println("Emailversand beendet.....");
1187 }catch(Exception e
){
1188 e
.printStackTrace( );
1189 JOptionPane
.showMessageDialog(null, "Emailversand fehlgeschlagen\n\n"+
1190 "Mögliche Ursachen:\n"+
1191 "- falsche Angaben zu Ihrem Emailpostfach und/oder dem Provider\n"+
1192 "- Sie haben keinen Kontakt zum Internet"+"\n\nFehlertext:"+e
.getLocalizedMessage());
1194 }catch(Exception ex
){
1195 ex
.printStackTrace();
1196 JOptionPane
.showMessageDialog(null, "Emailversand fehlgeschlagen\n\n"+
1197 "Mögliche Ursachen:\n"+
1198 "- falsche Angaben zu Ihrem Emailpostfach und/oder dem Provider\n"+
1199 "- Sie haben keinen Kontakt zum Internet - Fehlermeldung:\n\n"+ex
.getLocalizedMessage());
1202 /********************************************************************/
1203 private void doLoescheRezepteAusTree(){
1205 int lang
= aktuellerKassenKnoten
.getChildCount();
1207 for(int i
= (lang
-1); i
>= 0;i
--){
1208 node
= (JXTTreeNode
) aktuellerKassenKnoten
.getChildAt(i
);
1209 if(node
.knotenObjekt
.fertig
){
1210 //////System.out.println("Lösche KindKnoten an "+i);
1211 //aktuellerKassenKnoten.remove(node);
1212 treeModelKasse
.removeNodeFromParent(node
);
1215 if(aktuellerKassenKnoten
.getChildCount() <= 0){
1216 //rootKasse.remove(aktuellerKassenKnoten);
1217 treeModelKasse
.removeNodeFromParent(aktuellerKassenKnoten
);
1219 treeKasse
.validate();
1220 this.treeKasse
.repaint();
1221 }catch(Exception ex
){
1222 ex
.printStackTrace();
1225 /***************************************************************/
1226 private void doUebertragen(){
1228 String aktiverPatient
= "";
1229 JComponent patient
= AktiveFenster
.getFensterAlle("PatientenVerwaltung");
1230 if(patient
!= null){
1231 aktiverPatient
= Reha
.thisClass
.patpanel
.aktPatID
;
1234 Vector
<String
> feldNamen
= SqlInfo
.holeFeldNamen("verordn",true,Arrays
.asList(new String
[] {"id"}) );
1235 ////System.out.println(feldNamen);
1237 rechnungBuf
.setLength(0);
1238 rechnungBuf
.trimToSize();
1239 rechnungBuf
.append("select ");
1242 int rezeptFelder
= 0;
1243 for(int i
= 0; i
< feldNamen
.size();i
++){
1245 rechnungBuf
.append(","+feldNamen
.get(i
));
1247 rechnungBuf
.append(feldNamen
.get(i
));
1250 rechnungBuf
.append(" from verordn where rez_nr='");
1251 Vector
<Vector
<String
>> vec
= null;
1252 rezepte
= abgerechneteRezepte
.size();
1253 for(int i2
= 0; i2
< rezepte
;i2
++){
1254 abrDlg
.setzeLabel("übertrage Rezepte in Historie, übertrage Rezept: "+abgerechneteRezepte
.get(i2
));
1255 vec
= SqlInfo
.holeFelder(rechnungBuf
.toString()+abgerechneteRezepte
.get(i2
)+"'");
1256 rezeptFelder
= vec
.get(0).size();
1257 historieBuf
.setLength(0);
1258 historieBuf
.trimToSize();
1259 historieBuf
.append("insert into lza set ");
1260 for(int i3
= 0; i3
< rezeptFelder
;i3
++){
1261 if(!vec
.get(0).get(i3
).equals("")){
1263 historieBuf
.append(","+feldNamen
.get(i3
)+"='"+StringTools
.Escaped(vec
.get(0).get(i3
))+"'");
1265 historieBuf
.append(feldNamen
.get(i3
)+"='"+StringTools
.Escaped(vec
.get(0).get(i3
))+"'");
1269 //////System.out.println(historieBuf.toString());
1270 //////System.out.println("Übertrage Rezept "+abgerechneteRezepte.get(i2)+" in Langzeitarchiv = Historie");
1272 SqlInfo
.sqlAusfuehren(historieBuf
.toString());
1278 * In der Echtfunktion muß das Löschen in der rezept-Datenbank eingeschaltet werden
1279 * und das sofortige Löschen aus der Historie auscheschaltet werden
1284 //SqlInfo.sqlAusfuehren("delete from lza where rez_nr='"+abgerechneteRezepte.get(i2)+"' LIMIT 1");
1285 String delrez
= String
.valueOf(abgerechneteRezepte
.get(i2
));
1286 SqlInfo
.sqlAusfuehren("delete from fertige where rez_nr='"+delrez
+"' LIMIT 1");
1287 SqlInfo
.sqlAusfuehren("delete from verordn where rez_nr='"+delrez
+"' LIMIT 1");
1288 SqlInfo
.sqlAusfuehren("delete from volle where rez_nr='"+delrez
+"'");
1289 if(aktiverPatient
.equals(abgerechnetePatienten
.get(i2
)) ){
1290 posteAktualisierung(aktiverPatient
.toString());
1291 //Reha.thisClass.patpanel.aktRezept.setzeKarteiLasche();
1296 }catch(Exception ex
){
1297 ex
.printStackTrace();
1300 private void posteAktualisierung(String patid
){
1301 final String xpatid
= patid
;
1302 new SwingWorker
<Void
,Void
>(){
1304 protected Void
doInBackground() throws Exception
{
1305 String s1
= String
.valueOf("#PATSUCHEN");
1307 PatStammEvent pEvt
= new PatStammEvent(getInstance());
1308 pEvt
.setPatStammEvent("PatSuchen");
1309 pEvt
.setDetails(s1
,s2
,"") ;
1310 PatStammEventClass
.firePatStammEvent(pEvt
);
1316 /***************************************************************/
1317 private int doVerschluesseln(String datei
){
1319 String keystore
= SystemConfig
.hmAbrechnung
.get("hmkeystorefile");
1320 //String keystore = Reha.proghome+"keystore/"+Reha.aktIK+"/"+Reha.aktIK+".p12";
1322 //NebraskaKeystore store = new NebraskaKeystore(keystore, SystemConfig.hmAbrechnung.get("hmkeystorepw"),"123456", Reha.aktIK);
1323 NebraskaKeystore store
= new NebraskaKeystore(keystore
, SystemConfig
.hmAbrechnung
.get("hmkeystorepw"),"123456", zertifikatVon
.replace("IK", ""));
1325 NebraskaEncryptor encryptor
= store
.getEncryptor(ik_nutzer
);
1326 String inFile
= Reha
.proghome
+"edifact/"+Reha
.aktIK
+"/"+"esol0"+aktEsol
+".org";
1327 long size
= encryptor
.encrypt(inFile
, inFile
.replace(".org", ""));
1328 return Integer
.parseInt(Long
.toString(size
));
1329 } catch (NebraskaCryptoException e
) {
1330 e
.printStackTrace();
1331 } catch (NebraskaFileException e
) {
1332 e
.printStackTrace();
1333 } catch (NebraskaNotInitializedException e
) {
1334 e
.printStackTrace();
1338 /***************************************************************/
1339 private void doAuftragsDatei(int originalSize
,int encryptedSize
){
1340 auftragsBuf
.append("500000"+"01"+"00000348"+"000");
1341 auftragsBuf
.append("ESOL0"+aktEsol
);
1342 auftragsBuf
.append(" ");
1343 auftragsBuf
.append(StringTools
.fuelleMitZeichen(zertifikatVon
.replace("IK", "")/*Reha.aktIK*/, " ", false, 15));
1344 auftragsBuf
.append(StringTools
.fuelleMitZeichen(zertifikatVon
.replace("IK", "")/*Reha.aktIK*/, " ", false, 15));
1345 auftragsBuf
.append(StringTools
.fuelleMitZeichen(ik_nutzer
, " ", false, 15));
1346 auftragsBuf
.append(StringTools
.fuelleMitZeichen(ik_physika
, " ", false, 15));
1347 auftragsBuf
.append("000000");
1348 auftragsBuf
.append("000000");
1349 auftragsBuf
.append(abrDateiName
);
1350 auftragsBuf
.append(getEdiDatumFromDeutsch(DatFunk
.sHeute())+getEdiTimeString(true));
1351 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", false, 14));
1352 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", false, 14));
1353 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", false, 14));
1354 auftragsBuf
.append("000000");
1355 auftragsBuf
.append("0");
1356 auftragsBuf
.append(StringTools
.fuelleMitZeichen(Integer
.toString(originalSize
), "0", true, 12) );
1357 auftragsBuf
.append(StringTools
.fuelleMitZeichen(Integer
.toString(encryptedSize
), "0", true, 12) );
1358 auftragsBuf
.append("I800");
1359 auftragsBuf
.append("0303");
1360 auftragsBuf
.append(" ");
1361 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 5) );
1362 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 8) );
1363 auftragsBuf
.append("0");
1364 auftragsBuf
.append("00");
1365 auftragsBuf
.append("0");
1366 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 10) );
1367 auftragsBuf
.append(StringTools
.fuelleMitZeichen("0", "0", true, 6) );
1368 auftragsBuf
.append(StringTools
.fuelleMitZeichen(" ", " ", true, 28) );
1369 auftragsBuf
.append(StringTools
.fuelleMitZeichen(" ", " ", true, 44) );
1370 auftragsBuf
.append(StringTools
.fuelleMitZeichen(" ", " ", true, 30) );
1371 rlisteesol
= String
.valueOf(aktEsol
); //aktEsol.toString();
1372 rlistekasse
= String
.valueOf(getAbrechnungKasse());
1374 /*************************************************/
1375 private void macheEndeDaten(){
1376 String zeilenzahl
= StringTools
.fuelleMitZeichen(Integer
.toString(positionenAnzahl
+4), "0", true, 6);
1377 unzBuf
.append("UNT"+plus
+zeilenzahl
+plus
+"00002"+EOL
);
1378 unzBuf
.append("UNZ"+plus
+"000002"+plus
+aktDfue
+EOL
);
1381 /***************************************************************/
1383 private void macheKopfDaten(){
1384 //aktRechnung = Integer.toString(SqlInfo.erzeugeNummer("rnr"));
1385 new SwingWorker
<Void
,Void
>(){
1387 protected Void
doInBackground() throws Exception
{
1388 //hmAnnahme = holeAdresseAnnahmestelle();
1389 if(!annahmeAdresseOk
){
1390 long zeit
= System
.currentTimeMillis();
1391 while(!annahmeAdresseOk
){
1393 if(System
.currentTimeMillis()-zeit
> 5000){
1394 JOptionPane
.showMessageDialog(null,"Adresse der Annahmestelle konnte nicht ermittelt werden");
1400 if(abrDruck
!= null){
1401 abrDruck
.setIKundRnr(ik_papier
, aktRechnung
,hmAnnahme
);
1404 JOptionPane
.showMessageDialog(null, "Fehler im Rechnungsdruck - Fehler = abrDruck==null");
1407 rezepteUebertragen();
1409 }catch(Exception ex
){
1410 ex
.printStackTrace();
1411 JOptionPane
.showMessageDialog(null, "Fehler im Modul Rezept übertragen und Rechnung anlegen\n"+ex
.getMessage());
1413 if(abrechnungsModus
.equals(ABR_MODE_302
)){
1416 new BegleitzettelDrucken(getInstance(),abrechnungRezepte
,ik_kostent
,name_kostent
,hmAnnahme
, aktRechnung
,Reha
.proghome
+"vorlagen/"+Reha
.aktIK
+"/"+SystemConfig
.hmAbrechnung
.get("hmgkvbegleitzettel"));
1417 }catch(Exception ex
){
1418 JOptionPane
.showMessageDialog(null, "Fehler im Modul BegleitzettlDrucken - Fehler-Exception: ex\n"+ex
.getMessage());
1424 //////System.out.println(aktEsol + " - "+aktDfue);
1425 String sgruppe
= null;
1426 if(this.aktDisziplin
.equals("Rsport")){
1428 }else if(this.aktDisziplin
.equals("Ftrain")){
1434 unbBuf
.append("UNB+UNOC:3+"+zertifikatVon
.replace("IK", "")/*Reha.aktIK*/+plus
+ik_nutzer
+plus
);
1435 unbBuf
.append(getEdiDatumFromDeutsch(DatFunk
.sHeute())+":"+getEdiTimeString(false)+plus
);
1436 unbBuf
.append(aktDfue
+plus
+sgruppe
+plus
);
1437 abrDateiName
= "SL"+zertifikatVon
.replace("IK", "").substring(2,8)/*Reha.aktIK.substring(2,8)*/+"S"+getEdiMonat();
1438 unbBuf
.append(abrDateiName
+plus
);
1439 unbBuf
.append("2"+EOL
);
1440 //unbBuf.append(aktDfue+plus+"B"+plus+"SL"+Reha.aktIK.substring(2,8)+"S"+getEdiMonat()+plus+"2"+EOL);
1442 unbBuf
.append("UNH+00001+SLGA:"+SlgaVersion
+":0:0"+EOL
);
1443 unbBuf
.append("FKT+01"+plus
+plus
+Reha
.aktIK
+plus
+ik_kostent
+plus
+ik_kasse
+plus
+zertifikatVon
.replace("IK", "")/*Reha.aktIK*/+EOL
);
1444 unbBuf
.append("REC"+plus
+aktRechnung
+":0"+plus
+getEdiDatumFromDeutsch(DatFunk
.sHeute())+plus
+(lOwnCert ?
"1" : "2")+EOL
);
1445 unbBuf
.append("UST"+plus
+SystemConfig
.hmFirmenDaten
.get("Steuernummer")+plus
+"J"+EOL
);
1446 unbBuf
.append("GES"+plus
+"00"+plus
+dfx
.format(preis00
[0])+plus
+dfx
.format(preis00
[1])+plus
+dfx
.format(preis00
[2])+EOL
);
1447 unbBuf
.append("GES"+plus
+"11"+plus
+dfx
.format(preis11
[0])+plus
+dfx
.format(preis11
[1])+plus
+dfx
.format(preis11
[2])+EOL
);
1448 unbBuf
.append("GES"+plus
+"31"+plus
+dfx
.format(preis31
[0])+plus
+dfx
.format(preis31
[1])+plus
+dfx
.format(preis31
[2])+EOL
);
1449 unbBuf
.append("GES"+plus
+"51"+plus
+dfx
.format(preis51
[0])+plus
+dfx
.format(preis51
[1])+plus
+dfx
.format(preis51
[2])+EOL
);
1450 unbBuf
.append("NAM"+plus
+
1451 (abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung")).length() > 30 ?
1452 abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung")).substring(0,30) :
1453 abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Ikbezeichnung")) )+plus
+
1454 abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Anrede")).trim()+" "+
1455 (abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Nachname")).trim().length() > 25 ?
1456 abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Nachname")).trim().substring(0,25) :
1457 abrRez
.hochKomma(SystemConfig
.hmFirmenDaten
.get("Nachname")).trim() )+
1458 plus
+SystemConfig
.hmFirmenDaten
.get("Telefon")+EOL
);
1459 unbBuf
.append("UNT+000010+00001"+EOL
);
1460 unbBuf
.append("UNH+00002+SLLA:"+SllaVersion
+":0:0"+EOL
);
1461 unbBuf
.append("FKT+01"+plus
+plus
+Reha
.aktIK
+plus
+ik_kostent
+plus
+ik_kasse
+EOL
);
1462 unbBuf
.append("REC"+plus
+aktRechnung
+":0"+plus
+getEdiDatumFromDeutsch(DatFunk
.sHeute())+plus
+(lOwnCert ?
"1" : "2")+EOL
);
1463 getEdiTimeString(false);
1466 /***************************************************************/
1468 AbrechnungGKV
getInstance(){
1472 /***************************************************************/
1474 private String
holeNameKostentraeger(){
1475 Vector
<Vector
<String
>> vec
= SqlInfo
.holeFelder("select name1 from ktraeger where ikkasse ='"+ik_kostent
+"' LIMIT 1");
1479 return vec
.get(0).get(0);
1482 private void holeAlleKostentraegerDaten(){
1483 abzurechnendeKassenID = getAktKTraeger();
1484 String preisgr = getPreisgruppenKuerzel(aktDisziplin);
1485 String cmd = "select ik_kasse,ik_kostent,ik_nutzer,ik_physika,ik_papier,"+preisgr+" from kass_adr where ik_kasse='"+abzurechnendeKassenID+"' LIMIT 1";
1487 kassenIKs = SqlInfo.holeFelder(cmd);
1488 ////System.out.println(cmd);
1489 if(kassenIKs.size()<=0){
1490 Reha.thisClass.progressStarten(false);
1491 abrDlg.setVisible(false);
1494 JOptionPane.showMessageDialog(null, "Fehler - Daten der Krankenkasse konnten nicht ermittelt werden");
1497 ik_kasse = kassenIKs.get(0).get(0);
1498 ik_kostent = kassenIKs.get(0).get(1);
1499 ik_nutzer = kassenIKs.get(0).get(2);
1500 ik_physika = kassenIKs.get(0).get(3);
1501 ik_papier = kassenIKs.get(0).get(4);
1502 ik_email = SqlInfo.holeEinzelFeld("select email from ktraeger where ikkasse='"+ik_physika+"' LIMIT 1");
1503 preisVector = RezTools.holePreisVector(diszis[cmbDiszi.getSelectedIndex()],Integer.parseInt(kassenIKs.get(0).get(5))-1);
1504 name_kostent = holeNameKostentraeger();
1505 String test = "IK der Krankenkasse: "+ik_kasse+"\n"+
1506 "IK des Kostenträgers: "+ik_kostent+"\n"+
1507 "IK des Nutzer mit EntschlüsselungsbefungnisKostenträgers: "+ik_nutzer+"\n"+
1508 "IK der Datenannahmestelle: "+ik_physika+"\n"+
1509 "IK der Papierannahmestelle: "+ik_papier+"\n"+
1510 "Emailadresse der Datenannahmestelle: "+ik_email+"\n"+
1511 "Name des Kostenträgers: "+name_kostent;
1514 /***************************************************************/
1516 private HashMap
<String
,String
> holeAdresseAnnahmestelle(boolean nach302
){
1517 HashMap
<String
,String
> hmAdresse
= new HashMap
<String
,String
>();
1518 String
[] hmKeys
= {"<gkv1>","<gkv2>","<gkv3>","<gkv4>","<gkv5>","<gkv6>"};
1520 Vector
<Vector
<String
>> vec
= SqlInfo
.holeFelder("select kassen_nam1,kassen_nam2,strasse,plz,ort from kass_adr where ik_kasse ='"+ik_papier
+"' LIMIT 1");
1522 vec
= SqlInfo
.holeFelder("select name1,name2,adresse3,adresse1,adresse2 from ktraeger where ikkasse ='"+ik_papier
+"' LIMIT 1");
1524 for(int i
= 0; i
< hmKeys
.length
-1;i
++){
1525 hmAdresse
.put(hmKeys
[i
], "");
1527 hmAdresse
.put(hmKeys
[5],aktRechnung
);
1528 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");
1532 hmAdresse
.put(hmKeys
[0],vec
.get(0).get(0) );
1533 hmAdresse
.put(hmKeys
[1],vec
.get(0).get(1) );
1534 hmAdresse
.put(hmKeys
[2],vec
.get(0).get(2) );
1535 hmAdresse
.put(hmKeys
[3],vec
.get(0).get(3)+" "+vec
.get(0).get(4));
1536 hmAdresse
.put(hmKeys
[4],"");
1537 hmAdresse
.put(hmKeys
[5],aktRechnung
);
1540 hmAdresse
.put(hmKeys
[0],hmAlternativeKasse
.get("<Ivnam1>") );
1541 hmAdresse
.put(hmKeys
[1],hmAlternativeKasse
.get("<Ivnam2>") );
1542 hmAdresse
.put(hmKeys
[2],hmAlternativeKasse
.get("<Ivstrasse>") );
1543 hmAdresse
.put(hmKeys
[3],hmAlternativeKasse
.get("<Ivplz>")+" "+hmAlternativeKasse
.get("<Ivort>"));
1544 hmAdresse
.put(hmKeys
[4],"");
1545 hmAdresse
.put(hmKeys
[5],aktRechnung
);
1550 /***************************************************************/
1552 private Double
[] setzePreiseAufNull(Double
[] preis
){
1558 private String
getEdiMonat(){
1559 String tag
= DatFunk
.sHeute();
1560 return tag
.substring(3,5);
1562 private String
getEdiDatumFromDeutsch(String deutschDat
){
1563 if(deutschDat
.trim().length()<10){
1566 return deutschDat
.substring(6)+deutschDat
.substring(3,5)+deutschDat
.substring(0,2);
1568 private String
getEdiTimeString(boolean mitsekunden
){
1569 Date date
= new Date();
1570 String
[] datesplit
= date
.toString().split(" ");
1571 //////System.out.println(date.toString());
1573 //////System.out.println("Zeit mit Sekunden"+datesplit[3].substring(0,2)+datesplit[3].substring(3,5)+datesplit[3].substring(6,8));
1574 return datesplit
[3].substring(0,2)+datesplit
[3].substring(3,5)+datesplit
[3].substring(6,8);
1576 return datesplit
[3].substring(0,2)+datesplit
[3].substring(3,5);
1580 /***************************************************************/
1582 private void holeEdifact(){
1584 if(SystemConfig
.hmAbrechnung
.get("hmgkvrauchdrucken").equals("1")){
1585 abrDruck
= new AbrechnungDrucken(this,Reha
.proghome
+
1589 SystemConfig
.hmAbrechnung
.get("hmgkvformular"));
1592 } catch (Exception e
) {
1593 JOptionPane
.showMessageDialog(null,"Fehler im Modul Rechnungdruck in AbrechnungGKV.java");
1595 e
.printStackTrace();
1597 int lang
= aktuellerKassenKnoten
.getChildCount();
1599 Vector
<Vector
<String
>> vec
;
1600 for(int i
= 0; i
< lang
;i
++){
1601 node
= (JXTTreeNode
) aktuellerKassenKnoten
.getChildAt(i
);
1602 if(node
.knotenObjekt
.fertig
){
1603 vec
= SqlInfo
.holeFelder("select edifact from fertige where rez_nr='"+(String
) node
.knotenObjekt
.rez_num
+"'");
1604 //abrDlg.setzeLabel("Edifact-Daten holen von Rezept:"+(String) node.knotenObjekt.rez_num);
1606 if(!annahmeAdresseOk
){
1607 long zeit
= System
.currentTimeMillis();
1608 while(!annahmeAdresseOk
){
1610 if(System
.currentTimeMillis()-zeit
> 5000){
1611 JOptionPane
.showMessageDialog(null,"Adresse der Annahmestelle konnte nicht ermittelt werden");
1617 //abzurechnendeKassenID = holeAbrechnungsKasse(vec.get(0).get(0));
1618 abgerechneteRezepte
.add((String
) node
.knotenObjekt
.rez_num
);
1619 abgerechnetePatienten
.add((String
) node
.knotenObjekt
.pat_intern
);
1620 //hier den Edifact-Code analysieren und die Rechnungsdatei erstellen;
1622 analysierenEdifact(vec
.get(0).get(0),(String
) node
.knotenObjekt
.rez_num
);
1623 }catch(Exception ex
){
1624 ex
.printStackTrace();
1625 JOptionPane
.showMessageDialog(null,"Unbekannter Fehler bei Edifact analysierenEdifact()\n"+ex
.getLocalizedMessage());
1629 anhaengenEdifact(vec
.get(0).get(0));
1630 }catch(Exception ex
){
1631 JOptionPane
.showMessageDialog(null,"Unbekannter Fehler bei Edifact anhaengenEdifact()\n"+ex
.getLocalizedMessage());
1634 }catch(Exception ex
){
1635 JOptionPane
.showMessageDialog(null,"Unbekannter Fehler bei Edifact anhängen");
1639 if(abgerechneteRezepte
.size() > 0){
1640 /**************Hier den offenen Posten anlegen***************/
1641 abrDlg
.setzeLabel("Offene Posten anlegen für Rechnung Nr.: "+aktRechnung
);
1642 ////System.out.println(" abgerechnete Rezepte = "+abgerechneteRezepte);
1643 ////System.out.println("abgerechnete Patienten = "+abgerechnetePatienten);
1644 ////System.out.println("abger. Bruttovolumen = "+preis00[1]);
1645 ////System.out.println(" abger. Rezeptanteil = "+preis00[2]);
1646 ////System.out.println(" abger. Nettovolumen = "+preis00[0]);
1647 ////System.out.println("Name der abger. Kasse = "+name_kostent);
1648 ////System.out.println(" IK-Kostenträger = "+ik_kostent);
1649 ////System.out.println(" Disziplin = "+diszis[cmbDiszi.getSelectedIndex()]);
1650 ////System.out.println(" Rechnung Nr. = "+aktRechnung);
1651 if(Reha
.vollbetrieb
){
1658 /***************************************************************/
1660 private void anlegenOP(){
1661 /************************************************/
1662 rechnungBuf
.setLength(0);
1663 rechnungBuf
.trimToSize();
1664 rechnungBuf
.append("insert into rliste set ");
1665 rechnungBuf
.append("r_nummer='"+aktRechnung
+"', ");
1666 rechnungBuf
.append("r_datum='"+DatFunk
.sDatInSQL(DatFunk
.sHeute())+"', ");
1667 rechnungBuf
.append("r_kasse='"+hmKostentraeger
.get("name1")+", "+"esol0"+hmKostentraeger
.get("aktesol")+"', ");
1668 rechnungBuf
.append("r_klasse='"+diszis
[cmbDiszi
.getSelectedIndex()]+"', ");
1669 rechnungBuf
.append("r_betrag='"+dfx
.format(preis00
[0]).replace(",", ".")+"', ");
1670 rechnungBuf
.append("r_offen='"+dfx
.format(preis00
[0]).replace(",", ".")+"', ");
1671 rechnungBuf
.append("r_zuzahl='"+dfx
.format(preis00
[2]).replace(",", ".")+"', ");
1672 rechnungBuf
.append("ikktraeger='"+ik_kostent
+"',");
1673 rechnungBuf
.append("ik='"+Reha
.aktIK
+"'");
1674 SqlInfo
.sqlAusfuehren(rechnungBuf
.toString());
1677 /***************************************************************/
1679 private void analysierenEdifact(String edifact
,String rez_num
){
1680 //////System.out.println(edifact);
1681 Vector
<String
> position
= new Vector
<String
>();
1682 Vector
<BigDecimal
>anzahl
= new Vector
<BigDecimal
>();
1683 Vector
<BigDecimal
>preis
= new Vector
<BigDecimal
>();
1684 Vector
<BigDecimal
>einzelpreis
= new Vector
<BigDecimal
>();
1685 Vector
<BigDecimal
>einzelzuzahlung
= new Vector
<BigDecimal
>();
1686 Vector
<BigDecimal
>rezgeb
= new Vector
<BigDecimal
>();
1687 Vector
<BigDecimal
>abrtage
= new Vector
<BigDecimal
>();
1688 BigDecimal bdAnzahl
= null;
1689 BigDecimal einzelPreisTest
= null;
1690 //BigDecimal zuzahlTest = null;
1691 String
[] zeilen
= edifact
.split("\n");
1692 boolean preisUmstellung
= false;
1693 boolean zuzahlUmstellung
= false;
1698 for(int i
= 0; i
< zeilen
.length
;i
++){
1699 if(zeilen
[i
].startsWith("EHE+") || zeilen
[i
].startsWith("ENF++") ){
1700 if(zeilen
[i
].startsWith("ENF++")){
1703 woerter
= zeilen
[i
].split("\\+");
1704 if(!position
.contains(woerter
[2+zugabe
])){
1705 position
.add(woerter
[2+zugabe
]);
1706 bdAnzahl
= BigDecimal
.valueOf(Double
.valueOf(woerter
[3+zugabe
].replace(",", ".")));
1707 anzahl
.add(bdAnzahl
);
1708 abrtage
.add(BigDecimal
.valueOf(Double
.valueOf("1.00")));
1709 preis
.add(BigDecimal
.valueOf(Double
.valueOf(woerter
[4+zugabe
].replace(",", "."))).multiply(
1711 if(woerter
.length
==(7+zugabe
)){
1712 //Einstieg2 für Kilometer
1713 dummy
= woerter
[6+zugabe
].replace("'", "").replace(",", ".");
1714 if(zuzahlModusDefault
){
1715 rezgeb
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)));
1716 einzelzuzahlung
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)));
1719 System.out.println("Dummy = "+dummy);
1720 System.out.println("Muliplikator = "+bdAnzahl);
1722 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1723 rezgeb
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
));
1724 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1725 einzelzuzahlung
.add(BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
));
1728 rezgeb
.add(BigDecimal
.valueOf(Double
.valueOf("0.00")));
1729 einzelzuzahlung
.add(BigDecimal
.valueOf(Double
.valueOf("0.00")));
1732 einzelpreis
.add(BigDecimal
.valueOf(Double
.valueOf(woerter
[4+zugabe
].replace(",", "."))));
1735 pos
= position
.indexOf(woerter
[2+zugabe
]);
1736 einzelPreisTest
= BigDecimal
.valueOf(Double
.valueOf(woerter
[4+zugabe
].replace(",", ".")));
1737 if(!einzelPreisTest
.equals(einzelpreis
.get(pos
))){
1738 preisUmstellung
= true;
1740 bdAnzahl
= BigDecimal
.valueOf(Double
.valueOf(woerter
[3+zugabe
].replace(",", ".")));
1741 anzahl
.set(pos
, anzahl
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(woerter
[3+zugabe
].replace(",", ".")))));
1742 preis
.set(pos
, preis
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(woerter
[4+zugabe
].replace(",", "."))).multiply(
1744 abrtage
.set(pos
,abrtage
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf("1.00"))));
1745 if(woerter
.length
==(7+zugabe
)){
1746 //Einstieg3 für Kilometer
1747 dummy
= woerter
[6+zugabe
].replace("'", "").replace(",", ".");
1748 if(zuzahlModusDefault
){
1749 rezgeb
.set(pos
,rezgeb
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(dummy
))));
1750 if(! BigDecimal
.valueOf(Double
.valueOf(dummy
)).equals(einzelzuzahlung
.get(pos
))){
1751 zuzahlUmstellung
= true;
1754 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1756 System.out.println("Dummy = "+dummy);
1757 System.out.println("Muliplikator (falsch) = "+anzahl.get(pos));
1758 System.out.println("Muliplikator (richtig) = "+bdAnzahl);
1760 rezgeb
.set(pos
,rezgeb
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
)));
1761 //Herr Lehmann: nächste Zeile muß freigeschaltet werden für Einzelkilometer
1762 if(! BigDecimal
.valueOf(Double
.valueOf(dummy
)).multiply(bdAnzahl
).equals(einzelzuzahlung
.get(pos
))){
1763 zuzahlUmstellung
= true;
1766 rezgeb.set(pos,rezgeb.get(pos).add(BigDecimal.valueOf(Double.valueOf(dummy)).multiply(anzahl.get(pos))));
1767 if(! BigDecimal.valueOf(Double.valueOf(dummy)).multiply(bdAnzahl).equals(einzelzuzahlung.get(pos))){
1768 zuzahlUmstellung = true;
1773 //System.out.println("Keine Zuzahlung Dummy = ");
1774 //System.out.println("Keine Zuzahlung Muliplikator = "+anzahl.get(pos));
1775 rezgeb
.set(pos
,rezgeb
.get(pos
).add(BigDecimal
.valueOf(Double
.valueOf("0.00"))));
1776 if(!BigDecimal
.valueOf(Double
.valueOf("0.00")).equals(einzelzuzahlung
.get(pos
))){
1777 //////System.out.println("Einzelzuzahlung = "+einzelzuzahlung.get(pos));
1778 //////System.out.println("Vergleichswert = 0.00 ");
1779 zuzahlUmstellung
= true;
1780 //System.out.println("Umstellung der Zuzahlung = "+zuzahlUmstellung);
1787 } catch (InterruptedException e
) {
1788 e
.printStackTrace();
1789 JOptionPane
.showMessageDialog(null,"Fehler in Thread.sleep(25) analysierenEdifact\n"+e
.getMessage());
1792 String
[] splits
= zeilen
[0].split(":");
1795 abrechnungRezepte
++;
1796 if(abrDruck
!= null){
1797 abrDruck
.setDaten(splits
[9].split("=")[1],
1798 splits
[10].split("=")[1],
1799 splits
[2].split("=")[1],
1806 (splits
[6].split("=")[1].equals("10,00") ?
true : false));
1809 ////System.out.println(" Rezept Nr. ="+abrechnungRezepte+" ********Abrechnungsposition Anfang********");
1810 ////System.out.println(" Name = "+splits[9].split("=")[1]);
1811 ////System.out.println(" Status = "+splits[10].split("=")[1]);
1812 ////System.out.println(" RezeptNr. = "+splits[2].split("=")[1]);
1813 ////System.out.println(" Positionen Vector = "+position);
1814 ////System.out.println(" Anzahl Vector = "+anzahl);
1815 ////System.out.println(" Abr.tage Vector = "+abrtage);
1816 ////System.out.println(" Einzelpreis Vector = "+einzelpreis);
1817 ////System.out.println(" Kummulierte Preise = "+preis);
1818 ////System.out.println(" Kummulierte Zuzahl.= "+rezgeb);
1819 ////System.out.println(" Zuzahlungen einzel = "+einzelzuzahlung);
1820 ////System.out.println(" mit Pauschale = "+(splits[6].split("=")[1].equals("10,00") ? true : false));
1821 ////System.out.println("mit Preisumstellung = "+preisUmstellung);
1822 ////System.out.println(" mit Zuzahlwechsel = "+zuzahlUmstellung);
1823 ////System.out.println("bislang abgerechnet = "+abgerechneteRezepte);
1824 ////System.out.println(" Rechnungsadresse = "+hmAnnahme);
1825 ////System.out.println("Rezept Nr. ="+abrechnungRezepte+" ********Abrechnungsposition Ende********");
1827 /////////////////Hier die Sätze in der Rechnungsdatei anlegen///////////////
1828 if(Reha
.vollbetrieb
){
1829 schreibeInRechnungDB(
1841 } catch (Exception e
) {
1842 e
.printStackTrace();
1846 /***************************************************************/
1848 private void schreibeInRechnungDB(
1850 Vector
<String
> positionen
,
1851 Vector
<BigDecimal
>anzahl
,
1852 Vector
<BigDecimal
>abrtage
,
1853 Vector
<BigDecimal
>einzelpreis
,
1854 Vector
<BigDecimal
>preis
,
1855 Vector
<BigDecimal
>rezgeb
,
1856 boolean preisUmstellung
,
1857 boolean zuzahlUmstellung
){
1859 if(hmAnnahme
.get("<gkv1>").trim().equals("")){
1860 holeAdresseAnnahmestelle(true);
1862 }catch(Exception ex
){
1863 holeAdresseAnnahmestelle(true);
1865 abrDlg
.setzeLabel("Rechnungssatz erstellen für Rezept: "+kopf
[2].split("=")[1]);
1866 String cmdKopf
= "insert into faktura set ";
1867 for(int i
= 0; i
< positionen
.size();i
++){
1868 rechnungBuf
.setLength(0);
1869 rechnungBuf
.trimToSize();
1870 rechnungBuf
.append(cmdKopf
);
1872 rechnungBuf
.append("kassen_nam='"+hmAnnahme
.get("<gkv1>")+"', ");
1873 rechnungBuf
.append("kassen_na2='"+hmAnnahme
.get("<gkv2>")+"', ");
1874 rechnungBuf
.append("strasse='"+hmAnnahme
.get("<gkv3>")+"', ");
1876 rechnungBuf
.append("plz='"+hmAnnahme
.get("<gkv4>").split(" ")[0]+"', ");
1877 rechnungBuf
.append("ort='"+hmAnnahme
.get("<gkv4>").split(" ")[1]+"', ");
1878 rechnungBuf
.append("name='"+kopf
[9].split("=")[1]+"', ");
1879 }catch(Exception ex
){
1880 JOptionPane
.showMessageDialog(null, "Fehler in der Adressaufbereitung - Tabelle=Faktura");
1881 ex
.printStackTrace();
1884 rechnungBuf
.append("lfnr='"+Integer
.toString(i
)+"', ");
1885 rechnungBuf
.append("status='"+ kopf
[10].split("=")[1]+"', ");
1886 rechnungBuf
.append("pos_kas='"+ positionen
.get(i
) +"', ");
1887 rechnungBuf
.append("pos_int='"+ RezTools
.getIDFromPos(positionen
.get(i
),kopf
[0].split("=")[1] ,preisVector
) +"', ");
1888 rechnungBuf
.append("anzahl='"+ Integer
.toString(anzahl
.get(i
).intValue()) +"', ");
1889 rechnungBuf
.append("anzahltage='"+ Integer
.toString(abrtage
.get(i
).intValue()) +"', ");
1890 rechnungBuf
.append("preis='"+ dfx
.format(einzelpreis
.get(i
).doubleValue()).replace(",", ".") +"', ");
1891 rechnungBuf
.append("gesamt='"+ dfx
.format(preis
.get(i
).doubleValue()).replace(",", ".") +"', ");
1892 rechnungBuf
.append("zzbetrag='"+ dfx
.format(rezgeb
.get(i
).doubleValue()).replace(",", ".") +"', ");
1893 rechnungBuf
.append("netto='"+ dfx
.format((preis
.get(i
).subtract(rezgeb
.get(i
))).doubleValue()).replace(",", ".") +"', ");
1894 rechnungBuf
.append("pauschale='"+ kopf
[6].split("=")[1].replace(",", ".") +"', ");
1895 rechnungBuf
.append("rez_nr='"+ kopf
[2].split("=")[1] +"', ");
1896 if(! anzahl
.get(i
).equals(abrtage
.get(i
))){
1897 rechnungBuf
.append("kilometer='"+ dfx
.format((anzahl
.get(i
).divide(abrtage
.get(i
)).doubleValue())).replace(",",".") +"', ");
1899 rechnungBuf
.append("rezeptart='0', ");
1900 rechnungBuf
.append("pat_intern='"+kopf
[1].split("=")[1]+"', ");
1901 rechnungBuf
.append("rnummer='"+ aktRechnung
+"', ");
1902 rechnungBuf
.append("kassid='"+kopf
[7].split("=")[1]+"', ");
1903 rechnungBuf
.append("arztid='"+kopf
[8].split("=")[1]+"', ");
1904 rechnungBuf
.append("zzindex='"+ kopf
[12].split("=")[1] +"', ");
1905 rechnungBuf
.append("preisdiff='"+ (preisUmstellung ?
"T" : "F") +"', ");
1906 rechnungBuf
.append("zuzahldiff='"+ (zuzahlUmstellung ?
"T" : "F") +"', ");
1907 rechnungBuf
.append("disziplin='"+ kopf
[2].split("=")[1].subSequence(0, 2) +"', ");
1908 rechnungBuf
.append("rdatum='"+ DatFunk
.sDatInSQL(DatFunk
.sHeute()) +"',");
1909 rechnungBuf
.append("ik='"+ Reha
.aktIK
+"'");
1910 SqlInfo
.sqlAusfuehren(rechnungBuf
.toString());
1915 /***************************************************************/
1917 private String holeAbrechnungsKasse(String edifact){
1918 String[] komplett = edifact.split("\n");
1919 String[] zeile1 = komplett[0].split(":");
1920 return zeile1[7].split("=")[1];
1923 /*************************************************/
1924 private void anhaengenEdifact(String string
){
1925 String
[] edi
= string
.split("\n");
1926 //String[] preise = edi[0].split(":");
1929 status
= edi
[4].split("\\+")[2];
1930 }catch(Exception ex
){
1933 for(int i
= 4; i
< edi
.length
;i
++){
1934 positionenBuf
.append(edi
[i
]+System
.getProperty("line.separator") );
1939 } catch (InterruptedException e
) {
1940 e
.printStackTrace();
1942 if(status
.startsWith("1")){
1943 preis11
= addierePreise(preis11
,edi
[edi
.length
-1]);
1944 }else if(status
.startsWith("3")){
1945 preis31
= addierePreise(preis31
,edi
[edi
.length
-1]);
1946 }else if(status
.startsWith("5")){
1947 preis51
= addierePreise(preis51
,edi
[edi
.length
-1]);
1950 /*************************************************/
1951 private Double
[] addierePreise(Double
[] preis
,String zeile
){
1952 String
[] zahlen
= zeile
.split("\\+");
1953 Double brutto
= Double
.parseDouble(zahlen
[1].replace(",", "."));
1954 Double zuzahl
= Double
.parseDouble(zahlen
[2].replace(",", "."));
1955 preis
[1] = preis
[1]+ brutto
;
1956 preis
[2] = preis
[2]+ zuzahl
;
1957 preis
[0] = preis
[0] + (brutto
-zuzahl
);
1958 preis00
[0] = preis00
[0] + (brutto
-zuzahl
);
1959 preis00
[1] = preis00
[1] + (brutto
);
1960 preis00
[2] = preis00
[2] + (zuzahl
);
1963 /*************************************************/
1964 public boolean isRezeptSelected(){
1965 if(treeKasse
.getSelectionCount()<=0){
1968 TreePath path
= treeKasse
.getSelectionPath();
1969 return (path
.getPathCount()>=3);
1971 String
getAktKTraeger(){
1972 TreePath path
= treeKasse
.getSelectionPath();
1973 JXTTreeNode node
= (JXTTreeNode
) path
.getLastPathComponent();
1974 return ((KnotenObjekt
)node
.getUserObject()).ikkasse
;
1976 public void setRezeptOk(boolean ok
){
1978 treeKasse
.getSelectionCount();
1979 TreePath path
= treeKasse
.getSelectionPath();
1980 JXTTreeNode node
= (JXTTreeNode
) path
.getLastPathComponent();
1981 ((KnotenObjekt
)node
.getUserObject()).fertig
= ok
;
1983 kontrollierteRezepte
++;
1985 kontrollierteRezepte
--;
1987 treeKasse
.repaint();
1989 public String
getPreisgruppenKuerzel(String disziplin
){
1990 if(disziplin
.equals("Physio")){
1992 }else if(disziplin
.equals("Massage")){
1994 }else if(disziplin
.equals("Ergo")){
1996 }else if(disziplin
.equals("Logo")){
1998 }else if(disziplin
.equals("Reha")){
2000 }else if(disziplin
.equals("Podo")){
2002 }else if(disziplin
.equals("Rsport")){
2004 }else if(disziplin
.equals("Ftrain")){
2010 /***************************************/
2012 private static class JXTTreeNode
extends DefaultMutableTreeNode
{
2016 private static final long serialVersionUID
= 2195590211796817012L;
2017 @SuppressWarnings("unused")
2018 public boolean enabled
= false;
2019 private KnotenObjekt knotenObjekt
= null;
2020 public JXTTreeNode(KnotenObjekt obj
,boolean enabled
){
2022 this.enabled
= enabled
;
2023 this.knotenObjekt
= obj
;
2025 this.setUserObject(obj
);
2029 public boolean isEnabled() {
2034 public KnotenObjekt
getObject(){
2035 return knotenObjekt
;
2039 /***************************************/
2041 public String titel
;
2042 public boolean fertig
;
2043 public String rez_num
;
2044 public String ktraeger
;
2045 public String pat_intern
;
2046 public String entschluessel
;
2047 public String ikkasse
;
2048 public String preisgruppe
;
2049 public String ohnepauschale
;
2050 public boolean langfrist
;
2051 public String langfristaz
;
2053 public KnotenObjekt(String titel
,String rez_num
,boolean fertig
,String ikkasse
,String preisgruppe
){
2055 this.fertig
= fertig
;
2056 this.rez_num
= rez_num
;
2057 this.ikkasse
= ikkasse
;
2058 this.preisgruppe
= preisgruppe
;
2061 /*************************************/
2062 private class KassenTreeModel
extends DefaultTreeModel
{
2066 private static final long serialVersionUID
= 6391618556224740611L;
2067 public KassenTreeModel(JXTTreeNode node
) {
2068 super((TreeNode
) node
);
2070 @SuppressWarnings("unused")
2071 public Object
getValueAt(Object node
, int column
) {
2072 JXTTreeNode jXnode
= (JXTTreeNode
) node
;
2074 KnotenObjekt o
= null;
2075 o
= (KnotenObjekt
) jXnode
.getUserObject();
2083 return jXnode
.getObject().titel
;
2085 @SuppressWarnings("unused")
2086 public int getColumnCount() {
2089 @SuppressWarnings("unused")
2090 public void setValueAt(Object value
, Object node
, int column
){
2091 JXTTreeNode jXnode
= (JXTTreeNode
) node
;
2093 o
= jXnode
.getObject();
2096 o
.titel
=((String
) value
) ;
2099 o
.fertig
=((Boolean
) value
) ;
2103 @SuppressWarnings("unused")
2104 public Class
<?
> getColumnClass(int column
) {
2107 return String
.class;
2109 return Boolean
.class;
2111 return Object
.class;
2114 /*****************************************/
2115 private class MyRenderer
extends DefaultTreeCellRenderer
{
2119 private static final long serialVersionUID
= 2333990367290526356L;
2122 public MyRenderer(Icon icon
) {
2126 public Component
getTreeCellRendererComponent(
2135 super.getTreeCellRendererComponent(
2137 expanded
, leaf
, row
,
2139 KnotenObjekt o
= ((JXTTreeNode
)value
).knotenObjekt
;
2140 if (leaf
&& istFertig(value
)) {
2141 setIcon(fertigIcon
);
2142 this.setText(o
.titel
);
2143 setToolTipText("Verordnung "+o
.rez_num
+" kann dirket abgerechnet werden.");
2145 setToolTipText(null);
2146 this.setText(o
.titel
);
2152 protected boolean istFertig(Object value
) {
2153 DefaultMutableTreeNode node
=
2154 (DefaultMutableTreeNode
)value
;
2155 KnotenObjekt fertig
=
2156 (KnotenObjekt
)(node
.getUserObject());
2157 boolean istfertig
= fertig
.fertig
;
2163 private void rezepteUebertragen(){
2166 private void rechnungAnlegen(){
2170 public void mouseClicked(MouseEvent e
) {
2171 // TODO Auto-generated method stub
2175 public void mousePressed(MouseEvent e
) {
2176 if(e
.getButton()==3){
2177 TreePath tp
= treeKasse
.getSelectionPath();
2179 //kontrollierteRezepte = 0;
2183 JXTTreeNode node
= (JXTTreeNode
) tp
.getLastPathComponent();
2184 String rez_nr
= ((JXTTreeNode
)node
).knotenObjekt
.rez_num
;
2185 if(!rez_nr
.trim().equals("")){
2186 if(node
.knotenObjekt
.fertig
){
2187 String msg
= "<html>Achtung Sie editieren im Anschluß den EDIFACT-Code!<br>"+
2188 "Wenn Sie den Code in unzulässiger Weise manipulieren<br>wird <b>der gesamte Abrechnungslauf unbrauchbar</b><br><br>"+
2189 "<b>Rufen Sie diese Funktion nur dann auf wenn Sie genau wissen was Sie tun!!!</b><br><br>"+
2190 "Soll die Funktion jetzt aufgerufen werden?<br></html>";
2191 int frage
= JOptionPane
.showConfirmDialog(null,msg
,"Achtung wichtige Benutzeranfrage",JOptionPane
.YES_NO_OPTION
);
2192 if(frage
!= JOptionPane
.YES_OPTION
){
2195 PointerInfo info
= MouseInfo
.getPointerInfo();
2196 Point location
= info
.getLocation();
2197 EditEdifact editEdifact
= new EditEdifact(Reha
.thisFrame
,"EDIFACT - editieren",rez_nr
.trim());
2198 editEdifact
.getContentPane().setPreferredSize(new Dimension(600,500));
2199 editEdifact
.setLocation(e
.getXOnScreen()-50,e
.getYOnScreen()-50);
2200 //editEdifact.setLocation(location.x-50,location.y-50);
2202 editEdifact
.setVisible(true);
2203 this.abrRez
.setNewRez(rez_nr
,node
.knotenObjekt
.fertig
,aktDisziplin
);
2205 //doKassenTreeAuswerten(aktuellerKnoten.knotenObjekt);
2208 JOptionPane
.showMessageDialog(null,"Abrechnungsdaten im Edifact-Format kann nur\nbei bereits markierten Rezepten manipuliert werden!");
2216 public void mouseReleased(MouseEvent e
) {
2217 // TODO Auto-generated method stub
2221 public void mouseEntered(MouseEvent e
) {
2222 // TODO Auto-generated method stub
2226 public void mouseExited(MouseEvent e
) {
2227 // TODO Auto-generated method stub